历史上的今天
今天是:2025年08月02日(星期六)
2020年08月02日 | 8051单片机(STC89C52)定时器实现10ms精准定时
2020-08-02 来源:eefocus
8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz/12 = 1MHz. 如果定时器的定时周期设定为50ms, 则需要50000个脉冲. 由于单片机定时器为加1计数器, 所以, 计数器初始值应设为65536 - 50000 = 15536 = 3CB0H. 另外, 还需要设置定时器工作模式寄存器TMOD, 如果使用定时器0, 16bits定时器方式, 则TMOD = 0x01.
定时器初始值计算解析:
若系统晶振频率为12MHz, 那么定时器信号源的频率固定为1MHz, 即每隔1 * 10^-6 s, 定时器内的值加1. 若定时器定时周期为50ms(=5*10^-2s), 那么这50ms就需要(5*10^-2)/(1*10^-6)=50000次加1计数.

#include void delay()//用定时器0实现10ms精准定时 { TMOD = 0x01; TH0 = 0xd8; TL0 = 0xf0;//65536 - 10000 = 55536 TF0 = 0;//置溢出标志位为0 TR0 = 1;//开启定时器0 while(TF0 == 0); TR0 = 0;//暂停定时器0 } void disp_digit() { int d = 60;//要显示的数字 unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; while(1) { //显示个位数 P2 = 0;// P2 = 0 -> (P24, P23, P22) = (0, 0, 0) -> 右数第一个数字点亮 P0 = DIG_CODE[d % 10]; delay();//10ms精准定时 //显示十位数 P2 = 1 << 2;//P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右数第二个数字点亮 P0 = DIG_CODE[d / 10]; delay();//10ms精准定时 } } int main() { disp_digit(); return 0; }
史海拾趣
|
嵌入式系统是指操作系统和功能软件继承于计算机硬件系统之中,简单说就是系统的应用软件与系统的硬件一体化,具有软件代码少,自动化程度高,相应速度快等特点,特别适合于要求实时的和多任务的体系。在技术方面的这些独特优点 ...… 查看全部问答> |
|
目前使用的是EP2C8,但处理数据的速度有些不能令人满意,有什么办法可以提高处理速度呢?C8的片子换成C6的? 还是换EP3C的片子还是改其他芯片??有什么比较好的办法吗? 答案: 从以下方面考虑: 1。不考虑成本,可 ...… 查看全部问答> |
|
我手上有一块SST89E564RD系列的单片机,在网上下载了一个SSTEasyIAP11F.exe按照网上提供的方法,我试过n次了就只成功过一次,后来再也没成功过。网上提供的方法如下: 首先板子最好有复位电路,即有按键能使单片机立即复位 接下来打 ...… 查看全部问答> |
|
老婆要生孩子,剖出来的,是个儿子。!!! 公司只给2天假,NND,我啥都没管就回家呆了半个月。今天刚回来,老板找了个新人让我交接! 交接完准备回家陪老婆过月子,,然后再找工作!!! 真爽!!!! 儿子,我有儿子了!这个破公司又是哪个单 ...… 查看全部问答> |
|
求助!!!!!!我要考研,关于嵌入式的。请问哪几个大学比较好,哪几个大学比较好考的 我对嵌入式比较感兴趣,想考个研,继续学习,但不知道哪几个大学在嵌入式方面比较强,希望大家帮我参考一下,谢谢… 查看全部问答> |
|
今天教学实习,自制收音机,很普通那种,AM的,做好后感觉收的台不是太多,还有就是内置线绕天线的引线太长是不是也会产生干扰?敬请各位大虾指教,谢谢… 查看全部问答> |
|
问题:F28027的程序烧写问题!! 如下:以前有个计划想用做个F28027程序升级的例程,但是后来发现F28027的RAM空间比较小,放不下我的\"CKFA\",于是乎有了“CKFA1”和“CKFA2”分两次发送,这样的话RAM空间基本足够,这就涉及到程序的反复跳转等一 ...… 查看全部问答> |




