




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子工业出版社,单片机控制技术项目式教程(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,计数模式,对外部事件脉冲计数计数脉冲周期要大于2Tcy,TMOD中,各有一个控制位(CT),分别用于控制定时/计数器T0和T1工作在定时器方式还是计数器方式。,计数值:溢出时计数器值计数初值。,计数器全1时,再输入1个脉冲就回零,并发生溢出(TCON中TF0或TF1置1),发中断请求。,计数器脉冲来源:,振荡器脉冲经过12分频T0或T1引脚的外部脉冲,1.工作方式控制寄存器TMOD,T1控制,T0控制,GATE门控位,M1M0工作方式选择,5.1.1.3时/计数器的初始化,注意:不能进行位寻址,定时/计数器的工作方式,2.定时器控制寄存器TCON,中断请求标志,触发方式选择,启动定时/计数器,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/TM1M00001000010H,main()函数中:TMOD=0 x01;/设置定时器0为工作方式1TH0=0 xFE;/定时器0高8位给初值TL0=0 xC0;/定时器0低8位给初值EA=1;/开总中断ET0=1;/开定时器0中断TR0=1;/启动定时器0,初始化程序编写,中断服务程序中重新装入定时初值,voidtimer0()interrupt1TH0=0 xFE;/定时器0高8位给初值TL0=0 xC0;/定时器0低8位给初值,计数脉冲输入,方式013位方式。由TL0的低5位和TH0的8位组成。TH0溢出时,置位TF0标志,向CPU发出中断请求。,T0,C/T=1,C/T=0,13位计数器,定时器,计数器,5.1.2用单片机定时/计数器设计定时器(查询方式),5.1.2.1用定时/计数器的工作方式0设计定时器,定时=(213X)时钟周期12=(213X)*12*1/fosc,计数初值:X213T(时钟周期12),定时/计数器工作方式0,定时方式:,例:8*10-3=(213-X)*12*1/(12*106)X=2138000=192=0 xC0,计数方式:,计数次数值213X,计数初值:X213计数次数值,注意:X的低5位送TL0(TL1),TL0(TL1)的高3位数为任意值,常取0,高8位送TH0(TH1)。,1任务要求本任务要求用AT89C51的定时器1,方式0设计一只1秒的定时器,用定时器的查询方式,使AT89C51控制的一只发光二极管定时1秒闪烁。,任务操作,2任务分析,确定TMOD控制字:采用AT89C51的定时器1方式0定时,TMOD=0 x00,计算计数器的计数初值:因为方式0采用13位计数器,其最大定时时间为:81921ms=8.192ms,可选择定时时间为5ms,再循环200次就可以定时为1s了。,X213T(时钟周期12),0110001100011000B=0 x6318,所以TH1赋值0 x63,TL1赋值0 x18。,注意:定时/计数器的方式0为13位计数器,其不用的是低8位中的高三位,一般补三个0。,3.任务设计,(1)硬件原理图设计,(2)软件程序设计,#includevoidsTime()/定时1s子程序unsignedinti;TMOD=0 x00;/设定时器1为方式0TH1=0 x63;/置定时器初值TL1=0 x18;TR1=1;/启动T1for(i=0;i=200;)if(TF1=1)/查询计数溢出i+;TF1=0;TH1=0 x63;/重新置定时器初值TL1=0 x18;return;,/发光二极管定时1s闪烁主程序voidmain()for(;)P1_0=!P1_0;/取反P1.0使发光二极管闪烁sTime();/调用1s定时,方式116位方式,16位计数,由TL0作为低8位、TH0作为高8位。16位计数,由TL1作为低8位、TH1作为高8位。,T0,C/T=1,C/T=0,16位计数器,定时器,计数器,5.1.2.2用定时/计数器的工作方式1设计定时器,定时=(216X)时钟周期12=(216X)*12*1/fosc,计数初值:X216T(时钟周期12),定时/计数器工作方式1,X的低8位送TL0(TL1),高8位送TH0(TH1)。,定时方式:,计数方式:,计数次数值216X,计数初值:X216计数次数值,1任务要求本任务要求用AT89C51的定时器0方式1设计一只1秒的定时器,使AT89C51的P0和P2端口控制的2组16只LED流水灯定时1秒滚动点亮。,2任务分析,确定TMOD控制字:采用AT89C51的定时器0方式1定时,TMOD=0 x01。,计算计数器的计数初值:因为方式1采用16位计数器,其最大定时时间为:655361ms=65.536ms,可选择定时时间为5ms,再循环200次就可以定时为1s了。,X=216T(时钟周期12),=65536-50000=15536=0 x6318,所以TH1赋值0 x63,TL1赋值0 x18。,TH0=(65536-40000)/256;TL0=(65536-40000)%256;,3.任务设计,(1)硬件原理图设计,(2)软件程序设计,#include#include#defineucharunsignedchar/流水灯定时1s滚动主程序voidmain()ucharT_Count=0;/累加计数溢出发生的次数P0=0 xFE;/点亮D1灯P2=0 xFE;/点亮D16灯TMOD=0 x01;/定时器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;,方式28位自动装入时间常数方式,自动重装初值的8位计数方式,适合于用作较精确的脉冲信号发生器。,TH0(TH1)中保留初值,5.1.2.3用定时/计数器的工作方式2设计定时器,定时=(28X)时钟周期12=(28X)*12*1/fosc,计数初值:X28T(时钟周期12),定时/计数器工作方式1,初值X分别送给TL0(TL1)和TH0(TH1)。,定时方式:,计数方式:,计数次数值28X,计数初值:X28计数次数值,1任务要求本任务要求用AT89C51的定时器1方式2设计一只1秒的定时器,用定时器的查询方式,使AT89C51控制的一只发光二极管定时1秒闪烁。,2任务分析,确定TMOD控制字:采用AT89C51的定时器1方式2定时,TMOD=0 x20。,计算计数器的计数初值:方式2采用8位计数器,其最大定时时间为:2561ms=256s,可选择定时时间为250s,再循环4000次就可以定时为1s。,X=28计数值,=256-250=6=0 x06,所以TH1赋值0 x06,TL1也赋值0 x06。,3.任务设计,(1)硬件原理图设计,(2)软件程序设计,#includevoidsTime()unsignedinti;TMOD=0 x20;/设定时器1为方式2TH1=0 x06;/置定时器初值TL1=0 x06;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.2.4用定时/计数器的工作方式3设计定时器,方式32个8位方式,T0工作方式3结构图,T0工作方式3时T1的结构图,仅T0可以工作在方式3,T1处于方式3时停止计数。此时T0分成2个独立的计数器TL0和TH0,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。(1)TH0由TR1启动/停止,TF1标志溢出(2)TL0由TR0启动/停止,TF0标志溢出(3)TH0只能定时,TL0可以定时/计数,且都是8位定时T=(28)*12foscTL0计数初值28,1任务要求本任务要求用AT89C51的定时器1方式3设计一只1秒的定时器,用定时器的查询方式,使AT89C51控制的一只发光二极管定时1秒闪烁。,2任务分析,确定TMOD控制字:因为采用AT89C51的定时器0方式3定时,这里采用TL0和TH0结合使用的方法,让TL0工作在计数方式,故TMOD=0 x07。,当TH0计满溢出后,用软件复位的方法使T0(P3.4)引脚产生负跳变,TH0每溢出一次,T0引脚便产生一个负跳变,TL0便计数一次。TL0计满溢出时,延时时间应为50ms,循环20次便可得到1s的延时。,计算计数器的计数初值:方式3中定时器0中的TH0只能作为定时器,TH0是8位计数器,其最大定时时间为:2561us=256s,可选择定时时间为250us。这样TH0的初值为X=(256-250)=6=0 x06TL0设置为计数器,TL0是8位计数器,其最大计数值为256,可选择计数值为200。这样TL0计数初值为X=M计数值=256-200=56=0 x38所以TL0赋值0 x38,TH0赋值0 x06。,3.任务设计,(1)硬件原理图设计,(2)软件程序设计,#include/定时1s子程序voidsTime()unsignedinti;TMOD=0 x07;/置定时器0为方式3计数TH0=0 x06;/置TH0初值TL0=0 x38;/置TL0初值TR0=1;/启动TL0TR1=1;/启动TH0,for(i=0;i=20;)if(TF0=0)/在TL0没有溢出时if(TF1=1)/查询TH0计数溢出TF1=0;TH0=0 x06;/重置TH0初值P3_4=0;/T0引脚产生负跳变P3_4=0;/负跳变持续P3_4=1;/T0引脚恢复高电平continue;TF0=0;i+;TL0=0 x38;/重置TL0初值return;,/发光二极管定时1s闪烁主程序voidmain()while(1)P1_0=!P1_0;/取反P1.0使发光二极管闪烁sTime();/调用1s定时,设计数器最大计数值为M,选择不同的工作方式最大计数值不同。(如12MHZ)方式0:M=213=8192,8.192ms方式1:M=216=65536,65.536ms方式2:M=28=256,256us方式3:M=28=256,256us,任务5.2脉冲计数器的设计,1任务要求要求用AT89C51设计一个计数范围为099的脉冲计数器,也就是用AT89C51的定时/计数器采样计数外部按键输送的脉冲信号,并用数码管将计数的数值显示出来。,2任务分析,设置T0为计数方式,计数外部的脉冲,工作在方式2,所以TMOD=0 x06。,确定TMOD控制字:,方式2的最大计数值为256,如果把初值设置为255,当P3.4管脚接收到一个由高到低的下跳变时,计数值加1溢出,查询到TF0=1后,就将显示的计数值加1,实现脉冲计数器计数。这样将TL0的初值设置为X=(256-1)=255=0 xFF将TL0=0 xFF,TH0=0 xFF,每次溢出后TH0自动将初值装入TL0。,计算计数器的计数初值:,3任务设计,(1)硬件原理图设计,(2)软件程序设计,#include/数码管段码定义unsignedcharcodeDSY_CODE=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x00,;unsignedcharcount=0;voidmain()P0=DSY_CODE0;P2=DSY_CODE0;TMOD=0 x06;/置定时器0为方式2计数TH0=0 xFF;/置TH0初值TL0=0 xFF;/置TL0初值TR0=1;/启动TL0计数,while(1)if(TF0=1)/查询TF0是否为1TF0=0;/TF0清零count=(count+1)%100;/计数值控制在100以内P0=DSY_CODEcount/10;/显示计数值高位P2=DSY_CODEcount%10;/显示计数值低位if(P3_2=0)/查询到P3.2上有低电平count=0;/计数值清零P0=DSY_CODE0;/显示清零P2=DSY_CODE0;/显示清零,项目拓展实验板分频器的设计,实验板采用的是STC89C52单片机,如附录2中“单片机与扩展插座”电路所示。我们要在P1.0P1.7端口上产生不同频率的方波,周期分别为1ms、2ms、4ms、8ms、16ms、32ms、64ms、128ms,就相当于实现了不同级别的分频。,1任务要求,2任务分析,首先,我们用STC89C52的定时/计数器来设置时间,选用T0的方式1第一个方波周期是1ms,方波周期的一半是500us,单片机外围的晶体采用的是12MHz,其机器周期是1us,所以每轮计数500次就可以达到500us,这样初值为(65536500),高8位送TH0,低8位送TL0。,确定TMOD控制字和计算计数器的计数初值:,分频器源程序如下:,#include/T0定时500us子程序voidTimer0()TMOD=0 x01;/使用模式1,16位定时器,TH0=(65536-500)/256;/赋初值,12MHz晶振,/机器周期1us,/500 x2=1ms方波TL0=(65536-500)%256;TR0=1;/定时器开关打开,/主程序main()staticunsignedchari;/i的范围0255while(1)i+;P1=i;/P1口8路输出不同频率,相当于一个分频器,/用示波器测量;P1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鼻炎促销活动方案
- 财富公司年会策划方案
- 古文翻译考试题及答案
- 各省自考试题及答案
- 高效记忆考试题及答案
- 幼儿园教学教案设计:安全用胶带
- 关于节日的风俗民情记事作文13篇
- 飞行训练考试题及答案
- 售后服务客户满意度调查表多维度评价版
- 对口工艺考试题及答案
- 2025年人社局编外考试题库及答案
- 木制品厂安全生产培训课件
- 乡镇人大主席“干在实处、走在前列”学习讨论发言材料
- 电工四级考试理论题库及答案
- 世纪英才教程课件
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 婴幼儿发展引导员技能竞赛考试题库(含答案)
- 小学生航空航天知识题库及答案
- 统编版八年级上册道德与法治第三课 共建网络美好家园 课件
- 【里斯】年轻一代新能源汽车消费洞察与预测 -新物种 新理念 新趋势(2024-2025)
- 企业数据安全管理制度与操作规程
评论
0/150
提交评论