共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |