用51单片机的定时器产生一种方波,频率60HZ,但是占空比只有约0.5%,求一个程序
发布网友
发布时间:2022-04-29 23:06
我来回答
共4个回答
热心网友
时间:2023-10-10 03:28
不知道LZ用什么单片机,使用多少T 模式指令时钟,按标准51系列单片机计算,指令周期为 12个系统时钟周期;
24MHz晶振,系统时钟周期 t =1/24 us;单片机指令周期(机械周期)T=12t=0.5us;
16位定时器的最大计数为 65536个机械周期,即 32768us=32.768ms,足够产生 16.67ms 的脉冲了。
程序思路:
①先计算2个值:60us = 120 ×0.5us=120T;16.67ms=33333 ×0.5us=33333T;
②定时器内有个变量1,这个变量1 负责记录总时间(33333T),每次这个变量1 的值 加到 33333T时,就 清0;(1T 不代表一次中断时间,LZ可以自己设置中断时间,比如 3T,40T等)
③同时在 定时器内,对 变量1 的值进行判断,当 它 不足(<)目标值(120T)时,对 全局变量标志位 进行 置1,否则(≥),标志位 清 0;
④功能函数中,将 标志位 的结果 赋值 给 输出端口,就能得到LZ 要求的波形了;
PS:60Hz 的周期为 16666.6us,在这个值附近,60us 的倍数为16620(277倍),16680(278倍),其中:
前者 频率 约为 60.168Hz ,误差为 +0.28%;
后者 频率 约为 59.952Hz ,误差为 -0.08%;
要是要求不高的话,为了程序方便(定时器时间为60us,120T),建议LZ 选择 后者
热心网友
时间:2023-10-10 03:28
c语言的
可以帮你写
热心网友
时间:2023-10-10 03:29
看看你的程序,才能解决。
热心网友
时间:2023-10-10 03:29
用c可以做,有扣扣吗?