用AVR单片机 输出一个0.5ms的方波 定时器怎么设置
展开全部
首先需要知道主频,确定分频系数。你要输出方波可使用定时器溢出模式,在中端函数中处理,或者也可以使用比较匹配模式,不需要做函数处理,配置好寄存器就OK了。具体的你需要看AVR的寄存器手册。不同模式初值计算不同,例如使用溢出模式,中断时长0.5ms,芯片mega16,主频8M,1分频,定时器的初值是0XF0,0X60。
计算过程,
第一步计算每个脉冲多长时间: 1/8000000=0.000000125(0.125us)
第二部计算需要多少脉冲: 0.5ms/0.125us=4000
第三部计算定时器溢出初值:65536-4000=61536(0XF060)
定时器1分为两个寄存器,0XF0写入高8位寄存器 0X60写入低8位寄存器,开启定时器1分频,使能定时器溢出中断即可。这样就得到了0.5ms的溢出中断,然后在中断服务函数中重载定时器初值,并取反你要输出的端口即可。
溢出中断的方式需要你写中断服务函数,而且还要重载定时器初值,并且精度不高。利用比较匹配模式简单高效,精度也高,不需要写服务函数,只要初始化时把定时值写入比较寄存器配置好寄存器比较模式就行了。由于这种模式是顺计时(从零开始),因此可把4000直接写入比较寄存器OCR中,设置比较模式为端口取反即可。具体的寄存器设置方法你参照手册,思路就是这样的。
网上有计算软件,你可以找找,不过我建议你还是手动算算比较好,这样掌握和理解的更深入,更牢固!
谢谢!
计算过程,
第一步计算每个脉冲多长时间: 1/8000000=0.000000125(0.125us)
第二部计算需要多少脉冲: 0.5ms/0.125us=4000
第三部计算定时器溢出初值:65536-4000=61536(0XF060)
定时器1分为两个寄存器,0XF0写入高8位寄存器 0X60写入低8位寄存器,开启定时器1分频,使能定时器溢出中断即可。这样就得到了0.5ms的溢出中断,然后在中断服务函数中重载定时器初值,并取反你要输出的端口即可。
溢出中断的方式需要你写中断服务函数,而且还要重载定时器初值,并且精度不高。利用比较匹配模式简单高效,精度也高,不需要写服务函数,只要初始化时把定时值写入比较寄存器配置好寄存器比较模式就行了。由于这种模式是顺计时(从零开始),因此可把4000直接写入比较寄存器OCR中,设置比较模式为端口取反即可。具体的寄存器设置方法你参照手册,思路就是这样的。
网上有计算软件,你可以找找,不过我建议你还是手动算算比较好,这样掌握和理解的更深入,更牢固!
谢谢!
追问
谢谢大神了 就是想知道那个怎么计算 看了学习视频 有点懵 只知道怎么定1s 谢谢了
追答
1/8000000=0.000000125是计算8M主频下,每个脉冲的时长。
定时器分频系数如果是1024的话,那就是说1024个脉冲中断一次。单个时长乘以1024就是经过的时间。由于需要4000个脉冲,因此需要4000/1024=3.90625次中断。你认为还准确吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询