共3条
1/1 1 跳转至页
AVR,OC1A 我对AVR的OC1A的理解,请批评指正!
问
以下是我对AVR的OC1A有理解,错误的话,请批评指正!
在《AVR单片机应用技术》---北航大学出版社,耿德根等编。
书中的P153页例4.20好像有一些问题。
程序的原意是在T1引脚对外来信号进行10分频后比较输出(于OC1A引脚),
原程序用意是在OCR1AH放常数0,在OCR1AL放常数5,每比较匹配时改变一次OC1A引脚。但实际是把外来信号12分频了!!!
仔细分析,其过程可能是TCNT1的值是由0变到5,到5时刚刚匹配,然后下一个外来信号触发后,TCNT1回0如此一来,从0到5其实一共是6了。
如果我的说法成立的话,那么有没有办法对外来信号进行2分频??!!
我把它整理了一下,变为以下形式:
.include"m8def.inc"
.org 0x0000
rjmp start
.org 0x0013
start:
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
cbi ddrd,PD5
sbi portd,PD5
sbi ddrb,PB1
ldi r16,0x40
out TCCR1A,r16
ldi r16,0
out OCR1AH,r16
ldi r16,5
out OCR1AL,r16
ldi r16,0x0f ;外来脉冲上升沿有效
out TCCR1B,r16 ;A匹配时TCNT1清0
ldi r16,1<<OCIE1A
out TIMSK,r16
here: rjmp here
如果我的说法成立的话,那么有没有办法对外来信号进行2分频??!!
答 1: 请你们不要小看这个问题!!帮忙看看,讨论讨论嘛!!其实程序不长,也不复杂,不会花大家很多时间的!谢了。 答 2: 太令我失望了!高手如云,难道你们没有发觉这个问题?? 答 3: 错!是10分频,从5变到0只需要一个CPU时钟是10分频,从5变到0只需要一个CPU时钟,除非输入脉冲频率比CPU时钟频率高 答 4: zalin兄zalin兄:我可是在T1脚接了一个按键开关,的确是发现在每按六次,OC1A引脚才改变一次电平!(可在OC1A引脚接一个发光二极管)。不信的话,你可以验证一下,若你发现我说得不对才批评我好吗?
(MEGA8中T1是PD5,OC1A是PB1) 答 5: 对不起,用AVRStudio模拟了一下,确实如你所说,你是对的! 答 6: 那么,现在的问题可以讨论为:用AVR能够对频率不高的信号2分频吗那么,现在的问题可以讨论为:用AVR能够对频率不高的信号2分频吗? 答 7: 请教:zalin: 请问您是怎样用AVR STUDIO进行这样的模拟仿真的??(如何设置外部触发??)能给小弟指点一二吗? 答 8: AVRSTUDIO模拟仿真交替设置PIND5(T1)为1和0就可以了,你说的2分频可以试一试OCR1AL=0,AVRSTUDIO模拟是正确的。
关于我的第一帖,我查了数据手册,原来是T2只需要1个CPU时钟。 答 9: 非常感激zalin非常感激zalin,但我试过了用OCR1AL=0;结果是比较匹配失效!
谢谢你的帮助! 答 10: AVR有没有办法使输入两分频呢?
在《AVR单片机应用技术》---北航大学出版社,耿德根等编。
书中的P153页例4.20好像有一些问题。
程序的原意是在T1引脚对外来信号进行10分频后比较输出(于OC1A引脚),
原程序用意是在OCR1AH放常数0,在OCR1AL放常数5,每比较匹配时改变一次OC1A引脚。但实际是把外来信号12分频了!!!
仔细分析,其过程可能是TCNT1的值是由0变到5,到5时刚刚匹配,然后下一个外来信号触发后,TCNT1回0如此一来,从0到5其实一共是6了。
如果我的说法成立的话,那么有没有办法对外来信号进行2分频??!!
我把它整理了一下,变为以下形式:
.include"m8def.inc"
.org 0x0000
rjmp start
.org 0x0013
start:
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
cbi ddrd,PD5
sbi portd,PD5
sbi ddrb,PB1
ldi r16,0x40
out TCCR1A,r16
ldi r16,0
out OCR1AH,r16
ldi r16,5
out OCR1AL,r16
ldi r16,0x0f ;外来脉冲上升沿有效
out TCCR1B,r16 ;A匹配时TCNT1清0
ldi r16,1<<OCIE1A
out TIMSK,r16
here: rjmp here
如果我的说法成立的话,那么有没有办法对外来信号进行2分频??!!
答 1: 请你们不要小看这个问题!!帮忙看看,讨论讨论嘛!!其实程序不长,也不复杂,不会花大家很多时间的!谢了。 答 2: 太令我失望了!高手如云,难道你们没有发觉这个问题?? 答 3: 错!是10分频,从5变到0只需要一个CPU时钟是10分频,从5变到0只需要一个CPU时钟,除非输入脉冲频率比CPU时钟频率高 答 4: zalin兄zalin兄:我可是在T1脚接了一个按键开关,的确是发现在每按六次,OC1A引脚才改变一次电平!(可在OC1A引脚接一个发光二极管)。不信的话,你可以验证一下,若你发现我说得不对才批评我好吗?
(MEGA8中T1是PD5,OC1A是PB1) 答 5: 对不起,用AVRStudio模拟了一下,确实如你所说,你是对的! 答 6: 那么,现在的问题可以讨论为:用AVR能够对频率不高的信号2分频吗那么,现在的问题可以讨论为:用AVR能够对频率不高的信号2分频吗? 答 7: 请教:zalin: 请问您是怎样用AVR STUDIO进行这样的模拟仿真的??(如何设置外部触发??)能给小弟指点一二吗? 答 8: AVRSTUDIO模拟仿真交替设置PIND5(T1)为1和0就可以了,你说的2分频可以试一试OCR1AL=0,AVRSTUDIO模拟是正确的。
关于我的第一帖,我查了数据手册,原来是T2只需要1个CPU时钟。 答 9: 非常感激zalin非常感激zalin,但我试过了用OCR1AL=0;结果是比较匹配失效!
谢谢你的帮助! 答 10: AVR有没有办法使输入两分频呢?
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |