收藏 分享(赏)

51单片机定时器设置入门 (STC89C52RC).docx

上传人:HR专家 文档编号:5397221 上传时间:2019-02-28 格式:DOCX 页数:5 大小:25.72KB
下载 相关 举报
51单片机定时器设置入门 (STC89C52RC).docx_第1页
第1页 / 共5页
51单片机定时器设置入门 (STC89C52RC).docx_第2页
第2页 / 共5页
51单片机定时器设置入门 (STC89C52RC).docx_第3页
第3页 / 共5页
51单片机定时器设置入门 (STC89C52RC).docx_第4页
第4页 / 共5页
51单片机定时器设置入门 (STC89C52RC).docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、51 单片机定时器设置入门 (STC89C52RC)STC 单片机定时器设置STC 单片机定时器的使用可以说非常简单,只要掌握原理,有一点的 C 语言基础就行了。要点有以下几个:1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。2. 尽量用形像的方法记忆比如 TCON 和 TMOD 两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)定时器/计数器模式控制寄存器 TMOD 是一个逐位定义的

2、8 位寄存器,但只能使用字节寻址,其字节地址为 89H。其格式为:其中低四位定义定时器/计数器 C/T0,高四位定义定时器/计数器 C/T1,各位的说明:GATE门控制。GATE=1 时,由外部中断引脚 INT0、INT1 来启动定时器 T0、T1。当 INT0 引脚为高电平时 TR0 置位,启动定时器 T0;当 INT1 引脚为高电平时 TR1 置位,启动定时器 T1。GATE=0 时,仅由 TR0,TR1 置位分别启动定时器 T0、T1。C/T功能选择位C/T=0 时为定时功能,C/T=1 时为计数功能。置位时选择计数功能,清零时选择定时功能。M0、M1方式选择功能由于有 2 位,因此有

3、4 种工作方式:M1M0 工作方式 计数器模式 TMOD(设置定时器模式)0 0 方式 0 13 位计数器 TMOD=0x000 1 方式 1 16 位计数器 TMOD=0x011 0 方式 2 自动重装 8 位计数器 TMOD=0x021 1 方式 3 T0 分为 2 个 8 位独立计数器,T1 为无中断重装 8 位计数器 TMOD=0x03单片机定时器 0 设置为工作方式 1 为 TMOD=0x01 这里我们一定要知道,TMOD 的 T 是 TIMER/COUNTER 的意思,MOD 是 MODE 的意思。至于每位上的功能,你只要记住图表,并知道每个英文缩写的原型就可以了。在程序中用到 T

4、MOD 时,先立即回忆图表,并根据缩写的单词原形理出每位的意义,如果意义不是很清楚,就查下手册,几次下来,TMOD 的图表就已经在脑子里了。8 位 GATE 位,本身是门的意思。7 位 C/T Counter/Timer6 位 M1 Mode 15 位 M0 Mode 0TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER)TMOD 分成 2 段,TCON 控制更加精细,分成四段,在本文中只要用到高四段。TF0(TF1)计数溢出标志位,当计数器计数溢出时,该位置 1。TR0(TR1)定时器运行控制位当 TR0(TR1)0 停止定时器/计数器工作当

5、TR0(TR1)1 启动定时器/计数器工作IE0(IE1)外中断请求标志位当 CPU 采样到 P3.2(P3.3)出现有效中断请求时,此位由硬件置 1。在中断响应完成后转向中断服务时,再由硬件自动清 0。IT0(IT1)外中断请求信号方式控制位当 IT0(IT1)=1 脉冲方式(后沿负跳有效)当 IT0(IT1)0 电平方式(低电平有效)此位由软件置 1 或清 0。TF0(TF1)计数溢出标志位当计数器产生计数溢出时,此位由硬件置 1。当转向中断服务时,再有硬件自动清 0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。注意记忆方法

6、,理解单词原形,就绝对不会把 TF 和 TR 搞混。TF 的 F 也就是溢出 Over Flow 的 F。国外有个著名的 IT 知识问答社区,网址就http:/ 的 R 就是运行 Run。默认是 0 不运行,当然要置 1 才运行。STC 单片机 STC89C52RC 定时器延时时间的计算延时时间要根据晶振频率计算,不同板子可能有所不同。时钟周期:1/时钟源,在我现在这块板子上,晶振频率是 11.0592M,也就是时钟周期是 1/11059200 秒机器周期:一般 51 单片机是 12 个时钟周期,我的板子也就是 12/11059200 秒单次定时最长时间:如果是 16 位的计数器,16 位最大

7、值是 65535,共可计数 65536 次。基本的常数一定要记住,还要记住 8 位最大值是 255,共可计数 256 次,还要记住 8 位上每位代表的数值。12 * 65536/11059200 = 0.0711 s,也就是,71 ms 内的定时可以单次定时就完成。如果定时时间超过 71 ms,就要循环了。一次定时需要几次机器周期:计算公式:定时秒数/机器周期比如我要定时 1 秒, 1/(12/11059200)= 921600 次,16 位计数器最大可计数65536 次,921600 次早就益出了。我们可以每次定时 10 ms,循环 100 次就可以定时 1 秒了,1 s 缩小 100 百倍

8、就是 10 ms, 也就是每次需要计数 9216 次。确实计数器初始值:定时 10 ms 时,如果计数器从 0 开始计数,我们就不知道什么时候到了 9216 次。所以应该计数了 9216 次,16 位计数器最多计数 95536 次,然后就溢出,一溢出 TCON 的 TF 位就会置 1,我们只要经常检测 TF 位就可以知道什么时候完成10ms 的定时了。计算公式:计数器初始值=最大计数次数 - 需要计数次数如果定时 10 ms,计数器的初始值就是 65536 - 9216计算计数器的高位和低位:16 位的计数器,也就是两个 8 位组成,8 位的最大计数次数是 256。所以:计数器高位 = 初始值

9、/256计数器低位 = 初始值%256STC89C52RC 单片机定时器示例代码:#include /如果你的单片机没用 74hc138 扩展 IO 口,下面代码可略sbit enableG1 = P13;sbit enableG2 = P14;sbit selectC = P12;sbit selectB = P11;sbit selectA = P10;void hc138()enableG1 = 1;enableG2 = 0;selectC = 1;selectB = 1;selectA = 0;typedef unsigned char uint8;typedef unsigned i

10、nt uint16;/ byhttp:/ 需要的机器周期 = 0.001/(12/11059200) = 921.6 要让 led 灯以 7.83hz 闪动, 周期是 1000 / 7.83 = 127.713 ms, 也就是每64 ms 改变亮灭状态*/void main(void) uint16 counter;hc138();TMOD = 0X01;TH0 = (65536 - 922) / 256;TL0 = (65536 - 922) % 256;TR0 =1;while(1)if(TF0 = 1)TF0 = 0;TH0 = (65536 - 922) / 256;TL0 = (65536 - 922) % 256;counter+;if(counter = 64)counter = 0;P0 = P0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报