所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

用51单片机定时器编写一个定时闹钟?

发布时间:2020-04-12 09:03:07

资讯分类:单片机  定时器  闹钟  定时  中断  定时器  波特率
用51单片机定时器编写一个定时闹钟?

正好做过,可以回答一些。

有两种定时器模拟PWM的方法:

1.假设你要500Hz的PWM,10个占空比档。那么中断频率500*10=5000Hz,周期200us。每十次中断为一个周期,在每次中断中将当前次序与设定档进行比较,依此决定输出电平。这样你可以控制多路PWM,很显然当档位越多,中断越频繁。

2.假设你要500Hz的PWM。周期2000us,那么你只需根据占空比计算出高电平持续时间、低电平持续时间,将他们作为定时器中断的时间,进入中断后设定电平就好。这样每个周期你只需进入两次中断但是只能控制一路PWM,但是很显然占空比可调空间很宽。

两种方法各有利弊,看你如何取舍了。

其中最核心的问题仍然是中断处理函数的时间消耗,这个是木桶效应的那个短板。

实际效果怎样,还需要你接个示波器,慢慢调试。

推荐逻辑分析仪,曾用8051实现一个定时器产生8路独立的舵机控制信号,调试起来还是很好用的,在只关注数字逻辑时非常好用,调试神器。

最后还是请不要拿51的定时器来模拟PWM了,太消耗资源了,还是换个高级点的MCU的使用硬件PWM吧,就是配置一下定时器的问题。

还有当你理解了时序后,很多东西都简单了,随便写个串口发送配合逻辑分析仪调试分分钟的事。

给个软件串口发送的小程序,通过时序模拟的,不过没有示波器,逻辑分析仪的不推荐使用,因为波特率并不是9600,115200之类的通用波特率,需要实测一下还有会有被中断打断的风险(也是写回答到这里才考虑到的),不过完全是不逊于硬件串口的速度的(波特率大于115200),做调试用还是很方便的。

考虑到可能会有疑问为什么这么写,好像是右移位数不同消耗时间不一样,这个是看输出波形发现的,只能通过空指令将每一bit时长拉到一致。

留言与评论(共有 0 条评论)
   
验证码:
Top