单片机原理及接口技术(C51编程)07课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《单片机原理及接口技术(C51编程)07课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 C51 编程 07 课件
- 资源描述:
-
1、第7章定时器/计数器的工作原理及应用 单片机原理及接口技术(C51编程)(第2版)目 录CONTENTS7.1 定时器/计数器的结构7.2 定时器/计数器的4种工作方式7.3 对外部输入的计数信号的要求7.4 定时器/计数器的编程和应用7.5 AT89S52新增定时器/计数器T2简介7.1 定时器/计数器的结构AT89S51定时器/计数器结构见图7-1,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。图7-1 定时器/计数器结构框图7.1 定时器/计数器的结构T0、T1都有定时器和计数器两种工作模式,两种模式实质都是对脉冲信号进行计数,只不过计数信
2、号来源不同。计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数(见图7-1);定时器模式是对系统时钟信号经12分频后的内部脉冲信号(机器周期)计数。由于系统时钟频率是定值,可根据计数值计算出定时时间。两个定时器/计数器属于增1计数器,即每计一个脉冲,计数器增1。7.1 定时器/计数器的结构T0、T1具有4种工作方式(方式0、1、2和3)。图 7-1特殊功能寄存器TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式。特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1状态。计数器起始计数从初值开始。单片机复位时计数器初值为0,也可给
3、计数器装入1个新的初值。7.1.1 工作方式控制寄存器TMODTMOD用于选择定时器/计数器的工作模式和工作方式,字节地址为89H,不能位寻址,格式见图7-2。图7-2 寄存器TMOD格式 8位分两组,高4位控制T1,低4位控制T0。TMOD各位说明如下。7.1.1 工作方式控制寄存器TMOD(1)GATE门控位GATE=0,定时器是否计数,由控制位TRx(x=0,1)来控制。GATE=1,定时器是否计数,由外中断引脚INTx*上的电平与运行控制位TRx共同控制。7.1.1 工作方式控制寄存器TMOD(2)M1、M0工作方式选择位M1、M0 4种编码,对应于4种工作方式的选择,见表7-1。表7
4、-1M1、M0工作方式选择7.1.1 工作方式控制寄存器TMOD(3)C/T*计数器模式和定时器模式选择位u C/T*=0,定时器模式,对系统时钟12分频后的脉冲 进行计数。u C/T*=1,计数器模式,计数器对外部输入引脚T0 (P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。7.1.2 定时器/计数器控制寄存器TCONTCON字节地址88H,位地址为88H8FH。格式见图7-3。图7-3 TCON格式7.1.2 定时器/计数器控制寄存器TCON第6章已介绍与外中断有关的低4位。这里仅介绍高4位功能。(1)TF1、TF0计数溢出标志位当计数器计数溢出时,该位置“1”。使用查询方式时,此
5、位可供CPU查询,但应注意查询后,用软件及时将该位清“0”。使用中断方式时,作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0计数运行控制位TR1位(或TR0)=1,启动计数器计数的必要条件。TR1位(或TR0)=0,停止计数器计数。该位可由软件置“1”或清“0”。目 录CONTENTS7.1 定时器/计数器的结构7.2 定时器/计数器的4种工作方式7.3 对外部输入的计数信号的要求7.4 定时器/计数器的编程和应用7.5 AT89S52新增定时器/计数器T2简介7.2.1 方式0当M1、M0=00,设置为方式0,定时器/计数器等效逻辑结构见图7-4(以T1为例,T
6、MOD.5、TMOD.4=00)。图7-4 定时器/计数器方式0的逻辑结构框图7.2.1 方式0方式0为13位计数器,由TLx(x=0,1)的低5位和THx的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志位TFx置“1”。图7-2中,C/T*位控制电子开关决定2种工作模式。C/T*=0,电子开关打在上面,T1(或T0)为定时器工作模式,系统时钟12分频后的脉冲作为计数信号。C/T*=1,电子开关打在下面,T1(或T0)为计数器工作模式,对P3.5(或P3.4)引脚上的外部输入脉冲计数,当引脚上发生负跳变时,计数器加1。7.2.1 方式0GATE位状态决定定时
7、器/计数器运行控制取决于TRx一个条件,还是取决于TRx和INTx*引脚状态两个条件。GATE=0时,A点(见图7-4)电位恒为1,B点电位仅取决于TRx状态。TRx=1,B点为高电平,控制端控制电子开关闭合,允许T1(或T0)对脉冲计数。TRx=0,B点为低电平,电子开关断开,禁止T1(或T0)计数。GATE=1时,B点电位由INTx*(x=0,1)的电平和TRx的状态两个条件来确定。当TRx=1,且INTx*=1时,B点才为1,电子开关闭合,允许T1(或T0)计数。故这种情况下计数器是否计数是由TRx和INTx*两个条件来共同控制的。7.2.2 方式1当M1、M0=01时,工作于方式1,等
8、效电路逻辑结构见图7-5。图7-5 方式1的逻辑结构框图7.2.2 方式1方式1和方式0差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x=0,1),方式0则为13位计数器,有关控制状态位含义(GATE、C/T*、TFx、TRx)与方式0相同。7.2.3 方式2方式0和方式1最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题,这会影响定时精度,方式2就是为解决此问题而设置的。当M1、M0=10时,工作方式2,等效逻辑结构见图7-6(以T1为例,x=1)。7.2.3 方式2图7-6 方式2逻辑结构框图7.2.
9、3 方式2图7-7 方式2工作过程工作方式2为自动恢复初值(初值自动装入)的8位定时器/计数器,TLx(x=0,1)作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1”的同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。定时器/计数器方式2工作过程见图7-7。7.2.3 方式2方式2可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可相当精确地定时。7.2.4 方式31工作方式3下的T0当TMOD的低2位为11时,T0被选为方式3,各引脚与T0的逻辑关系见图7-8。T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/T*、GATE、
10、TR0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1,同时占用定时器T1的中断请求源TF1。7.2.4 方式32T0工作在方式3时T1的各种工作方式一般情况下,当T1用作串口波特率发生器时,T0才工作在方式3。T0方式3时,T1可为方式0、1、2,作为串口波特率发生器,或不需要中断的场合。7.2.4 方式32T0工作在方式3时T1的各种工作方式 图7-8 T0方式3的逻辑结构框图7.2.4 方式32T0工作在方式3时T1的各种工作方式(1)T1工作在方式0T1的控制字中M1、M0=00时,T1工作在方式0,工作示意图如图7-9所示。图7-9 T0方
11、式3时T1为方式0工作示意图7.2.4 方式32T0工作在方式3时T1的各种工作方式(2)T1工作在方式1当T1的控制字中M1、M0=01时,T1工作在方式1,工作示意见图7-10。图7-10 T0方式3时T1为方式1工作示意图7.2.4 方式32T0工作在方式3时T1的各种工作方式(3)T1工作在方式2当T1控制字中M1、M0=10时,T1为方式2,工作示意如图7-11所示。图7-11 T0方式3时T1为方式2工作示意图7.2.4 方式32T0工作在方式3时T1的各种工作方式(4)T1设置在方式3T0方式3时,再把T1也设置成方式3,此时T1停止计数。目 录CONTENTS7.1 定时器/计
12、数器的结构7.2 定时器/计数器的4种工作方式7.3 对外部输入的计数信号的要求7.4 定时器/计数器的编程和应用7.5 AT89S52新增定时器/计数器T2简介7.3 对外部输入的计数信号的要求 计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生负跳变时,计数值增1。每个机器周期S5P2期间,都对外部输入引脚T0或T1进行采样。如在第1个机器周期中采得值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1期间,计数器加1。由于确认一次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率1/24。7.3 对外部输入的计
13、数信号的要求 如选用6MHz晶体,允许输入脉冲频率最高为250kHz。如选用12MHz频率晶体,则可输入最高频率500kHz外部脉冲。对外输入信号占空比没有限制,但为确保某一给定电平在变化前能被采样1次,则该电平至少保持1个机器周期。故对外部输入信号要求见图7-12,图中Tcy为机器周期。图7-12 对外部计数输入信号的要求目 录CONTENTS7.1 定时器/计数器的结构7.2 定时器/计数器的4种工作方式7.3 对外部输入的计数信号的要求7.4 定时器/计数器的编程和应用7.5 AT89S52新增定时器/计数器T2简介7.4.1 P1口控制8只LED每0.5s闪亮一次【例7-1】在AT89
14、S51的P1口上接有8只LED,原理电路见图7-13。采用T0方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。图7-13 方式1定时中断控制LED闪亮7.4.1 P1口控制8只LED每0.5s闪亮一次T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/T*=0,为定时器模式;对T0的运行控制仅由TR0来控制,应使相应的GATE位为0。定时器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0 x01。(1)设置TMOD寄存器7.4.1 P1口控制8只LED每0.5s闪亮一次设定时时间5ms(即5 000s),设T0计数初值为X,假设晶振的频率为11.0
15、59 2MHz,则定时时间为:(2)计算定时器T0的计数初值 定时时间=(216X)12/晶振频率 则 5 000=(216 X)12/11.059 2 得 X=60 928转换成十六进制:0 xee00,其中0 xee装入TH0,0 x00装入TL0。7.4.1 P1口控制8只LED每0.5s闪亮一次本例由于采用定时器T0中断,因此需将IE寄存器中的EA、ET0位置1。(3)设置IE寄存器(4)启动和停止定时器T0将定时器控制寄存器TCON中的TR0=1,则启动定时器T0;TR0=0,则停止定时器T0定时。7.4.1 P1口控制8只LED每0.5s闪亮一次参考程序:#includechar
16、i=100;void main()TMOD=0 x01;/定时器T0为方式1 TH0=0 xee;/设置定时器初值 TL0=0 x00;P1=0 x00;/P1口8个LED点亮 EA=1;/总中断开 ET0=1;/开T0中断 TR0=1;/启动T0 while(1);/循环等待;7.4.1 P1口控制8只LED每0.5s闪亮一次void timer0()interrupt 1/T0中断程序TH0=0 xee;/重新赋初值TL0=0 x00;i-;/循环次数减1if(i=0)P1=P1;/P1口按位取反i=100;/重置循环次数7.4.2 计数器的应用【例7-2】如图7-14,T1采用计数模式,
17、方式1中断,计数输入引脚T1(P3.5)上外接按钮开关,作为计数信号输入。按4次按钮开关后,P1口的8只LED闪烁不停。(1)设置TMOD寄存器T1工作在方式1,应使TMOD的M1、M0=01;设置C/T*=1,为计数器模式;对T0运行控制仅由TR0来控制,应使GATE0=0。定时器T0不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0 x50。7.4.2 计数器的应用(2)计算定时器T1的计数初值由于每按1次按钮开关,计数1次,按4次后,P1口的8只LED闪烁不停。因此计数器初值为65 5364=65 532,将其转换成十六进制后为0 xfffc,所以,TH0=0 xff,TL0=0
18、 xfc。7.4.2 计数器的应用图7-14 由外部计数输入信号控制LED的闪烁7.4.2 计数器的应用(3)设置IE寄存器本例由于采用T1中断,因此需将IE寄存器的EA、ET1位置1。(4)启动和停止定时器T1将寄存器TCON中TR1=1,则启动T1计数;TR1=0,则停止T1计数。7.4.2 计数器的应用参考程序如下:#include void Delay(unsigned int i)/定义延时函数Delay(),/i是形式参数,不能赋初值unsigned int j;for(;i0;i-)/变量i由实际参数传入一个值/因此i不能赋初值for(j=0;j125;j+);/空函数 7.4.
19、2 计数器的应用void main()/主函数 TMOD=0 x50;/设置定时器T1为方式1计数TH1=0 xff;/向TH1写入初值的高8位TL1=0 xfc;/向TL1写入初值的低8位EA=1;/总中断允许ET1=1;/定时器T1中断允许 TR1=1;/启动定时器T1 while(1);/无穷循环,等待计数中断 7.4.2 计数器的应用void T1_int(void)interrupt 3 /T1中断函数for(;)/无限循环 P1=0 xff;/8位LED全灭 Delay(500);/延时500ms P1=0;/8位LED全亮 Delay(500);/延时500ms 7.4.3 控制
20、P1.0产生周期为2ms的方波【例7-3】假设系统时钟为12MHz,设计电路并编写程序实现从P1.0引脚上输出一个周期为2ms的方波,见图7-15。要在P1.0上产生周期为2ms的方波,定时器应产生1ms的定时中断,定时时间到则在中断服务程序中对P1.0求反。使用定时器T0,方式1定时中断,GATE不起作用。本例的原理电路见图7-16。其中在P1.0引脚接有虚拟示波器,用来观察产生的周期2ms的方波。7.4.3 控制P1.0产生周期为2ms的方波图7-15 定时器控制P1.0输出一个周期2ms方波7.4.3 控制P1.0产生周期为2ms的方波图7-16 定时器控制P1.0输出周期2ms的方波的
21、原理电路7.4.3 控制P1.0产生周期为2ms的方波下面来计算T0初值X:设T0的初值为X,有 (216X)1106=1103即 65 536X=1 000得 X=64 536,化为16进制数就是0 xfc18。将高8位0 xfc装入TH0,低8位0 x18装入TL0。7.4.3 控制P1.0产生周期为2ms的方波参考程序如下:#include /头文件reg51.hsbit P1_0=P10;/定义特殊功能寄存器P1/的位变量P1_0void main(void)/主程序TMOD=0 x01;/设置T0为方式1TR0=1;/接通T07.4.3 控制P1.0产生周期为2ms的方波while(
22、1)/无限循环TH0=0 xfc;/置T0高8位初值TL0=0 x18;/置T0低8位初值dowhile(!TF0);/TF0为0原地循环,/为1则T0溢出,往下执行P1_0=!P1_0;/P1.0状态求反TF0=0;/TF0标志清零7.4.3 控制P1.0产生周期为2ms的方波仿真时,右键单击虚拟数字示波器,出现下拉菜单,点击“Digital oscilloscope”选项,就会在数字示波器上显示P1.0引脚输出周期为2ms方波,如图7-17所示。7.4.3 控制P1.0产生周期为2ms的方波图7-17 虚拟数字示波器显示的2ms的方波波形7.4.4 利用T1控制发出1kHz的音频信号【例7
23、-4】利用T1的中断控制P1.7引脚输出频率为1kHz方波音频信号,驱动蜂鸣器发声。系统时钟为12MHz。方波音频信号周期1ms,因此T1的定时中断时间为0.5 ms,进入中断服务程序后,对P1.7求反。电路见图7-18。先计算T1初值,系统时钟为12MHz,则机器周期为1s。1kHz音频信号周期为1ms,要定时计数的脉冲数为a。则T1初值:TH1=(65 536 a)/256;TL1=(65 536 a)%2567.4.4 利用T1控制发出1kHz的音频信号图7-18 控制蜂鸣器发出1kHz的音频信号7.4.4 利用T1控制发出1kHz的音频信号参考程序如下:#include /包含头文件s
24、bit sound=P17;/将sound位定义/为P1.7脚#define f1(a)(65536-a)/256/定义装入定时器/高8位时间常数#define f2(a)(65536-a)%256 /定义装入定时器/低8位时间常数unsigned int i=500;unsigned int j=0;7.4.4 利用T1控制发出1kHz的音频信号void main(void)EA=1;/开总中断.ET1=1;/允许定时器T1中断 .TMOD=0 x10;/TMOD=0001 000B,使用T1的方式1定时 TH1=f1(i);/给T1高8位赋初值.TL1=f2(i);/给T1低8位赋初值.T
25、R1=1;/启动T1 while(1)/循环等待 i=460;while(j2000);j=0;i=360;while(j2000);j=0;7.4.4 利用T1控制发出1kHz的音频信号/定时器T1中断函数void T1(void)interrupt 3 using 0 TR1=0;/关闭T1 sound=sound;/P1.7输出求反 TH1=f1(i);/T1的高8位重新赋初值.TL1=f2(i);/T1的低8位重新赋初值.j+;TR1=1;/启动定时器T17.4.5 LED数码管秒表的制作【例7-5】用2位数码管显示计时时间,最小计时单位为“百毫秒”,计时范围0.19.9s。当第1次按
展开阅读全文