您好,欢迎访问三七文档
zhm07@126.com第6章单片机的定时器/计数器6.1定时/计数器的结构与工作原理6.2定时器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用zhm07@126.com6.1定时/计数器的结构与工作原理6.1.1定时/计数器的基本原理6.1.2定时/计数器的结构6.2定时器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时器/计数器zhm07@126.com纯软件定时/计数方法:定时——空循环预定周次,等待预定时间计数——读取I/O口电平,统计变化次数基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。delay(unsignedinttime){unsignedintj=0;for(;time0;time--)for(j=0;j125;j++);}存在问题:占用过多CPU机时第6章单片机的定时器/计数器zhm07@126.com单片机软硬件联合定时/计数方法:外来信号脉冲加1计数器TFx→1溢出查询或中断计数器外来信号脉冲加1计数器TFx→1溢出查询或中断系统时钟脉冲K定时/计数器定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.第6章单片机的定时器/计数器(已知剩余空间)查询或中断系统时钟脉冲加1计数器TFx→1溢出定时器(中断请求标志)zhm07@126.com计数器溢出空间=计数器最大空间-计数初值定时时间t=(计数器最大空间-计数初值)×机器周期=(2n-a)×12/fosc(s)基本工作原理:t与n、a、fosc三个因素有关(12分频=1个机器周期→1个计数脉冲)第6章单片机的定时器/计数器逻辑开关:=0→定时器方式,=1计数器方式TCTCTFx(X=0、1)Tx端fosc2n计数初值溢出空间a查询/中断zhm07@126.com第6章单片机的定时器/计数器定数计数值N=(计数器最大空间-计数初值)=(2n–a)N与n、a两个因素有关TFx(X=0、1)Tx端fosc查询/中断zhm07@126.com6.1定时/计数器的结构与工作原理6.1.1定时/计数器的基本原理6.1.2定时/计数器的结构6.2定时器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时器/计数器zhm07@126.com51单片机定时/计数器的结构第6章单片机的定时器/计数器2个16位计数器T0(TH0、TL0)和T1(TH1、TL1)——加1计数器2个8位控制寄存器TCON和TMOD——管理计数器的运行2个外部引脚T0(P3.4)和T1(P3.5)——接入外部脉冲zhm07@126.com6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时器/计数器zhm07@126.com定时/计数器的控制关系(以T1为例)门控位GATE=0→允许TR1启动计数器GATE=1→允许INT1启动计数器启动控制位TR1=1→启动计数器TR1=0→停止计数器外部中断1参与定时器的启停管理中断请求标志位TF1=1→请求中断TR1=0→没有中断T1第6章单片机的定时器/计数器TCTC模式选择位=0→定时=1→计数foscTCONTMOD查询/中断zhm07@126.comTF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定时器控制位外部中断控制位注意,系统上电默认值为TCON=0,则默认状态应为:TR0和TR1均为关闭状态、电平触发方式、没有0#~3#中断请求第6章单片机的定时器/计数器T1T0TF0TR0T0脚INT0foscfosc查询/中断查询/中断zhm07@126.comGATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0/CT/CTT1方式选择位00-方式001-方式110-方式2T1工作状态T0方式选择位00-方式001-方式110-方式211-方式3T0工作状态第6章单片机的定时器/计数器T1T0TF0TR0T0脚INT0foscfosc查询/中断查询/中断zhm07@126.com第6章单片机的定时器/计数器T0T1定时方式0计数方式0定时方式0计数方式0定时方式1计数方式1定时方式1计数方式1定时方式2计数方式2定时方式2计数方式2定时方式3计数方式3T0有4种工作方式,T1有3种工作方式,每种工作方式都有定时和计数2种方式,故共有14种组合关系。zhm07@126.comGATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0/CT/CT注意:TMOD只能以字节方式进行初始化例如,设置T0为定时方式1,允许TR0启动;T1为计数方式0,允许INT1启动。则TMOD=11000001B=0xc1又如,系统上电默认值为TMOD=0,则默认状态应为:T0和TI均为定时方式0,允许TR0、TR1启动。第6章单片机的定时器/计数器zhm07@126.com6.1定时/计数器的结构与工作原理6.2定时器/计数器的控制6.3定时/计数器的工作方式6.4定时/计数器的编程和应用第6章单片机的定时器/计数器zhm07@126.com第6章单片机的定时器/计数器M1M0工作方式功能说明00110101012313位定时/计数器16位定时/计数器8位自动重装定时/计数器3种定时/计数器关系T0注意:T1只有3种工作方式(T0的方式3中占用了T1的部分资源)。M1M0工作方式功能说明00101001213位定时/计数器16位定时/计数器8位自动重装定时/计数器T1学习顺序:方式1→方式2→方式0→方式3zhm07@126.com(1)方式1定时时间:t=(216-a)×12/fosc(s)——使用16位定时/计数器(n=16,THx+TLx)(M0M1为01组合时)第6章单片机的定时器/计数器定时范围为1~65,536μs(≈65ms)。最大定时时间(a=0,fosc=12MHz):t=216(s)=65536(s)计数初值:a=216-t×fosc/12定时方式fosc查询/中断zhm07@126.com最大计数值:N=65536(脉冲)第6章单片机的定时器/计数器定数计数值:N=(216–a)由于检测一个负跳变需要2个机器周期,即24个振荡周期,→最高计数频率=。oscf241计数方式当fosc=12MHz时,外部脉冲的最大允许频率为0.5MHz。fosc查询/中断zhm07@126.com实例1设单片机的fosc=12MHz,采用T1定时方式1在P2.0脚上输出周期为2ms的方波。虚拟示波器第6章单片机的定时器/计数器XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U?80C51ABCDR1100D1LED-YELLOWzhm07@126.com分析:周期为2ms的方波由2个半周期为1ms的正负脉冲组成方波输出原理:定时1ms后将端口输出电平取反。2ms1msTH1=0xfcTL1=0x181ms定时的计数初值应为:a=216–t*fos/12=216–1000*12/12=64536=0xfc18注意:需要不断重装计数初值。第6章单片机的定时器/计数器查询/中断zhm07@126.com(1)查询方式#includereg51.hsbitP2_0=P2^0;main(){TMOD=0x10;//设置T1定时方式1(00010000B)TR1=1;//启动T0for(;;){TH1=0xfc;//装载计数初值TL1=0x18;do{}while(!TF1);//等待TF1溢出P2_0=!P2_0;//定时时间到P2.0反相TF1=0;//TF1标志清0}}T0第6章单片机的定时器/计数器zhm07@126.com实例1仿真运行效果第6章单片机的定时器/计数器zhm07@126.com(2)中断方式#includereg51.hsbitP2_0=P2^0;timer0()interrupt3{//T1中断函数P2_0=!P2_0;//P2.0取反TH1=0xfc;//装载计数初值TL1=0x18;}main(){TMOD=0x10;//T1定时方式1TH1=0xfc;//装载计数初值TL1=0x18;EA=1;//开总中断ET1=1;//开T1中断TR1=1;//启动T1while(1);}注意:中断响应后系统可自动将TFx标志位清0第6章单片机的定时器/计数器zhm07@126.com小结:使用定时/计数器的步骤强调:TMOD的设置只能以字节形式给出T0(1)设置TMOD——确定定时/计数器的工作状态使用T0还是T1?采用定时模式还是计数模式?采用工作方式0、方式1、方式2、方式3?第6章单片机的定时器/计数器zhm07@126.com(2)计算计数初值——产生期望的定时/定数间隔定时计数初值a=216-t×fosc/12(t≤65536s,fosc=12MHz时)THx=a/256TLx=a/%256装载计数初值:第6章单片机的定时器/计数器定数计数初值a=216-N(N≤65536,脉冲频率≤0.5MHz,fosc=12MHz时)zhm07@126.com3)确定采用何种方式处理溢出结果若是查询方式——采用条件判断语句若是中断方式→中断初始化设置和中断服务程序:do{}while(!TFx);//x=0或1……第6章单片机的定时器/计数器ETx=1;//开定时x中断,x=0或1EA=1;//开总中断tx_srv()interruptn{//n=1或3……}zhm07@126.com4)启动定时器:TR0=1或TR1=15)进行定时或计数结束后的其它工作6)为下次定时/计数做准备(清TFx标志+重装载计数初值)若是中断方式,则无需软件清TFx标志位;若是查询方式,需要软件清除TFx标志位。第6章单片机的定时器/计数器zhm07@126.com采用8位计数器,TLx可自动重装载计数初值(TLx溢出后,THx→TLx);没有装载计数初值的延误,方式2定时精度相对较高;延时时间t=(28-a)×12/fosc(微秒)→12MHz时的最大定时量为256s;(2)方式2第6章单片机的定时器/计数器查询/中断fosczhm07@126.com(1)查询方式#includereg51.hsbitP2_0=P2^0;main(){TMOD=0x02;TH0=TL0=0x06;TR0=1;for(;;){do{}while(!TF0);P2_0=!P2_0;TF0=0;}}(2)中断方式#includereg51.hsbitP2_0=P2^0;timer0()interrupt1{P2_0=!P2_0;}main(){TMOD=0x02;TH0=TL0=0x06;EA=ET0=1;TR0=1;while(1);}实例2采用T0定时方式2在P2.0口输出周期为0.5ms的方波(设fosc=12MHz)。分析:计数初值TL0=((256-250)*12/12)%256=0x06,TMOD=0x02第6章单片机的定时器/计数器zhm07@126.com实例2仿真运行效果第6章单片机的定时器/计数器zhm07@126.c
本文标题:第6章 单片机原理
链接地址:https://www.777doc.com/doc-4147289 .html