第6章单片机原理_第1页
第6章单片机原理_第2页
第6章单片机原理_第3页
第6章单片机原理_第4页
第6章单片机原理_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 单片机的定时器/计数器,6.1 定时/计数器的结构与工作原理 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,6.1 定时/计数器的结构与工作原理 6.1.1 定时/计数器的基本原理 6.1.2 定时/计数器的结构 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,第6章单片机的定时器/计数器,纯软件定时/计数方法: 定时空循环预定周次,等待预定时间 计数读取I/O口电平,统计变化次数,基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。,delay(unsigned int time ) unsi

2、gned int j = 0; for(;time0;time-) for(j=0;j125;j+); ,存在问题:占用过多CPU机时,第6章单片机的定时器/计数器,单片机软硬件联合定时/计数方法:,定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数.,第6章单片机的定时器/计数器,计数器溢出空间 = 计数器最大空间 - 计数初值,定时时间t = (计数器最大空间 - 计数初值)机器周期 =(2n-a)12/fosc (s),基本工作原理:,t与n、a、fosc三个因素有关,(12分频 = 1个机器周期1个计数脉冲),第6章单片机的定时器/计数器,逻辑开关: = 0定时器方式,

3、= 1计数器方式,查询 /中断,第6章单片机的定时器/计数器,定数计数值 N = (计数器最大空间 - 计数初值) = (2 n a ),N与n、a两个因素有关,查询 /中断,6.1 定时/计数器的结构与工作原理 6.1.1 定时/计数器的基本原理 6.1.2 定时/计数器的结构 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,第6章单片机的定时器/计数器,51单片机定时/计数器的结构,第6章单片机的定时器/计数器,2个16位计数器T0 (TH0、TL0)和T1 (TH1、TL1)加1计数器 2个8位控制寄存器TCON和TMOD管理计数器的运行,2个外部

4、引脚T0(P3.4)和T1(P3.5)接入外部脉冲,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,第6章单片机的定时器/计数器,定时/计数器的控制关系(以T1为例),门控位 GATE=0允许TR1启动计数器 GATE=1允许INT1启动计数器,启动控制位 TR1=1启动计数器 TR1=0停止计数器,外部中断1 参与定时器的启停管理,中断请求标志位 TF1=1请求中断 TR1=0没有中断,T1,第6章单片机的定时器/计数器,fosc,TCON,TMOD,查询 /中断,注意,系统上电默认值为TCON = 0,则

5、默认状态应为:,TR0和TR1均为关闭状态、电平触发方式、没有0 # 3#中断请求,第6章单片机的定时器/计数器,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,第6章单片机的定时器/计数器,第6章单片机的定时器/计数器,T0有4种工作方式,T1有3种工作方式,每种工作方式都有定时和计数2种方式,故共有14种组合关系。,注意:TMOD只能以字节方式进行初始化,例如,设置T0为定时方式1,允许TR0启动; T1为计数方式0,允许INT1启动。,则

6、 TMOD = 1100 0001B =0 xc1,又如,系统上电默认值为TMOD = 0,则默认状态应为:,T0和TI均为定时方式0,允许TR0、TR1启动。,第6章单片机的定时器/计数器,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,第6章单片机的定时器/计数器,第6章单片机的定时器/计数器,T0,注意: T1只有3种工作方式(T0的方式3中占用了T1的部分资源)。,T1,学习顺序:方式1方式2 方式0 方式3,(1) 方式1,定时时间:t = (216- a)12/fosc (s),使用16位定时/计

7、数器(n=16,THx+TLx),(M0 M1为01组合时),第6章单片机的定时器/计数器,定时范围为165,536 s(65ms)。,最大定时时间(a=0,fosc =12MHz):t = 216(s) = 65536 (s),计数初值:a = 216- tfosc/12,最大计数值:N = 65536 (脉冲),第6章单片机的定时器/计数器,定数计数值: N = (216 a ),由于检测一个负跳变需要2个机器周期,即24个振荡周期,最高计数频率= 。,计数方式,当fosc=12MHz时,外部脉冲的最大允许频率为0.5MHz 。,fosc,查询 /中断,实例1 设单片机的fosc=12MH

8、z,采用T1定时方式1在P2.0脚上输出周期为2ms的方波。,虚拟示波器,第6章单片机的定时器/计数器,分析:周期为2ms的方波由2个半周期为1ms的正负脉冲组成,方波输出原理:定时1ms后将端口输出电平取反。,TH1 = 0 xfc TL1 = 0 x18,1ms定时的计数初值应为: a = 216 t* fos / 12 = 216 1000* 12/ 12 = 64536 = 0 xfc18,注意:需要不断重装计数初值。,第6章单片机的定时器/计数器,查询 / 中断,(1)查询方式 #include sbit P2_0 = P20; main () TMOD = 0 x10; /设置T1

9、定时方式1(0001 0000B) TR1=1; /启动T0 for(;) TH1 = 0 xfc; /装载计数初值 TL1 = 0 x18; do while(!TF1); /等待TF1溢出 P2_0 =!P2_0; /定时时间到P2.0反相 TF1 = 0; /TF1标志清0 ,T0,第6章单片机的定时器/计数器,实例1仿真运行效果,第6章单片机的定时器/计数器,(2)中断方式 #include sbit P2_0=P20; timer0 () interrupt 3 /T1中断函数 P2_0 = !P2_0; /P2.0取反 TH1 = 0 xfc; /装载计数初值 TL1 = 0 x1

10、8; main () TMOD = 0 x10; /T1定时方式1 TH1 = 0 xfc; /装载计数初值 TL1 = 0 x18; EA=1; /开总中断 ET1=1; /开T1中断 TR1=1; /启动T1 while(1); ,注意:中断响应后系统可自动将TFx标志位清0,第6章单片机的定时器/计数器,小结:使用定时/计数器的步骤,强调:TMOD的设置只能以字节形式给出,T0,(1)设置TMOD确定定时/计数器的工作状态,使用T0还是T1? 采用定时模式还是计数模式? 采用工作方式0、方式1、方式2、方式3?,第6章单片机的定时器/计数器,(2)计算计数初值产生期望的定时/定数间隔,定

11、时计数初值 a = 216- tfosc/12 (t 65536 s, fosc=12MHz时),THx = a / 256 TLx = a / % 256,装载计数初值:,第6章单片机的定时器/计数器,定数计数初值 a = 216- N (N65536, 脉冲频率0.5MHz,fosc=12MHz时),3)确定采用何种方式处理溢出结果,若是查询方式采用条件判断语句,若是中断方式中断初始化设置和中断服务程序:,do while (!TFx) ; / x=0或1 ,第6章单片机的定时器/计数器,ETx =1; /开定时x中断,x=0或1 EA = 1; /开总中断 tx_srv () inter

12、rupt n /n=1或3 ,4)启动定时器: TR0 = 1 或 TR1= 1,5)进行定时或计数结束后的其它工作,6)为下次定时/计数做准备(清TFx标志+重装载计数初值) 若是中断方式,则无需软件清TFx标志位; 若是查询方式,需要软件清除TFx标志位。,第6章单片机的定时器/计数器,采用8位计数器,TLx 可自动重装载计数初值(TLx溢出后, THxTLx); 没有装载计数初值的延误,方式2定时精度相对较高; 延时时间 t = (28-a)12/fosc (微秒) 12MHz时的最大定时量为256s;,(2) 方式2,第6章单片机的定时器/计数器,查询 /中断,fosc,(1)查询方式

13、 #include sbit P2_0 = P20; main() TMOD = 0 x02; TH0= TL0 = 0 x06; TR0=1; for(;) do while(!TF0); P2_0 =!P2_0; TF0 = 0; ,(2)中断方式 #include sbit P2_0=P20; timer0 () interrupt 1 P2_0 = !P2_0; main() TMOD = 0 x02; TH0 = TL0 = 0 x06; EA= ET0 = 1; TR0=1; while(1); ,实例2 采用T0定时方式2在P2.0口输出周期为0.5ms的方波(设fosc=12M

14、Hz)。,分析:计数初值TL0= (256-250)*12/12)%256 = 0 x06,TMOD = 0 x02,第6章单片机的定时器/计数器,实例2仿真运行效果,第6章单片机的定时器/计数器,第6章单片机的定时器/计数器,实例3 改进 “计数显示器” 的按键查询检测法,改用T0计数方式2 + 中断法实现原有功能。,【解】电路改造:按键由P3.7改为P3.4(T0)接入。,第6章单片机的定时器/计数器,分析:T0计数方式2的初始化;定数计数N=1时的初值计算;T0中断初始化。 T0计数方式2:TMOD = 0000 0110B = 0 x06 计数初值: a = 2 8 1 = 255 =

15、 0 xff T0中断初始化:ET0 = EA = 1,第6章单片机的定时器/计数器,实例3参考程序,第6章单片机的定时器/计数器,实例3运行效果,(3)工作方式0 使用13位的定时/计数器(THx7-0+TLx4-0),定时时间 t = (213 - a)12/fosc (s),计数初值 a = 213 - tfosc/12,12MHz时的最大定时量t=213s = 8.192ms,第6章单片机的定时器/计数器,解:计数初值a=213-500012/12=3192= 1100 0111 1000B,实例4 计算T0方式0定时5ms的计数初值a(设fosc=12MHz),由于方式0的TL0高3

16、位未用(一般填0) ,因此 a= 0110 0011 0001 1000 = 6318H,即,TH0 = 0 x63; TL0 = 0 x18;,第6章单片机的定时器/计数器,第6章单片机的定时器/计数器,除计数器位数不同外,方式0与方式1的逻辑结构并无差异。 方式0采用13位计数器是为了与早期产品MCS-48单片机兼容。 方式0的初值计算比较麻烦,一般采用方式1替代。,方式0,方式1,查询/中断,查询/中断,fosc,fosc,(4)方式3(仅有T0),通常设定为定时方式2(串行通信的波特率发生器),第6章单片机的定时器/计数器,TH0+TF1+TR1组成的8位定时器(方式2但无重装载功能)

17、 TL0+TF0+TR0组成的8位定时/计数器(方式2但无重装载功能) T1组成的无中断标志位的定时/计数器(方式0方式2) 特点:方式3下T0可有2个具有查询/中断功能的8位定时器 外加1个没有查询/中断功能的T1定时/计数器,查询 /中断,查询 /中断,fosc,fosc,6.1 定时/计数器的结构与工作原理 6.2 定时器/计数器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用,第6章单片机的定时器/计数器,应用: 定时器用于定时控制,或作为分频器发生各种不同频率的方波; 计数器用于外部脉冲统计或外部中断源扩充; 复杂应用需要将定时与计数结合起来。,第6章单片机的

18、定时器/计数器,实例5 由P3.4口输入一个低频窄脉冲信号。当该信号出现负跳变时,由P3.0口输出宽度为500s的同步脉冲,如此往复。要求据此设计一个波形展宽程序(fosc= 6MHz)。,第6章单片机的定时器/计数器,500s,500s,1)将T0设置为1次计数方式2,初值设为0 xff。这样P3.4一旦发生负跳变T0就会产生溢出; 2)查询TF0标志位。当TF0=1时将T0设置为500s定时方式2,初值a为0 x06(=256-5006/12),同时使P3.0输出低电平; 3)查询TF0标志位。待T0再次溢出后使P3.0输出高电平,然后将T0设置为1次计数方式2,如此往复进行。,分析:可以

19、采取如下做法:,第6章单片机的定时器/计数器,T0,实例5参考程序,第6章单片机的定时器/计数器,实例5仿真运行效果,第6章单片机的定时器/计数器,P3.0,P3.4,实例6 采用10MHz晶振,在P2.0脚上输出周期为2.5s,高电平占空比为20%的脉冲信号。,分析:10兆晶振,方式1最大定时为54.613ms; 定时中断与软件计数联合法:利用定时中断进行中断次数统计; 若取10ms产生定时,则2.5s =250次中断之和; 则0.5ms(20%占空比)相当于50次中断之和。,a = 216-1000012/10=0 xd120,第6章单片机的定时器/计数器,实例6参考程序,第6章单片机的定

20、时器/计数器,实例6仿真运行效果,第6章单片机的定时器/计数器,实例7 采用定时中断控制流水灯,实现每秒1位,自上而下循环功能(fosc=12MHz)。,第6章单片机的定时器/计数器,分析:可以利用20次50ms的定时中断方案,计数初值为:,a = 65536-5000012/12 = 0 x3cb0,第6章单片机的定时器/计数器,问题:中断函数内任务过多,不利于实时控制。,新方案:中断函数中仅做中断次数统计和计数初值重入,控制操作改在主函数中进行。,仿照实例6做法,可以采用如下中断函数:,第6章单片机的定时器/计数器,实例7参考程序,实例7运行效果,第6章单片机的定时器/计数器,实例8 测量

21、从P3.2(INT0)输入的正脉冲的宽度,测量结果以BCD码形式存放在片内RAM 40H开始的单元处(设40H地址存放个位,系统时钟为12MHz,被测脉冲信号周期不超过100ms) 。,第6章单片机的定时器/计数器,分析:GATE=TR0=1时允许INT0的脉冲控制定时器的启停,则根据T0先启动、再关闭后的计数值可算出被测脉冲宽度。,实例8参考程序,第6章单片机的定时器/计数器,T0,第6章单片机的定时器/计数器,实例8电路,脉冲设置(100ms),第6章单片机的定时器/计数器,在Proteus软件中实现C51源码级调试的方法: 形成OMF (absolute objectmodule format files,绝对目标文件) 格式文件。,omf文件加载,第6章单片机的定时器/计数器,启动调试,omf文件窗口,第6章单片机的定时器/计数器,片内RAM窗口,实例8的运行结果,第6章单片机的定时器/计数器,结果:计数值为50000脉冲脉宽值为50ms。,实例8的运行结果,第6章单片机的定时器/计数器,视频,实例8小结 1、测量未知脉冲宽度的方法利用INTx引脚接入待测脉冲设置Tx定时方式 THx和TLx清零利用查询语句辅助计时用Tx计数值计算脉宽值; 2、C51中进行存储器操作的方法定义指针变量并赋地址值按指针变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论