《单片机原理及应用(C语言版)7.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用(C语言版)7.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及应用单片机原理及应用(C(C语言版语言版)7)7 Four short words sum up what has lifted most successful Four short words sum up what has lifted most successful individuals above the crowd: a little bit more. individuals above the crowd: a little bit more. -author -author -date-date第第7章章 MCS-51单片机串行口单片机串行口 目目 录录7.1 串
2、行通信基本知识串行通信基本知识7.2 串行口结构及控制串行口结构及控制7.3 串行口工作方式串行口工作方式7.4 串行口应用举例串行口应用举例7.5 单片机与单片机与PC机通信接口电路机通信接口电路本章要点本章要点 本章主要讲述本章主要讲述MCS-51单片机串行口的单片机串行口的结构、工作原理以及应用结构、工作原理以及应用。主要内容包括串行通信基本知识、主要内容包括串行通信基本知识、MCS-51单片机串行口结构、串行口工作方式以及单片机串行口结构、串行口工作方式以及单片机与单片机与PC机通信的接口电路。机通信的接口电路。7.1 串行通信基本知识串行通信基本知识主要内容主要内容7.1.1 数据通
3、信数据通信7.1.2 异步通信和同步通信异步通信和同步通信7.1.3 波特率波特率7.1.4 通信方向通信方向7.1.5 串行通信接口种类串行通信接口种类7.1.1 数据通信数据通信 计算机与外界的信息交换称为通信计算机与外界的信息交换称为通信。基本的通信。基本的通信方式有并行通信和串行通信两种。方式有并行通信和串行通信两种。 1并行通信并行通信单位信息(通常指一个字节)的各位数据单位信息(通常指一个字节)的各位数据同时传同时传送送的通信方法称为并行通信。的通信方法称为并行通信。2串行通信串行通信单位信息的各位数据被分时单位信息的各位数据被分时一位一位依次顺序传一位一位依次顺序传送送的通信方式
4、称为串行通信。的通信方式称为串行通信。 7.1.1 数据通信数据通信图图7-1 并行通信示意图并行通信示意图两种通信特点两种通信特点:并行通信连线多,速度快,适合并行通信连线多,速度快,适合近距离近距离通信;通信;串行通信连线少,速度慢,适合串行通信连线少,速度慢,适合远距离远距离通信。通信。图图7-1 并行通信示意图并行通信示意图图图7-2 串行通信示意图串行通信示意图RXDTXD89C52GNDTXDRXDGND外外部部设设备备1异步通信异步通信(时钟不同,甚至频率不同)(时钟不同,甚至频率不同)异步通信中,传送的数据可以是一个异步通信中,传送的数据可以是一个字符字符代码或代码或一个一个字
5、节字节数据,数据以数据,数据以帧帧的形式一帧一帧传送。的形式一帧一帧传送。7.1.2 异步通信和同步通信异步通信和同步通信图图7-3 异步通信的一帧数据格式异步通信的一帧数据格式10/10/10/100/10/10/10/10/10/118位数据位数据第第n帧帧00/1.空闲位空闲位或或停止位停止位起始位起始位停止位停止位校验位校验位空闲位空闲位起始位起始位2同步通信同步通信(用同一个时钟)(用同一个时钟)在同步通信中,每一数据块发送开始时,先发送在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符一个或两个同步字符,使发送与接收取得同步,然,使发送与接收取得同步,然后再顺序发送数据。
6、数据块的各个字符间后再顺序发送数据。数据块的各个字符间取消起始取消起始位和停止位位和停止位,所以通信速度得以提高,所以通信速度得以提高 。7.1.2 异步通信和同步通信异步通信和同步通信图图7-4 同步通信数据帧格式同步通信数据帧格式7.1.3 波特率波特率在串行通信中,对数据传送速度有一定要求。在串行通信中,对数据传送速度有一定要求。波特率表示每秒传送的位数波特率表示每秒传送的位数,单位为,单位为b/s(记作波特)。(记作波特)。例如:数据传送速率为每秒钟例如:数据传送速率为每秒钟10个字符,若每个字符,若每个字符的一帧为个字符的一帧为11位,则传送波持率为:位,则传送波持率为:11b/字符
7、字符10字符字符/s110b/s异步通信的传送速率一般在异步通信的传送速率一般在5019 200b/s之间之间 。7.1.4 通信方向通信方向单工方式:单工方式:一对传输线只允许一对传输线只允许单方向单方向传送传送数据;数据;半双工方式:半双工方式:一对传输线允许向两个方向一对传输线允许向两个方向中的任一方向传送数据,但中的任一方向传送数据,但不能同时不能同时进行;进行;全双工方式:全双工方式:用两对传输线连接在发送器用两对传输线连接在发送器和接收器上,发送和接收和接收器上,发送和接收能同时能同时进行。进行。7.1.4 通信方向通信方向图图7-5 串行通信传输方式串行通信传输方式发送器发送器发
8、送器发送器数据流数据流(b)半双工方式)半双工方式接接收收器器接接收收器器接接收收器器发发送送器器发送器发送器发送器发送器数据流数据流(a)单工方式)单工方式(c)全双工方式)全双工方式接接收收器器接接收收器器7.1.5 串行通信接口种类串行通信接口种类根据串行通信格式及约定(如同步方式、通根据串行通信格式及约定(如同步方式、通信速率、数据块格式等)不同,形成了许多串行信速率、数据块格式等)不同,形成了许多串行通信接口标准,如常见的:通信接口标准,如常见的:UART(通用异步串行通信接口)(通用异步串行通信接口)USB(通用串行总线接口)(通用串行总线接口)I2C(集成电路间的串行总线)(集成
9、电路间的串行总线)SPI(同步串行外设总线)(同步串行外设总线)485总线、总线、CAN总线接口等总线接口等7.2 串行口串行口结构及控制结构及控制主要内容主要内容7.2.1 MCS-51串行口结构串行口结构7.2.2 特殊功能寄存器特殊功能寄存器7.2.3 波特率设计波特率设计7.2.1 MCS-51串行口结构串行口结构图图7-6 串行口方式串行口方式1、3内部结构示意简图内部结构示意简图分为三个部分:时钟、发送部分、接收部分分为三个部分:时钟、发送部分、接收部分16发送发送SBUF (99H)16输入移位寄存器输入移位寄存器TXD写写SBUF: 发送发送( (程序程序) )读读SBUF:接
10、收接收( (程序程序) )RITI移位时钟移位时钟RXD装载装载SBUF(自动自动)12TH1TL1fosc2SMOD=1SMOD=0T1溢出率溢出率接收接收SBUF (99H)(P3.0)(P3.1) 2TH2TL2foscT2溢出率溢出率7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器1控制状态寄存器控制状态寄存器SCON功能:功能:设置串行口的工作方式和标识串行口状设置串行口的工作方式和标识串行口状态态。字节地址:字节地址:98H,可位寻址可位寻址。复位值:复位值:0000 0000B。格式如下:。格式如下:D7D6D5D4D3D2D1D0SM0 SM1 SM2 RE
11、N TB8 RB8TIRIl SM0和和SM1(SCON.7、SCON.6):串行口工作):串行口工作方式选择位。方式选择位。 7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器SM0 SM1 工作方式工作方式功能说明功能说明波特率波特率00方式方式0同步移位寄存器同步移位寄存器fosc/1201方式方式110位异步通信位异步通信可变,可变,T1或或T2提供提供10方式方式211位位UART 、可多机、可多机fosc/64或或 fosc/3211方式方式311位位UART 、可多机、可多机可变,可变,T1或或T2提供提供lSM2(SCON.5):):多机通信控制位,多机通信控
12、制位,在方式在方式2或或3中使用。中使用。lREN(SCON.4):允许接收控制位。):允许接收控制位。设置设置1,允许接收;清,允许接收;清0:禁止接收。:禁止接收。l TB8(SCON.3):发送数据的第):发送数据的第9位。位。l RB8(SCON.2):接收数据的第):接收数据的第9位。位。l TI(SCON.1):发送中断标志。):发送中断标志。l RI(SCON.0):接收中断标志。):接收中断标志。7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器关于关于TI和和RI:串行发送中断标志串行发送中断标志TI和接收中和接收中断断RI是同一个中断源,是同一个中断源,C
13、PU不知道是发送中断标志不知道是发送中断标志TI还是接收中断标志还是接收中断标志RI产生的中断请求,所以,在产生的中断请求,所以,在全双工通信时,必须由全双工通信时,必须由软件来判别软件来判别。多机通信实现的原理:多机通信实现的原理:各个从机的各个从机的SM2设置为设置为1;主机;主机TB8发送发送1表明是表明是地址,选择接收机;主机地址,选择接收机;主机TB8发送发送0为数据。为数据。(1)实现的条件:)实现的条件:各个从机的各个从机的SM2设置为设置为1。 当当SM2=1时:时:RB8=1,则保留接收到的数据;,则保留接收到的数据;RB8=0则丢弃。则丢弃。(2)实现的方法)实现的方法主机
14、先发送从机地址,并且主机先发送从机地址,并且TB8为为1。 这时各个从机均可接收此地址,目标从机,则对这时各个从机均可接收此地址,目标从机,则对自己的自己的SM2清清0;其它从机保留其它从机保留SM2=1。主机再发送数据,并且主机再发送数据,并且TB8为为0 这时目标从机正常接收数据,其它从机均丢弃。这时目标从机正常接收数据,其它从机均丢弃。7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器地址地址2电源控制寄存器电源控制寄存器PCON电源控制寄存器电源控制寄存器PCON (地址为地址为87H)中中只有只有SMOD位与串行口工作有关位与串行口工作有关。D7D6D5D4D3D2
15、D1D0SMOD-GF1GF0PDIDL7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器SMOD(PCON.7):):波特率倍增位。波特率倍增位。串行口工作于方式串行口工作于方式1、方式、方式2和方式和方式3时,时,SMOD1,串行口波特率加倍,串行口波特率加倍。复位值:复位值:0000 0000B。不能进行位寻址不能进行位寻址。7.2.3 波特率设计波特率设计方式方式0和方式和方式2的波特率是的波特率是固定的固定的,方式,方式1和方式和方式3的波特率是由定时器的波特率是由定时器T1的溢出率的溢出率来来决定的。在增强型单片机中,也可以使用决定的。在增强型单片机中,也可以使用
16、T2作波特率发生器作波特率发生器。1方式方式0的波特率的波特率方式方式0为为同步移位寄存器同步移位寄存器方式。方式。固定为振荡频率的固定为振荡频率的1/12。并不受。并不受PCON寄寄存器中存器中SMOD位的影响。位的影响。方式方式0的波特率的波特率=fosc/122方式方式2的波特率的波特率方式方式2是是波特率只有两种波特率只有两种(fosc/64或或 fosc/32)、)、11位的异步通信位的异步通信 ,可多机通信。,可多机通信。时钟:时钟:接收与发送的时钟直接来自振荡接收与发送的时钟直接来自振荡频率频率fosc,是,是fosc/2,并且还与,并且还与PCON中中SMOD位有关。位有关。其
17、波特率为:其波特率为:当当SMOD=0时,波特率为时,波特率为fosc的的1/64;若;若SMOD=1,则波特率为,则波特率为fosc的的1/32。即。即方式方式2的波特率的波特率= 2SMODfosc/647.2.3 波特率设计波特率设计3方式方式1和方式和方式3的波特率的波特率(1)T1作波特率发生器作波特率发生器在最典型应用中,定时器在最典型应用中,定时器T1选用模式选用模式2定时,此时定时,此时n=8,设定时器的初值为,设定时器的初值为X:于是,于是,X=256 - -322SMOD12fosc322SMOD波特率SMODfosc+3843841 1)(方式方式1、3的波特率的波特率=
18、 (T1溢出速率)溢出速率)即波特率即波特率= /(2n -初值)初值)7.2.3 波特率设计波特率设计(2)T2作波特率发生器作波特率发生器设寄存器设寄存器T2CON的位的位TCLK=1和(或)和(或)RCLK=1时,允许串行口从时,允许串行口从T2获得发送和(或)获得发送和(或)接收的波特率。接收的波特率。 串行口方式串行口方式1、3的波特率的波特率=T2溢出率溢出率/16定时器定时器2作波特率发生器时,计数在每个作波特率发生器时,计数在每个状态状态周期周期递增。这样:递增。这样:方式方式1、3的波特率的波特率fb= (RCAP2H、RCAP2L)=65536-fosc/fb/32控制字、
19、模式字:控制字、模式字:T2CON=0011 0100B=34HT2MOD=00HRCAP2L)RCAP2H,( -65536655363232 (振荡频率振荡频率7.2.3 波特率设计波特率设计主要内容主要内容7.3.1 串行口方式串行口方式07.3.2 串行口方式串行口方式17.3.3 串行口方式串行口方式2和方式和方式37.3 串行口工作方式串行口工作方式7.3.1 串行口方式串行口方式0方式方式0为为同步移位寄存器输入同步移位寄存器输入/输出方式,输出方式,常用于扩展常用于扩展I/O口口。RXD为数据输入或输出为数据输入或输出,TXD输出移位输出移位时钟时钟,作为外接部件的同步信号。,
20、作为外接部件的同步信号。方式方式0下,收下,收/发的仅发的仅8位数据位数据,无起始位、,无起始位、奇偶校验位及停止位,低位在前、高位在后;奇偶校验位及停止位,低位在前、高位在后;波特率是固定的,为波特率是固定的,为fosc/12,即机器周,即机器周期频率期频率 。启动发送:启动发送:TI=0、写、写SBUF启动接收:启动接收:RI=0、REN置置17.3.1 串行口方式串行口方式0方式方式方式方式0发送发送方式方式0接收接收7.3.1 串行口方式串行口方式01 162 153 144 135 126 117 108 9SH/LDCLKE并并 F入入 GH串出串出 QGND74LS165VCC时
21、钟禁止时钟禁止DC 并并B 入入A串入串入QH串出串出并入并入/串出串出1 162 153 144 135 126 117 108 9Q1Q2Q3Q4Q5Q6Q7GND74Hc595串入串入/并出并出串入串入Q0DSOE ST_CPSH_CPMRQ77.3.1 串行口方式串行口方式0串串 A入入 BQAQBQCQDGNDVCCQHQGQFQECLRCLK1 142 133 124 115 106 97 874LS1641 162 153 144 135 126 117 108 9Q1Q2Q3Q4Q5Q6Q7GND74Hc595VCCQ0DSOE ST_CPSH_CPMRQ7并并出出串入串入/并
22、出并出串入串入/并出并出串入串入用串行口方式用串行口方式0扩展并行输出扩展并行输出/输入口输入口 7.3.1 串行口方式串行口方式0发送电路发送电路接收电路接收电路7SH/LD扩扩展展并并行行输输出出扩扩展展并并行行输输入入7.3.2 串行口方式串行口方式1方式方式1真正用于串行发送或接收真正用于串行发送或接收。TXD与与RXD分别用于发送、接收数据。分别用于发送、接收数据。帧格式:帧格式:1位起始位位起始位、8位数据位位数据位(低位在前)、(低位在前)、1位停止位位停止位,共,共10位。位。在接收时,停止位进入在接收时,停止位进入SCON的的RB8此方式的此方式的波特率可调,由波特率可调,由
23、T1或或T2控制控制。SCON=0101 0000b=0 x50 1、方式、方式1发送发送TI=0、写、写SBUF启动发送启动发送7.3.1 串行口方式串行口方式0方式方式方式方式1接收接收方式方式1发送发送7.3.2 串行口方式串行口方式1 2、方式、方式1接收接收1)接收条件:)接收条件:SCON中的中的REN置置12)接收过程:)接收过程:REN置置1后,串行口对接收引脚后,串行口对接收引脚RXD检测,当检测,当RXD由高变低时开始移位接收;接收由高变低时开始移位接收;接收完后将完后将停止位装入停止位装入RB8中中。3)接收的数据有效的条件)接收的数据有效的条件(两条两条) : a、RI
24、=0;b、SM2=0,或者,或者SM2=1并且并且RB8=1 满足以上满足以上2条,条,则将则将8位数据装入位数据装入SBUF,且,且RI置置1。有以下情况之一则数据无效:有以下情况之一则数据无效: a) RI=1; b) SM2=1并且并且RB8=0 注意:除了方式注意:除了方式2、3的多机通信之外,的多机通信之外,SM2应清应清07.3.3 串行口方式串行口方式2和方式和方式3串行口工作在方式串行口工作在方式2和方式和方式3均为均为每帧每帧11位异步位异步通信格式通信格式,由,由TXD和和RXD发送与接收。发送与接收。 方式方式2和和3的操作是完全一样的,不同的只是特的操作是完全一样的,不
25、同的只是特波率。波率。每帧每帧11位:位:即即1位起始位位起始位、8位数据位位数据位(低位在(低位在前)、前)、1位可编程的第位可编程的第9数据位数据位和和1位停止位位停止位。发送时,发送时,第第9数据位(数据位(TB8)可以设置为)可以设置为1或或0,在校验时可将奇偶位装入在校验时可将奇偶位装入TB8;接收时,接收时,第第9数据位进入数据位进入SCON的的RB8。SCON=1001 0000b=0 x90方式方式2接收接收SCON=1101 0000b=0 xD0方式方式3接收接收7.4 串行口应用举例串行口应用举例 主要内容主要内容 7.4.1 同步方式应用同步方式应用 7.4.2 异步方
26、式应用异步方式应用7.4.1 同步方式应用同步方式应用MSC-51单片机的串行口在方式单片机的串行口在方式0时,以时,以同步方同步方式操作式操作。外接串入。外接串入/并出或并入并出或并入/串出器件,可串出器件,可实现实现I/O口的扩展口的扩展。例例7-2 用用89C52串行口外接串行口外接74HC595串入串入/并出并出移位寄存器扩展移位寄存器扩展8位并行输出口,位并行输出口,8位并行输出口的位并行输出口的每位都接一个发光二极管,要求每位都接一个发光二极管,要求8位发光二极管循位发光二极管循环点亮。环点亮。数据的输出通过数据的输出通过RXD发送发送,移位,移位时钟时钟通过通过TXD送出,送出,
27、74HC595用于串用于串/并转换。并转换。7.4.1 同步方式应用同步方式应用图图7-13 方式方式0扩展输出电路扩展输出电路89C52RXDTXDP3.6DSOE 74HC595SH_CP MRQ7ST_CP 级联输出级联输出 输出清输出清0 C语言程序清单:语言程序清单:#include#includeintrins.hsbit P3_6=P36;void delay10 xms(unsigned char x)/设晶振为设晶振为12MHzunsignedint i;while(x-)for(i=0;i830;i+);7.4.1 同步方式应用同步方式应用void main() unsig
28、ned char dd=0 x01;SCON=0 x0;/设置串口方式设置串口方式0while(1)TI=0; /清除发送结束标志清除发送结束标志SBUF=dd; /发送发送dd=_crol_(dd,1);/左移左移1位位while(TI=0);/等待发送结束等待发送结束P3_6=0;P3_6=1;/输出数据输出数据delay10 xms(100);/延时延时1s 7.4.1 同步方式应用同步方式应用7.4.1 同步方式应用同步方式应用MSC-51单片机的串行口在方式单片机的串行口在方式0时,以时,以同步方同步方式操作式操作。外接串入。外接串入/并出或并入并出或并入/串出器件,可串出器件,可实
29、现实现I/O口的扩展口的扩展。例例7-2 用用89C52串行口外接串行口外接74HC164串入串入/并出并出移位寄存器扩展移位寄存器扩展8位并行输出口,位并行输出口,8位并行输出口的位并行输出口的每位都接一个发光二极管,要求每位都接一个发光二极管,要求8位发光二极管循位发光二极管循环点亮。环点亮。数据的输出通过数据的输出通过RXD发送发送,移位,移位时钟时钟通过通过TXD送出,送出,74HC164用于串用于串/并转换。并转换。7.4.1 同步方式应用同步方式应用图图7-13 方式方式0扩展输出电路扩展输出电路C语言程序清单:语言程序清单:#includesbit P1_0=P10;void m
30、ain() unsigned char i; SCON=0 x00;/串行口方式串行口方式0初始化初始化ES=1;EA=1;while(1)for(i=0;i8;i+) P1_0=0;/关闭并行输出关闭并行输出SBUF=1i; delay();/延时函数,读者自行添加延时函数,读者自行添加 7.4.1 同步方式应用同步方式应用void s_srv() interrupt 4 /中断服务程序中断服务程序TI=0;P1_0=1;/打开并行输出打开并行输出汇编语言程序清单:汇编语言程序清单:ORG 0000HLJMPMAINORG 0023HLJMPS_SRV ;串行口中断服务程序串行口中断服务程序
31、7.4.1 同步方式应用同步方式应用7.4.1 同步方式应用同步方式应用MAIN:MOVSCON,#00H;串行口方式串行口方式0初始化初始化SETBESSETBEAMOV A,#1LOOP:CLRP1.0;关闭并行输出关闭并行输出MOVSBUF,A;开始串行输出开始串行输出ACALLDELAYRLASJMPLOOP;等待中断等待中断S_SRV:CLRTI ;中断服务程序中断服务程序SETB P1.0RETIEND 7.4.1 同步方式应用同步方式应用例例7-3 用用89C52串行口外接串行口外接74HC165并出并出/串入串入移位寄存器扩展移位寄存器扩展8位并行输入位并行输入口,口,8位并行
32、输入口的每位都接一个拨位并行输入口的每位都接一个拨动开关,要求动开关,要求读入读入开关量的值。开关量的值。7.4.1 同步方式应用同步方式应用图图7-14 方式方式0扩展输入电路扩展输入电路89C52RXDTXDP1.0P1.1QH74HC165CLK SH/LO INH 时钟禁止时钟禁止7.4.1 同步方式应用同步方式应用解:解:数据的输入通过数据的输入通过RXD接收,移位时接收,移位时钟通过钟通过TXD送出,时钟禁止端接地,使时钟送出,时钟禁止端接地,使时钟有效,有效,P1.1接一按键,当按键按下时输入一接一按键,当按键按下时输入一次数据,数据接收采用次数据,数据接收采用查询方式查询方式。
33、C语言程序清单:语言程序清单:#includesbit LOAD165=P10;sbit KEY=P11;C语言程序清单:语言程序清单:#includesbit LOAD165=P10;sbit KEY=P11;void delay10 xms(unsigned char x)/设晶振为设晶振为12MHzunsignedint i;while(x-)for(i=0;i830;i+);7.4.1 同步方式应用同步方式应用void main() SCON=0; /设置串口方式设置串口方式0,不允许接收,不允许接收 while(1) if(KEY=0) /按键按下按键按下 delay10 xms(2
34、); /延时延时20ms去抖去抖 if(KEY=0) while(KEY=0); /等待按键释放等待按键释放 LOAD165=0; /装入并行数据装入并行数据 LOAD165=1; /锁存,允许串行移位锁存,允许串行移位 RI=0; /准备输入准备输入 REN=1; /启动接收,输入启动接收,输入 while(RI=0);/等待输入完成等待输入完成P0=SBUF; /将读到的数据从将读到的数据从P0输出输出REN=0;/准备下次启动准备下次启动 7.4.1 同步方式应用同步方式应用汇编语言程序清单:汇编语言程序清单:MAIN:MOV SCON,#00H;串行口方式串行口方式0初始化初始化SET
35、B RILOOP:JB P1.1,LOOPACALL DELAYJB P1.1,LOOPJNB P1.1,$CLR P1.0SETB P1.0SETB RENCLR RIJNB RI,$MOV P2,SBUFCLR RENSJMP LOOPEND7.4.1 同步方式应用同步方式应用7.4.2 异步方式应用异步方式应用串行口方式串行口方式1与方式与方式3很近似很近似,波特率设置一样波特率设置一样,不同之处在于方式不同之处在于方式3比方式比方式1多了一个数据附加位,多了一个数据附加位,即特征位,也叫程控位即特征位,也叫程控位 。方式方式2与方式与方式3基本一样基本一样(只是(只是波特率不同波特率不
36、同),),接收接收/发送发送11位信息:开始为位信息:开始为1位低电平的起始位,位低电平的起始位,中间中间8位数据位,之后为位数据位,之后为1位程控位(由发送的位程控位(由发送的TB8决定),最后是决定),最后是1高电平的停止位。高电平的停止位。 例例7-4 对对89C52单片机编程,将片内单片机编程,将片内RAM 50H5FH中的数据,用串行口方式中的数据,用串行口方式3以中断方式发送以中断方式发送给另一台机器,并用第给另一台机器,并用第9个数据位作奇偶校验,设个数据位作奇偶校验,设晶振为晶振为11.0592MHz,波特率为,波特率为4800b/s。方法步骤:方法步骤:选择串口及校验方式选择
37、串口及校验方式计算计算T1初值初值主函数主函数(初始化初始化) 中断函数中断函数解:解:用用TB8作奇偶校验位作奇偶校验位,在数据写入发送缓,在数据写入发送缓冲器之前,先将数据的奇偶位冲器之前,先将数据的奇偶位P写入写入TB8,这时,这时,第第9位数据作奇偶校验用,发送位数据作奇偶校验用,发送采用中断方式采用中断方式。用用T1做波特率发生器,做波特率发生器,T1模式模式2定时定时初值初值X=256- - = =2507.4.2 异步方式应用异步方式应用波特率SMODfosc+3843841 1)(C语言程序清单:语言程序清单:#includeunsigned char i=0,array16
38、_at_ 0 x50; /数据区数据区void main() SCON=0 xc0;/置串口方式置串口方式3,只发,只发TMOD=0 x20;/定时器初始化定时器初始化TL1=250;TH1=250;TR1=1; ES=1; EA=1; /中断初始化中断初始化ACC=arrayi;/发送第一个数据送发送第一个数据送TB8=P; /累加器累加器,目的取目的取P位位SBUF=ACC;/发送一个数据发送一个数据while(1);/等待中断等待中断7.4.2 异步方式应用异步方式应用void serial_int() interrupt 4 /串口中断服务程序串口中断服务程序if(RI) RI=0;e
39、lseTI=0;/清发中断标志清发中断标志ACC=array+i;/取下一个数据取下一个数据TB8=P;SBUF=ACC;if(i14) /发送完毕,发送完毕,ES=0;/禁止串口中断禁止串口中断 7.4.2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:ORG0000HSJMPMAIN;上电,转主程序上电,转主程序ORG0023HSJMPSERVER;转中断服务程序转中断服务程序MAIN:MOVSP,#0DFH;设置堆栈指针设置堆栈指针MOVSCON,#0C0H;设置串口方式设置串口方式3发送发送MOVTMOD,#20H; T1以模式以模式2定时定时MOVTL1,#0F4HMO
40、VTH1,#0F4HSETBTR1SETBES;允许串行口中断允许串行口中断SETBEA;CPU开中断开中断MOVR0,#50HMOVR7,#157.4.2 异步方式应用异步方式应用MOVA,R0MOVC,PMOVTB8,C ;送奇偶标志位到送奇偶标志位到TB8MOVSBUF,A ;发送第一个数据发送第一个数据SJMP$SERVER:JBCRI, ENDT ;清除发送中断标志清除发送中断标志CLRTIINCR0 ;修改数据地址修改数据地址MOVA,R0MOVC,PMOVTB8,CMOVSBUF,A ;发送下一个数据发送下一个数据DJNZR7,ENDT ;判断数据块是否发送完判断数据块是否发送完
41、CLRES ;否则,禁止串行口中断否则,禁止串行口中断ENDT:RETI ;中断返回中断返回7.4.2 异步方式应用异步方式应用例例7-5 编写一单片机程序,将从串行口接编写一单片机程序,将从串行口接收的收的16字节数据送入片内字节数据送入片内RAM的的50H5FH单元中。要求单元中。要求波特率为波特率为2400b/s,作奇偶校验,作奇偶校验,设单片机的晶振频率为设单片机的晶振频率为11.0592 MHz。解:解:RB8作奇偶校验位作奇偶校验位,接收时,将接收,接收时,将接收到的数据的奇偶校验位与到的数据的奇偶校验位与RB8对比,以判断对比,以判断正确与否。正确与否。将串行口设置为将串行口设置
42、为方式方式3工作工作。用。用中断方式接收。中断方式接收。7.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char;unsigned char i=0, array16 _at_ 0 x50;/定义数据定义数据void main() SCON=0 xd0; /设置串口方式设置串口方式3,允许接收,允许接收TMOD=0 x20;/T1模式模式2定时定时TH1=0 xf4;TL1=0 xf4;TR1=1;ES=1;EA=1;while(1);7.4.2 异步方式应用异步方式应用void int_ser() interrupt 4 if(TI)TI=
43、0; /循环接收循环接收16个数据个数据elseRI=0;ACC=SBUF;if(RB8=P) /校验正确校验正确arrayi+=ACC; if(i15)ES=0;else /校验不正确校验不正确F0=1;err(); 7.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char i;unsigned char array16 _at_ 0 x50; /接收缓冲区接收缓冲区void main()SCON=0 xd0; /设置串口方式设置串口方式3,允许接收,允许接收TMOD=0 x20;/T1模式模式2定时定时TH1=0 xf4;TL1=0 xf
44、4;TR1=1;7.4.2 异步方式应用异步方式应用for(i=0;i16;i+) /循环接收循环接收16个数据个数据while(!RI); /等待一次接收完成等待一次接收完成RI=0;ACC=SBUF;if(RB8=P) /校验正确校验正确arrayi=ACC; else /校验不正确校验不正确F0=1;break; while(1);7.4.2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:MAIN: MOV SCON,#0D0H ;串口方式串口方式3,允许接收,允许接收MOV TMOD,#20H; T1以方式以方式2定时定时MOV TL1,#0F4HMOV TH1,#0F4
45、HSETB TR1MOV R0,#50H;首地址送首地址送R0MOV R7,#10H;数据长度送数据长度送R7WAIT:JNB RI,$;等待接收完成等待接收完成 CLR RI;清中断接收标志清中断接收标志RI MOV A,SBUF;从串口读数送累加器从串口读数送累加器7.4.2 异步方式应用异步方式应用JNB P,PNP;P=0,转,转PNPJNB RB8,ERROR;P=1、RB8=0,转出错,转出错SJMP RIGHTPNP: JBRB8,ERROR;P=0、RB8=1,转出错,转出错RIGHT:MOV R0,A;存数存数INC R0;修改地址指针修改地址指针DJNZ R7,WAIT;未
46、接收完,继续未接收完,继续CLR F0;置正确接收标志置正确接收标志F0=0SJMP$ERROR:SETB F0;置错误接收标志置错误接收标志F0=1SJMP$7.4.2 异步方式应用异步方式应用例例7-6 用第用第9个数据位作奇偶校验位,个数据位作奇偶校验位,编写串行编写串行口方式口方式3的全双工通信程序的全双工通信程序,设双机将各自键盘的,设双机将各自键盘的按键键值发送给对方,接收正确后放入缓冲区(显按键键值发送给对方,接收正确后放入缓冲区(显示及做其它处理),设晶振为示及做其它处理),设晶振为11.059 2 MHz,波特,波特率为率为9 600b/s。解:解:因为是全双工方式,通信双方
47、的程序一样。因为是全双工方式,通信双方的程序一样。发送和接收都采用中断方式。发送和接收都采用中断方式。T1初值初值x=0 xfdSCON=11010000b=0 xd07.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char buffer, k;void main()SCON=0 xd0;/置串口方式置串口方式3, 允许接收允许接收TMOD=0 x20;/T1以模式以模式2定时定时TL1=0 xfd;TH1=0 xfd;TR1=1;ES=1; /开串行口中断开串行口中断EA=1;/开总中断开总中断7.4.2 异步方式应用异步方式应用while
48、(1)k=key(); /读取按键值读取按键值if(k!=0 xff) /无键按下返回无键按下返回0 xffACC=k; /将键值送累加器,取将键值送累加器,取P位位TB8=P; /送送TB8SBUF=ACC; /发送发送display(); /显示程序显示程序7.4.2 异步方式应用异步方式应用void serial_server() interrupt 4if(TI)/发送引起,清发送引起,清TITI=0;else/否则,接收引起否则,接收引起RI=0;ACC=SBUF; /读取接收数据读取接收数据if(RB8=P)/校验正确,校验正确,buffer=ACC;/存入缓冲区存入缓冲区7.4.
49、2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:ORG 0000HSJMP MAIN ;跳转到主程序跳转到主程序ORG 23HLJMP S_SERV ;跳转到串口中断服务程序跳转到串口中断服务程序MAIN:MOV SP,#0DFH ;设置堆栈指针设置堆栈指针MOV SCON,#0D0H ;串口初始化串口初始化MOV TMOD,#20H ; T1以模式以模式2定时定时MOV TL1,#0FDHMOV TH1,#0FDH ;定时器定时器1赋初值赋初值7.4.2 异步方式应用异步方式应用SETB TR1 ;启动定时器启动定时器1SETB ES ;开中断开中断SETB EALOOP:L
50、CALL KEY;读取按键读取按键(存于存于A中中), ;有键按下返回键值,有键按下返回键值,CJNE A,#0FFH,SEND ;无键按下返回无键按下返回0FFH,;有键按下转发送有键按下转发送NEXT:LCALL DISPLAY ;调用显示调用显示SJMP LOOP ;主程序循环主程序循环7.4.2 异步方式应用异步方式应用SEND:MOV C,PMOV TB8,CMOV SBUF,A;带校验位发送带校验位发送LJMP NEXT;循环循环S_SERV:;中断服务程序;中断服务程序JBC RI,RECV ;是接收中断转接收处理是接收中断转接收处理CLR TI; 是发送中断,清是发送中断,清T