8051单片机(STC89C52)定时器实现10ms精准定时

2020-08-02来源: eefocus关键字:8051  单片机  STC89C52  定时器  精准定时

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;

}


关键字:8051  单片机  STC89C52  定时器  精准定时 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504967.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:8051单片机(STC89C52)两个倒计时器同步计数
下一篇:8051单片机(STC89C52)两个倒计时器异步计数

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

c8051f340当io脚设为数字输入时设置需要注意
要将一个端口引脚配置为数字输入,向PnMDOUT寄存器中的对应位写‘0’,并向对应的端口锁存器(寄存器Pn)写‘1’。       例如:P0^0脚设为数字输入P0MDOUT &= ~(0x01); //数字输入P0 |= 0x01; //写1
发表于 2020-07-09
C8051F学习笔记3:优先权交叉开关译码器
数字和模拟资源可以通过25个I/O引脚(C8051F320)每个端口引脚都可以被定义为通用I/O(GPIO)或模拟输入。P0.0 ~ P2.3可以被分配给内部数字资源特点:所有端口I/O都耐5V电压。端口I/O单元可以被配置为漏极开路或推挽方式。 端口I/O初始化 端口 I/O 初始化包括以下步骤:1.用端口输入方式寄存器(PnMDIN)选择所有端口引脚的输入方式(模拟或数字)。2.用端口输出方式寄存器(PnMDOUT)选择所有端口引脚的输出方式(漏极开路或推挽)。3.用端口跳过寄存器(PnSKIP)选择应被交叉开关跳过的那些引脚。4.将引脚分配给要使用的外设(XBR0、XBR1)。5.使
发表于 2020-07-09
21课:单片机串行口介绍
介绍:串行口是单片机与外界进行信息交换的工具。8051单片机的通信方式有两种:并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:串行通信的方式:异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般
发表于 2020-07-03
21课:单片机串行口介绍
高速SOC单片机C8051F
单片机,仍是当前应用的主流。就国内应用实践而言,使用单片机数量最大的是八位单片机,应用范围最广的是八位单片机。八位单片机仍具有时代的魅力。 INTEL公司推出的高性能MCS-51系列八位单片机,一投入市场里很快被使用者所欢迎。随着时间的推移,世界各生产单片机的公司看好MCS-51系列八位单片机的强劲趋势,在八位单片机的设计上纷纷向51系列八位单片机内核靠拢,PHILIPS公司首先购买了8051内核的使用权,并在此基础上增加具有自身特点的IZC总线,PHILIPS公司并推出一系列高性能具有快闪存储器的标准的80C51派生型八位机单片机,很方便的多次在线编程,为用户带来极大方便。ATMEL公司通过技术交换取得了80C31内核
发表于 2020-07-02
高速SOC单片机C<font color='red'>8051</font>F
为何使用C而不使用汇编进行开发C8051F
好些年之前,我为自己写了几万行汇编代码而骄傲。 然而,做过多年软件开发的我,看到以前写的汇编代码也是很多不懂的,这可是自己亲手写的呀。汇编代码由于其可读性比较差,给后期的维护造成很大的困难。因此建议单片机的学习者们一定要学习C。 这句话要是我在读书的时候听到,只是会嗤之以鼻。“用汇编就足够了,为什么用C呢?如果您用汇编做不了,说明水平还不够”,这是我的典型想法,当时我的汇编水平甚至成为我的骄傲。然而几年之后的今天,我要劝说后来学习者一定要舍弃汇编而学习C语言,是否很好笑。首先说说C的优点。1、直观,可读性强:这点很重要。对于一个产品,周期是很长的,即使出第一台产品之后,还有很长的维护时间。这中间维护人员可能经常变
发表于 2020-07-02
C8051F软件新建工程流程(Silicon IDE)
注:建立Silicon IDE工程必须首先安装Silicon IDE软件·Silicon IDE的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/SoftwareDownloads.aspx?cm_sp=-_--_-下载安装。1、如下图所示,点击"Project -> New Project"后会弹出新建工程窗口 2、如下图所示,在Select Device项目栏中选择相应的单片机型号(这里以"C8051F320"为例),在Project name项目栏中填写项目名称(这里以"
发表于 2020-07-01
C<font color='red'>8051</font>F软件新建工程流程(Silicon IDE)
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved