第二章片内资源课件_第1页
第二章片内资源课件_第2页
第二章片内资源课件_第3页
第二章片内资源课件_第4页
第二章片内资源课件_第5页
已阅读5页,还剩147页未读 继续免费阅读

下载本文档

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

文档简介

①51子系列有2个可编程的定时器/计数器:定时器/计数器0与定时器/计数器1,可由程序选择作为定时器用或作为计数器用,定时时间或计数值也可由程序设定。

②每个定时器/计数器都具有4种工作方式,可用程序选择。

③任一定时器/计数器在定时时间到或计数值到时,可由程序安排产生中断请求信号或不产生中断请求信号。

④52子系列有3个可编程定时器/计数器,增加了定时器/计数器2。定时器/计数器2有3种工作方式,可用程序选择。定时器/计数器的主要特性12/6/202312.4.1定时器/计数器的结构定时器/计数器0、1的结构框图12/6/202322.4.1定时器/计数器0、1的结构定时器/计数器0、1的结构框图12/6/202331.16位加法计数器工作方法:作计数器用时,加法计数器对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数。每输入一个脉冲,加法计数器增加1。加法计数溢出时可向CPU发出中断请求信号

作定时器用时,加法计数器对内部机器周期脉冲Tcy计数。定时器/计数器0、1的结构框图(P3.5)(P3.4)12/6/202342.工作方式控制寄存器TMOD

TMOD用来选择定时器/计数器0、1的工作方式,低4位用于定时器/计数器0,高4位用于定时器/计数器1。定时器/计数器0、1的结构框图12/6/202352.工作方式控制寄存器TMOD

(1)定时器/计数器功能选择位C/T:C/T=1为计数器方式,C/T=0为定时器方式。

(2)定时器/计数器工作方式选择位M1、M0:定时器/计数器4种工作方式的选择由M1、M0的值决定。T1T0TMOD89H12/6/20236

(2)定时器/计数器工作方式选择位M1、M0:定时器/计数器4种工作方式的选择由M1、M0的值决定。12/6/20237

(3)门控制位GATE:如果GATE=1,定时器/计数器0的工作受芯片引脚INT0(P3.2)控制,定时器/计数器1的工作受芯片引脚INT1(P3.3)控制;如果GATE=0,定时器/计数器的工作与INT0、INT1引脚无关。一般情况下GATE=0。T1T0TMOD89H

例:定时器T1为定时器方式,工作在方式0,非门控方式,定时器T0为计数器方式,工作在方式1,非门控方式,TMOD的值应该设置为多少?TMOD=00000101B=05H12/6/202383.定时器/计数器控制寄存器TCON作用:TCON高4位用于控制定时器0、1的运行,低4位用于控制外部中断,与定时器/计数器无关。定时器/计数器0、1的结构框图12/6/202393.定时器/计数器控制寄存器TCON

(1)定时器/计数器1运行控制位TR1(TCON.6):TR1=1时定时器/计数器1工作,TR1=0则停止工作。TRl由软件置1或清零。(2)定时器/计数器1溢出中断标志TF1(TCON.7)

定时器/计数器1计数溢出时由硬件自动置TF1=1,在中断允许的条件下,便向CPU发出定时器/计数器1的中断请求信号,CPU响应后TFl由硬件自动清零。在中断屏蔽条件下,TF1可作查询测试用。

D7D6D5D4D3D2D1D0TCON88H12/6/2023103.定时器/计数器控制寄存器TCON

(3)定时器/计数器0运行控制位TR0(TCON.4):TR0=1时定时器/计数器0工作,TR0=0则停止工作。TR0由软件置1或清零。

(4)定时器/计数器0溢出中断标志TF0(TCON.5)

定时器/计数器0计数溢出时由硬件自动置TF0=1,在中断允许的条件下,便向CPU发出定时器/计数器0的中断请求信号,CPU响应后TF0由硬件自动清零。在中断屏蔽条件下,TF0可作查询测试用。

D7D6D5D4D3D2D1D0TCON88H12/6/202311运行控制:是否为门控方式工作方式选择:方式0~方式3工作状态选择:定时器或计数器状态

定时器/计数器1工作方式0结构图

Tcy2.4.2定时器/计数器的四种工作方式12/6/202312一、定时器/计数器0、1的工作状态选择(C/T)定时器/计数器工作状态选择Tcy

1.计数器工作状态(C/T=1)

:计数脉冲来自相应的外部输入引脚,定时器T0的计数脉冲来自P3的第四个引脚(P3.4),定时器T1的计数脉冲来自P3的第五个引脚(P3.5)。当定时器/计数器运行时,引脚上的输入计数脉冲由1到0的跳变,可以使对应的定时器的加1寄存器对增1。2.4.3定时器/计数器的四种工作方式12/6/202313定时器/计数器工作状态选择Tcy2.定时器工作状态(C/T=0)

:本质上仍是定时器的加1寄存器对进行加1运算。振荡器产生的内部时钟脉冲经12分频后作为计数脉冲,所以计数频率为振荡频率的1/12。当采用12MHz的晶体时,计数频率为1MHz。由于内部时钟周期是相当精确的频率固定的脉冲,所以通过设定寄存器对的初值,在定时器方式时,可以获得相当精确的定时。12/6/202314二、定时器/计数器0、1的运行控制

方法:定时器/计数器的运行控制(启动和停止)是由TMOD中的GATE位,TCON中的TRi(i=0或1)位以及从芯片引脚INTi(i=0或1)上引入的外部信号通过上图的逻辑电路实现的。

定时器/计数器1运行控制S212/6/202315

原理:(1)当定时器1的GATE=0时,定时器1运行控制由TR1的一个条件确定,而TR1可用软件置位或清零,从而可以利用程序控制定时器的启动和停止运行。

定时器/计数器1运行控制二、定时器/计数器0、1的运行控制12/6/202316二、定时器/计数器0、1的运行控制

原理:(2)当定时器1的GATE=1时,“或”门的输出电平取决于INT1引脚的信号电平,所以“与”门输出的电平决定于TR1和INT1两个条件。

定时器或计数器运行控制12/6/202317三、定时器/计数器0、1的4种工作方式12/6/202318三、定时器/计数器0、1的4种工作方式

设置条件:M1=0、M0=0

方式0为:13位定时器/计数器,TH1是高8位加法计数器,TLl是低5位加法计数器(只用5位,其高3位未用)。1.工作方式0

定时器/计数器1工作方式0结构图

12/6/2023191.工作方式0计数范围:1~8192

THl、TLl从初值开始加法计数,直至溢出,所以设置的初值不同,定时时间或计数值也不同。注意:加法计数器TH1溢出后,必须用程序重新对THl、TLl设置初值,否则下一次TH1、TLl将从0开始加法计数。初值设置范围:0~8191(0~213-1)定时范围:(1~8192)Tcy例已知振荡器振荡频率fosc为12MHz,要求定时器/计数器0产生1ms定时,试编写初始化程序。计数值:8192-X定时时间:(8192-X)Tcy12/6/202320(2)初始化程序的编写:在C51中加入<reg51.h>头文件,然后在主函数中写如下语句:TH0=0xE0;定时器/计数器0写入初值TL0=0x18;同上TMOD=0x00;T0设为定时器、工作方式0TR0=1;启动定时器/计数器0TH0=E0HTL0=18H解:(1)TH0TL0初值的计算与TMOD方式字的确定:

由于Tcy=1us,故有T=(8192-X)Tcy=(8192-X)×1us=1000us得X=7192=1C18H=00011100

0001

1000BTMOD=00H12/6/2023212.工作方式1设置条件:M1=0、M0=1方式1为:16位定时器/计数器,TH1是高8位加法计数器,TLl是低8位加法计数器。

定时器/计数器1工作方式1结构图

12/6/2023222.工作方式1计数范围:1~65536

THl、TLl从初值开始加法计数,直至溢出,所以设置的初值不同,定时时间或计数值也不同。注意:加法计数器TH1溢出后,必须用程序重新对THl、TLl设置初值,否则下一次TH1、TLl将从0开始加法计数。初值设置范围:0~65535(0~216-1)定时范围:(1~65536)Tcy例已知振荡器振荡频率fosc为12MHz,要求定时器/计数器0产生50ms定时,试编写初始化程序。计数值:65536-X定时时间:(65536-X)Tcy12/6/202323(2)初始化程序的编写:

在C51中加入<reg51.h>头文件,然后在主函数中写如下语句:TH0=0x3C;定时器/计数器0写入初值TL0=0xB0;同上TMOD=0x01;T0设为定时器工作方式1TR0=1,启动定时器/计数器0TH0=3CHTL0=B0H解:(1)TH0TL0初值的计算与TMOD方式字的确定:

由于Tcy=1us,故有T=(65536-x)Tcy=(65536-x)×1us=50000us得X=15536=3CB0HTMOD=01H12/6/202324解:方波的周期用定时器T1产生,根据(2n-x)×Tcy=(216-x)×1μs=50ms,所以x=65536-50000=15536=3CB0H即TH1=3CH,TL1=B0H或者通过计算得出TH1=15536/256,TL1=15536%256已知晶振频率fosc=12MHz,要求定时器1产生100ms的方波信号,定时器1工作于方式1,编写在P2.0引脚上产生100ms的方波程序。

在T1中设置初值为15536,在初值的基础上进行加1计数,每隔50ms计数溢出1次,CPU响应中断后,在中断服务程序中对P2.0引脚信号取反。12/6/202325

#include<reg51.h>#defineuintunsignedintsbitfangbo=P2^0;voiddelay(uintz);//延时子程序voidmain(){

TMOD=0x10;//设置T1为定时器模式//,工作在方式1TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;//开总中断ET1=1;//允许T1中断

TR1=1;// 启动T1while(1); }voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidtimer1()interrupt3{

TH1=(65536-50000)/256;TL1=(65536-50000)%256;fangbo=~fangbo;

}12/6/2023263.工作方式2

设置条件:M1=1、M0=0

方式2为:自动重新装入初值(自动重装载)的8位定时器/计数器。TL1作为8位加法计数器使用,TH1作为初值寄存器用。TH1、TL1的初值都由软件预置。

定时器/计数器1工作方式2结构图

12/6/2023273.工作方式2计数范围:1~256TLl从初值开始加法计数,溢出时:

(1)置位TF1;(2)发出重装载信号,将THl中初值自动送入TLl,使TL1从初值开始重新计数。注意:重新装入初值后,TH1的内容保持不变。初值设置范围:0~255(0~28-1)定时范围:(1~256)Tcy

工作方式2特别适用于定时控制。例已知振荡器振荡频率fosc为12MHz,要求定时器/计数器0要求每隔200us产生一定时控制信号。计数值:256-X定时时间:(256-X)Tcy12/6/202328(2)初始化程序:

在C51中加入<reg51.h>头文件,然后在主函数中写如下语句:TL0=0x38;定时器/计数器0写入初值TH0=0x38;同上TMOD=0x02;T0设为定时器工作方式2TR0=1;启动定时器/计数器0TH0=38HTL0=38H解:(1)TH0TL0初值的计算与TMOD方式字的确定:

由于Tcy=1us,故有T=(256-x)Tcy=(256-x)×1us=200us得X=56=38HTMOD=02H12/6/2023294.工作方式3

设置条件:M1=1、M0=1

方式3:工作方式3仅对定时器/计数器0有意义。TL0、TH0成为两个独立的8位加法计数器。如把定时器/计数器1设置为工作方式3,相当于TR1=0,即定时器/计数器1实际将停止工作。

定时器/计数器0工作方式3结构图

12/6/2023304.工作方式3

说明:定时器/计数器0采用工作方式3后,51子系列就具有3个定时器/计数器,即8位定时器/计数器TL0,8位定时器TH0和16位定时器/计数器1(TH1、TL1)。定时器/计数器1虽然还可以选择为方式0、方式1或方式2,但由于TR1和TF1被TH0借用,不能产生溢出中断请求,所以只用作串行口的波特率发生器。12/6/202331定时器/计数器0已预置初值为156,且选定用方式2的计数器方式,现在T0引脚上输入周期为1ms脉冲,问:(1)此时定时器/计数器0的实际用途是什么?(2)在什么情况下,定时器/计数器0溢出?

解:(1)实际用作定时器,但采用外部时钟脉冲(2)满100ms定时器/计数器0将溢出。

12/6/202332设计一个秒表,使它从0~59s计数,并使LED数码管左边两个显示数字0~59,假设晶振频率fosc=12MHz,定时器/计数器选用T0。

解:利用51单片机的定时器0,使其50ms中断一次,中断20次时,秒加1。初值与中断服务程序中,TH0、TL0的值设置为:TH0=0x3C;定时器/计数器0写入初值TL0=0xB0;同上;

模式寄存器的值为:

TMOD=0x01;T0设为定时器工作方式1

12/6/202333程序如下:

#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharuchartemp,aa,shi,ge;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管码表voiddisplay(ucharshi,ucharge);//显示子程序voiddelay(uintz);//延时子程序voidinit();12/6/202334voidmain(){ init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==60) { temp=0; } shi=temp/10; ge=temp%10;

} display(shi,ge); }}12/6/202335voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay(ucharshi,ucharge){

P2=0x01;//送入十位数码管位选信号,显示数字 P1=table[shi];//送入十位数码管的段选信号 delay(5); P2=0x02;//送入个位数码管位选信号,显示数字 P1=table[ge];//送入个位数码管的段选信号 delay(5);

}12/6/202336voidinit(){ temp=0; TMOD=0x01;//设置T0为定时器模式,工作在方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;EA=1;//开总中断 ET0=1;//允许T0中断 TR0=1;// 启动T0}voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }12/6/2023372.5并行I/O端口8051单片机共有4个8位双向I/O口,共32口线。每位均有自己的锁存器(SFR),输出驱动器和输入缓冲器。12/6/202338多路开关功能:用于控制选通I/O方式还是地址/数据输出方式方式控制:由内部控制信号产生数据输出锁存器,用于数据位的锁存两个三态的数据输入缓冲器(BUF1和BUF2)。推拉式I/O驱动器:由两只场效应管(FET)组成,上面的场效应管构成上拉电路。2.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口1位的内部结构读锁存器读引脚锁存器内部总线写锁存器地址/数据P00多路开关10字节地址80H,位地址80H~87H。12/6/2023392.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读锁存器读引脚锁存器内部总线写锁存器地址/数据P00多路开关10说明:1、当CPU发出的控制信号为0时,P0口做双向I/O口,为漏极开路(三态)2、当CPU发出的控制信号为1时,P0口为地址/数据复用总线(用于口扩展)12/6/2023402.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、

P0作输入/输出口的使用(1)P0作输出口使用来自CPU的“写入”脉冲加在D锁存器的C端,内部总线上的数据写入D锁存器,并向端口引脚P0.x输出。注意:由于输出电路是漏极开路(因为这时上拉场效应管截止),必须外接上拉电阻才能有高电平输出。读锁存器12/6/2023412.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、

P0作输入/输出口的使用(1)P0作输出口使用来自CPU的“写入”脉冲加在D锁存器的C端,内部总线上的数据写入D锁存器,并向端口引脚P0.x输出。注意:由于输出电路是漏极开路(因为这时上拉场效应管截止),必须外接上拉电阻才能有高电平输出。(2)P0作输入口使用区分“读引脚”和“读锁存器”。“读引脚”信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;

读锁存器12/6/2023422.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口内部结构读引脚锁存器内部总线写锁存器地址/数据P00多路开关103、

P0作输入/输出口的使用(1)P0作输出口使用来自CPU的“写入”脉冲加在D锁存器的C端,内部总线上的数据写入D锁存器,并向端口引脚P0.x输出。注意:由于输出电路是漏极开路(因为这时上拉场效应管截止),必须外接上拉电阻才能有高电平输出。(2)P0作输入口使用区分“读引脚”和“读锁存器”。“读引脚”信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;“读锁存器”信号打开上面的缓冲器把锁存器Q端的状态读入内部总线。读锁存器12/6/202343执行“MOVA,P0”时读引脚信号有效。说明:执行“ANLP0,#0FH”时读锁存器信号有效。12/6/2023442.5.2P1端口P1口内部结构如下图所示。输出部分有内部上拉电阻R*约为20K。其他部分与P0端口使用相类似(读引脚时先写入1)。写数据读端口字节地址90H,位地址90H~97H。12/6/202345P1口只作通用的I/O口使用,在电路结构上与P0口有两点区别:(1)因为只传送数据,不再需要多路转接开关MUX。(2)由于P1口用来传送数据,因此输出电路中有上拉电阻,这样电路的输出不是三态的。因此:(1)P1口作为输出口使用时,外电路无需再接上拉电阻。(2)P1口作为输入口使用时,应先向其锁存器先写入“1”,使输出驱动电路的FET截止,所以P1口是准双向口。12/6/202346字节地址为A0H,位地址A0H~A7H。

2.5.3P2端口P2口的位结构的电路原理图说明:1、P2可以作为通用的I/O,也可以作为高8位地址输出输出。2、当控制信号为1时P2口输出地址信息,此时单片机完成外部的取指操作或对外部数据存储器16位地址的读写操作。3、当控制信号为0时,作为普通I/O口使用时用法和P1口类似。1012/6/202347P3口的字节地址为B0H,位地址为B0H~B7H。P3口的第二功能定义,应熟记。表2-5P3口的第二功能定义

口引脚第二功能

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0*(外部中断0) P3.3 INT1*(外部中断1) P3.4 T0(定时器0外部计数输入) P3.5 T1(定时器1外部计数输入) P3.6 WR*(外部数据存储器写选通) P3.7 RD*(外部数据存储器读选通)

2.5.4P3端口12/6/202348图2-10P2口的位结构的电路原理12/6/202349第二功能信号有输出和输入两类:(1)作通用的I/O输出,“第二输出功能”线应保持高电平,与非门开通,使锁存器Q端输出畅通。作第二功能信号输出,锁存器预先置“1”,使与非门对“第二输出功能”信号的输出是畅通的。(2)作第二功能信号输入,在口线引脚的内部增加了一个缓冲器,输入的信号就从这个缓冲器的输出端取得。而作为通用I/O输入,仍取自三态缓冲器的输出端。

P3口无论作哪种输入,锁存器输出和“第二输出功能”线都应保持高电平。12/6/202350使用中应注意的问题:(1)P0~P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MUX,以进行转换。而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无需转接开关MUX。由于P0口可作为地址/数据复用线使用,需传送系统的低8位地址和8位数据,因此MUX的一个输入端为“地址/数据”信号。而P2口仅作为高位地址线使用,不涉及数据,所以MUX的一个输入信号为“地址”。2.5.5P0~P3端口功能总结12/6/202351(2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。原因:P0口作数据总线使用时,为保证数据正确传送,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,P0口的输出缓冲器应为三态门。在P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。而P1~P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的-准双向口12/6/202352(3)P3口的口线具有第二功能,为系统提供一些控制信号。因此在P3口电路增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。12/6/202353引脚功能分类图12/6/202354仿真电路如下图,编写使P2口所接的流水灯从左到右点亮的程序2.5.58051系列单片机内部并行口的应用

12/6/202355#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintvoidDelayMS(uintx){ uchari; while(x--) { for(i=120;i>0;i--); }}voidmain(){ P0=0xFE; while(1) { P0=_crol_(P0,1); DelayMS(150); }}12/6/2023562.6串行输入/输出接口1.并行通信与串行通信在实际应用中,不但计算机与外部设备之间常常要进行信息交换,而且计算机之间也需要交换信息,所有这些信息的交换均称为“通信”。通信的基本方式分为并行通信和串行通信两种。2.6.1基本概念12/6/202357

并行通信是构成1组数据的各位同时进行传送,例如8位数据或16位数据并行传送。其特点是传输速度快,但当距离较远、位数又多时导致了通信线路复杂且成本高。

串行通信是数据一位接一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),从而大大地降低了成本,特别适用于远距离通信。缺点是传送速度慢。12/6/202358通信的两种基本方式(a)并行通信;(b)串行通信12/6/202359

(1)种类:串行通信可分为异步传送和同步传送两种基本方式。

①异步传送方式在传送时,数据是以一个字符为单位进行传送的。它用一个起始位表示字符的开始,用停止位表示字符的结束。异步传送的特点是数据在线路上的传送不连续。异步传送的字符格式如下页图所示。2.串行通信的种类和数据传送方向12/6/202360串行异步传送的字符格式一个字符由起始位、数据位、奇偶校验位和停止位4个部分组成。起始位为0信号占1位;其后接着的就是数据位,它可以是5位、6位、7位或8位,传送时低位在先、高位在后;再后面的1位为奇偶校验位,可要也可以不要;最后是停止位,它用信号1来表示字符的结束,可以是1位、1位半或2位。12/6/202361例如,采用串行异步通信方式传送ASCII码字符‘5’,规定为7位数据位,1位偶校验位,1位停止位,无空闲位。由于‘5’的ASCII码为35H,其对应7位数据位为0110101,如按低位在前、高位在后顺序排列应为1010110。前面加1位起始位,后面配上偶校验位1位0,最后面加1位停止位1,因此传送的字符格式为0101011001,其对应的波形如下页图所示。12/6/202362传送ASCII码字符‘5’的波形图12/6/202363在串行异步传送中,CPU与外设之间事先必须约定:

a)字符格式。双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加1个奇偶校验位、1个起始位和1个停止位共10位。当然停止位也可大于1位。

b)波特率(Baudrate)。

波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒。它与字符的传送速率(字符/秒)之间存在如下关系:波特率=位/字符×字符/秒=位/秒

要求发送端与接收端的波特率必须一致。12/6/202364

例:假设字符传送的速率为120字符/秒,而每1个字符为10位,那么传送的波特率为多少?10位/字符×120字符/秒=1200位/秒=1200波特每1位二进制位的传送时间Td就是波特率的倒数,例如上例中Td=1/1200=0.833ms12/6/202365在异步传送中,每1个字符都要用起始位和停止位作为字符开始和结束的标志,占用了一定的时间。为了提高传送速度,有时就去掉这些标志,而采用同步传送,即1次传送1组数据。在这1组数据的开始处要用同步字符SYN来加以指示,如下页图所示。12/6/202366同步传送示意图12/6/202367串行通信的数据传送方向有3种形式。

①单工方式如下页图(a)所示,A端为发送站,B端为接收站,数据仅能从A站发至B站。②半双工方式如下页图(b)所示,数据既可从A站发送到B站,也可以由B站发送到A站。不过在同一时间只能作1个方向的传送。

③全双工方式如下页图(c)所示,每个站(A、B)既可同时发送,也可同时接收。

(2)数据传送方向12/6/202368串行通信的三种方式(a)单工方式;(b)半双工方式;(c)全双工方式12/6/202369MCS-51单片机内部有1个功能很强的全双工串行口,可同时发送和接收数据。它有4种工作方式,可供不同场合使用。波特率由软件设置,通过片内的定时/计数器产生。接收、发送均可工作在查询方式或中断方式,使用十分灵活。2.6.2串行口功能和结构12/6/202370串行口内部结构如上图,两个物理上独立的接收和发送缓冲器,可同时收、发数据。两个缓冲器共用一个特殊功能寄存器字节地址:SBUF(99H)。

控制寄存器共两个:特殊功能寄存器SCON和PCON。12/6/202371(1)串行口数据缓冲器SBUFSBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU写SBUF,就是修改发送缓冲器;读SBUF,就是读接收缓冲器。串行口对外也有两条独立的收发信号线RXD(P3.0)和TXD(P3.1),因此可以同时发送、接收数据,实现全双工传送。12/6/202372(2)串行口控制寄存器SCONSCON寄存器用来控制串行口的工作方式与状态,它可以位寻址。在复位时所有位被清0,字节地址为98H。SCON的格式为:12/6/202373SM0、SM1——串行口4种工作方式的选择位

SM0SM1方式 功能说明

000移位寄存器方式(用于扩展并行I/O口)0118位异步收发,波特率可变(由定时器控制)1029位异步收发,波特率为fosc/64或fosc/321139位异步收发,波特率可变(由定时器控制)12/6/202374SM2——多机通信控制位

用于方式2或方式3中。当串行口以方式2或方式3接收时,如果SM2=1,只有当接收到的第9位数据(RB8)为“1”时,才将接收到的前8位数据送入SBUF,并置“1”RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。如果SM2=0,则不论第9位数据是“1”还是“0”,都将前8位数据送入SBUF中,并置“1”RI,产生中断请求。在方式1时,如果SM2=1,则只有收到停止位时才会激活RI。在方式0时,SM2必须为0。12/6/202375

REN——允许串行接收位由软件置“1”或清“0”。

REN=1

允许串行口接收数据。

REN=0

禁止串行口接收数据。

TB8——发送的第9位数据方式2和3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,也可作为地址帧或数据帧的标志。=1为地址帧,=0为数据帧

RB8——接收到的第9位数据方式2和3时,RB8存放接收到的第9位数据。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。12/6/202376TI——发送中断标志位

串行完一帧信息,由硬件置“1”,TI必须由软件清“0”。RI——接收中断标志位

方式0时,接收完第8位数据时,RI由硬件置1。其它工作方式,串行接收到停止位时,该位置“1”。RI=1,表示一帧数据接收完毕,并申请中断,CPU从接收SBUF取走数据。该位状态也可软件查询。RI必须由软件清“0”。12/6/202377(3)电源控制寄存器PCONPCON单元地址为97H,不能位寻址。其内容如下:D7D6D5D4D3D2D1D0

PCON87H最高位SMOD为串行口波特率选择位,当SMOD=1时,方式1、2、3的波特率加倍。12/6/202378串行口有4种工作方式,它是由SCON中的SM0、SM1来定义的,如下所示。SM0、SM1——串行口4种工作方式的选择位

SM0SM1方式 功能说明

000移位寄存器方式(用于扩展I/O口),波特率为fosc/120118位异步收发,波特率可变(由定时器控制)1029位异步收发,波特率为fosc/64或fosc/321139位异步收发,波特率可变(由定时器控制)12/6/202379同步移位寄存器输入/输出方式,常用于外接移位寄存器,以扩展并行I/O口。8位数据为一帧,不设起始位和停止位,先发送或接收最低位。波特率固定为fosc/12。帧格式如下: 1.方式0图7-4方式0帧格式12/6/2023801.方式0发送当CPU执行一条将数据写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口即把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完8位数据置“1”中断标志位TI。时序如图7-5所示。方式0发送时序12/6/2023812.方式0接收

REN=1,接收数据,REN=0,禁止接收。REN=1,允许接收。向串口的SCON写入控制字(置为方式0,并置“1”REN位,同时RI=0)时,产生一个正脉冲,串行口即开始接收数据。RXD为数据输入端,TXD为移位脉冲信号输出端,接收器也以fosc/12的固定波特率采样RXD引脚的数据信息,当收到8位数据时置“1”RI,一帧数据接收完,可进行下一帧数据的接受,时序如下:方式0接收时序12/6/202382方式0下,SCON中的TB8、RB8位没有用到,发送或接收完8位数据由硬件置“1”TI或RI,CPU响应中断。TI或RI须由用户软件清“0”,可用如下指令:

CLRTI ;TI位清“0” CLRRI ;RI位清“0”方式0时,SM2位必须为0。12/6/202383例:仿真电路如下图:12/6/202384#include<reg51.h>sbitclk=P1^0;voiddelay(intN) //延时子程序(晶振12M){inti,j;for(i=0;i<N;i++)for(j=0;j<i;j++);}voidmain(){intxx;while(1){clk=0; clk=1;//发送移位脉冲 SCON=0x10;//允许串行口接收数据 while(RI==0) //等待发送 {;} xx=SBUF; //读取数据 RI=0; //清除接收中断标志 P2=xx; delay(200); }}12/6/202385SM0、SM1=01方式1一帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。帧格式如下:方式1波特率=(2SMOD/32)×定时器T1的溢出率SMOD为PCON寄存器的最高位的值(0或1)。2方式1

方式1帧格式12/6/202386(1).方式1发送数据由TXD输出。一帧信息为10位,1位起始位0,8位数据位(先低位)和1位停止位1。当执行一条数据写发送缓冲器SBUF的指令,就启动发送。图中TX时钟的频率就是发送的波特率。发送开始时,内部发送控制信号变为有效。将起始位向TXD输出,此后,每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD输出一个数据位。8位数据位全部发送完毕后,置“1”TI。方式1发送数据的时序,如下图所示。方式1发送数据时的时序12/6/202387(2).方式1接收

数据从RXD(P3.0)脚输入。当检测到起始位的负跳变时,开始接收数据。定时控制信号有两种:接收移位时钟(RX时钟,频率和波特率相同)和位检测器采样脉冲(频率是RX时钟的16倍,1位数据期间,有16个采样脉冲),当采样到RXD端从1到0的跳变时就启动检测器,接收的值是3次连续采样(第7、8、9个脉冲时采样)进行表决以确认是否是真正的起始位(负跳变)的开始。当一帧数据接收完,须同时满足两个条件,接收才真正有效。⑴RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。⑵SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则收到的数据装入SBUF和RB8(RB8装入停止位),且置“1”中断标志RI。若这两个条件不同时满足,收到的数据将丢失。12/6/202388方式1接收数据时的时序12/6/2023899位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位。帧格式如下:3方式2方式2波特率=(2SMOD/64)×fosc

12/6/202390发送前,先根据通讯协议由软件设置TB8(例如,双机通讯时的奇偶校验位或多机通讯时的地址/数据的标志位)。方式2发送数据波形如图所示。(1).方式2发送方式2、3发送数据时序波形12/6/202391SM0、SM1=10,且REN=1。数据由RXD端输入,接收11位信息。当位检测到RXD从1到0的负跳变,并判断起始位有效后,开始收一帧信息。在接收器完第9位数据后,需满足两个条件,才能将接收到的数据送入SBUF。(1)RI=0,意味着接收缓冲器为空。(2)SM2=0或接收到的第9位数据位RB8=1时。当上述两个条件满足时,接收到的数据送入SBUF(接收缓冲器),第9位数据送入RB8,并置“1”RI。若不满足两个条件,接收的信息将被丢弃。方式2接收数据的时序如图所示。

(2).方式2接收

12/6/202392方式2接收数据的时序12/6/202393

SM0、SM1=11,串口为方式3。波特率可变的9位异步通讯方式,除波特率外,方式3和方式2相同。方式3的时序见方式2。

方式3波特率=(2SMOD/32)×定时器T1的溢出率4方式312/6/202394要保证主机与所选择的从机实现可靠地通讯,SCON中的SM2位就是满足这一条件而设置的多机通讯控制位。原理:在串行口以方式2(或方式3)接收时,若SM2=1,表示置多机通讯功能位,这时有两种可能:(1)接收到的第9位数据为1时,数据才装入SBUF,并置中断标志RI=1向CPU发出中断请求;(2)接收到的第9位数据为0时,则不产生中断标志,信息将抛弃。2.6.3多机通讯12/6/202395若SM2=0,则接收的第9位数据不论是0还是1,都产生RI=1中断标志,接收到的数据装入SBUF中。应用上述特性,便可实现MCS-51的多机通讯。

设多机系统中有一主机和3个8031从机,如下图。主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。

12/6/202396多机通讯工作过程:(1)从机串行口编程为方式2或方式3接收,且置“1”SM2和REN位,使从机只处于多机通讯且接收地址帧的状态。(2)主机先将从机地址(即准备接收数据的从机)发给各从机,主机发出的地址信息的第9位为1,各从机接收到的第9位信息RB8为1,且由于SM2=1,则置“1”RI,各从机响应中断,执行中断程序。在中断服务子程序中,判主机送来的地址是否和本机地址相符合,相符则该从机清“0”SM2位,准备接收主机的数据或命令;若不符,则保持SM2=1状态。12/6/202397(3)接着主机发送数据帧,此时各从机串行口接收到的RB8=0,只有地址相符合的从机系统(即已清“0”SM2位的从机)才能激活RI,从而进入中断,在中断程序中接收主机的数据(或命令);

其它的从机因SM2=1,又RB8=0不激活中断标志RI,不能进入中断,接收的数据丢失。前图所示的多机系统是主从式,由主机控制多机之间的通讯,从机和从机的通讯只能经主机才能实现。12/6/2023982.6.4波特率的制定方法方式0、方式2的波特率是固定的;方式1、方式3波特率由定时器T1的溢出率来确定。(1)波特率的定义波特率的定义?。对于定时器的不同工作方式,波特率的范围不一。12/6/202399(a)方式0波特率=时钟频率fosc×1/12,不受SMOD位的值的影响。若fosc=12MHz,波特率为fosc/12即1Mb/s。(b)方式2波特率=(2SMOD/64)×fosc若fosc=12MHz:SMOD=0波特率=187.5kb/s;

SMOD=1波特率=375kb/s

(c)方式1或方式3时,波特率为:

波特率=(2SMOD/32)×T1的溢出率

12/6/2023100实际设定波特率时,T1常设置为方式2定时(自动装初值)这种方式不仅操作方便,也可避免因软件重装初值而带来的定时误差。此时:12/6/2023101例: 设串行接口工作于工作方式3,SMOD=0,f=11.059MHz,定时器/计数器1工作于定时器方式2(自动重装载方式),TLl、THl的初值为FDH,试计算波特率。因为定时器/计数器1的定时时间为:T=(256-253)×12/(11.059×106) 其溢出速率:1/T=11.059×106/[(256-253)×12]=307194.4 所以波特率为:20×307194.4/32=9599.83≈9600(位/秒)12/6/2023102举例:串行数据转换为并行数据串行数据由RXD发送给串并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,并将转换的数据通过8只LED显示出来。本例串口工作模式0,即移位寄存器I/O模式。12/6/2023103#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoidDelay(uintx){ uchari; while(x--) { for(i=0;i<120;i++); }}voidmain(){ ucharc=0x80; SCON=0x00; TI=1; while(1) { c=_crol_(c,1); SBUF=c; while(TI==0); TI=0; Delay(400); }}12/6/2023104举例:甲机通过串口控制乙机LED闪烁甲单片机负责向外发送控制命令字符“A”、“B”、“C",或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。12/6/2023105举例:单片机之间双向通信甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。12/6/202310612/6/2023107补充:中断的基本概念CPU执行程序时,由于发生了某种随机的事件(外部或内部的),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。2.7中断系统实时测控时,单片机应能及时地响应和处理单片机外部事件或内部事件所提出的中断请求。12/6/2023108中断流程图主程序断点继续执行主程序执行中断服务子程序外设中断请求中断响应返回主程序中断方式优点:大大地提高了CPU的工作效率。12/6/2023109中断源中断源——引起CPU中断的事件。例如:外设——请求输入输出数据,报告故障等事件——掉电、硬件故障、软件错误、非法操作、定时时间到等中断源分为:外部中断、内部中断内部中断:CPU内部执行程序时自身产生的中断外部中断:CPU以外的设备、部件产生的中断12/6/2023110中断过程五个步骤:中断请求中断判优(有时还要进行中断源识别)中断响应中断服务中断返回12/6/20231111.中断请求中断源发出中断请求信号,送到CPU。中断请求信号应保持到中断被处理为止;CPU响应中断后,中断请求信号应及时撤销。12/6/20231122中断判优多个中断源产生中断,CPU首先为谁服务? ——中断优先级排队问题。12/6/2023113MCS—51系列单片机处理中断优先权有三条原则:①正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。

②正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现二级中断嵌套。③CPU同时接收到几个中断请求时,首先响应优先权最高的中断请求。

12/6/20231143.中断响应①CPU正在处理同级或高优先级的中断。②现行的机器周期不是所执行指令的最后一个机器周期。③正在执行的指令是RETI或访问IE、IP的指令。CPU在执行RETI或访问IE、IP的指令后,至少需要再执行一条其他指令后才会响应中断请求。

MCS-51的CPU在每个机器周期的S5P2期间顺序采样各中断请求标志位,如有置位,且下列三种情况都不存在,那么,在下一周期的S1期间响应中断。否则,采样的结果被取消。三种情况是:12/6/2023115①根据中断请求源的优先级高低,使相应的优先级状态触发器置1。②保护断点,即把程序计数器PC的内容推入堆栈保存。③清相应的中断请求标志位IE0、IE1、TF0或TF1。CPU响应中断后,由硬件执行如下功能:④把被响应的中断服务程序的入口地址送入PC,从而转入相应的中断服务程序执行。

4.中断服务

12/6/2023116中断服务程序入口地址0003H单元:外部中断0中断服务程序的入口地址000BH单元:定时器/计数器0溢出中断服务程序的入口地址00013H单元:外部中断1中断服务程序的入口地址0001BH单元:定时器/计数器1溢出中断服务程序的入口地址0023H单元:串行口中断服务程序的入口地址0002BH单元:定时器/计数器2溢出中断服务程序的入口地址12/6/2023117中断请求的撤除(1)对于定时器/计数器0、1的中断请求及跳变触发方式的外部中断0、1,CPU在响应中断后用硬件清除了相应的中断请求标志TF0、TF1、IE0、IE1,即自动撤除了中断请求。(2)对于串行接口中断及定时器/计数器2中断,CPU响应中断后没有用硬件清除中断标志位,必须由用户编制的中断服务程序来清除相应的中断标志。

CPU响应中断请求后,在中断返回(执行RETI)前,必须撤除请求,否则会错误地再一次引起中断过程。12/6/20231185.中断返回中断服务程序的最后一条指令必须是中断返回指令RETI。CPU执行该指令时,先将相应的优先级状态触发器清零,然后从堆栈中弹出栈顶的两个字节到PC,从而返回到断点处。12/6/20231192.7.1MCS-51中断系统功能5个(52子系列为6个)中断源2个中断优先级,可实现二级中断嵌套每一个中断源的优先级可用程序设定12/6/2023120

中断系统结构示意图

12/6/20231212.7.2中断请求源中断系统结构示意图

1.外部中断0、1

外部中断请求有两种触发方式:电平触发及跳变触发,由TCON的IT0位及IT1位选择。IT0(IT1)=0:电平触发IT0(IT1)=1:跳变触发

注意:CPU响应中断后,由硬件自动清除IE0或IE1

12/6/2023122中断系统结构示意图

2.定时器/计数器0、1溢出中断

定时器/计数器计数溢出时,由硬件分别置TF0=1或TF1=1,向CPU申请中断

注意:CPU响应中断后,由硬件自动清除TF0或TF1

12/6/2023123中断系统结构示意图

3.串行接口中断串行接口发送了一帧信息,便由硬件置TI=1、向CPU申请中断。串行接口接收了一帧信息,便由硬件置RI=1,向CPU申请中断。注意:CPU响应中断后必须用软件清除TI和RI12/6/20231242.7.3中断控制中断系统结构示意图

中断屏蔽触发器中断允许触发器上述两个触发器由中断允许寄存器IE来设置

1.中断允许控制12/6/2023125中断允许寄存器IE格式IE的每一位都可由软件置1或清零。且1:中断允许,0:中断屏蔽。(1)CPU中断允许位EAEA=1时CPU中断允许,EA=0时CPU屏蔽一切中断请求。

(2)串行接口中断允许位ESES=1时允许串行接口中断,ES=0时禁止串行接口申请中断。12/6/2023126(3)T/C1中断允许位ETlET1=1时允许T/C1申请中断,ET1=0时禁止T/C1中断。

(4)外部中断1中断允许位EX1EX1=1时允许外部中断1申请中断,EX1=0时禁止中断。(5)定时器/计数器0中断允许位ET0ET0=1允许定时器/计数器申请中断,ET0=0时禁止中断。(6)外部中断0中断允许位EX0EX0=l时允许外部中断0申请中断,EX0=0禁止外部中断0申请中断。12/6/2023127MCS-51复位后,IE清0,所有中断请求被禁止。若使某一个中断源被允许中断,除了IE相应的位的被置“1”,还必须使EA位=1。例:

EA=1;

ET0=1;12/6/2023128例若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置IE的相应程序段。(1)用位操作指令来编写如下程序段:

ES=0;禁止串行口中断 EX1=0;禁止外部中断1中断 EX0=0;禁止外部中断0中断ET0=1;允许定时器/计数器T0中断ET1=1;允许定时器/计数器T1中断EA=1;CPU开中断(2)用字节操作指令来编写:IE=0x8AH;12/6/2023129中断系统结构示意图

优先权选择由中断优先级寄存器IP控制工作。

2.中断优先级寄存器IP两个中断优先级,可实现两级中断嵌套。12/6/2023130可归纳为下面两条基本规则:(1)低优先级可被高优先级中断,反之则不能。(2)同级中断不会被它的同级中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断。12/6/2023131中断优先级寄存器IP,其字节地址为B8H。IP各个位的含义:(1)PS——串行口中断优先级控制位

1:高优先级中断;

0:低优先级中断。(2)PT1——定时器T1中断优先级控制位

1:高优先级中断;

0:低优先级中断。(3)PX1——外部中断1中断优先级控制位

1:高优先级中断;

0:低优先级中断。12/6/2023132中断优先级寄存器IP,其字节地址为B8H。(4)PT0——定时器T0中断优先级控制位

1:高优先级中断;

0:低优先级中断。(5)PX0——外部中断0中断优先级控制位

1:高优先级中断;

0:低优先级中断。12/6/2023133由软件可改变各中断源的中断优先级。

MCS-51的中断系统有两个不可寻址的“优先级激活触发器”:一个用来指示某高优先级的中断正在执行,所有后来的中断均被阻止。另一个用来指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。在同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的查询顺序。12/6/2023134

中断源中断级别

外部中断0 最高 T0溢出中断 外部中断1 T1溢出中断 串行口中断 最低查询顺序如下:12/6/2023135

例2

设置IP寄存器的初始值,使2个外中断请求为高优先级,其它中断请求为低优先级。(1)用位操作指令

PX0=1;2个外中断为高优先级

PX1=1;

PS=0;串口为低优先级中断PT0=0;2个定时器/计数器低优先级中断

PT1=0(2)用字节操作指令IP=0x05;

12/6/2023136

一个中断请求被响应,需满足以下必要条件:(1)IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位=1,即该中断没有被屏蔽。(4)无同级或更高级中断正在被服务。2.7.4响应中断请求的条件

12/6/2023137中断响应的主要过程:首先由硬件自动生成一条长调用指令:

LCALLaddr16接着就由CPU执行该指令,将PC的内容压入堆栈以保护断点,再将中断入口地址装入PC。各中断源服务程序的入口地址

温馨提示

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

评论

0/150

提交评论