- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7 第 七章 准时计数器
8x51的定时器/计数器
定时器/计数器(timer/counter)是一种计数器建
若计数内部的时钟脉冲,可视为定时器;
若计数外部的脉冲,可视为计数器
定时器/计数器的应用可以用中断的方式进行。
MCS-51的定时器/计数器
8051提供两个16位的定时器/计数器,分别是Timer0及Timer1(简称T0及T1),
若当成内部计数器时,则是计数内部的脉冲,以12M为例,定时器所计数的脉冲周期为1us.
若当成外部计数器,则是计数由T0或T1引脚送入的脉冲。
MCS-51的定时器/计数器 可设置4种工作方式,
定时器/计数器方式寄存器TMOD
功能是设置定时器/计数器的工作方式,计数信号源及启动定时器/计数器方式。
TMOD方式寄存器的高4位,(TMOD.7~TMOD4)设置timer1的工作方式,而第四位(TMOD.3~TMOD.0)用以设置timer0的工作方式。
以第四位为例,GATE位为定时器的门控开关,用以决定其启动方式,若GATE=0,则只要TR0位=1;即可启动timer0,称为内部启动或软件启动。
若
GATE=1,则必须先将TR0位为1,再等待INT0引脚为高电平,方可启动timer0.称为外部启动或硬件启动。
C/T位为定时器/计数器切换开关,若C/T位=0,则timer0为内部定时器,用以计数fosc/12产生的脉冲,若C/T位为外部计数器,用以计数由T0引脚输入的脉冲。
M1及M0这两位可设置工作方式
Mode 1
Mode1提供两个16位的定时器/计数器(timer0及timer1)
其数值分别放在THx与TLx 两个8位的计数寄存器里。其中THx 放置8位,其中TLx 放置8位 ,
定时器/计数器控制寄存器 TCON
定时器/计数器控制寄存器 TCON的高四位提供定时器/计数器的启动开关以及中断时的标志。
TCON.0-TCON.3 :外部中断功能
TCON.4: ( TR0 ) timer0启动的开关
TR0=1;启动timer0
TR0=0;关闭timer0
TCON.5 ( TF0 ): timer0的中断标志位
Timer0中断时,CPU设置TF0=1;
Timer0中断结束时,CPU设置TF0=0;
TCON.6: ( TR1 ) timer1启动的开关
TR1=1;启动timer1
TR1=0;关闭timer1
TCON.7: ( TF0 ): timer1的中断标志位
Timer1中断时,CPU设置TF1=1;
Timer1中断结束时,CPU设置TF1=0;
Mode 1
在mode1的工作方式下,THx与TLx 计数寄存器各使用8位,共256即是2的8次方。因此要把计数起点的值除以256,其余数放入THx计数器,其商放入TLx计数寄存器,例如要使用timer0计数50000
则填入计数寄存器的指令如下
TL0=(65536-50000)%256; //取8位的余数
TH0=(65536-50000)/256; //取8位的商数
定时器/计数器的应用
第一种:中断应用
第二种:查询方式
中断应用:
1:定时器/计数器中断的设置,
包括开启中断开关(即IE寄存器的设置),中断优先级的设置(IP的设置),中断信号的设置(TCON的设置),
IE=0x82; //开启中断总开关及T0开关
同理对于IP寄存器、TMOD寄存器的设置,也可以使用类似的指令
例如要把T1的中断优先级提高,并设置为内部定时器,软件启动方式及mode1
则指令如下
IP=0x02; //提升T0中断的优先等级
TMOD=0x01; //设置内部定时器,软件启动,mode1;
2:计数值得设置
TL0=(65536-50000)%256; //取8位的余数
TH0=(65536-50000)/256; //取8位的商数
3:启动定时器/计数器
若是采用软件启动,则只要在程序中出现如下指令即可:
TRx=1; //启动timer x
4;中断子程序的编写
Void 中断子程序名称(void) interrupt 中断编号 using 寄存器组
如
Void my-IT (void) interrupt 3
{
}
查询方式,请参考代码
所谓的查询方式:就是主程序什么也不做,只是不断的查询定时器是否中断了,而不需要准备中断子程序。
中断方式,则是主程序专注于其他事情,待定时器时才执行中断子程序,再此以查询方式进行闪烁灯的控制
#include reg51.h //定义8Xj51寄存器的头文件
#define LED P1 //定义LED 接置 P1
#de
文档评论(0)