最近实训在做基于51单片机的开发,在做基于单片机的电子钟时着实被11.0592M的晶振难了一把。后经网上查资料和反复认证终于搞明白了。
为了在进行串口通信时方便计算波特率,所以一般涉及串口通信的单片机系统大多使用11.0592M的晶振。我们实训时使用的晶振频率也是11.0592M的,这在做电子钟时给计算定时器初值带来了一定困难。
晶振周期=1s/11.0592MHz=1Mus/11.0592MHz=1/11.0592us
单片机机器周期=12*(1/11.0592)us≈1.08506944us
需要实现计时1秒,需要1000000/1.08506944=921600.003775≈921600个机器周期
如果使用定时器的8位自动重装模式,那么如果设置定时器初值为0xA4H(即164D),则每256-164=92个机器周期触发一次定时中断,如此中断10000次,共为920000个机器周期,才约是1秒!
实际上电子钟每跳动1秒都少1600个机器周期,因为921600/1600=576,故应当电子钟每跳动576秒(即9.6分钟)就减去1秒,以减少误差!如果不加此修正,一天24小时,电子钟将快2.5分钟!
之所以需要对电子钟的时间进行修正,主要是因为晶振频率无法被整除造成的。所以如果单片机系统不需要串口通讯,使用12MHz的晶振,那么计算定时器中断的初值将方便许多,也不需要进行时间修正了!
晶振周期=1s/12MHz=1Mus/12MHz=1/12us
单片机机器周期=12*1/12us=1us
需要实现计时1秒,需要1000000/1=1000000个机器周期
那么如果设置定时器初值为0x9CH(即156D),则每256-156=100个机器周期触发一次定时中断,如此中断10000次,正好为1000000个机器周期。这样就不会存在误差(忽略指令的执行时间)!
有奖活动 | |
---|---|
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |