MCS-51单片机的串口通信(通俗易懂)
单片机串口通信原理

单片机串口通信原理
单片机串口通信原理是指通过串口进行数据的发送和接收。
串口通信是一种异步通信方式,它使用两根信号线(TXD和RXD)进行数据的传输。
在发送数据时,单片机将待发送的数据通过串口发送数据线(TXD)发送出去。
发送的数据会经过一个串口发送缓冲区,然后按照一定的通信协议进行处理,并通过串口传输线将数据发送给外部设备。
在接收数据时,外部设备将待发送的数据通过串口传输线发送给单片机。
单片机接收数据线(RXD)会将接收到的数据传
输到一个串口接收缓冲区中。
然后,单片机会根据通信协议进行数据的解析和处理,最后将数据保存在内部的寄存器中供程序使用。
串口通信协议通常包括数据位、停止位、校验位等信息。
数据位指的是每个数据字节占据的位数,常见的有8位和9位两种。
停止位用于表示数据的结束,常用的有1位和2位两种。
校验位用于检测数据在传输过程中是否发生错误,常见的校验方式有奇偶校验和无校验。
总的来说,单片机串口通信原理是通过串口发送数据线和接收数据线进行数据的传输和接收,并通过一定的通信协议进行数据的解析和处理。
这种通信方式可以实现单片机与外部设备的数据交换,广泛应用于各种嵌入式系统和物联网设备中。
MCS-51单片机串口编程及应用介绍

起 始 位
数
据 位
校 验 位
停 止 位
异步通信的帧格式
二、同步通信传送方式
同步传送:以同步字符 同步传送:以同步字符SYN开始连续发 开始连续发 再以同步字符结束, 送,再以同步字符结束,时钟信号同时发 适用高速、大容量的数据传送。 送。适用高速、大容量的数据传送。
开始 同步字符 同步字符 数据段 同步字符 结束 同步字符
工作原理: 工作原理: 发送:CPU执行 执行MOV SBUF,A,将数据送入SBUF SBUF。 发送:CPU执行MOV SBUF,A,将数据送入SBUF。 发送控制器按波特率发生器(定时器构成) 发送控制器按波特率发生器(定时器构成)提供的时钟速 率将SBUF中的数据一位、一位从TXD输出,发送结束时, SBUF中的数据一位 TXD输出 率将SBUF中的数据一位、一位从TXD输出,发送结束时,置 TI=1。 TI=1。 接收:接收控制器按波特率发生器提供的时钟速率从RXD引 接收:接收控制器按波特率发生器提供的时钟速率从RXD引 RXD 脚一位一位接收数据,当收到一个完整字符时,装入SBUF 脚一位一位接收数据,当收到一个完整字符时,装入SBUF 中,同时置RI=1,通知CPU,CPU执行MOV A,SBUF,将数据读 同时置RI=1,通知CPU,CPU执行MOV A,SBUF, RI=1 CPU 执行 入累加器A 入累加器A。 注意:由于SBUF具有双缓冲作用,它可以在CPU读入之前 注意:由于SBUF具有双缓冲作用,它可以在CPU读入之前 SBUF具有双缓冲作用 CPU 开始接收下一数据, CPU应在下一数据接收完毕前读取 开始接收下一数据, CPU应在下一数据接收完毕前读取 SBUF内容 由于串口的接收、发送各自独立, 内容。 SBUF内容。由于串口的接收、发送各自独立,所以可同时发 送及接收,即可以实现全双工通讯。 送及接收,即可以实现全双工通讯。
第7章MCS51的串行口

发送 接收
半双工
发送
时间1
接收
接收
时间2
发送
全双工
发送 接收
接收
发送
8051有1个全双工异步通信串行口
通信线的连接 1、单片机与单片机 2、单片机与PC 3、多机通信
+5V
TXD RXD89C51 主机
单片机 +
1 3 4 5
T1IN
16
2 6
+ 单片机
TXD + RXD
11
MAX232
SBUF 串行口
串行接口功能
1.发送器:并串数据格式转换,添加标识位和校 验位,一帧发送结束,设置结束标志,申请中断。 2.接收器:串并数据格式转换,检查错误,去掉 标识位,保存有效数据,设置接收结束标志,申请中 断。 3.控制器:接收编程命令和控制参数,设置工作方 式:同步/异步、字符格式、波特率、校验方式、数 据位与同步时钟比例等。
• 89C51串行口控制寄存器SCON
字节地址98H,可位寻址
位地址 位符号 9FH SM0 9EH SM1 9DH SM2 9CH REN 9BH TB8 9AH RB8 99H TI 98H RI
SM0,SM1:串口4种工作方式选择。
SM0 0 0 1 1 SM1 0 1 0 1 工作方式 方式0 方式1 方式2 方式3 功能 8位同步移位寄存器 8位异步收发 9位异步收发 9位异步收发 波特率 fosc/12 可变 fosc/64或fosc/32 可变
空 闲
空 闲
下一字符 起始位
D0
D7
一次传输的起始位、字符各位、校验位、停止 位构成一个字符帧(数据帧)信息 帧与帧间可有任意个空闲位,起始位后紧跟数据 的最低位。
51单片机串口通信

一、串口通信原理串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。
由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
串口通信的工作原理请同学们参看教科书。
以下对串口通信中一些需要同学们注意的地方作一点说明:1、波特率选择波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。
MSC-51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1))其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。
下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。
则TH1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。
列计数器重载值,通信误差如下表:因此,在通信中,最好选用波特率为1200,2400,4800中的一个。
2、通信协议的使用通信协议是通信设备在通信前的约定。
单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。
假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:0xA1:单片机读取P0端口数据,并将读取数据返回PC机;0xA2:单片机从PC机接收一段控制数据;0xA3:单片机操作成功信息。
51单片机串口通信程序。。含详细例子

{ P3_4=0; P3_3=1;
} void RstPro()//编程器复位 {
pw.fpProOver();//直接编程结束 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同 }
void ReadSign()//读特征字 {
} void serial () interrupt 4 using 3 //串口接收中断函数 {
if (RI) { RI = 0 ; ch=SBUF; read_flag= 1 ; //就置位取数标志 }
} main()
{ init_serialcom(); //初始化串口 while ( 1 ) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清 0 send_char_com(ch); } }
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
SendData(); } else break;//等待回应失败 } pw.fpProOver();//操作结束设置为运行状态 ComBuf[0]=0;//通知上位机编程器进入就绪状态 SendData(); }
void Lock()//写锁定位
{
pw.fpLock();
SendData();
MCS51的串行口PPT

6.1.2 特殊功能寄存器PCON
字节地址为87H,没有位寻址功能。
SMOD:波特率选择位。 例如:方式1旳波特率旳计算公式为: 方式1波特率=(2SMOD/32)×定时器T1旳溢出率
图6-14 流水灯显示电路图
ORG 0000H LJMP MAIN ORG 2023H MAIN: MOV SCON,#00H ;置串行口工作方式0 MOV A,#80H :最高位灯先亮 CLR P1.1 ;关闭并行输出(避象传播过程中,各 LED旳“暗红”现象) OUT0: MOV SBUF,A ;开始串行输出 OUT1: JNB TI,OUT1 ;输出完否? CLR TI ;完了,清TI标志,以备下次发送 SETB P1.1 ;打开并行口输出 ACALL DELAY ;延时一段时间 RR A ;循环右移 CLR P1.1;关闭并行输出 SJMP OUT0;循环 DELAY: …………;延时子程序,不再反复
假如SM2=0,则不论第9位数据是“1”还是“0”,都 将 前8位数据送入SBUF中,并置“1” RI,产生 中断祈求。
在方式1时,假如SM2=1,则只有收到停止位时才会激 活RI。
在方式0时,SM2必须为0。
(3)REN——允许串行接受位
由软件置“1”或清“0”。
REN=1 允许串行口接受数据。 REN=0 禁止串行口接受数据。 (4)TB8——发送旳第9位数据 方式2和3时,TB8是要发送旳第9位数据,可作为奇偶 校验位使用,也可作为地址帧或数据帧旳标志。 =1为地址帧, =0为数据帧 (5)RB8——接受到旳第9位数据 方式2和3时,RB8存储接受到旳第9位数据。在方式1 ,假如SM2=0,RB8是接受到旳停止位。在方式0, 不使用RB8。 (6)TI——发送中断标志位
MCS-51单片机串行通信

9.1 串行通信概述
• ④停止位 表示发送一个数据的结束,用高电平表示,占1 位、1.5 位或2 位。 • 线路空闲时,线路处于逻辑“1”等待状态,即空闲位为1。 空闲位是异步通信特征之一。异步通信中数据传送格式如 图9.1 所示。 • 图9.1 异步通信数据帧格式
图9.1 异步通信数据帧格式
9.1 串行通信概述
9.1 串行通信概述
• 3.波特率 • 波特率是数据传递的速率,指每秒传送二进制数据的位数, 单位为位/秒(bit/s)。 • 例9.1 假设微型打印机最快的传送速率为30 字符/秒,每 个字符为10 位,计算波特率。 • 解: • 波特率=10 b/字符×30字符/s=300 b/s • 每一位代码的传送时间Td 为波特率的倒数: • Td=1/300=3.3 ms • 异步通信的波特率一般在50~19 200 b/s 之间,常用于 计算机到终端机和打印机之间的通信、直通电报以及无线 电通信的数据发送等。
异步10位收发 异步11位收发 异步11位收发
9.2 串行口结构与工作原理
• SM2:多机通信控制位。 • a.用于方式2和方式3。若SM2=1,则允许多机通信。 多机通信协议规定,若第9位数据(RB8)为1,则表明本帧 数据为地址帧。否则,若第9位数据(RB8)为0,则表明本 帧数据为数据帧。 • 当一个8051(主机)与多个8051(从机)进行通信时,令所有 从机的SM2都置1。主机要与某个从机通信,首先发送一 个与该从机相一致的地址帧(每个从机的地址必须惟一), 且第9位为1,所有从机接收到数据后,将第9位送入RB8 中。 • 若RB8=1,说明是地址帧,将数据装入SBUF,且置RI =1,即中断所有从机,若从机判断出该地址帧数据与本 机号(地址)一致,则置SM2=0,准备接收主机发来的数 据。其他从机仍然保持SM2=1。
MCS-51单片机的串行口及控制寄存器

位序
B7
B6
B5
B4
B3
B2
B1
B0
位符
smod
/
/
/
GF1
Hale Waihona Puke GF0PDIDL
号
PD和IDL:是CHMOS单片机用于进入低功耗方式的控制位,在第 2章中已介绍过这两位的应用。
GF1和GF0:用户使用的一般标志位。
smod:串行口波特率倍增位,当smod=1时,串行口波特率增加 1倍。系统复位时,smod=0。
位地 址
位符 号
0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8 H
EA
/
/
ES
ET1
EX1
ET1 EX0
其中与串行口有关的是ES位。当ES=0时,禁止串行口的中断; 当ES=1时,表示允许串行口中断。EX0、ET0、EX1、ET1分别表示 对外中断0、定时器/计数器0、外中断1、定时器/计数器1个中断 源的中断允许控制,EA是中断总允许控制位,详见本书第5章介绍。
PCON寄存器的B6、B5、B4位未定义。
3. 中断允许寄存器IE
中断允许寄存器IE,是MCS-51单片机中实现是否开放某 中断源中断的控制寄存器,在第5章中已做过介绍。IE寄存 器 是 可 寻 址 的 寄 存 器 , 其 字 节 地 址 为 0 A8H, 位 地 址 由 0A8H~0AFH,IE寄存器各位定义如下:
0BBH PT1
0BAH PX1
0B9H PT0
0B8H
PX0
其中与串行口有关的是PS位,当PS=0时,表示串行口中断处于 低优先级别;当PS=1时,表示串行口中断处于高优先级别。PX0、 PT0、PX1、PT1分别控制外中断0、定时器/计数器0、外中断1、定 时器/计数器1中断源的中断优先级别,详见本书第5章介绍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
发 A 端 A 送 发送 端 接收 接 收
(a)寻呼机
( ( bc ) ) 对讲机 手机
A端 发送
发 B端 B B 端 接收 送 端 接收 发送 接 收
单工 全双工 半双工
• 通信要求
通信双方必须遵循一定的通信协议,即数据格式必须相同, 通信速率必须相同(缺省为9600,n,8,1)。
单击此处编辑母版标题样式
MCS-51单片机的串口通信
主讲人:jxjsyg
你可曾有过这样的困扰?
• 妈妈下班回来忘记带钥匙,在门外喊你开 门,而这个时候你正好在家里玩游戏,而 且正玩到关键时刻,你会怎么办?
两个都令人不是很满 意的结果…
在科学中探索
飞 行 控 制 软 件 是 什 么 东 东?
能答 电: 路它 进是 行一 不个 同用 工计 作算 任机 务来 的控 程制 序各 。功
• 数据格式
单片机串口通信时数据是一帧一帧进行发送的。 表1 数据帧格式
起始位 数据位 校验位 停止位
0
D0
D1
D2
D3
D4
D5
D6
D7
0/1
1
注:对于我们MCS-51单片机(8位)而言,校验位没有意义,除非把数 据位改成7位,才能接收到校验位。
• 通信速率
在串行通信中用来衡量数据传输的速率的一个重要指标叫做波特率 (Baud Rate) ,亦称比特率。波特率的定义是每秒传输二进制数码的 位数。如:波特率为1、作品调试及展示
利用电脑上的上位机软件对下位机(即单片机)进行调试。
(a)用串口调试助手控制
(b)用VB编写上位机软件进行控制
知识拓展(用VB编写的上位机控制软件)
Dim kd_n, dkck_n, msg Private Sub Command1_Click() On Error GoTo Comm_Error dkck_n = dkck_n + 1 dkck_n = dkck_n Mod 2 If dkck_n = 1 Then mPort = Right(Combo1.Text, 1) MSComm1.PortOpen = True Command1.Caption = "关闭串口" Command2.Enabled = True Else MSComm1.PortOpen = False Command1.Caption = "打开串口" Command2.Enabled = False End If Exit Sub Comm_Error: Select Case Err.Number Case 8002 MsgBox "无效端口", 48, "警告" Case 8005 MsgBox "端口已打开", 48, "警告" End Select dkck_n = 0 End Sub Private Sub Command2_Click() kd_n = kd_n + 1 kd_n = kd_n Mod 2 If kd_n = 1 Then Command2.Caption = "关灯" Shape1.FillColor = vbRed MSComm1.Output = "0" Else Command2.Caption = "开灯" Shape1.FillColor = &H8000000F MSComm1.Output = "1" End If End Sub
3、MCS-51串口编程
• 串口工作方式的设置 • 波特率的设置 • 中断设置
• 串行口工作方式的设置
MCS-51的串口有4种工作方式,它是由SCON中的SM1和SM0 来决定的。 • 串行口控制寄存器SCON 表2 SCON各位的定义
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
(1)SM0,SM1:串行中断方式控制位 SM0,SM1=00,方式0,8位同步移位寄存器,其波特率为fosc/12; SM0,SM1=01,方式1,10位异步收发,其波特率可变,由定时器控制; SM0,SM1=10,方式2,11位异步收发,其波特率为fosc/64或fosc/32; SM0,SM1=11,方式3,11位异步收发,其波特率可变,由定时器控制。
在探索中发现
• 受到飞箭飞行控制软件的启发,如果我们 把门锁也用计算机来进行控制的话,就克 服了之前的困扰。当然,家里面很多电器 设备都可以用计算机来进行控制。
通信:即一方传给另一方信息,或 者是一方接收来自另一方的信息。
在发现后学习
口并答 ,口: 即都计 通是算 信传机 端输上 口数的 。据串 的口 接和
• 串行数据缓存寄存器SBUF 举例说明: SBUF=temp是把temp里面的内容写入SBUF, 即单片机从TXD引脚将其发送出去; temp=SBUF是读取SBUF里面的内容存入temp 变量,即单片机从RXD引脚将数据接收并存 入temp变量。
MCS-51单片机串口通信完整程序
#include "reg51.h" void Init() { SCON=0x50;//串行口工作方式1,允许接收 ES=1;//允许串行中断 TMOD=0x20;//T1工作方式2,8位自动重装初值 TH1=0xfd;//设置波特率为9600 TL1=0xfd; TR1=1; EA=1; } void main() { Init(); while(1); } void Uart_Int() interrupt 4//RI 置位后才响应中断,所以进行中断,RI肯定为1 { unsigned char temp; temp=SBUF; if(temp=='0') P2=0; else if(temp=='1') P2=0xff; RI=0; }
• 中断设置
如果要开启串口,必须要设置相应的中断允许控制位,即 串行中断允许控制位和总中断允许控制位。 (1)ES:串行中断允许控制位 当ES=1时打开串行中断,ES=0时关闭串行中断。 (2)EA:总中断允许控制位 当EA=1时打开总中断,EA=0时关闭总中断。
问:在这里我们要怎么设置? 答:ES=1; EA=1;
串口
并口
问:计算上的串口和并口,是 用来干嘛的?
新授: 1、通信的分类?
答:并行通信和串行通信。
并行通信:数据的各位同时在多根数据线上发送或接收。 串行通信:数据的各位在同一根数据线上依次逐位发送或接收。
计算机1
计算机2
计算机1
计算机2
GND
GND
GND
GND
图1 并口通信
图2 串口通信
2、串行通信的分类?
(2)TI:发送中断标志位 用于指示一帧信息发送是否完成,完成后由硬件自动置位。TI在发送数 据前必须由软件清0。 (3)RI:接收中断标志位 用于指示一帧信息是否接收完,接收完后由硬件自动置位。RI在准备下 次接收之前也必须用软件清0。 (4)REN:允许接收控制位 REN=1时,允许接收;REN=0时,禁止接收。
问:如果我们要将串口设置为工作方式1,并 且允许接收,该如何设置? 答:SCON=0x50;
返回
波特率 (2 SMOD / 32) * 定时器T1溢出率 T1溢出率 (f osc / 12 ) /(2 K TC)
• 波特率的设置
在串口工作在方式1时,其波特率为可变,由定时器T1控 制。 MCS-51定时器的方式2就是自动重装初值的8位定时 器,所以用它来做波特率发生器最恰当。当外部晶振选用 11.0592MHz时,容易获得标准的波特率。 程序编写: TMOD=0x20; //T1工作方式2,8位自动重装初值 式中 SMOD——波特率倍增位; TH1=0xfd; //设置波特率为9600 fosc ——晶振频率; K ——定时器T1的位数; 程序该怎么写? TL1=0xfd; TC——定时器T1的预置初值。 TR1=1; //启动定时器 T1 。 把9600波特率代入得定时初值为 0xfd 方法1 方法2 返回
课堂小结:
1、通信的概念及分类;
2、串行通信的分类; 3、串行通信的编程方法(即3个设置); 4、作品调试。
作业布置:
1、本设计只是单工通信,即单片机只负责接收数据,如何才能 做到半双工通信,即单片机也能向上位机发送数据? 2、思考并编写一个串口发送子程序,能够发送任意一个字符。
在感恩后 … 单击此处编辑母版标题样式