已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 单片机的定时器/计数器,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,6.1 定时/计数器的结构与工作原理 6.1.1 定时/计数器的基本原理 6.1.2 定时/计数器的结构 6.2 定时/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,纯软件定时/计数方法: 定时空循环预定周次,等待预定时间 计数读取I/O口电平,统计变化次数,基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。,delay(unsigned int time ) unsigned int j = 0; for(;time0;time-) for(j=0;j125;j+); ,存在问题:占用过多CPU机时,纯软件,单片机软硬件联合定时/计数方法:,定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.,软硬件联合,计数器的溢出空间可随计数初值改变定时时间t,t =(计数器最大空间-计数初值)机器周期 =(2n-a)12/fosc (s),t与n、a、fosc三个因素有关,(每个机器周期产生一个计数脉冲),逻辑开关 功能: = 0定时器方式, = 1计数器方式,基本工作原理,计数值N = (计数器满计数值 - 计数初值) = (2 n a ),N与n、a两个因素有关,计数值N,6.1 定时/计数器的结构与工作原理 6.1.1 定时/计数器的基本原理 6.1.2 定时/计数器的结构 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,2个16位计数器T0 (TH0、TL0)和T1 (TH1、TL1)加1计数器 2个控制寄存器TCON和TMOD管理计数器的运行,2个外部引脚T0(P3.4)和T1(P3.5)接入外部脉冲,定时/计数器的结构,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,门控位 GATE=0-允许TR1启动计数器 GATE=1-允许INT1启动计数器,启动控制位 TR1=1-启动计数器 TR1=0-停止计数器,外部中断1 参与定时器的启停管理,中断请求标志位 TF1=1-请求 TR1=0-复位,T1,定时/计数器的控制关系(以T1为例),定时器方式寄存器 TMOD,T0,定时器控制寄存器TCON,注意,系统上电默认值为TCON = 0,则默认状态应为:,TR0和TR1均为关闭状态、电平中断触发方式、没有外部中断请求,TCON,GATE,C/T,M1,M0,GATE,C/T,M1,M0,D7,D5,D4,D3,D2,D1,D0,TMOD,D6,(89H),T1,T0,T1方式选择位 00-方式0 01-方式1 10-方式2,TMOD,注意:TMOD只能以字节方式进行初始化,例如,设置T0为定时器方式1,允许TR0启动; T1为计数器方式0,允许INT1启动。,则 TMOD = 1100 0001B =0xc1,又如,系统上电默认值为TMOD = 0,则默认状态应为:,T0和TI均为定时器方式0,允许TR0、TR1启动。,注意:,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,T0工作方式,注意: T0有4种工作方式,每种工作方式都有定时和计数2种方式。 T1只有3种工作方式(T0的方式3中占用了T1的部分资源)。,T1工作方式,学习顺序:方式1方式2 方式0 方式3,工作方式,定时时间:t = (216- a)12/fosc (s),使用16位定时/计数器(THx+TLx),(M0 M1为01组合时),定时范围为165,536 s(65ms)。,最大定时时间(a=0,fosc =12MHz):t = 216(s) = 65536 (s),定时方式,(1) 方式1,最大计数值:N = 65536 (脉冲),计数值: N = (216 a ),由于检测一个负跳变需要2个机器周期,即24个振荡周期,故最高计数频率= 。,故,对于12MHz晶振,最大外部脉冲的频率为0.5MHz 。,计数方式,设单片机的fosc=12MHz,采用T0定时方式1在P1.0脚上输出周期为2ms的方波。,虚拟示波器,实例1,分析:周期为2ms的方波由2个半周期为1ms的正负脉冲组成,方波输出原理:定时1ms后将端口输出电平取反。,TH0 = 0xfc TL0 = 0x18,1ms定时的计数初值应为: a = 216 t* fos / 12 = 216 1000* 12/ 12 = 64536 = 0xfc18,注意:需要不断重装计数初值。,或:TH0 = 64536 / 256; TL0 = 64536 % 256;,#include sbit P1_0 = P10; main () TMOD = 0x01; /设置T0定时方式1(0000 0001B) TR0=1; /启动T0 for(;) TH0 = 0xfc; /装载计数初值 TL0 = 0x18; do while(!TF0); /等待TF0溢出 P1_0 =!P1_0; /定时时间到P1.0反相 TF0 = 0; /TF0标志清0 ,T0,(1)查询方式,图6.14 实例1仿真波形图,#include sbit P1_0=P10; timer0 () interrupt 1 /T0中断函数 P1_0 = !P1_0; /P1.0取反 TH0 = 0xfc; /装载计数初值 TL0 = 0x18; main () TMOD = 0x01; /T0定时方式1 TH0 = 0xfc; /装载计数初值 TL0 = 0x18; EA=1; /开总中断 ET0=1; /开T0中断 TR0=1; /启动T0 while(1); ,注意:中断响应后系统可自动将TFx标志位清0,(2)中断方式,小结:使用定时/计数器的步骤,强调:TMOD的设置只能以字节形式给出,T0,(1)设置TMOD确定定时/计数器的工作状态,(2)计算计数初值产生期望的定时间隔,计数初值 a = 216- tfosc/12 (t 65536 s),THx = a / 256 TLx = a % 256,装载计数初值:,3)确定采用何种方式处理溢出结果,若是查询方式采用条件判断语句,若是中断方式中断初始化设置和中断服务程序:,do while (!TFx) ; / x=0或1 ,ETx =1; /开定时x中断,x=0或1 EA = 1; /开总中断 tx_srv () interrupt n /n=1或3 ,4)启动定时器: TR0 = 1 或 TR1= 1,5)进行定时或计数结束后的其它工作,6)为下次定时/计数做准备(清TFx标志+重装载计数初值) 若是中断方式,则无需软件清TFx标志位; 若是查询方式,需要软件清除TFx标志位。,采用8位计数器,延时时间 t = (28-a)12/fosc (微秒) 12MHz时的最大定时量为256s; 可自动重装载计数初值(TLx溢出后, THx数值可自动装入TLx); 因没有装载计数初值造成的定时延误,方式2定时精度相对较高。,(2) 方式2,(1)查询方式 #include sbit P1_0 = P10; main() TMOD = 0x02; TH0= TL0 = 0x06; TR0=1; for(;) do while(!TF0); P1_0 =!P1_0; TF0 = 0; ,(2)中断方式 #include sbit P1_0=P10; timer0 () interrupt 1 P1_0 = !P1_0; main() TMOD = 0x02; TH0 = TL0 = 0x06; EA= ET0 = 1; TR0=1; while(1); ,采用T0定时方式2在P1.0口输出周期为0.5ms的方波(设fosc=12MHz)。,分析:计数初值TL0= (256-250)*12/12)%256 = 0x06,TMOD = 0x02,实例2,周期为0.5ms方波,将第4章实例5“计数显示器”中的软件查询法进行按键检测改用T0计数器方式2,并以中断方式编程。,【解】原图中按键是由I/O口P3.7引脚接入的,本实例需要将其改由T0(P3.4)引脚接入。,实例3,分析:将T0设置为计数器方式2,设法使其在1个外部脉冲到来时就能溢出(即计数溢出周次为1)产生中断请求。 计数初值为: a = 2 8 1 = 255 = 0xff 初始化TMOD = 0000 0110B = 0x06,#include unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; unsigned char count=0; sbit p1_0=P10; int0_srv() interrupt 1 /T0中断服务 if(+count=100)count=0; P0=tablecount/10; P2=tablecount%10; main() P0=P2=table0; /开始显示00 TMOD=0x06; /T0方式1计数 TH0 = TL0 = 0xFF; /计数初值0xFF ET0=1; /允许T0中断 EA=1; /允许CPU中断 TR0=1; /启动T0 while(1); /无限循环 ,实例3参考程序,运行效果,使用13位的定时/计数器(THx7-0+TLx4-0),定时时间 t = (213 - a)12/fosc (s),计数初值 a = 213 - tfosc/12,12MHz时的最大定时量t=213s = 8.192ms,(3) 方式0,解:计数初值a=213-500012/12=3192= 1100 0111 1000B,计算T0方式0定时5ms的计数初值a,由于方式0的TL0高3位未用(一般填0) ,因此 a= 0110 0011 0001 1000 = 6318H,即,TH0 = 0x63; TL0 = 0x18;,实例4 fosc=12MHz,或:TH0 = 3192 / 32; TL0 = 3192 % 32;,除计数器位数不同外,方式0与方式1的逻辑结构并无差异。 方式0采用13位计数器是为了与早期产品MCS-48单片机兼容。 方式0的初值计算比较麻烦,一般采用方式1替代。,方式0,方式1,T1仍可设置为方式02;通常将T1设定为定时方式2(作为波特率发生器使用),TH0+TF1+TR1组成的8位定时器 TL0+TF0+TR0组成的8位定时/计数器 T1组成的无中断功能的定时器 特点:方式3下T0可有2个具有中断功能的8位定时器,(4)方式3,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,应用: 定时器用于定时控制,或作为分频器发生各种不同频率的方波; 计数器用于外部脉冲统计或外部中断源扩充; 复杂应用需要将定时与计数结合起来。,实例5 由P3.4口输入一个外部低频窄脉冲信号。当该信号出现负跳变时,由P3.0口输出宽度为500s的同步脉冲,如此往复。要求据此设计一个波形展宽程序(fosc= 6MHz)。,1)将T0设置为1次计数方式2,初值设为0xff。这样P3.4一旦发生负跳变T0就会产生溢出; 2)查询TF0标志位。当TF0=1时将T0设置为500s定时方式2,初值a为0x06(=256-5006/12),同时使P3.0输出低电平; 3)查询TF0标志位。待T0再次溢出后使P3.0输出高电平,然后将T0设置为1次计数方式2,如此往复进行。,分析:可以采取如下做法:,实例5参考程序,#include sbit P3_0=P30; void main () TMOD = 0x06; /设置为T0计数方式2 TH0 = 256-250; /6MHz晶振时500s相当于250个机器周期 TL0 = 255; /初值0xff可使1个外来脉冲即产生溢出 TR0 = 1; /启动计数器 while (1) while (!TF0); /等待首次溢出 TF0 = 0; /清TF0溢出标志 TMOD = 0x02; /设置为T0定时方式2 P3_0 = 0; while (!TF0); /等待再次溢出 TF0 = 0; /清TF0溢出标志 P3_0 = 1; TMOD = 0x06; /设置为T0计数方式2 TL0 = 255; /重新置初值 ,实例5仿真运行效果,P3.0,P3.4,采用10MHz晶振,在P1.0脚上输出周期为2.5s,高电平占空比为20%的脉冲信号。,分析:10兆晶振,方式1最大定时为78.643ms; 可以采用定时中断与软件计数联合法:利用定时中断进行中断次数统计; 若取10ms产生定时,则2.5s =250次中断之和; 则500ms(20%占空比)相当于50次中断之和。,实例6,10ms定时,晶振fosc=10MHz. 定时器计数次数=10*1000*10/12=8333,实例6参考程序,#include #define uchar unsigned char uchar time; uchar period=250; uchar high=50; timer0 (void) interrupt 1 using 1 /-定时器0中断处理程序- TH0=(65536-8333)/256; /重载计数初值 TL0= (65536-8333)%256; if (+time=high) P1=0; /高电平时间到变低 else if (time=period) /周期时间到变高 time=0; P1=1; main ( ) /-主函数- TMOD=0x01; /定时器0方式1 TH0=(65536-8333)/256; /计数初值 TL0= (65536-8333)%256; EA=1; ET0=1; TR0=1; do while (1); ,实例6仿真运行效果,采用定时中断控制流水灯,实现每秒1位,自上而下循环功能(fosc=12MHz)。,实例7,分析:可以利用20次50ms的定时中断方案,计数初值为:,a = 65536-5000012/12 = 0x3cb0,中断函数的任务过多,不利于实时控制。,如何减少中断函数任务? 新方案:中断函数中仅做中断次数统计和计数初值重入,控制操作改在主函数中进行。,实例6的问题:,实例7参考程序,/定时中断方式实现的跑马灯实例 #define uchar unsigned char /定义一下方便后面使用 #include /包括一个51标准内核的头文件 bit ldelay=0; /长定时溢出标记 uchar t=0; /定时溢出次数 /定时器0中断函数 timer0() interrupt 1 t+; if(t=20) t=0; ldelay=1;/每次溢出置一个标记,以便主程序处理 TH0 =0x3c; /重置T0初值0x3cb0 TL0 =0xb0; ,void main(void) uchar code ledp8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; uchar ledi=0; /用来指示显示顺序 TMOD=0x01; /定义T0定时方式1 TH0 =0x3c; /溢出20次=1秒(12M晶振) TL0 =0xb0; TR0=1; /启动定时器 ET0=1; /打开定时器0中断 EA=1; /打开总中断 while(1) /主程序循环 if(ldelay) /发现有时间溢出标记,进入处理 ldelay=0; /清除标记 P2=ledpledi; /读出一个值送到P2口 ledi+; /指向下一个 if(ledi=8)ledi=0;/到了最后一个灯就换到第一个 ,测量从P3.2(INT0)输入的正脉冲的宽度,测量结果以BCD码形式存放在片内RAM 40H开始的单元处(设40H地址存放个位,系统时钟为12MHz,被测脉冲信号周期不超过100ms) 。,0,分析:GATE=TR0=1时允许INT0的脉冲控制定时器的启停,则根据T0先启动、再关闭后的计数值可算出被测脉冲宽度。,实例8,实例8参考程序,#include sbit P3_2=P32; main() unsigned char *P; unsigned int a; P=0x40; /指针指向片内RAM40H单元 TMOD = 0x09; /T0定时方式1,允许INT0启动计数器 TH0=TL0=0; /装入计数初值 dowhile (P3_2=1);/等待INT0变低 TR0=1 /启动计数器条件之一 while(P3_2=0); /等待脉冲上升沿,启动计数器条件之二 while(P3_2=1); /等待脉冲下降沿,关闭计数器 TR0=0; /关闭计数器 a=TH0*256+TL0; /将TH0和TL0中的数据合成到变量a for(a;a!=0;) /循环分解各位数据 *P=a%10; /40H单元开始放个位 a/=10; /删除已分解位 P+; /指针指向下一单元 while(1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026孤独症康复面试题及答案
- 2026海淀工商面试题目及答案
- 2026基层矛盾面试题及答案
- 2026教师素质综合素养面试题及答案
- 辽宁辽南协作体2025-2026学年高一下学期期末英语试题(含答案)
- 保险AI在客户服务中的个性化响应
- 人工智能在金融风险评估中的应用-第77篇
- 巴中市2026年第六批就业见习岗位的考试模拟试题及答案详解
- 2026年佛山市顺德区住房和城乡建设局人员招聘笔试参考题库及答案详解
- 2026西安建筑科技大学附属中学招聘考试参考题库及答案详解
- 丘脑出血病人的护理查房讲课件
- T/BIKE 7.1-2020电动自行车锂离子蓄电池换电柜技术要求第1部分:柜体
- 院内病人转运安全管理
- 骨科围术期血糖管理
- 业主委员会工作实务手册
- 第一单元 分数加减法单元测试(含答案)北师大版五年级下册数学
- 社区服务项目合伙人协议书
- 污水处理设施维护计划
- GB/T 11263-2024热轧H型钢和剖分T型钢
- 配电箱巡查记录表
- GB/T 24067-2024温室气体产品碳足迹量化要求和指南
评论
0/150
提交评论