项目5 定时器与脉冲计数器的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

电子工业出版社单片机控制技术项目式教程(C语言版)电子工业出版社项目5定时器与脉冲计数器的设计能了解单片机定时/计数器的组成;能理解单片机定时/计数器的工作原理和4种工作方式;能掌握单片机定时/计数器的初始化方法;能恰当运用单片机定时/计数器的功能;能掌握定时器的设计方法;能掌握脉冲计数器的硬件电路和软件设计方法;能熟练编写单片机定时/计数器工作的程序。学习目标叙述单片机定时/计数器4种工作方式的工作原理;叙述单片机定时/计数器的初始化方法;设计定时器的工作程序;设计脉冲计数器的电路和工作程序。工作任务任务5.1定时器的设计项目5定时器与脉冲计数器的设计任务5.2脉冲计数器的设计项目拓展实验板分频器的设计项目小结思考与训练5.1.1.1单片机定时/计数器的结构加1计数器(高8位、低8位);5.1.1MCS-51单片机内部定时/计数器的原理工作方式控制寄存器TMOD,工作方式设置;定时器控制寄存器TCON,启动、停止及设置溢出标志。任务5.1定时器的设计5.1.1.2定时/计数器工作原理计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。定时模式,对内部机器周期计数定时时间t=计数值NxTcy计数模式,对外部事件脉冲计数计数脉冲周期要大于2TcyTMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1工作在定时器方式还是计数器方式。计数值:溢出时计数器值-计数初值。计数器全1时,再输入1个脉冲就回零,并发生溢出(TCON中TF0或TF1置1),发中断请求。计数器脉冲来源:振荡器脉冲经过12分频T0或T1引脚的外部脉冲1.工作方式控制寄存器TMODT1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE—门控位C/T—计数/定时选择M1M0—工作方式选择5.1.1.3时/计数器的初始化注意:不能进行位寻址定时/计数器的工作方式M1M0工作方式功能说明00方式013位计数器01方式116位计数器10方式2自动重装初值的8位计数器11方式3方式3只针对T0,T0分成两个独立的8位定时/计数器;T1无方式32.定时器控制寄存器TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0中断请求标志触发方式选择启动定时/计数器0低电平1下降沿0停止1启动3.定时/计数器的初始化②计算计数器的计数初值:编程时将计数初值送TH0、TL0或TH1、TL1;可编程器件在使用前需要进行初始化:①确定TMOD控制字:编程时将控制字送TMOD;③开中断(如果使用中断方式):编程实置位EA、ETi④TR0或TR1位置位控制定时器的启动和停止。【例】若单片机晶振为12MHz,要求产生5ms的定时,试计算X的初值。解:采用定时器0的方式0:500*10-6=(213-X)*12*1/foscx=7692=1E0CH=1111000001100F0H0CH即TH0=F0H,TL0=0CHTMOD=GATEC/TM1M0GATEC/TM1M00000000000H采用定时器1方式1:500*10-6=(216-X)*12*1/foscx=65036=FE0CH即TH1=FEH,TL1=0CHTMOD=GATEC/TM1M0GATEC/TM1M00001000010Hmain()函数中:TMOD=0x01;//设置定时器0为工作方式1TH0=0xFE;//定时器0高8位给初值TL0=0xC0;//定时器0低8位给初值EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0初始化程序编写中断服务程序中重新装入定时初值voidtimer0()interrupt1{TH0=0xFE;//定时器0高8位给初值TL0=0xC0;//定时器0低8位给初值}计数脉冲输入方式0—13位方式。由TL0的低5位和TH0的8位组成。TH0溢出时,置位TF0标志,向CPU发出中断请求。TF0T0TR0GATEINT01≥1&C/T=1C/T=0振荡器1/12TL0TH08位低5位13位计数器定时器计数器5.1.2用单片机定时/计数器设计定时器(查询方式)5.1.2.1用定时/计数器的工作方式0设计定时器定时=(213-X)×时钟周期×12=(213–X)*12*1/fosc计数初值:X=213-T/(时钟周期×12)定时/计数器工作方式0定时方式:例:8*10-3=(213-X)*12*1/(12*106)X=213–8000=192=0xC0计数方式:计数次数值N=213-X计数初值:X=213-计数次数值N注意:X的低5位送TL0(TL1),TL0(TL1)的高3位数为任意值,常取0,高8位送TH0(TH1)。1.任务要求本任务要求用AT89C51的定时器1,方式0设计一只1秒的定时器,用定时器的查询方式,使AT89C51控制的一只发光二极管定时1秒闪烁。任务操作2.任务分析①确定TMOD控制字:采用AT89C51的定时器1方式0定时,TMOD=0x00②计算计数器的计数初值:因为方式0采用13位计数器,其最大定时时间为:8192×1ms=8.192ms,可选择定时时间为5ms,再循环200次就可以定时为1s了。X=213-T/(时钟周期×12)=0110001100011000B=0x6318所以TH1赋值0x63,TL1赋值0x18。注意:定时/计数器的方式0为13位计数器,其不用的是低8位中的高三位,一般补三个0。3.任务设计(1)硬件原理图设计(2)软件程序设计#includeAT89X51.hvoidsTime()//定时1s子程序{unsignedinti;TMOD=0x00;//设定时器1为方式0TH1=0x63;//置定时器初值TL1=0x18;TR1=1;//启动T1for(i=0;i=200;){if(TF1==1)//查询计数溢出{i++;TF1=0;TH1=0x63;//重新置定时器初值TL1=0x18;}}return;}//发光二极管定时1s闪烁主程序voidmain(){for(;;){P1_0=!P1_0;//取反P1.0使发光二极管闪烁sTime();//调用1s定时}}方式1—16位方式16位计数,由TL0作为低8位、TH0作为高8位。16位计数,由TL1作为低8位、TH1作为高8位。TF0T0TR0GATEINT01≥1&C/T=1C/T=0振荡器1/12TL0TH08位低8位16位计数器定时器计数器5.1.2.2用定时/计数器的工作方式1设计定时器定时=(216-X)×时钟周期×12=(216–X)*12*1/fosc计数初值:X=216-T/(时钟周期×12)定时/计数器工作方式1X的低8位送TL0(TL1),高8位送TH0(TH1)。定时方式:计数方式:计数次数值N=216-X计数初值:X=216-计数次数值N1.任务要求本任务要求用AT89C51的定时器0方式1设计一只1秒的定时器,使AT89C51的P0和P2端口控制的2组16只LED流水灯定时1秒滚动点亮。2.任务分析①确定TMOD控制字:采用AT89C51的定时器0方式1定时,TMOD=0x01。②计算计数器的计数初值:因为方式1采用16位计数器,其最大定时时间为:65536×1ms=65.536ms,可选择定时时间为5ms,再循环200次就可以定时为1s了。X=216-T/(时钟周期×12)=65536-50000=15536=0x6318所以TH1赋值0x63,TL1赋值0x18。TH0=(65536-40000)/256;TL0=(65536-40000)%256;3.任务设计1571234568910111213141616115214313412511610789XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D1R2280D2R3280D3R4280D4R5280D5R6280D6R7280D7R8280D8R9280R10280R11280R12280R13280R14280R15280R16280R17280C122pFC222pFC310uFX112MR110kD9D10D11D12D13D14D15D16(1)硬件原理图设计(2)软件程序设计#includeAT89X51.h#includeintrins.h#defineucharunsignedchar//流水灯定时1s滚动主程序voidmain(){ucharT_Count=0;//累加计数溢出发生的次数P0=0xFE;//点亮D1灯P2=0xFE;//点亮D16灯TMOD=0x01;//定时器0工作于方式1TH0=(65536-50000)/256;//50ms定时初值TL0=(65536-50000)%256;TR0=1;//启动定时器while(1){if(TF0==1)//定时溢出标志位为1时表示计时溢出{TF0=0;//软件清零TH0=(65536-50000)/256;//重置50ms定时TL0=(65536-50000)%256;if(++T_Count==20)//50*20=1000ms后LED滚动一次{P0=_crol_(P0,1);P2=_crol_(P2,1);T_Count=0;}}}}方式2—8位自动装入时间常数方式TF0振荡器1/121≥1&T0TR0GATEINT0C/T=0C/T=1TL0TH0自动重装初值的8位计数方式,适合于用作较精确的脉冲信号发生器。TH0(TH1)中保留初值5.1.2.3用定时/计数器的工作方式2设计定时器定时=(28-X)×时钟周期×12=(28–X)*12*1/fosc计数初值:X=28-T/(时钟周期×12)定时/计数器工作方式1初值X分别送给TL0(TL1)和TH0(TH1)。定时方式:计数方式:计数次数值N=28-X计数初值:X=28-计数次数值N1.任务要求本任务要求用AT89C51的定时器1方式2设计一只1秒的定时器,用定时器的查询方式,使AT89C51控制的一只发光二极管定时1秒闪烁。2.任务分析①确定TMOD控制字:采用AT89C51的定时器1方式2定时,TMOD=0x20。②计算计数器的计数初值:方式2采用8位计数器,其最大定时时间为:256×1ms=256ms,可选择定时时间为250ms,再循环4000次就可以定时为1s。X=28-计数值=256-250=6=0x06所以TH1赋值0x06,TL1也赋值0x06。3.任务设计(1)硬件原理图设计(2)软件程序设计#includeAT89X51.hvoidsTime(){unsignedinti;TMOD=0x20;//设定时器1为方式2TH1=0x06;//置定时器初值TL1=0x06;TR1=1;//启动T0for(i=0;i=4000;){if(TF1==1)//查询计数溢出{i++;TF1=0;}}return;}//发光二极管定时1s闪烁主程序voidmain(){while(1){P1_0=!P1_0;//取反P1.0使发光二极管闪烁sTime();//调用1s定时}}5.1

1 / 65
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功