




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2、模式1模式1(M1M001)除了使用了THn和TLn全部16位外,其它与模式0相同。(1)计数工作方式由于定时器/计数器以加1方式计数,假定计数值为X,则应装入定时器/计数器的初值为:初值216计数值 【216初值计数值】所以方式1的计数值范围是:165536(21665536),最大值为:65536(2)定时工作方式定时时间t的计算公式为:【t的时间单位为微秒(s)】计数值216初值定时时间t计数值机器周期(216初值)(1/晶体振荡频率)12在模式1下的情况下,如果fosc=12MHz,最大定时时间为:t=(65536-初值)(1/12)1265536065.536ms在模式1下的情况
2、下,如果fosc=6MHz,最大定时时间为:t=(65536-初值)(1/6)12(655360)2131.072 ms。【例如】:若晶体振荡为12MHz,要定时2.5ms,计算初值。要定时2.5ms,也可以用模式1。2500(216初值)(1/12)12初值6553625006303632768163848192409610245123216841111 0110 0011 1100 THn =0xF6 和 TLn=0x3C在fosc=12MHz时,如果定时时间大于65.536ms,这时用一个定时/计数器直接处理不能实现,这时可用:1、2个定时/计数器共同处理;2、1个定时/计数器配合软件计
3、数方式处理。3、模式2方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。该方式可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可以相当精确地确定定时时间。此模式下定时器寄存器作为可自动重装载的8位计数器(TLn),如下图所示。以T0为例,模式2把寄存器TH0作为一个存放初值的常数寄存器,TL0则成为一个可以自动重装载的8位计数器。TL0计数溢出时,不仅置位溢出标志TF0向CPU提出中断申请,同时还自动把TH0中的初值重新装载到TL0中。TH
4、0中的内容靠软件预置,重新装载后其内容不变。模式2的操作对于定时器0及定时器1是相同的。假定计数值为X,则应装入定时器/计数器的初值为:初值28计数值 【28初值计数值】所以方式2的计数值范围是:1256(28256),最大值为:256定时时间t的计算公式为:【t的时间单位为微秒(s)】计数值28初值定时时间t计数值机器周期(28初值)(1/晶体振荡频率)12在模式2下的情况下,如果fosc=12MHz,最大定时时间为:t=(256-初值)(1/12)12256s在模式2下的情况下,如果fosc=6MHz,最大定时时间为:t=(256-初值)(1/6)12(2560)2512s。4、模式3方式
5、3只适用于定时/计数器T0,T1不能工作在方式3。方式3将T0分成为两个独立的8位计数器TL0和TH0。 模式3对定时器/计数器0和定时器/计数器1是不同的。将T/C0设置为模式3时,将使TH0和TL0成为2个互相独立的8位定时器/计数器。如上图所示。由于TL0利用了定时器/计数器0的全部控制位:、TR0、GATE、和TF0,它的操作情况与模式0、1类同,不同的仅为8位。TH0则被固定作为一个8位定时器(计数机器周期),不能作为计数器方式,它使用定时器/计数器1的运行控制位TR1作为运行控制唯一条件,同时占用它的中断标志位TF1。一般来说,当系统需要增加一个额外的8位定时器时,才设置定时器/计
6、数器0工作于模式3。当定时器/计数器0工作于模式3时,由于TH0占用了定时器1的TR1的控制位和中断标志,虽然定时器/计数器1仍可定义为模式0、1和2,但只能用在不需要中断的场合。例如,工作于自动装载模式(模式2),作串行口的波特率发生器使用等等。 定时器/计数器T0和T1应用举例定时器/计数器的编程注意点:一是能正确写入控制字(初始化),二是计算定时和计数常数。一般情况下,初始化程序应完成如下工作:1根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD,以确定T0和T1的工作方式;2根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器TH0、TL0或TH1、TL1;3
7、如果采用中断方式,则须编写中断服务程序,并且需要:对IE寄存器的ETx置位,允许定时/计数器中断;置位EA,使CPU开放总中断。4设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。5等待定时/计数时间到,如果采用中断,则执行中断服务程序;如采用查询方式处理,则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。【例1】在AT89C51的P1口上接8个LED。下面采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。(1)设置TMOD寄存器定时器T0工作在方式1,应使TMOD寄存器的M1、M0=01;定时器模式,应设置=0;如果对T0的运行控制仅
8、由TR0来控制,那么应使GATE0=0。定时器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。(2)计算定时器T0的计数初值定时采用定时器和软件的方法,0.5s=500ms=5ms100。设定时时间5ms(即5000s),设定时器T0的初值为X,假设晶振的频率为11.0592MHz,则定时时间为:定时时间=(216X)12/晶振频率则5000=(216X)12/11.0592 得:X=60928,转换成十六进制后为:0xee00,其中0xee装入TH0,0x00装入TL0。【最大定时71.11s,最小定时1.085069444s】(3)设置IE寄存器由于采用定时器T0中断
9、,因此需将IE寄存器中的EA、ET0位置1。(4)启动和停止定时器T0在GATE0=0的条件下,将定时器控制寄存器TCON中的TR0=1,则启动定时器T0;TR0=0,则停止定时器T0定时。定时器T0方式1中断定时的参考程序:#includeunsigned char i=100; /给变量i赋初值void main() TMOD=0x01; /设置定时器T0为方式1 TH0=0xee; /向TH0写入定时初值的高8位TL0=0x00;/向TL0写入定时初值的低8位 P1=0x00; /P1口8只LED点亮,共阴极接法 EA=1; /总中断允许 ET0=1; /定时器T0中断允许 TR0=1;
10、 /启动定时器T0,GATE0,由TR0决定启动 while(1) ; /循环等待 ; void T0_int(void) interrupt 1 /定时器T0中断服务程序 TH0=0xee; /给T0重新装入16位初值,计数4608后,T0溢出 TL0=0x00; /计数4608后,即定时5ms到,100次,即500ms i-; /循环次数减 【46086553660928】 if(i =0) /如果到了100次的5ms,即500ms P1= P1; /P1口按位取反i =100; /重新设置循环次数 【例2】设单片机系统时钟频率为12MHz,试编程使P1.2引脚输出周期为5ms的方波。当系
11、统时钟为12MHz时,若定时/计数器工作于模式0,则最大定时时间为213=8192s(8.192ms),满足周期为5ms的要求,可选用定时器T0,工作于模式0,定时时间为2.5ms。首先计算定时器的初值,根据下式:定时时间t计数值机器周期(213初值)(1/晶体振荡频率)122500=(213初值)(1/12)12程序如下:#includesbit p1_2=P12; /应该可以直接用位INT0变量,因为reg51.h中有void main() TMOD=0x00; /GATE0,定时器的启动由 TR0决定 TH0=0xb1; /赋定时时间常数 TL0=0x1c; TR0=1; /启动定时器
12、while(1) / TH0溢出时,置位TCON中的TF0标志 while(TF0=1) /while(TF0=0); 等待定时器溢出,查询方式 TF0=0; /如果采用中断,则不需清零,可以自动清零 TH0=0xb1; /重新赋定时时间常数 TL0=0x1c; p1_2=!p1_2; TF0没有定义,但可以使用,因为在“reg51.h”中已定义。【例3】利用定时器T0测量正脉冲的宽度(时间),脉冲从P3.2()引脚输入,设脉冲宽度不超过定时器的定时范围,且系统时钟为12MHz,要求把该脉冲宽度值存入变量pul_width中。在模式0的介绍中提到过,利用门控位GATE可以测量外部脉冲的宽度。图
13、6-16 利用GATE位测量正脉冲的宽度具体方法是:设GATE=1,然后软件置位TR0,这时当为1时(外部脉冲的上升沿)就会自动启动定时器,当变为0时(外部脉冲的下降沿)关闭定时器,于是定时器中的计数值就体现了外部脉冲的宽度。程序如下:#includesbit p3_2=P32; /*定义定时器0的外部引脚*/unsigned int pul_width; /*定义全局变量以保存脉宽结果*/void main() /*主程序*/ unsigned char a; /*定义中间变量*/ TMOD=0x09; /T0工作为16位计数器方式1,GATE置1*/ /ox09=0000 1001 GAT
14、E1,=0定时,M1M001,方式1 TL0=0x00; /计数器装入初值,相当于最大定时时间 TH0=0x00; while(1) / 单片机复位后,P3口都是高电平 while(p3_2= =1); /等待变低,启动定时器 TR0=1; /定时器准备好,等待的上升沿就启动 while(p3_2= =0); /等待的上升沿,开始计时 while(p3_2= =1); /在上变为低电平时,为完整的正脉冲 TR0=0; /测量结束,停止计时间,再来脉冲也不会测量了 Pul_width= TH0*256+TL0; /计算脉宽的时间宽度 / Pul_width= (TH0*256+TL0) *(12
15、/晶体振荡频率) 【应该为:Pul_width=(TH0*256+TL0)*(12/晶体振荡频率); a变量可以不要】【和晶体振荡频率有关】如果定时时间大于65536s,这时用一个定时/计数器直接处理不能实现,这时可用:【武汉纺织大学】(1)2个定时/计数器共同处理;(2)1个定时/计数器配合软件计数方式处理。【例4】设系统时钟频率为12MHz,编程实现从P1.1输出周期为1s的方波。应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现500ms定时,可用:定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数5
16、0次或用定时/计数器T1对10ms计数25次实现。系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H),求初值X:则TH0=11011000B=D8H,TL0=11110000B=F0H。# include /包含特殊功能寄存器库sbit P1_1=P11;char i;void main( )TMOD=0x01;TH0=0xD8;TL0=0xF0;EA=1;ET0=1;i=0;TR0=1;while(1);void time0_int(void) interrupt 1 /中断服务程序TH0=0xD8; /重新装入计
17、数初值TL0=0xF0;i+;if (i= =50) P1_1=! P1_1;i=0; (2)用定时/计数器T1计数实现:定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1(P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次。设定时/计数器T1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。定时/计数器T0工作于方式1,定时,则这时方式控制字为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。# include /包含特殊功
18、能寄存器库sbit P1_1=P11;sbit P3_5=P35;void main( )TMOD=0x61;TH0=0xD8;TL0=0xF0;TH1=0xE7; TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);void time0_int(void) interrupt 1 /T0中断服务程序 TH0=0xD8;TL0=0xF0;P3_5=!P3_5;void time1_int(void) interrupt 3 /T1中断服务程序 P1_1=! P1_1;【例5】P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。长定时方法:增加一
19、个软件计数器或一个硬件计数器。本题采用硬件方式:T0定时,定时10ms; T1计数T0的定时跳变信号P1.0的负跳变次数,计满50个跳变为1秒。(查询方法)T=2s,X=5105个T,而最大只能65536个T,不能满足要求,必须借助硬件计数器或软件循环。 T0定时初值: (方式1)t=10ms,X=5000D=1388H,C=216- 5000=EC78HT1计数初值: (方式2)X=50D,C=28- 50=CDH#includesbit P1_0=P10;sbit P1_7=P17;timer0 interrupt 1 using 1 /*T0中断服务程序*/ P1_0=! P1_0; /
20、*10ms定时时间到, P1.0反相*/ TH0=(65536-5000)/256;/*计数初值重装载*/ TL0=(65536-5000)%256;timer1 interrupt 3 using 2 /*T1中断服务程序入口*/ P1_7=! P1_7; /*1s定时时间到, 灯改变状态*/main( ) P1_7=0; /*置灯初始灭*/ P1_0=1; /*保证第一次反相便开始计数*/ TMOD=0x61;/*定时器0工作在方式1定时,定时器1工作在方式2计数 */ TH0=(65536-5000)/256;/*预置计数初值*/ TL0=(65536-5000)%256; TH1=25
21、6-50; TL1=256-50; IP=0x08; /*置优先级寄存器*/ EA=1; /*CPU开中断*/ ET0=1;/*开T0中断*/ ET1=1;/*开T1中断*/ TR0=1;/*启动T0*/ TR1=1;/*启动T1*/ for (;) 定时/计数器的主要特性1、MCS-51系列中:51子系列有2个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1;52子系列有3个:还有一个定时/计数器T2。2、每个定时/计数器通过编程设定来实现:对系统时钟(fosc)计数实现定时;对外部信号(T0/T1引脚)计数实现计数功能。3、每个定时/计数器都有多种工作方式,通过编程可设定工作于某种方式。T0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国组合式空调机组换热器数据监测报告
- 2025年中国紫铜丝项目投资可行性研究报告
- 2025年中国磷酸铵盐干粉灭火剂项目投资可行性研究报告
- 2025年中国石英岩数据监测研究报告
- 2025年中国盐酸氯丙那林项目投资可行性研究报告
- 2025年中国电脑插卡市场调查研究报告
- 2025年中国电子用胶粘带项目投资可行性研究报告
- 2025年中国生物燃料项目投资可行性研究报告
- 2025年中国爪拉杆市场调查研究报告
- 2025年中国土霉素渣项目投资可行性研究报告
- 某煤矿项目申请报告(知识研究版本)
- 广东省2025年普通高等学校招生全国统一考试模拟测试(物理试题及答案)(广东二模)
- 银行从业资格证考试中的法律知识考查试题及答案
- 小麦种植技术试题及答案
- 2024年琼海市城市投资运营有限公司招聘笔试真题
- 职专汽修考试题及答案
- 国有建筑施工企业提质增效探讨
- 儿科社区获得性肺炎护理
- 2025年生猪屠宰兽医卫生检疫人员考试题(附答案)
- 记叙文阅读理解解析(课件)-部编版语文五年级下册阅读理解
- 科技型中小企业金融服务实践路径
评论
0/150
提交评论