问题如下:单片机为atmega88/168,定时器0计数器tcnt0不加1,始终为0,所以进不了定时器0中断服务程序。我用同样的设置,试了定时器1和定时器2都是正常的。难道定时器0有特殊需要注意的地方?
程序如下:
.org $0000
rjmp reset ;1 复位处理
nop ;2 int0
nop ;3 int1
nop ;4 pcint0
nop ;5 pcint1
nop ;6 pcint2
nop ;7 wdt
nop ;8 time2 compa
nop ;9 time2 compb
nop ;10 Timer2 ovf
nop ;11 Timer1 capt
nop ;12 Timer1 compa
nop ;13 timer1 compb
nop ;14 timer1 ovf
rjmp time0 ;15 timer0 compa
nop ;16 timer0 compb
nop ;17 timer0 ovf
nop ;18 spiend
nop ;19 usart rx end
nop ;20 usart kong
nop ;21 usart tx end
nop ;22 adcend
nop ;23 eeprom ready
nop ;24 analog comp
nop ;25 twi
rjmp time0 ;26 spm ready
;程序开始
.org $0046
reset:
ldi r16,high(RAMEND) ;设置堆栈指针高位
out sph,r16
ldi r16,low(RAMEND) ;设置堆栈指针低位
out spl,r16
;-----------------------禁止低功耗关闭定时器
ldi r16,0x00
sts prr,r16
;-----------------------定时器分频同步
ldi r16,0x00
sts gtccr,r16
;-----------------------时钟分频,不分频,最快运行
ldi r16,0x80
sts clkpr,r16
;-----------------------定时器0,时钟8分频,9600波特率,定时52us,计数=52
ldi r16,0x02
sts tccr0a,r16
ldi r16,0x03
sts tccr0b,r16
ldi r16,52
sts ocr0a,r16
ldi r16,0x02 ;定时器0,比较中断使能
sts timsk0,r16
;------------------------
sei ;开放中断
ldi r16,0x00 ;清零定时器0计数器
sts tcnt0,r16
main: ;主程序开始
nop
nop
rjmp main
;==================================串口发送处理
time0:
push r16
;..
in r16,sreg
push r16
;..........
ldi r16,0x00
out tifr0,r16
;..........
pop r16
;..
out sreg,r16
pop r16
;..
reti
;================================= |