单片机原理与接口技术(第3版)-第7章单片机系统常用串行扩展技术优质PPT.ppt优质PPT.ppt
- 文档编号:4609053
- 上传时间:2023-05-03
- 格式:PPT
- 页数:173
- 大小:2.13MB
单片机原理与接口技术(第3版)-第7章单片机系统常用串行扩展技术优质PPT.ppt优质PPT.ppt
《单片机原理与接口技术(第3版)-第7章单片机系统常用串行扩展技术优质PPT.ppt优质PPT.ppt》由会员分享,可在线阅读,更多相关《单片机原理与接口技术(第3版)-第7章单片机系统常用串行扩展技术优质PPT.ppt优质PPT.ppt(173页珍藏版)》请在冰点文库上搜索。
,7.1.1定时/计数器的结构与原理,-TCON,8,18:
41,4工作方式控制寄存器(TMOD),GATE:
门控信号。
当GATE=0时,TRx=1即可启动定时器工作;
当GATE=1时,要求同时有TRx=1和INTx=1才可启动定时器工作(x是1、2)。
C/T:
定时/计数器选择位。
C/T=1,为计数器工作方式;
C/T=0,为定时器工作方式。
7.1.1定时/计数器的结构与原理,M1、M0:
定时/计数器工作模式选择位M1M0=00工作方式0(13位方式)M1M0=01工作方式1(16位方式)M1M0=10工作方式2(8位自动再装入方式)M1M0=11工作方式3(T0为2个8位方式),-TMOD,9,18:
41,5T0、T1定时功能和计数功能的选择,通过选择控制C/T实现定时器或计数器的功能选择。
当C/T=0时,选择定时器功能;
当C/T=1时,选择计数器功能。
7.1.1定时/计数器的结构与原理,-定时/计数功能选择,10,18:
41,对单片机内部机器周期产生的脉冲进行计数,计数器每个机器周期自动加1。
如果单片机的晶振频率为12MHz,则计数频率为1MHz,或者说计数器每加1,可实现1s的计时。
7.1.1定时/计数器的结构与原理,定时器功能(C/T=0):
-定时器功能,11,18:
41,对外部事件产生的脉冲进行计数。
对于MCS-51单片机来说,P3.4和P3.5两个信号引脚分别是T0和T1计数器的计数脉冲信号输入端,当该引脚输入脉冲发生负跳变时,加1计数器自动加1。
7.1.1定时/计数器的结构与原理,计数器功能(C/T=1):
-计数器功能,12,18:
41,7.1.2定时/计数器的工作方式,定时/计数器T0、T1可以有四种不同的工作方式:
方式0、方式1、方式2和方式34种工作方式由TMOD中的M1、M0两位决定,见表7-3所示。
-四种工作方式,13,18:
41,当TMOD中M1M0=00时,选定方式0(13位状态)进行工作。
C/T=1时,图中电子开关S1切至下端,13位定时/计数器处于计数器状态,加法计数器对T0引脚上的外部输入脉冲计数。
计数值:
N=8192-x。
x是由TH0、TL0设定的初值。
x=8191时为最小计数值l,x=0时为最大计数值8192,即计数范围为18192(213)。
7.1.2定时/计数器的工作方式,1方式0,-方式0,13位计数,14,18:
41,C/T=0时,图中电子开关S1切至上端,加法计数器对机器周期计数,13位定时/计数器处于定时器状态。
定时时间:
Td=(8192-x)Tcy。
如果晶振频率fosc=12MHz,即机器周期为1s,则定时范围为1s8192s。
7.1.2定时/计数器的工作方式,-方式0,13位定时,1方式0,15,18:
41,无论是计数器状态还是计时器状态,随着加法计数的增大,TL0的低5位溢出后自动向TH0进位,TH0溢出后,将溢出标志位TF0置位,并向CPU发出中断请求。
7.1.2定时/计数器的工作方式,-方式0计数溢出置位TF0,1方式0,16,18:
41,7.1.2定时/计数器的工作方式,-启动方式,17,18:
41,当TMOD中M1M0=01时,选定方式1(16位状态)进行工作。
7.1.2定时/计数器的工作方式,-方式1,16位定时/计数,2方式1,当作为计数器使用时,计数范围是165536(216);
当作为定时器使用时,定时器的定时时间为:
Td=(216-Count)Tcy。
如果晶振频率fosc=12MHz,则定时范围为:
165536s。
18,18:
41,方式0和方式1具有共同的特点,即当加法计数器发生溢出后,自动处于0状态,如果要实现循环计数或周期定时,就需要程序不断反复给计数器赋初值,这就影响了计数或定时精度,并给程序设计增添了麻烦。
而方式2具有初值自动重新加载功能,其逻辑结构如图7-5所示。
7.1.2定时/计数器的工作方式,-方式2,自动重载初值,3方式2,19,18:
41,当M1M0=10时,定时/计数器选定方式2进行工作。
该方式下,16位计数器被分为两个8位寄存器TL0和TH0,其中TL0作为计数器,TH0作为计数器TL0的初值预置寄存器,并始终保持为初值常数。
当TL0计数溢出时,系统将TF0置位,并向CPU申请中断,同时将TH0的内容重新装入TL0,继续计数。
7.1.2定时/计数器的工作方式,-方式2,自动重载初值,20,18:
41,4方式3,7.1.2定时/计数器的工作方式,-方式3,在前述方式0、1、2三种工作方式中,T0和T1两个定时/计数器具有相同的功能。
在方式3下,T0和T1的功能完全不同。
当M1M0=11时:
T0定时/计数器处于方式3工作模式。
T1定时/计数器只能工作在方式0、1、2下。
21,18:
41,4方式3,7.1.2定时/计数器的工作方式,-方式3时T0的结构,1)T0的方式3工作模式在方式3下,T0被拆成两个独立的8位计数器TL0和TH0。
TL0既可以计数使用,又可以定时使用,构成了1个8位的定时/计数器(TL0)。
T0的控制位和引脚信号全归TL0使用,其功能和操作与方式0或方式1完全相同,而且工作逻辑结构也极其类似。
TH0只能作为1个8位定时器使用(不能用做外部计数方式)。
而且由于T0的控制位已被TL0独占,因此只好借用定时/计数器T1的控制位TR1和TF1,以计数溢出去置位TF1,还占用T1的中断源。
而定时的启动和停止则受TR1的状态控制。
由于TL0既能做定时器使用,也能做计数器使用,而TH0只能做定时器使用,因此在工作方式3下,定时/计数器T0可以构成两个独立的定时器或1个定时器、1个计数器。
22,18:
41,1)T0的方式3工作模式T0为方式3工作模式时可以构成两个独立的定时器或1个定时器、1个计数器。
7.1.2定时/计数器的工作方式,-方式3时T0的结构,23,18:
41,2)T0在方式3时T1的工作模式,7.1.2定时/计数器的工作方式,-方式3时T1的工作模式,如果定时/计数器T0已工作在方式3下,则定时/计数器T1只能工作在方式0、方式1或方式2下。
此时由于T1的运行控制位TR1及计数溢出标志位TF1已被定时/计数器T0借用而没有计数溢出标志位可供使用,因此只能把计数溢出直接送给串行口,作为串行口的波特率发生器使用,以确定串行通信的速率。
当作为波特率发生器使用时,只需要设置好工作方式,便可自动运行。
如要停止工作,只需送入一个把T1设置为方式3的方式控制字就可以了。
因为定时/计数器T1不能在方式3下使用,如果硬把它设置为方式3,则停止工作。
24,18:
25,18:
41,7.1.3定时/计数器对输入信号的要求,定时/计数器的作用是用来精确地确定某一段时间间隔(作为定时器用)或累计外部输入的脉冲个数(作为计数器用)。
当用作定时器时,在其输入端输入周期固定的脉冲,根据定时/计数器中累计的脉冲个数,即可计算出所定时间的长度。
当MCS-5l内部的定时/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲位,计数器增l,因此定时/计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的l/12。
当采用12MHz频率的晶振时,计数速率为1MHz,输入脉冲的周期间隔为1s。
由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振。
定时器作用,-定时器作用,26,18:
41,当定时/计数器用作计数器时,计数脉冲来自外部输入引脚T0或T1。
当输入信号产生由1至0的跳变(即负跳变)时,计数器的值增l。
由于确认一次负跳变需要用2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24,例如,选用6MHz频率的晶振,允许输入的脉冲频率为250kHz,如果选用12MHz频率的晶振,则可输入500kHz的外部脉冲。
对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。
7.1.3定时/计数器对输入信号的要求,-计数器作用,计数器作用,27,18:
41,7.1.4定时/计数器的应用,
(1)初始化步骤1)设置工作方式2)计算加1计数器的计数初值Count,并将计数初值Count送入TH、TL中3)启动计数器工作,即将TRx置14)若采用中断方式,则应设置T0、T1及CPU开中断,1定时/计数器初始化,-初始化步骤,28,18:
41,
(2)计数方式初始化,假设T0工作于计数方式1,计数值N=1,即每当T0引脚输入一个计数脉冲就使加1计数器产生溢出,通常可以使用这种方法扩展外中断。
为了使加1计数器每加一次1就溢出,加1计数器的初值Count=0FFFFH=216-1,其中16为工作方式1时加1计数器的位数,1为计数值x。
现用n表示加1计数器的位数,用x表示计数值,则计数初值Count=2n-x,式中,n=13,16,8和8,分别对应工作方式0,1,2和3。
7.1.4定时/计数器的应用,-计数器初始化,29,18:
41,例7-1定时/计数器T0工作于计数方式,计数值x=1,允许中断,分别使用工作方式1、方式0和方式2。
进行初始化编程。
7.1.4定时/计数器的应用,-计数器初始化,例7-1,1)假设T1定时/计数器闲置不用,可设控制寄存器TMOD的高4位为0000,即:
TMOD74=0000B。
2)T0定时/计数器工作于计数方式,可确定T0的GATE=0,C/T=1,即:
TMOD32=01B。
30,18:
41,3)T0工作于方式1时,应确定M1M0=01即,TMOD10=01B则,TMOD=0000,0101B=05H计数器位数n=16,计数器初值Count=216-1=1111,1111,1111,1111B=FFFFH即,TH0=FFH,TL0=FFH,7.1.4定时/计数器的应用,-计数器初始化,例7-1,31,18:
41,4)T0工作于方式0时,应确定M1M0=00即,TMOD10=00B则,TMOD=0000,0100B=04H计数器位数n=13,计数器初值Count=213-1=1111,1111,1,1111B即,TH0=FFH(高8位FFH送入TH0中)TL0=1FH(低5位1FH送入TL0中),7.1.4定时/计数器的应用,-计数器初始化,例7-1,32,18:
41,5)T0工作于方式2时,应确定M1M0=10即,TMOD10=10B则,TMOD=0000,0110B=06H计数器位数n=8,计数器初值Count=28-1=1111,1111B=FFH即,TH0=FFH,TL0=FFH,7.1.4定时/计数器的应用,-计数器初始化,例7-1,33,18:
41,按照前面分析,初始化程序如下。
1)T0工作于方式1的初始化程序汇编程序段:
MOVTMOD,#05H;
设置T0工作于计数方式1MOVTH0,#0FFH;
加1计数器高8位TH0赋初值FFHMOVTL0,#0FFH;
加1计数器低8位TL0赋初值FFHSETBET0;
T0开中断SETBEA;
CPU开中断SETBTR0;
启动T0计数,7.1.4定时/计数器的应用,-计数器初始化,例7-1,34,18:
41,C语言程序段:
#includesbitET0=IE1;
/*定义CPU中断控制字IE第1位为ET0*/sbitEA=IE7;
/*定义CPU中断控制字IE第7位为EA*/sbitTR0=TCON4;
/*定义TCON第4位为TR0*/TMOD=0x05;
/*设置T0工作于计数方式1*/TH0=0xff;
/*加1计数器高8位TH0赋初值FFH*/TL0=0xff;
/*加1计数器低8位TL0赋初值FFH*/ET0=1;
/*T0开中断*/EA=1;
/*CPU开中断*/TR0=1;
/*启动T0*/,7.1.4定时/计数器的应用,-计数器初始化,例7-1,35,18:
41,2)T0工作于方式0的初始化程序MOVTMOD,#04H;
设置T0工作于计数方式0MOVTH0,#FFH;
加1计数器高8位TH0赋初值FFHMOVTL0,#1FH;
加1计数器低8位TL0赋初值1FHSETBET0;
T0开中断SETBEA;
CPU开中断SETBTR0;
启动T03)T0工作于方式2的初始化程序MOVTMOD,#06H;
设置T0工作于计数方式2MOVTL0,#0FFH;
计数器TL1赋初值FFHMOVTH0,#0FFH;
重装寄存器TH1赋初值FFHSETBET0;
启动T0,7.1.4定时/计数器的应用,-计数器初始化,例7-1,36,18:
41,(3)定时方式初始化,若系统主频fosc=6MHz,则机器周期Tcy=2s,即计数器加一次1所用时间为2s,若计数器加100次产生溢出(计数值N=100),则定时时间为200s,即定时器定时时间Td=NTcy。
计数值N与计数器初值Count的关系是N=2n-Count所以,定时时间Td=(2n-Count)Tcy计数初值Count=2n-Td/Tcy式中,n=13、16、8、8,分别对应方式0、1、2、3,7.1.4定时/计数器的应用,-定时器初始化,37,18:
41,1)假设T1定时/计数器闲置不用,可设控制寄存器TMOD的高4位为0000,即,TMOD74=0000B。
2)T0工作于定时方式,可确定T0的GATE=0,C/T=0,即TMOD32=00B。
例7-2T0工作于定时方式1,定时时间Td=2ms,系统主频fosc=8MHz,允许中断,对T0进行初始化编程。
7.1.4定时/计数器的应用,-定时器初始化,例7-2,38,18:
41,3)T0工作于方式1时,应确定M1M0=01即,TMOD10=01B则:
TMOD=0000,0001B=01H4)系统主频fosc=8MHz,时钟周期Tcp=1/8s系统机器周期Tcy=12Tcp=12/8=1.5s计数器位数n=16,定时时间Td=2ms=2000s计数初值Count=2n-Td/Tcy=216-2000/1.5=64203=FACBH即:
TH0=FAH,TL0=CBH,7.1.4定时/计数器的应用,-定时器初始化,例7-2,39,18:
41,汇编语言初始化程序段:
MOVTMOD,#01H;
设置T0工作于定时方式1MOVTH0,#0FAH;
加1计数器高8位TH0赋初值FAHMOVTL0,#0CBH;
加1计数器低8位TL0赋初值CBHSETBET0;
启动T0开始定时,7.1.4定时/计数器的应用,-定时器初始化,例7-2,40,18:
41,1)假设T0定时/计数器闲置不用,可设控制寄存器TMOD的低4位为0000,即,TMOD30=0000B。
2)T1工作于定时方式,可确定T1的GATE=0,C/T=0,即,TMOD76=00B。
例7-3T1工作于定时方式2,定时时间Td=500s,系统主频fosc=6MHz,不允许中断。
对T1进行初始化编程。
7.1.4定时/计数器的应用,-定时器初始化,例7-3,41,18:
41,3)T1工作于方式2时,应确定M1M0=10即,TMOD54=10B。
则,TMOD=0010,0000B=20H。
4)系统主频fosc=6MHz,时钟周期Tcp=1/6s,Tcy=12Tcp=12/6=2s,计数器位数n=8,定时时间Td=500s,计数初值Count=2n-Td/Tcy=28-500/2=6=06H,即,TH0=06H,TL0=06H。
7.1.4定时/计数器的应用,-定时器初始化,例7-3,42,18:
MOVTMOD,#20H;
设置T1工作于计数方式2MOVTL1,#06H;
计数器TL1赋初值06HMOVTH1,#06H;
重装寄存器TH1赋初值06HCLRET1;
T1关中断SETBTR1;
启动T1,7.1.4定时/计数器的应用,-定时器初始化,例7-3,43,18:
41,C语言初始化程序段:
#includesbitET1=IE3;
/*定义CPU中断控制字IE第3位为ET1*/sbitTR1=TCON6;
/*定义TCON第6位为TR1*/TMOD=0x20;
/*设置T1为定时方式2*/TL1=0x06;
/*计数器TL1赋初值06H*/TH1=0x06;
/*重装寄存器TH1赋初值06H*/ET1=0;
/*T1关中断*/TR1=1;
/*启动T1*/,7.1.4定时/计数器的应用,-定时器初始化,例7-3,44,18:
41,2定时/计数器应用实例,分析:
周期为2ms的方波要求定时间隔为1ms,每次时间到将P1.0取反。
定时器计数频率为fosc/12,Tcy=12/fosc=1s。
每个机器周期定时器计数加1,1ms=1000s,需计数次数为1000/(12/fosc)=1000。
由于计数器向上计数,为得到l000个计数之后的定时器溢出,必须给定时器赋初值65536-1000,C语言中相当于-1000。
用定时器1的方式1编程,采用中断方式。
例7-4设单片机的fosc=12MHz,要求在P1.0脚上输出周期为2ms的方波。
7.1.4定时/计数器的应用,-应用实例,例7-4,45,18:
41,
(1)汇编语言程序:
ORG0000H;
复位入口AJMPSTARTORG001BH;
T1中断服务程序入口地址AJMPT1INTORG0030HSTART:
MOVSP,#60H;
初始化程序MOVTMOD,#10H;
设置T1工作于定时方式1MOVTH1,#0FCH;
设置加1计数器的计数初值高字节MOVTL1,#18H;
设置加1计数器的计数初值低字节SETBTR1;
启动T1SETBET1;
开T1中断SETBEA;
开总允许中断MAIN:
AJMPMAIN;
主程序T1INT:
CPLP1.0;
T1中断服务程序MOVTH1,#0FCHMOVTL1,#18HRETI,7.1.4定时/计数器的应用,-应用实例,例7-4,46,18:
41,
(2)C51程序段:
#includesbitrect_wave=P10;
/*方波由P1.0口输出*/voidtime1_over(void);
/*计数器计数时间到子程序*/voidmain(void)TMOD=0x10;
/*设置定时/计数器1为工作方式1*/TH1=-1000/256;
/*设置计数初值高字节*/TL1=-1000%256;
/*设置计数初值低字节*/IE=0x00;
/*禁止中断*/TR1=1;
/*启动定时*/for(;
)if(TF1)/*查询计数溢出*/time1_over();
/*调用计数器计数时间到子程序*/,7.1.4定时/计数器的应用,-应用实例,例7-4,47,18:
41,voidtime1_over(void)/*计数器计数时间到子程序*/TH1=-1000/256;
/*设置计数初值低字节,重启定时器*/TF1=0;
/*计数溢出标志位清0*/rect_wave=!
rect_wave;
/*输出取反*/,7.1.4定时/计数器的应用,-应用实例,例7-4,48,18:
41,例7-5设一只发光二极管LED和8051的P1.0脚相连。
当P1.0脚是高电平时,LED发亮;
当P1.0脚是低电平时,LED熄灭。
编制程序用定时器来实现发光二极管LED的闪烁功能,设置LED每1s闪烁一次。
已知单片机系统主频为12MHz。
7.1.4定时/计数器的应用,-应用实例,例7-5,49,18:
41,设计思想:
定时/计数器的最长定时是65.536ms,无法实现1s的定时。
可以采用软件计数器来进行设计。
定义一个软件计数器单元30H,先用定时/计数器T0做一个50ms的定时器,定时时间到后将软件计数器中的值加1,如果软件计数器计到了20(1s),取反P1.0,并清除软件计数器中的值,否则直接返回。
则完成了20次定时中断才取反一次P1.0,实现定时时间2050=1000ms=1s的定时。
定时/计数器T0采用工作方式1(16位定时器),其初值为:
21650ms/1s=6553650000=15536=3CB0H,7.1.4定时/计数器的应用,-应用实例,例7-5,50,18:
41,程序如下:
ORG0000HAJMPSTART;
转入主程序ORG000BH;
定时/计数器T0的中断服务程序入口地址AJMPTIME0;
跳转到真正的定时器中断服务程序处ORG0030HSTART:
MOVSP,#60H;
设置堆栈指针MOVP1,#00H;
关发光二极管LED(使其灭)MOV30H,#00H;
软件计数器预清0MOVTMOD,#01H;
定时/计数器T0工作于方式1MOVTH0,#3CH;
设置定时/计数器的初值MOVTL0,#0B0HSETBEA;
开总中断允许SETBET0;
开定时/计数器T0中断允许SETBTR0;
启动定时/计数器T0LOOP:
JMPLOOP;
循环等待,7.1.4定时/计数器的应用,-应用实例,例7-5,51,18:
41,TIME0:
INC30H;
中断程序MOVA,30HCJNEA,#14H,RET0;
与20比较,不等转RET0MOV30H,#00HCPLP1.0RET0:
MOVTH0,#3CH;
重设定时初值,启动MOVTL0,#0B0HRETI,7.1.4定时/计数器的应用,-应用实例,例7-5,52,18:
41,尽管MCS-51为用户只提供了两个外部中断源,但用户可以根据实际需求,进行多于两个外部中断请求的扩展,其中有很多扩展方法。
在此重点介绍利用定时器中断作为外部中断的扩展。
MCS-51有两个定时/计数器T0、T1,若选择它们以计数器方式工作,当引脚T0或T1上发生负跳变时,T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 系统 常用 串行 扩展 ppt
![提示](https://static.bingdoc.com/images/bang_tan.gif)