-         

Ergebnis 1 bis 2 von 2

Thema: Timer 0 will nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2005
    Beiträge
    9

    Timer 0 will nicht

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Möchte einen einfachen Timer programmieren - habe auch schon im TimerTutor und AtmelDatasheet nachgeschaut.

    Nutze ich Timer1, dann gehts - folgender Code mit Timer 0 funzt nicht?!
    Code:
    .include "m8def.inc"	;Definitionsdatei laden
    .cseg					;Beginn eines Code-Segmentes
    ;
    ;
    .def temp = r16
    .def counter = r17
    .def leds = r18
    .equ start = 256-1
    .equ loops = 0
    ;
    .org   0x000   
       	rjmp	reset	;Reset Handler
    	reti			;IRQ0 Handler
    	reti			;IRQ1 Handler
    	reti			;Timer1 Capture Handler
    	reti			;Timer1 compare Handler
    	reti			;Timer1 Overflow Handler
    	rjmp	timer0
    	;reti			;Timer0 Overflow Handler
    	reti			;SPI Transfer Complete Handler
    	reti			;UART RX Complete Handler
    	reti			;UDR Empty Handler
    	reti			;UART TX Complete Handler
    	reti			;ADC Conversion Complete Interrupt Handler
    	reti			;EEPROM Ready Handler
    	reti			;Analog Comparator Handler
    
    reset:
    	ldi		temp,LOW(RAMEND)			;temp auf letzte Position im RAM setzen
    	out		spl,temp					;LB vom SP mit LB vom Ramende
    	ldi		temp,HIGH(RAMEND)			;temp auf letzte Position im RAM setzen
    	out		sph,temp					;HB vom SP mit HB vom Ramende
    
    	ldi		temp,0xff
    	out		ddrd,temp			
    	ldi		temp,0b00001111
    	out		portd,temp
    		
    	ldi		temp, 1
    	out		TIMSK, temp
    
    	ldi		temp, start
    	out		TCNT0, temp
    
    	ldi		temp, 0b00000101
    	out		TCCR0, temp
    
    	ldi		counter, loops
    	ldi		leds,0xff
    	
    	sei
    
    main:
    	loop:
    			rjmp	loop
    ;-------------------------------------
    timer0:
    	dec		counter
    	brne	restart
    		ldi		counter, loops
    		com		leds
    		out		portd, leds
    	restart:
    		ldi		temp, start
    		out		tcnt0,temp
    reti

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2005
    Beiträge
    9
    Ich hab es schon. Man sollte die passenden Sprünge zu Anfang nutzen.
    Also, anbei die Version die funktioniert.

    Code:
    ;Im Sekunden Takt die LED's am Port D Schalten
    ;Quarz hat 3,6864MHZ
    .include "m8def.inc"	;Definitionsdatei laden
    .cseg					;Beginn eines Code-Segmentes
    ;
    ;
    .def temp = r16
    .def counter = r17
    .def leds = r18
    .equ start = 256-122
    .equ loops = 30		;für genau eine Sekune 29,5081
    ;
    .org   0x000   
       	rjmp	reset	;1 Reset Handler
    	reti			;2 IRQ0 Handler
    	reti			;3 IRQ1 Handler
    	reti			;4 TC2 Compare Match
    	reti			;5 TC2 Overflow
    	reti			;6 TC1 Capture
    	reti			;7 TC1 Compare Match A
    	reti			;8 TC1 Compare Match B
    	reti			;9 TC1 Overflow
    	rjmp	timer0
    	;reti			;10 TC0 Overflow
    	reti			;11 SPI Transfer Complete Handler
    	reti			;12 UART RX Complete 
    	reti			;13 UART Data Empty 
    	reti			;14 UART TX Complete 
    	reti			;15 ADC Conversion Complete Interrupt Handler
    	reti			;16 EEPROM Ready Handler
    	reti			;17 Analog Comparator Handler
    	reti			;18 TWI I²C Serial Interface
    	reti			;19 Store Program Memory Ready
    
    reset:
    	ldi		temp,LOW(RAMEND)			;temp auf letzte Position im RAM setzen
    	out		spl,temp					;LB vom SP mit LB vom Ramende
    	ldi		temp,HIGH(RAMEND)			;temp auf letzte Position im RAM setzen
    	out		sph,temp					;HB vom SP mit HB vom Ramende
    
    	ldi		temp,0xff
    	out		ddrd,temp			
    	ldi		temp,0b00001111
    	out		portd,temp
    		
    	ldi		temp, 1						;Interrupt on Overflow
    	out		TIMSK, temp
    
    	ldi		temp, 0b00000101			;alle 1024 Takte wird der Zähler 
    	out		TCCR0, temp					;vom Timer0 um 1 inkrementiert
    
    	ldi		temp, start					;Bis der Zähler überläuft vergehen
    	out		TCNT0, temp					;122 * 1024 Takte = 124928
    										; = 0,033889 sekunden
    
    	ldi		counter, loops
    	ldi		leds,0xff
    	
    	sei
    
    main:
    	loop:
    			rjmp	loop
    ;-------------------------------------
    timer0:
    	dec		counter
    	brne	restart
    		ldi		counter, loops
    		com		leds
    		out		portd, leds
    	restart:
    		ldi		temp, start
    		out		tcnt0,temp
    reti

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •