Thopos
26.05.2005, 23:50
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?!
.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
Nutze ich Timer1, dann gehts - folgender Code mit Timer 0 funzt nicht?!
.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