打印
[AVR单片机]

avr定时器0不加,百思不得其解。

[复制链接]
1189|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccbclerk|  楼主 | 2014-3-29 08:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题如下:单片机为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
;=================================

相关帖子

沙发
ccbclerk|  楼主 | 2014-3-29 11:33 | 只看该作者
找到问题了,定时器0部分的初始化,应该用out指令,不应该用sts

使用特权

评论回复
板凳
qin552011373| | 2014-3-29 20:48 | 只看该作者
ccbclerk 发表于 2014-3-29 11:33
找到问题了,定时器0部分的初始化,应该用out指令,不应该用sts

解决了就好,汇编还真心不好看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝