1、第一讲第一讲 80C51串行接口串行接口学习目标:n单片机串行通信单片机串行通信I/O接口的结构接口的结构n串行通信控制寄存器串行通信控制寄存器n单片机串行通信的工作方式单片机串行通信的工作方式n以及串行通信应用。以及串行通信应用。一、一、串行通信基本概念串行通信基本概念 通讯:信息交换通讯:信息交换计算机计算机 计算机计算机计算机计算机 外设外设应用:多机系统、计算机网络应用:多机系统、计算机网络方方式式并行通信并行通信 串行通信串行通信 异异步通信方式按字符字符传输 同同步通信方式按数据块数据块传输 单工单工 半双工半双工 全双工全双工并行通信:数据多位同时传送并行通信:数据多位同时传送控
2、制简单,传输速度快,传输线较多控制简单,传输速度快,传输线较多串行通信:数据字节一位一位在一条传输串行通信:数据字节一位一位在一条传输线上逐个传送。线上逐个传送。传输线少,可利用电话网,但传送控制复杂。传输线少,可利用电话网,但传送控制复杂。异步通信异步通信:收、发设备使用各自时钟收、发设备使用各自时钟。字符之间是异步的字符之间是异步的,但同一字符内是同步的但同一字符内是同步的(各位各位间距均为间距均为”位间隔位间隔”的整数倍的整数倍)同步通信同步通信:发送方时钟与接收方时钟同步。发送方时钟与接收方时钟同步。既保持位同步,也保持字符同步。既保持位同步,也保持字符同步。外同步外同步 自同步自同步
3、保持位同步保持位同步,也保持字符同步也保持字符同步.单工单工 半双工半双工 全双工全双工 例如例如:广播广播 大哥大大哥大 手机手机串行通信的传输方向串行通信的传输方向 传输速率传输速率比特率比特率:每秒钟传输二进制代码的位数bps波特率波特率:每秒钟调制信号变化的次数。单位是:波特(Baud)。例如:数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:10b120s1200bs1200波特传输距离与传输速率的关系传输距离与传输速率的关系:传输距离随传输速率的增加而减小。传输距离随传输速率的增加而减小。传输速率与传输距离传输速率与传输距离 1
4、1、RS-232CRS-232C接口接口 EIA(美国电子工业协会)(美国电子工业协会)1969年修订年修订RS-232C标准,它定义了标准,它定义了DTE与与DCE间间的物理接口标准。的物理接口标准。二、串行通信接口标准二、串行通信接口标准 过程特性过程特性 规定了信号间的时序关系规定了信号间的时序关系。近程通信连接近程通信连接 远程通信连接远程通信连接 2、PC与外设的与外设的RS-232直接连接直接连接PC机与单片机串行通信接口示意图机与单片机串行通信接口示意图三、串行接口的结构三、串行接口的结构 主要由两个数据缓冲寄存器主要由两个数据缓冲寄存器SBUF和一个输入移位寄存器,以及一和一个
5、输入移位寄存器,以及一个串行控制寄存器个串行控制寄存器SCON(TIRI)等组成。等组成。CPU波特率发生器SBUF门TXDRXD串行口中断接收控制器发送控制器移位寄存器TIRISBUFT1ASCON 设定工作方式、接收设定工作方式、接收/发送控制以及设置状态标志发送控制以及设置状态标志 1、80C51串行口的控制寄存器串行口的控制寄存器-SC0N SM0 SM1 SM2 REN TB8 RB8 TI RISCON SCON(98H)(98H)SM0、SM1:工作方式设置位:工作方式设置位 0 0:移位寄存器:移位寄存器 ,fosc/12 0 1:10位异步收发器(位异步收发器(8位数据),位
6、数据),波特率可变波特率可变 1 0:11位异步收发器(位异步收发器(9位数据),位数据),fosc/64或或fosc/32 1 1:11位异步收发器(位异步收发器(9位数据),位数据),波特率可变波特率可变 SM2,多机通信控制位。,多机通信控制位。主要用于方式主要用于方式2和方式和方式3。对于接收机。对于接收机 SM2=0,收到,收到RB8(0或或1)即可使收到的数据进入)即可使收到的数据进入 SBUF,并激活,并激活RI。SM2=1,收到的,收到的RB80时,收到的信息丢弃,不激活时,收到的信息丢弃,不激活 RI;若收到的;若收到的RB81时,收到的数据进入时,收到的数据进入SBUF,并
7、,并 激活激活 RI,进而在中断服务中将数据从,进而在中断服务中将数据从SBUF读走。读走。方式方式0时,时,SM2必须是必须是0。方式方式1时,时,SM2=1时,只有接收到有效停止位时,时,只有接收到有效停止位时,RI才激活。才激活。REN,允许串行接收位。,允许串行接收位。置置REN=1,启动串口接收过程,启动串口接收过程置置REN=0,则禁止串口接收,则禁止串口接收 TB8,在方式在方式2、3中,是发送数据的第中,是发送数据的第9位位 数据的奇偶校验位数据的奇偶校验位 地址帧地址帧/数据帧的标志位数据帧的标志位 RB8,在方式在方式2、3中,是接收到数据的第中,是接收到数据的第9位位奇偶
8、校验位奇偶校验位地址帧地址帧/数据帧的标志位。数据帧的标志位。方式方式1时,若时,若SM2=0,则,则RB8是接收到的停止位。是接收到的停止位。TI,发送中断标志位。,发送中断标志位。方式方式0时,串行发送第时,串行发送第8位数据结束时位数据结束时其它方式,串行发送停止位的开始时其它方式,串行发送停止位的开始时硬件使硬件使TI置置1,发中断申请。必须在中断服务程,发中断申请。必须在中断服务程序中用序中用软件将其清软件将其清0。RI,接收中断标志位。,接收中断标志位。方式方式0时,串行接收第时,串行接收第8位数据结束时位数据结束时其它方式,串行接收停止位的中间时其它方式,串行接收停止位的中间时硬
9、件使硬件使RI置置1,发中断申请。必须在中断服务程,发中断申请。必须在中断服务程序中用序中用软件将其清软件将其清0。2、PCON 电源控制寄存器:电源控制寄存器:SMOD,波特率倍增位。波特率倍增位。在方式在方式1、2、3时,波特率与时,波特率与SMOD有关:有关:SMOD=1时,波特率提高一倍。复位时时,波特率提高一倍。复位时SMOD=0。SMOD PCON PCON(97H)(97H)注:注:PCON不能进行位寻址,只能字节寻址,串不能进行位寻址,只能字节寻址,串行通信只用了其中的最高位。行通信只用了其中的最高位。四、四、80C51串行口的工作方式串行口的工作方式n1方式方式0_ 8位数据
10、位数据 n串行接口工作方式串行接口工作方式0为同步移位寄存器方式,为同步移位寄存器方式,多用于多用于I/O口的扩展,其波特率是固定的,为口的扩展,其波特率是固定的,为fosc/12。TXD引脚输出同步移位脉冲,引脚输出同步移位脉冲,RXD引脚串行输入引脚串行输入/输出。输出。方式方式0接收和发送电路接收和发送电路n1.方式方式0:移位寄存器方式:移位寄存器方式写SBUF内部移出脉冲RXD(数据输出)TXD(移位时钟)TID0D1D2D3D4D5D6D7方式方式0发送时序发送时序写SCON,清RI,置REN内部移出脉冲RIRXD(数据输入)TXD(移位时钟)D0D1D2D3D4D5D6D7方式方
11、式0接收时序接收时序方式0时序方式方式0掌握:掌握:n1、8位数据,波特率为位数据,波特率为F0SC/12n2、低位在前,高位在后、低位在前,高位在后n3、TI,再发送数据,软件清,再发送数据,软件清0,CLR TIn4、RI,再接收数据,软件清,再接收数据,软件清0,CLR RIn5、同步通信,无起始位和停止位、同步通信,无起始位和停止位n2.方式方式1_ 10位数据位数据 n在方式在方式l时,串行口被设置为波特率可时,串行口被设置为波特率可变的变的8位异步通信接口。发送位异步通信接口。发送/接收接收1帧帧数据为数据为10位,其中位,其中1位起始位、位起始位、8位数位数据位(先低位后高位)和
12、一位停止位据位(先低位后高位)和一位停止位10位数据的异步通信。帧格式如图所示位数据的异步通信。帧格式如图所示.方式方式1掌握:掌握:n1、一帧为帧为10位信息,1位起始(0),8位数据,1位停止(1)n2、波特率=P124n3、异步通信n4、接收时,RB8里是停止位,数据位在SBUF(SM2=0)方式方式1时序时序n一帧数据为一帧数据为10位位:1位起始位、位起始位、8位数据位和位数据位和1位停止位。位停止位。写写SBUFTXD起始起始位位停止停止位位TID0D1D2D3D4D5D6D7方式方式1发送时发送时序:序:起始起始位位停止停止位位RXDRI采样采样时间时间D0D1D2D3D4D5D
13、6D7方式方式1接收时接收时序:序:方式1时序n3 3方式方式2 2_ 11位数据位数据 n串行口工作为方式串行口工作为方式2 2时,被定义为时,被定义为9 9位异步通信接口。发位异步通信接口。发送送/接收接收1 1帧数据为帧数据为1111位,其中位,其中1 1位起始位、位起始位、8 8位数据位、位数据位、1 1位控制位控制/校验位和校验位和1 1位停止位。控制位停止位。控制/校验位为第校验位为第9 9位数位数据。据。n4 4方式方式3 3_ 11位数据位数据n方式式3 3为波特率可变的为波特率可变的1111位异步通信方式,除了波特率位异步通信方式,除了波特率有所区别之外,其余同方式有所区别之
14、外,其余同方式2 2。11位数据的异步通信位数据的异步通信工作方式掌握:工作方式掌握:n1、几种工作方式波特率不同n2、传送的位数不同,方式0是8位(数据位),方式1是10(8位数据SBUF,1个起始、1位停止RB8),方式2和方式3都是11位(8位数据,1位控制/校验位RB8、TB8,1位起始和1位停止位)n3、方式0是同步,方式1、2、3是异步5、波特率的计算、波特率的计算方式方式0、2的波特率是固定的,而方式的波特率是固定的,而方式1、3的波特率的波特率是可变的,由定时器是可变的,由定时器T1的溢出率来决定。的溢出率来决定。方式方式0波特率波特率=fosc/12方式方式2波特率波特率=(
15、2SMOD/64)fosc 方式方式1波特率波特率=(2SMOD/32)(T1溢出率)溢出率)方式方式3波特率波特率=(2SMOD/32)(T1溢出率)溢出率)K为定时器T1的位数。)初值21(12f溢出率T1定时时KOSC波特率/(b/s)fosc/MHzSMOD 定时器1C/模式初始值方式0:1 M方式2:375 k方式1,3:62.5 k19.2 k9.6 k4.8 k2.4 k1.2 k137.5 k11011012121211.05911.05911.05911.05911.05911.9866121110000000000000000222222221FFHFDHFDHFAHF4H
16、E8H1DH72HFEEBHT)x256(12f322oscsmod例:要求串行口以方式例:要求串行口以方式1 1工作,通信波特率为工作,通信波特率为2400b/s2400b/s,设振,设振 荡频率荡频率foscfosc为为6MHz6MHz,请初始化,请初始化T1T1和串口。和串口。解:若选解:若选SMOD=1SMOD=1,则,则T1T1时间常数时间常数 N=256N=2562121 6 6 106/(384106/(384 2400)=242.98243=F3H2400)=242.98243=F3H 则,定时器则,定时器T1T1和串行口的初始化程序如下:和串行口的初始化程序如下:MOVMOV
17、TMODTMOD,#20H#20H;设置;设置T1T1为方式为方式2 2 MOV MOVTH1TH1,#0F3H#0F3H;置时间常数;置时间常数 MOVMOVTL1TL1,#0F3H#0F3H SETB SETBTR1TR1;启动;启动T1T1 ORL ORLPCONPCON,#80H#80H;SMOD=1SMOD=1 MOV MOVSCONSCON,#50H#50H;设串行口为方式;设串行口为方式1 1设置通讯波特率1.1.单片机与单片机的通信单片机与单片机的通信点对点的通信点对点的通信 实现A机向B机发数据B接收并显示接收到的数据 单片机串行口应用举例单片机串行口应用举例 1.1.单片机
18、与单片机的通信单片机与单片机的通信 点对点的通信点对点的通信 借助借助MAX232A,实现,实现RS232标准标准完成完成A、B通信。通信。单片机串行口应用举例单片机串行口应用举例 最简发送端代码最简发送端代码#include unsigned char Send_Num5=1,2,3,4,5;void delay(unsigned int aa)while(aa-);void main()unsigned char ii=0;SCON=0X80;delay(50000);while(1)SBUF=Send_Numii;while(!TI);TI=0;ii+;if(ii=5)ii=0;dela
19、y(50000);最简接收端代码最简接收端代码#include unsigned char code DuanM=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79;unsigned char code WeiM=0 x0fe,0 x0fd,0 x0fb,0 x0f7,0 x0ef,0 x0df,0 x0bf,0 x7f;sbit duan=P20;sbit wei=P21;void Delay(unsigned int i)while(i-);unsigned ch
20、ar Recv_Num5=0,0,0,0,0;unsigned char num=0;最简接收端代码最简接收端代码void Dis_Byte(unsigned char rr,unsigned char ww)duan=1;P1=DuanMrr;duan=0;wei=1;P1=WeiMww;wei=0;Delay(200);P1=0 x00;最简接收端代码最简接收端代码void main()SCON=0X90;IE=0 x90;IP=0 x10;while(1)Dis_Byte(Recv_Num0,3);Dis_Byte(Recv_Num1,4);Dis_Byte(Recv_Num2,5);D
21、is_Byte(Recv_Num3,6);Dis_Byte(Recv_Num4,7);最简接收端代码最简接收端代码void Serial_ISR(void)interrupt 4 using 1 if(RI=1)EA=0;RI=0;Recv_Numnum=SBUF;num+;if(num=5)num=0;EA=1;n串行通信接口标准串行通信接口标准n1.RS-232C通信接口通信接口接口信号:接口信号:9针针D型头型头1569载波检测DCD接收数据RXD发送数据TXD数据终端就绪信号地GND数据装置就绪请求发送RTS清除发送CTS振铃指示MCS-51系列单片机串行通信接口系列单片机串行通信接口
22、电气特性:电气特性:n逻辑逻辑“1”:3V15V;n逻辑逻辑“0”:3V15V。n传输距离传输距离15米。米。n最大负载电容最大负载电容2500pF。n波特率波特率20kb/s。n接受器输入阻抗:接受器输入阻抗:37k。n驱动器输出阻抗驱动器输出阻抗300。n驱动器转换速率驱动器转换速率30V/s。n输出短路电流输出短路电流0.5A。RS232特性 RS-422A通信接口通信接口(9针针D型头型头)1569发送数据负发送数据负TX发送数据正发送数据正TX+接收数据正接收数据正RX+接收数据负接收数据负RX信号地信号地GND 请求发送负请求发送负RTS清除发送正清除发送正CTS+请求发送负请求发
23、送负RTS+清除发送负清除发送负CTSnRS-422标准接口电路的特性标准接口电路的特性:n4根信号线+信号地,共5根线。n允许在相同传输线上连接多个接收节点,最多可接10个节点。n一个主设备(Master),其余为从设备(Salve),从设备之间不能通信。n支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是104k+100(终接电阻)。nRS-422四线接口由于采用单独的发送和接收通道,需要一对单独的双绞线连接。n RS-422的最大传输距离为4000英尺(约1219米),最大传输速率为10Mb/s。n传输距离与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。
24、n100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。只有在很短的距离下才能获得最高速率传输。nRS-422需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。一般在300米以下不需终接电阻。终接电阻接在传输电缆的最远端。RS422接口芯片nMAX3095/MAX3096是RS-422接收器满足国际ESD,标准是同类产品中首批通过严格的、工业界公认的内置ESD保护标准测试的芯片。n要求 MAX3095采用+5V供电,MAX3096由+3.3V供电,接收器传输延迟小于+8ns,器件之间器件与其它不同设备间的最大时延小于16ns,这一特性使其成为远距离通讯设备的理想选择。以10Mbps的速率
25、传输数据时,MAX3095/MAX3096具有1/4负载的输入阻抗,总线节点数可达128个。附加使能输入可将器件置于低功耗关断模式,此时接收器输出为高阻态。电流损耗降至1nA,工作时电源电流仅2.4mA。3.RS-485通信接口:通信接口:将RS-422A的发送数据信号正端与接收数据信号正端连起来,发送数据信号负端与接收数据信号负端连起来就成为RS-485通信接口。RS232通常是九针脚的,RS422一般只接四线通信,RS485通常用两根带屏蔽的绞线通信,没有必要九针脚的接口。nRS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。nRS-485采用半双工工作方式。nRS-485
26、 可联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。nRS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mbps。n在100Kbps速率以下,才可能使用规定最长的电缆长度。一般100米长双绞线最大传输速率仅为1Mbps。n所有器件都工作在5V单电源下。采用单一电源+5 V工作,额定电流为300 A,它完成将TTL电平转换为RS485电平的功能。MAX485接口芯片接口芯片nMAX485接口芯片是Maxim公司的一种RS485芯片。采用单一电源+5 V工作,额定电流为300 A,采用半双工通讯方式。它完成将TTL电平转换为RS485电平的功能。nRO和
27、DI端分别为接收器的输出和驱动器的输入端,与单片机的RXD和TXD相连;n/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;nA端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。nA和B端之间加匹配电阻,一般可选100的电阻。RS-485RS-485常用芯片常用芯片n标准RS-485接口的输入阻抗为12k、相应的标准驱动节点数为32n32个节点:SN75176、SN75276、S
28、N75179、SN75180、MAX485、MAX488、MAX490n64个节点:SN75LBC184n128个节点:MAX1480、MAX487、MAX1487n256个节点:MAX1482、MAX1483、MAX3080MAX3089应用中的常见问题应用中的常见问题n注意防静电n最好使用光电隔离n隔离办法1:用光耦、带隔离的DC-DC、RS-485芯片构筑电路n隔离办法2:用2次集成芯片如MAX1480(内含光耦、DC-DC、MAX1487)接接 口口 性性 能能RS-232CRS-422ARS-485功能功能双向,全双工双向,全双工双向,全双工双向,全双工双向,半双工双向,半双工传输方
29、式传输方式单端单端差分差分差分差分逻辑逻辑“0”电平电平3V15V2V6V1.5V6V逻辑逻辑“1”电平电平3V15V2V6V1.5V6V最大速率最大速率20kb/s10Mb/s10Mb/s最大距离最大距离30m1200m1200m驱动器加载输出电压驱动器加载输出电压5 5V15V2V2V1.5V1.5V接受器输入敏感度接受器输入敏感度3V3V0.2V0.2V0.2V0.2V接收器输入阻抗接收器输入阻抗3 37K7K4K4K7K7K组态方式组态方式点对点点对点1台驱动器:台驱动器:10台台接收器接收器32台驱动器:台驱动器:32台接收器台接收器抗干扰能力抗干扰能力弱弱强强强强传输介质传输介质扁
30、平或多芯电缆扁平或多芯电缆二对双绞线二对双绞线一对双绞线一对双绞线RS232、RS422、RS485对比USB总线n总线电压(差值):“1”:1.3 2.0V;n “0”:-1.3-2.0Vn通讯距离:5mn通讯速率:480Mb/Sn应用:可实现近距离高速点对点通讯nCAN总线PC机与单片机通信机与单片机通信寄存器名称寄存器名称端口地址端口地址复位后初始值复位后初始值COM1COM2发送器保持寄存器(发送器保持寄存器(TBR)3F8H2F8HXXXXXXXXB接收器数据寄存器(接收器数据寄存器(RBR)3F8H2F8HXXXXXXXXB波特绿因子低位寄存器(波特绿因子低位寄存器(DLL)3F8
31、H2F8H00000000B波特绿因子高位寄存器(波特绿因子高位寄存器(DLH)3F9H2F9H00000001B中断允许寄存器(中断允许寄存器(IER)3F9H2F9H00000000B中断标识寄存器(中断标识寄存器(IIR)3FAH2FAH00000000B线路控制寄存器(线路控制寄存器(LCR)3FBH2FBH01100000B调制解调器控制寄存器(调制解调器控制寄存器(MCR)3FCH2FCHXXXX0000B线路状态寄存器(线路状态寄存器(LSR)3FDH2FDHXXXXXXXXB调制解调器状态寄存器(调制解调器状态寄存器(MSR)3FEH2FEHXXXXXXXXB使用串口必须先初始
32、化,有以下使用串口必须先初始化,有以下4个步骤。个步骤。DLHDLL波特率波特率DLHDLL波特率波特率DLHDLL波特率波特率09H00H5000HC0H60000H18H480006H00H7500H60H120000H10H720004H17H11000H40H180000H0CH960003H59H134.500H3AH200000H06H1920003H00H15000H30H240000H03H3840001H80H30000H20H360000H01H115200例:设例:设COM1的波特率为的波特率为9600,则,则outportb(0 x3fb,0 x80););/*写线路控
33、制寄存器,访问波特率因子寄存器写线路控制寄存器,访问波特率因子寄存器*/outportb(0 x3f8,0 x0c););/*写入波特率因子低字节写入波特率因子低字节*/outportb(0 x3f9,0 x00););/*写入波特率因子高字节写入波特率因子高字节*/设置波特率设置波特率PC机串口初始化 设置数据格式设置数据格式 设数据为设数据为7位,位,1位起始位,位起始位,1位停止位,偶校验,位停止位,偶校验,则设置如下:则设置如下:outportb(0 x3fb,0 x1a);设置操作方式设置操作方式 不允许中断:不允许中断:outportb(0 x3fc,0 x03);允许中断:允许中
34、断:outportb(0 x3fc,0 x0b);自测试工作方式,且不允许中断:自测试工作方式,且不允许中断:outportb(0 x3fc,0 x13);设置中断允许寄存器设置中断允许寄存器 开放中断语句:开放中断语句:outportb(0 x3f9,0 x0f);PC机串口初始化机串口初始化例例1 将将PC机的机的COM1初始化为初始化为9600波特率、波特率、7位数据、位数据、偶校验、偶校验、1位停止位、不中断,则位停止位、不中断,则初始程序初始程序如下:如下:initcom1()()outportb(0 x3fb,0 x80););/*写线路控制寄存器,访问波特率因子寄存器写线路控制寄
35、存器,访问波特率因子寄存器*/outportb(0 x3f8,0 x0c););/*写入波特率因子低字节写入波特率因子低字节*/outportb(0 x3f9,0 x00););/*写入波特率因子写入波特率因子 高字节高字节*/outportb(0 x3fb,0 x1a););/*设数据为设数据为7位,位,1位起始位起始 位,位,1位停止位,偶校验位停止位,偶校验*/outportb(0 x3fc,0 x03););/*不允许中断不允许中断*/PC机的发送、接收程序例例2 PC机从机从COM1发送一个字符,程序如下:发送一个字符,程序如下:send(char sendchar)int coms
36、;do /*查询发送缓冲器是否空查询发送缓冲器是否空*/coms=inportb(0 x3fd)&0 x20;while(coms!=0 x20););outportb(0 x3f8,sendchar););例例3.PC机从机从COM1接收一个字符,程序如下:接收一个字符,程序如下:char receive()()char coms,receivechar;waitok:/*查询接收数据是否有效查询接收数据是否有效*/coms=inportb(0 x3fd););if(coms&0 x01)=0)goto waitok;receivechar=inportb(0 x3f8););return
37、receivechar;二、二、PC机与单片机双机通信机与单片机双机通信 PC机与单片机构成主从式上下位计算机系统。机与单片机构成主从式上下位计算机系统。例:从例:从PC机键盘上输入一个字符,然后将这个字符发送给单机键盘上输入一个字符,然后将这个字符发送给单片机,单片机接收到这个字符后,不做任何处理,又将它发回片机,单片机接收到这个字符后,不做任何处理,又将它发回给给PC机,机,PC机将这个字符显示在屏幕上。连接电路如下:机将这个字符显示在屏幕上。连接电路如下:PC机RXDTXDMAX232T1OUTR1INT1IN(R1OUTRXDTXDMCS-51约定:约定:u波特率:波特率:2400b/
38、su信息格式:信息格式:8位数据,位数据,1位停止位位停止位u传送方式:传送方式:PC机采用查询式收发数据,单片机采用中断式收机采用查询式收发数据,单片机采用中断式收发数据发数据 由于PC机是RS-232C电平,单片机是TTL电平,用MAX232进行电平转换。PC机与单片机通信设计机与单片机通信设计 PC机的通信软件机的通信软件#include“stdio.h”main()()char c1,c2;int coms;outportb(0 x3fb,0 x80););/*初始化初始化8250*/outportb(0 x3f8,0 x30););outportb(0 x3f9,0 x00););o
39、utportb(0 x3fb,0 x03););/*8位数据,位数据,1位停止位位停止位*/outportb(0 x3fc,0 x03););c1=getchar();();开开 始始初始化初始化8250有键输入吗?有键输入吗?取键盘字符取键盘字符发送寄存器空否?发送寄存器空否?向单片机发送字符向单片机发送字符接收单片机发回的字符接收单片机发回的字符接收的数据有效码?接收的数据有效码?显示发回的字符显示发回的字符NNNYYY结结 束束PC机发送程序 do coms=inportb(0 x3fd)&0 x20;/*查询发送缓冲器是否空查询发送缓冲器是否空*/while(coms!=0 x20);
40、outportb(0 x3f8,c1);waitok:/*查询接收数据是否有效查询接收数据是否有效*/coms=inportb(0 x3fd);if(coms&0 x01)=0)goto waitok;c2=inportb(0 x3f8);printf(“The return char is:”);putchar(c2);开 始初始化定时器T1初始化串行口启动定时器T1开放中断主程序踏步中断服务程序中断服务程序关中断关中断清接收中断标志清接收中断标志RI保护现场保护现场接收接收PC机发来的字符机发来的字符将字符发送回将字符发送回PC机机开中断,恢复现场开中断,恢复现场中断返回中断返回MCS-5
41、1单片机通信软件主程序主程序中断服务程序中断服务程序主程序:ORG 0000HLJMP MAINORG 0023HLJMP SERVEMAIN:MOV TMOD,#20H ;初始化T1MOV TH1,#0F3HMOV TL1,#0F3HMOV SCON,#50H ;串行口为方式1,REN=1MOV PCON,#80H ;SMOD=1SETB TR1SETB EASETB ESHERE:SJMP HERE单片机接收程序中断服务程序:中断服务程序:SERVE:CLREA ;中断服务程序;中断服务程序 CLRRI PUSHPSW;保护现场;保护现场 SETBRS0 CLRRS1 PUSHACC MO
42、VA,SBUF;接收;接收PC机发来的字符机发来的字符 MOVSBUF,A;将字符回送给;将字符回送给PC机机WAIT:JNBTI,WAIT;等待发送完毕;等待发送完毕 CLRTI POPACC;恢复现场;恢复现场 POPPSW SETBEA RETI END三、三、PC机与单片机通讯多机通信机与单片机通讯多机通信多机通信的关键问题:识别单片机!给单片机编号。多机通信的关键问题:识别单片机!给单片机编号。怎样识别单片机?怎样识别单片机?起始起始位位D0D1D2D3D4D5D6D7奇偶奇偶位位停止停止位位起始起始位位D0D1D2D3D4D5D6D7TB8停止停止位位 从从PC机和单片机帧格式可知
43、:通过软件编程,使得机和单片机帧格式可知:通过软件编程,使得PC机在机在发送地址(单片机编号)时,奇偶位为发送地址(单片机编号)时,奇偶位为1,发送数据时为,发送数据时为0;单片;单片机接收时,机接收时,TB8为为1表示收到的地址,为表示收到的地址,为0表示收到的数据。表示收到的数据。PC机与单片机通讯多机通信n例:从例:从PC机的键盘上输入单片机的编号,要求机的键盘上输入单片机的编号,要求PC机与该单片机进行通信测试,从键盘上输入机与该单片机进行通信测试,从键盘上输入一个字符,发送给某单片机,单片机受到该字符一个字符,发送给某单片机,单片机受到该字符后,又发回给后,又发回给PC机,在屏幕上显
44、示出来。机,在屏幕上显示出来。n由于由于RS-232C不能实现多机通信,故采用不能实现多机通信,故采用RS-422标准。电路如下:标准。电路如下:PC机机TXDRXD232/422转换器转换器RXDTXDMCS-5175175751741号号RXDTXDMCS-5175175751742号号RXDTXDMCS-517517575174n号号PC机与单片机的多级通信 PC机软件设计机软件设计 开开 始始初始化初始化8250输入单片机编号输入单片机编号发送单片机编号发送单片机编号接收单片机送回的编号接收单片机送回的编号取键盘字符取键盘字符编号一致吗?编号一致吗?向单片机发送字符向单片机发送字符接收
45、单片机发回的字符接收单片机发回的字符显示发回的字符显示发回的字符NY结结 束束多机通讯程序设计程序清单:程序清单:#include“stdio.h”main()()char c1,c2,n1,n2;int coms;outportb(0 x3fb,0 x80););/*初始化初始化8250*/outportb(0 x3f8,0 x30););outportb(0 x3f9,0 x00););outportb(0 x3fb,0 x2b););/*8位数据,位数据,1位停止,奇偶校验位为位停止,奇偶校验位为1*/outportb(0 x3fc,0 x03););/*PC机处于发送地址状态机处于发送
46、地址状态*/outportb(0 x3f9,0 x00););/*禁止禁止8250中断中断*/printf(“Please input the number of MCS:n”););scanf(“%c”,&n1););do/*查询发送移位寄存器是否空查询发送移位寄存器是否空*/coms=inportb(0 x3fd)&0 x40;while(coms!=0 x40););outportb(0 x3f8,n1););/*PC机发送单片机地址编号机发送单片机地址编号*/outportb(0 x3fc,0 x01););/*PC机处于接收状态机处于接收状态*/waitok1:/*查询单片机返回的编
47、号是否有效查询单片机返回的编号是否有效*/coms=inportb(0 x3fd););if(coms&0 x01)=0)PC机端的程序 goto waitok1;n2=inportb(0 x3f8););/*读入单片机返回的编号读入单片机返回的编号*/if(n1!=n2)printf(“The number of MCS is error!n”););break;else outportb(0 x3fc,0 x03););/*PC机处于发送状态机处于发送状态*/outportb(0 x3fb,0 x3b););/*PC机处于发送数据状态机处于发送数据状态*/c1=getchar();();d
48、o /*查询发送移位寄存器是否空查询发送移位寄存器是否空*/coms=inportb(0 x3fd)&0 x40;while(coms!=0 x40););outportb(0 x3f8,c1););outportb(0 x3fc,0 x01););/*PC机处于接收状态机处于接收状态*/waitok2:/*查询单片机返回的字符是否有效查询单片机返回的字符是否有效*/coms=inportb(0 x3fd););if(coms&0 x01)=0)goto waitok2;c2=inportb(0 x3f8););/*读入单片机返回的字符读入单片机返回的字符*/printf(“The retur
49、n char is:”););/*显示返回的字符显示返回的字符*/putchar(c2);单片机程序流程单片机程序流程中断服务程序中断服务程序保护现场保护现场接收地址接收地址与本机地址相等否?与本机地址相等否?回送本机地址回送本机地址接收接收PC机发来的字符机发来的字符将收到的字符回送将收到的字符回送PC机机恢复现场恢复现场中断返回中断返回NY单片机软件设计单片机软件设计3、程序清单:ORG0000HLJMPMAIN ORG0023H LJMPSERVEMAIN:MOVTMOD,#20H;初始化T1 MOVTH1,#0F3HMOVTL1,#0F3HMOVSCON,#0F0H;串行口为方式3,R
50、EN=1MOVPCON,#80H;SMOD=1SETBTR1SETBEASETBESHERE:SJMPHERESERVE:CLREAPUSHACCPUSHPSWCLRRS1SETBRS0MOVA,SBUF;接收地址;接收地址XRLA,#01H;与本机地址进行比较;与本机地址进行比较JNZRETURN;与本机地址不符,则返回;与本机地址不符,则返回CLRSM2;置单片机为接收数据状态;置单片机为接收数据状态CLRRIMOVA,#01HMOVSBUF,A;发送本机地址给;发送本机地址给PC机机JNBTI,;等待发送完毕;等待发送完毕CLRTIJNBRI,;等待;等待PC机发来的字符接收完毕机发来的