




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机的定时器计数器第1页,课件共55页,创作于2023年2月6.1定时/计数器的结构与工作原理6.1.1定时/计数器的基本原理6.1.2定时/计数器的结构6.2定时/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第2页,课件共55页,创作于2023年2月纯软件定时/计数方法:定时——空循环预定周次,等待预定时间计数——读取I/O口电平,统计变化次数基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。delay(unsignedinttime){unsignedintj=0;for(;time>0;time--)for(j=0;j<125;j++);}存在问题:占用过多CPU机时纯软件第3页,课件共55页,创作于2023年2月单片机软硬件联合定时/计数方法:等待CPU响应系统时钟脉冲加1计数器溢出标志溢出定时器外来信号脉冲加1计数器溢出标志溢出等待CPU响应计数器外来信号脉冲加1计数器溢出标志溢出等待CPU响应系统时钟脉冲K定时/计数器定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.软硬件联合第4页,课件共55页,创作于2023年2月计数器的溢出空间可随计数初值改变→定时时间tt=(计数器最大空间-计数初值)×机器周期=(2n-a)×12/fosc(s)t与n、a、fosc三个因素有关TFx(X=0、1)Tx端(每个机器周期产生一个计数脉冲)逻辑开关功能:=0→定时器方式,=1计数器方式基本工作原理第5页,课件共55页,创作于2023年2月TFx(X=0、1)Tx端计数值N=(计数器满计数值-计数初值)=(2n–a)N与n、a两个因素有关计数值N第6页,课件共55页,创作于2023年2月6.1定时/计数器的结构与工作原理6.1.1定时/计数器的基本原理6.1.2定时/计数器的结构6.2定时器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第7页,课件共55页,创作于2023年2月2个16位计数器T0(TH0、TL0)和T1(TH1、TL1)——加1计数器2个控制寄存器TCON和TMOD——管理计数器的运行2个外部引脚T0(P3.4)和T1(P3.5)——接入外部脉冲定时/计数器的结构第8页,课件共55页,创作于2023年2月6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第9页,课件共55页,创作于2023年2月门控位GATE=0-允许TR1启动计数器GATE=1-允许INT1启动计数器启动控制位TR1=1-启动计数器TR1=0-停止计数器外部中断1参与定时器的启停管理中断请求标志位TF1=1-请求TR1=0-复位
T1模式选择位=0-定时=1-计数定时/计数器的控制关系(以T1为例)第10页,课件共55页,创作于2023年2月定时器方式寄存器——TMODT0定时器控制寄存器——TCON第11页,课件共55页,创作于2023年2月TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定时器控制位外部中断控制位
T1
T0
TF0
TR0
T0脚INT0注意,系统上电默认值为TCON=0,则默认状态应为:TR0和TR1均为关闭状态、电平中断触发方式、没有外部中断请求TCON第12页,课件共55页,创作于2023年2月GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0
T1方式选择位00-方式001-方式110-方式2T1工作状态
T1
T0
TF0
TR0
T0脚INT0T0方式选择位00-方式001-方式110-方式211-方式3T0工作状态TMOD第13页,课件共55页,创作于2023年2月GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0
注意:TMOD只能以字节方式进行初始化例如,设置T0为定时器方式1,允许TR0启动;T1为计数器方式0,允许INT1启动。则TMOD=11000001B=0xc1又如,系统上电默认值为TMOD=0,则默认状态应为:T0和TI均为定时器方式0,允许TR0、TR1启动。注意:第14页,课件共55页,创作于2023年2月6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第15页,课件共55页,创作于2023年2月M1M0工作方式功能说明00110101012313位定时/计数器16位定时/计数器8位自动重装定时/计数器3种定时/计数器关系T0工作方式注意:T0有4种工作方式,每种工作方式都有定时和计数2种方式。T1只有3种工作方式(T0的方式3中占用了T1的部分资源)。M1M0工作方式功能说明00101001213位定时/计数器16位定时/计数器8位自动重装定时/计数器T1工作方式学习顺序:方式1→方式2→方式0→方式3工作方式第16页,课件共55页,创作于2023年2月定时时间:t=(216-a)×12/fosc(s)——使用16位定时/计数器(THx+TLx)(M0M1为01组合时)定时范围为1~65,536μs(≈65ms)。最大定时时间(a=0,fosc=12MHz):t=216(s)=65536(s)定时方式(1)方式1第17页,课件共55页,创作于2023年2月最大计数值:N=65536(脉冲)计数值:N=(216–a)由于检测一个负跳变需要2个机器周期,即24个振荡周期,故最高计数频率=。故,对于12MHz晶振,最大外部脉冲的频率为0.5MHz。计数方式第18页,课件共55页,创作于2023年2月设单片机的fosc=12MHz,采用T0定时方式1在P1.0脚上输出周期为2ms的方波。虚拟示波器实例1第19页,课件共55页,创作于2023年2月分析:周期为2ms的方波由2个半周期为1ms的正负脉冲组成方波输出原理:定时1ms后将端口输出电平取反。2ms1msTH0=0xfcTL0=0x181ms定时的计数初值应为:a=216–t*fos/12=216–1000*12/12=64536=0xfc18注意:需要不断重装计数初值。或:TH0=64536/256;TL0=64536%256;
第20页,课件共55页,创作于2023年2月#include<reg51.h>sbitP1_0=P1^0;main(){
TMOD=0x01;//设置T0定时方式1(00000001B)TR0=1;//启动T0for(;;){
TH0=0xfc;//装载计数初值
TL0=0x18;
do{}while(!TF0);//等待TF0溢出P1_0=!P1_0;//定时时间到P1.0反相
TF0=0;//TF0标志清0 }}T0(1)查询方式第21页,课件共55页,创作于2023年2月图6.14实例1仿真波形图第22页,课件共55页,创作于2023年2月#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{//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)中断方式第23页,课件共55页,创作于2023年2月小结:使用定时/计数器的步骤强调:TMOD的设置只能以字节形式给出T0(1)设置TMOD——确定定时/计数器的工作状态T1定时计数012012T0定时计数01230123第24页,课件共55页,创作于2023年2月(2)计算计数初值——产生期望的定时间隔计数初值a=216-t×fosc/12(t≤65536s)THx=a/256TLx=a%256装载计数初值:第25页,课件共55页,创作于2023年2月3)确定采用何种方式处理溢出结果若是查询方式——采用条件判断语句若是中断方式→中断初始化设置和中断服务程序:do{}while(!TFx); //x=0或1……ETx=1;//开定时x中断,x=0或1EA=1;//开总中断tx_srv()interruptn{//n=1或3……}第26页,课件共55页,创作于2023年2月4)启动定时器:TR0=1或TR1=15)进行定时或计数结束后的其它工作6)为下次定时/计数做准备(清TFx标志+重装载计数初值)若是中断方式,则无需软件清TFx标志位;若是查询方式,需要软件清除TFx标志位。第27页,课件共55页,创作于2023年2月采用8位计数器,延时时间t=(28-a)×12/fosc(微秒)→12MHz时的最大定时量为256s;可自动重装载计数初值(TLx溢出后,THx数值可自动装入TLx);因没有装载计数初值造成的定时延误,方式2定时精度相对较高。(2)方式2第28页,课件共55页,创作于2023年2月(1)查询方式#include<reg51.h>sbitP1_0=P1^0;main(){TMOD=0x02;
TH0=TL0=0x06;TR0=1;for(;;){
do{}while(!TF0);P1_0=!P1_0;TF0=0; }}(2)中断方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{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第29页,课件共55页,创作于2023年2月周期为0.5ms方波第30页,课件共55页,创作于2023年2月将第4章实例5“计数显示器”中的软件查询法进行按键检测改用T0计数器方式2,并以中断方式编程。【解】原图中按键是由I/O口P3.7引脚接入的,本实例需要将其改由T0(P3.4)引脚接入。实例3第31页,课件共55页,创作于2023年2月分析:将T0设置为计数器方式2,设法使其在1个外部脉冲到来时就能溢出(即计数溢出周次为1)产生中断请求。计数初值为:a=28–1=255=0xff初始化TMOD=00000110B=0x06第32页,课件共55页,创作于2023年2月#include<reg51.h>unsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharcount=0;sbitp1_0=P1^0;int0_srv()interrupt1{ //T0中断服务if(++count==100)count=0;P0=table[count/10];P2=table[count%10];}main(){P0=P2=table[0]; //开始显示00TMOD=0x06; //T0方式1计数TH0=TL0=0xFF; //计数初值0xFFET0=1; //允许T0中断EA=1; //允许CPU中断TR0=1; //启动T0while(1); //无限循环}实例3参考程序第33页,课件共55页,创作于2023年2月运行效果第34页,课件共55页,创作于2023年2月使用13位的定时/计数器(THx7-0+TLx4-0)定时时间t=(213-a)×12/fosc(μs)计数初值a=213-t×fosc/1212MHz时的最大定时量t=213μs=8.192ms(3)方式0第35页,课件共55页,创作于2023年2月解:计数初值a=213-5000×12/12=3192=110001111000BTH0TL0011000110
0
0110006 3 1 8H计算T0方式0定时5ms的计数初值a由于方式0的TL0高3位未用(一般填0),因此a=0110001100011000=6318H即,TH0=0x63;TL0=0x18;实例4fosc=12MHz或:TH0=3192/32;TL0=3192%32;第36页,课件共55页,创作于2023年2月除计数器位数不同外,方式0与方式1的逻辑结构并无差异。方式0采用13位计数器是为了与早期产品MCS-48单片机兼容。方式0的初值计算比较麻烦,一般采用方式1替代。方式0方式1第37页,课件共55页,创作于2023年2月3种组合状态T1仍可设置为方式0~2;通常将T1设定为定时方式2(作为波特率发生器使用)TH0+TF1+TR1组成的8位定时器TL0+TF0+TR0组成的8位定时/计数器T1组成的无中断功能的定时器特点:方式3下T0可有2个具有中断功能的8位定时器(4)方式3第38页,课件共55页,创作于2023年2月6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第39页,课件共55页,创作于2023年2月应用:定时器——用于定时控制,或作为分频器发生各种不同频率的方波;计数器——用于外部脉冲统计或外部中断源扩充;复杂应用—需要将定时与计数结合起来。第40页,课件共55页,创作于2023年2月实例5
由P3.4口输入一个外部低频窄脉冲信号。当该信号出现负跳变时,由P3.0口输出宽度为500μs的同步脉冲,如此往复。要求据此设计一个波形展宽程序(fosc=6MHz)。第41页,课件共55页,创作于2023年2月1)将T0设置为1次计数方式2,初值设为0xff。这样P3.4一旦发生负跳变T0就会产生溢出;2)查询TF0标志位。当TF0=1时将T0设置为500s定时方式2,初值a为0x06(=256-500×6/12),同时使P3.0输出低电平;3)查询TF0标志位。待T0再次溢出后使P3.0输出高电平,然后将T0设置为1次计数方式2,如此往复进行。分析:可以采取如下做法:第42页,课件共55页,创作于2023年2月T0实例5参考程序#include<reg51.h>sbitP3_0=P3^0;voidmain(){TMOD=0x06; //设置为T0计数方式2TH0=256-250; //6MHz晶振时500μs相当于250个机器周期TL0=255; //初值0xff可使1个外来脉冲即产生溢出TR0=1; //启动计数器while(1){while(!TF0); //等待首次溢出TF0=0; //清TF0溢出标志TMOD=0x02; //设置为T0定时方式2P3_0=0;while(!TF0); //等待再次溢出TF0=0; //清TF0溢出标志P3_0=1;TMOD=0x06; //设置为T0计数方式2TL0=255; //重新置初值}}第43页,课件共55页,创作于2023年2月实例5仿真运行效果P3.0P3.4第44页,课件共55页,创作于2023年2月采用10MHz晶振,在P1.0脚上输出周期为2.5s,高电平占空比为20%的脉冲信号。分析:10兆晶振,方式1最大定时为78.643ms;可以采用定时中断与软件计数联合法:利用定时中断进行中断次数统计;若取10ms产生定时,则2.5s=250次中断之和;则500ms(20%占空比)相当于50次中断之和。2.5s0.5s实例610ms定时,晶振fosc=10MHz.定时器计数次数=10*1000*10/12=8333第45页,课件共55页,创作于2023年2月实例6参考程序#include<reg51.h>#defineucharunsignedcharuchartime;ucharperiod=250;ucharhigh=50;timer0(void)interrupt1using1//------定时器0中断处理程序----
{TH0=(65536-8333)/256; //重载计数初值TL0=(65536-8333)%256;if(++time==high)P1=0; //高电平时间到变低elseif(time==period) //周期时间到变高{time=0;P1=1;}}main()//-------------------主函数---------------------------{TMOD=0x01; //定时器0方式1TH0=(65536-8333)/256; //计数初值TL0=(65536-8333)%256;EA=1;ET0=1;TR0=1;do{}while(1);}第46页,课件共55页,创作于2023年2月实例6仿真运行效果第47页,课件共55页,创作于2023年2月采用定时中断控制流水灯,实现每秒1位,自上而下循环功能(fosc=12MHz)。实例7第48页,课件共55页,创作于2023年2月分析:可以利用20次50ms的定时中断方案,计数初值为:a=65536-50000×12/12=0x3cb0中断函数的任务过多,不利于实时控制。如何减少中断函数任务?新方案:中断函数中仅做中断次数统计和计数初值重入,控制操作改在主函数中进行。实例6的问题:第49页,课件共55页,创作于2023年2月实例7参考程序
//定时中断方式实现的跑马灯实例 #defineucharunsignedchar//定义一下方便后面使用 #include<reg51.h> //包括一个51标准内核的头文件 bitldelay=0; //长定时溢出标记 uchart=0; //定时溢出次数
//定时器0中断函数 timer0()interrupt1{ t++; if(t==20){ t=0; ldelay=1;//每次溢出置一个标记,以便主程序处理 } TH0=0x3c; //重置T0初值0x3cb0
TL0=0xb0; }第50页,课件共55页,创作于2023年2月voidmain(void){ ucharcodeledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ucharledi=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=ledp[ledi];//读出一个值送到P2口 ledi++; //指向下一个 if(ledi==8)ledi=0;//到了最后一个灯就换到第一个 } }}第51页,课件共55页,创作于2023年2月测量从P3.2(INT0)输入的正脉冲的宽度,测量结果以BCD码形式存放在片内RAM40H开始的单元处(设40H地址存放个位,系统时钟为12MHz,被测脉冲信号周期不超过100ms)。0分析:GATE=TR0=1时允许INT0的脉冲控制定时器的启停,则根据T0先启动、再关闭后的计数值可算出被测脉冲宽度。INT0端信号T0中的脉冲数实例8第52页,课件共55页,创作于2023年2月实例8参考程序#include<reg51.h>sbitP3_2=P3^2;main(){unsignedchar*P;unsignedinta;P=0x40; //指针指向片内RAM40H单元TMOD=0x09; //T0定时方式1,允许INT0启动计数器TH0=TL0=0; //装入计数初值do{}while(P3_2==1);//等待INT0变低TR0=1 //启动计数器条件之一while(P3_2==0); //等待脉冲上升沿,启动计数器条件之二while(P3_2==1); //等待脉冲下降沿,关闭计数器TR0=0; //关闭计数器a=TH0*256+TL0; //将TH0和TL0中的数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 育婴师在父母中的支持角色试题及答案
- 药剂类考试知识点复习的重中之重试题及答案
- 激光应用中的定量分析方法试题及答案
- 扎实卫生管理知识体系试题及答案
- 系统架构设计师考试新兴行业技术变革试题及答案
- 深入了解文化产业管理证书的试题及答案
- 药物代谢相关试题及答案
- 古诗奇葩考试题及答案
- 药剂药物监测系统构建题及答案
- 机械制图比赛试题及答案
- 2024年饮料供应链销售与分销协议
- 2025高考数学专项复习:指对同构问题 讲义
- 虚拟用户场景构建
- 湖北公务员面试模拟6
- 医疗美容病历模板范文
- 2018年四川省高考数学试卷(文科)(全国新课标Ⅲ)
- 前列腺增生患者的护理查房课件
- 2023年四川农信(农商行)招聘笔试真题
- 苏教版五年级下册数学期中考试试卷含答案
- 陕煤集团榆林化学有限责任公司招聘笔试题库2024
- 呼兰河传(2022年黑龙江牡丹江中考语文试卷记叙文阅读题及答案)
评论
0/150
提交评论