第七章 串行接口第一节 概述第二节 8051单片机串行接口第三节 串行接口的工作方式第四节 串口初始化编程第五节 RS-232,RS-485接口第六节 调制解调器第七节 串行接口的应用本章要点
串行通信的基本概念。
8051单片机串行接口的结构与工作方式,与 PC的通信以及通信程序的编制。
远程通信概念,RS-232,RS-485接口以及调制解调器的应用。
第一节 概述一、串行通信的工作方式
1.异步方式,以帧作为传送单位,每一帧由起始位、数据位、校验位和停止位组成,结构如图。
2,异步接收 /发送器异步传送方式 可以通过软件将一帧数据逐位取出,在开头加起始位,末尾加校验位和停止位。
然后进行发送。也可以用硬件自动完成;这种硬件称为异步接收/发送器,简称为 UART。 8051
单片机在片内就提供了一个 UART。
3.同步方式同步方式仅在开始用若干字符作为同步号令,
然后连续发送数据,如图所示。 由于没有在每一个字符中,配置起始、停止位,所以结构紧凑,
传输效率高、速度快,其组成如下图所示:
二,串行通信的传送速度串行通信的数据传送是按位进行的,每秒所传送的位数称为波特率,如果数据传送的速度为每秒 120帧,每个帧包含 10位,则每秒传送
1200位,即波特率为 1200。
10? 120=l200bit/s=1200baut
每位传送的时间 T等于波特率的倒数,如上例波特率为 1200则每位传送时间为
T = 0.833ms
国际上规定的标准波特率系列为 300,600、
1200,1800,2400,4800,9600和 19200bit/s 。
三,串行通信的传送方向
1.单工方式,指通信双方,
一方只能发送,另一方只能接收,传送方向是单一的 。
2.半双工方式,通信双方只有一根传输线 (共地 ),但任何一方都可以发送,当一方发送时,另一方只能接收 。
3.全双工方式,需要通信双方连接两条传输线 (共地 ),
一条是将数据从甲方送到乙方,另一条是从乙方送到甲方 。 允许双向同时发送 。
四、串行通信的校验方式,
奇校验,根据数据中 1的个数,决定校验位是否置 1。以使 1的个数总 和为奇数。
偶校验,根据数据中 1的个数,决定校验位是否置 1,以使 1的个数总 和为偶数。
2.一组数据的校验方法在一组数据之后加发数据代数和或在一组数据之后加发数据异或值。
1.异步通信中单个字符的校验方法通常是在单个字符末位后面,附加一个校验位。
五、调制与解调串行通信所传送的内容是一串 O和 l。 从 0到 1
或从 1到 0,形成数据脉冲的前沿和后沿 。 前后沿越陡峭,频谱就越宽,线间电容造成的信号畸变就越大 。 所以远距离通信需对信号进行调制 。
数据脉冲转换为音频正弦信号后,可用普通电话线进行远距离传输,接收端收到经过调制的音频信号,必须经过解调恢复成原来的数据脉冲。
将信号 0调制为 400Hz正弦波。
将信号 1调制为 1200Hz正弦波。
将 400Hz正弦波转换为信号 0。
将 1200Hz正弦波转换为信号 1 。
调制解调返回本章首页第二节 8051单片机串行接口
8051单片机串行接口结构一,数据缓冲器 SBUF
发送数据通过指令 MOV SBUF,A将数据写入 SBUF,
然后串口自动将数据按事先设置的方式及速率从 TXD(P3.1)端口输出,数据发送完毕,串口向 CPU申请中断,且通过硬件将 TI置 1,表示发送已经结束,等待写入第二帧数据。
接收数据通过指令 MOV A,SBUF,使串口按事先设置的方式及速率自动从端口 TXD(P3.1) 接收数据,
一帧数据接收完毕 RI=1,串口向 CPU请求中断且表示接收已经结束。
二、控制寄存器 SCON
SCON各位定义
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0和 SM1与工作方式关系
SM0 SMl 工作方式 功 能 波特率
0 0 0 作移位的 I/ O f / 12
0 1 1 8位 UART 可变由 Tl时间常数定
1 0 2 9位 UART f /n n=64或 32
1 1 3 9位 UART 可变由 Tl时间常数定注:表中 f 为主振频率 。
三,电源控制寄存器 PCON
PCON各位定义
D7 D6 D5 D4 D3 D2 D1 D0
SMOD - - - GF1 GF0 PD IDL
电源控制寄存器主要用于设置低功耗模式和掉电保护工作模式 。 但其中第 7位 SMOD用于串口 。 当串口工作于方式 1,方式 2,方式 3时,
波特率与 SMOD有关,当 SMOD=1波特率加倍,
SMOD=0,则不加倍 。
返回本章首页第三节 串行接口的工作方式一,串行口工作方式 0
方式 0工作性能,
1)波特率固定为 发送 —位数据等于一个机器周期 。
2 ) 不论是发送还是接收,数据都是从
RXD(P3.0)端出入 。 TXD端而作为同步移位脉冲输出端 。
3)工作于方式 0时,可将串行接口扩展为并行接口,而其他三种工作方式,则主要用于通信 。
12/oscf
方式 0的工作时序方式 0的接收时序方式 0的发送时序方式 0的应用串行口扩展为并行输出口串行口扩展为并行输人口二,串口工作方式 1
方式 1的工作性能
1)波特率可变串口波特率由定时器 T1产生,并决定于 T1定时时间,而 T1的定时时间决定于装入的时间常数 N,因此可根据 时间常数 N推出 波特率,即
2)传送数据为 8位,连同一位起始位、一位停止位组成一帧,即一帧为 10位,发送由 TXD
输出,接收由 RXD输入,可构成全双工的串行通信端口。
12)2 5 6(32
2
N
f O S CS M O D波特率方式 1的工作时序三、串口工作方式 2,3
方式 2,3的工作性能
1)方式 2波特率固定,并等于 。
方式 3波特率计算方法同方式 1,即等于 。
2)一帧数据为 11位,包括 1位起始位,8位数据位,1位可编程位,1位停止位。数据位低位在前高位在后,第 9位可编程位发送时从 SCON
中的 TB8取出,接收时第 9位存 SCON中的 RB8。
O S C
S M O D f
64
2波特率返回本章首页
12)2 5 6(32
2
N
f O S CS M O D波特率第四节 串口初始化编程一,计算波特率串口方式 0
串口方式 1和串口方式 3
串口方式 2
12/os cf?波特率
O S C
S M O D
f 642波特率
12)2 5 6(32
2
N
f O S CS M O D波特率二、对 SCON,PCON,TMOD初始化以设计一 8051单片机控制系统为例,设主振频率为
12MHz,要求串口发送数据为 8位,波特率为 1200bps.
则初始化步骤为:
1.先按波特率要求,计算 T1的时间常数 N,设 SMOD=1。
已知主振频率为 12MHz,波特率为 1200bps.,串口工作于方式 1,按式 7-4可求得
N=203.92≈ 0CCH
2.写出初始化程序
MOV SCON,#50H ;串行口工作于方式 1
MOV PCON,#80H ;SMOD=1,
MOV TMOD,#20H ;T1工作方式 2定时方式
MOV THl,#0CCH ;设置时间常间为 N
MOV TLl,#0CCH ;自动装入时间常数
SETB TR1 ;启动 T1
返回本章首页第五节 RS-232,RS-485接口一,RS-232
使用 RS-232
接口可增加串口的驱动能力、信号幅度与传输距离。
直接用单片机的串口进行通信,可以将两个串口直接相连,
RS232芯片 MAX232的组成与引脚引脚内部 组成二,RS-485
RS-485与 RS-232的主要区别是采用差分传输方式以提高通信距离和可靠性,发送端使用 2根信号线发送同一信号,但极性相反,接收端从两根线的电压信号相减得到实际信号,可以有效减小共模干扰,提高通信距离达送 1200m。
RS-485传输连接三,RS-232与 RS-485的转换实现 RS-232/RS-485的转换,可通过两个步骤完成,先用 MAX232芯片将 RS-232电平转换成 TTL逻辑,然后用 MAX485芯片把 TTL逻辑转换为 RS-485输出。
反过来使用,也能将 RS-485转换为 RS-232。
MAX232芯片 MAX485芯片RS232 TTL RS485
MAX485芯片 MAX232芯片
RS485 TTL RS232
返回本章首页利用 MAX3162直接实现 RS-232/RS-485的转换
RS232
输出 RS232输入
RS485
A,B出
RS485
A,B入第六节 调制解调器一,调制解调器工作原理调制解调器的作用是将脉冲型的数据信号,
调制在音频载波上 。
调制解调器三种方式幅移键控( ASK)
相移键控( PSK)
频移键控( FSK)
二,调制器芯片 XR2206
数字信号输入正弦调制波输出频率调节对称调节波形调节调制器芯片 XR2206的工作原理调频时 1脚接地,数据信号从第 9脚输入,控制电流开关,以调节压控振荡器去选择第 7脚或第 8脚的电阻,改变输出的音频载波频率,
达到调频的目的。输入低电平 0频率为 1180Hz。
高电平 1频率为 980Hz。 这样,原来由低电平 0
和高电平 1组成的脉冲信号,经 VCO转换后,
成为由 1180Hz和 980Hz组成的调频波,完成
FSK的调制任务。调制后的调频波送到正弦波调整器,从第 2脚输出,接在 13脚和 14脚的电阻,用来调节正弦波的波形。接在 15脚和 16脚的电阻,用来调节正弦波的对称。 3脚是乘法器和正弦波调整器的输出端,可以接一个负载电阻,用来调节正弦波的幅度。
三,解调器芯片 XR2211
解调器芯片 XR2211工作原理压控振荡器定时电容调制信号输入数字信号输出数字滤波返回本章首页第七节 串行接口的应用一,单片机之间或单片机与外设之间的通信应用 8051单片机串行接口,首先要对专用寄存器 SCON和 PCON以及波特率发生器 T1进行初始化编程,以设定它的工作方式和波特率高低,然后再通过 SBUF实现发送和接收 。
发送和接收可以在主程序中进行,也可以放在中断程序中进行,但由于串行通信的速度比较慢,
主程序通常安排做其他工作,发送和接收最好放在中断程序中进行 。 只有在 UART完成一个帧的发送或接收后,才通过中断进行收发 。
应用举例,在车间设置一个生产进度显示板。显示当天已完成的产量,所需数据,从主单片机传送到显示板,设计一主单片机与显示板单片机间的传送程序。
1.主单片机的主程序
ORG 0000H
LJMP START
ORG 0003H
LIMP SUBG ;INT0中断入口
ORG 0100H
START,MOV 30H,#00H
MOV SP,#60H
SETB IT0 ;边沿触发方式
MOV SCON,#40H ;工作方式 1
MOV PCON,#00H ;波特率不加倍
MOV TMOD,#2OH ;T1工作方式 2定时接下续上 MOV THl,#0E8H
MOV TLl,#0E8H ;波特率为 1200bp
SETB EA ;开中断
SETB EX0 ;允许中断源 INT0中断
SETB TRl ;打开波特率发生器
WAIT,NOP ;等待中断
SJMP WAlT
主单片机的中断服务程序
ORG,0300H
SUBG,INC 30H ;产量计数单元加 1
MOV SBUF,30H ;送串口
DDF,JNB TI,DDF ;等待发送
CLR TI
RETI
1,显示板的主程序
ORG 0000H
LJMP START
ORG 0023H
AJMP SUBG ;中断人口
ORG 0100H
START,MOV 30H,#00H
MOV SP,#60H
MOV SCON,#50H ;串口工作方式 1允许接收
MOV PCON,#00H ;波特率不加倍
MOV TMOD,#20H ;T1工作于方式 1定时
MOV THl,#0E8H
MOV TLl,#OE8H ;波特率为 1200bps
SETB EA ;开中断
SETB ES ;允许串口中断
SETB TR1 ;打开波特率发生器
WAIT,LCALL DISPLAY ;转显示子程序
AJMP WAIT
显示板中断服务子程序当串口收到主单片机发来信号,串口请求中断时,转而执行中断服务子程序
ORG 0300H
SUBG,MOV 50H,A
CLR RI
MOV 79H,SBUF ;接收数据
MOV A,50H
RETI
二、单片机与 PC机之间的通信
PC机串口 ( 包括 COM1,COM2有的还有 COM3)
输出都是 RS-232电平,并用 9芯插座,所以单片机要与 PC机实现通信,就必须在单片机串口输出加接 RS-232或 RS-485转换芯片,将单片机串口的 TTL电平转换为 RS-232或 RS-485电平,以便与 PC机相连 。 且两者波特率必须一致 。 连接方法如图:
应用举例:
设计一个单片机与 PC机的通信程序,并以 PC机为主控,通过呼叫信号,要求单片机接收数据,也可以通过呼叫要求单片机向 PC机发送数据 。 并约定如下:
1,PC要求单片机发送数据的呼叫信号约定为两字节,
第一字节为单片机机号设为 07H,第二字节为要求发送的标志 0CCH。 单片机收到 PC机呼叫信号后,将数据送给 PC机,同时约定单片机发送信号由 37个字节组成,
先用 C5H,C5H打头,然后是 30H-4FH单元内的数据,最后是校验和,数据个数,结束符 0EEH。
2.要求单片机接收的信号约定为 8个字节,第一字节为机号 07H,第二字节为要求接收标志 0BBH,其余六个为 PC要发送的数据,单片机收到数据后,要将收到的数据返回给 PC机,以便检查。返回的结构也是用
0C5H,0C5H打头,其余六个为发给单片机的数据。
单片机主程序
ORG 0000H
LJMP ST
ORG 0023H
LJMP CHINOUT
EESJ EQU 10H ;是否已发出数据引头的标志
SDJ EQU 12H ;待发送数据的首地址存 12H
SDBZ EQU 08H ;曾经收过机号的标志
ORG 0100H
ST,LCALL DELAY ;延时确保系统其他芯片可靠复位
LCALL DELAY
MAIN,MOV IE,#00H ;关中断
MOV R0,#08H ;内存 08H-58H清零
MOV R7,#50H
QR,MOV @R0,#00H
INC R0
DJNZ R7,QR
接下续上
CLR P3.2 ;接通 RS485控制口
MOV SDBZ,#00H ;标志清零
MOV EESJ,#55H ;已发送打头的标志
MOV SP,#70H ;置堆栈指针
MOV SCON,#050H ;置串口方式 1
MOV PCON,#00H ;波特率不加倍
MOV TMOD,#20H ;CTC初始化
MOV TH1,#0D1H ;置波特率为 600
MOV TL1,#0D1H
CLR P3.2
MOV IE,#90H ;等待中断
NOP
AJMP $
延时子程序略单片机中断程序框图 (程序略 )
PC窗体界面
PC的通信程序代码 (使用 VB6的 MSComm1控件 )
‘ 调入窗口子程序
Dim yss As Byte
Private Sub Form_Load()
MSComm1.InputMode=comInputModeBinary '收二进制
MSComm1.Handshaking = 0 '不设通讯协议
MSComm1.InputLen = 0 '读字符数
MSComm1.OutBufferCount = 0 '清 f缓冲区
MSComm1.ParityReplace = "0" '取代无效字符
MSComm1.Settings = "600,N,8,1"
Text2.Text = 1000 '设置接收时间
Text5.Text = 2 '设置端口
End Sub
' 退出窗口子程序
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
' 计时器事件
Private Sub Timer1_Timer()
ss = 0
Timer1.Interval = 0
Timer1.Enabled = False
End Sub
' 读入 TEXT3的字符,转换为串行数据的函数
Public Function Str2Array(ByVal src As String,ByVal c As
String,dst() As String)
Dim n As Long,p As Long
n = -1
Do
p = InStr(src,c)
If p = 0 Then Exit Do
n = n + 1
ReDim Preserve dst(0 To n)
dst(n) = Left(src,p - 1)
src = Right(src,Len(src) - p - Len(c) + 1)
Loop
n = n + 1
Dim Preserve dst(0 To n)
dst(n) = src
End Function
' Command2_Click事件
Private Sub Command2_Click()
If Form1.MousePointer = 0 Then
Label6.Caption = "通信在进行中 ! "
Form1.MousePointer = 11
MSComm1.CommPort = Text5.Text ‘启用 com1
MSComm1.Settings = Text1.Text
MSComm1.InputMode = comInputModeBinary'收数据
MSComm1.OutBufferSize = 1
MSComm1.PortOpen = True '开通讯口
Dim ay() As String
Dim a As Byte,byb() As Byte,str1 As
String
Str2Array Text3.Text,",",ay
‘ Command2_Click事件 (续 1)
For i1 = LBound(ay) To UBound(ay)
byb() = ",
byb(0) = Val("&h" & ay(i1))
MSComm1.Output = byb()
Next i1
yss = 1 '设置定时器参数 1/0
Timer1.Interval = Text2.Text 'ms
Timer1.Enabled = True '
Text4.Text = ""
Do While yss = 1
‘ Command2_Click事件 (续 2)
If MSComm1.InBufferCount <> 0 Then
byb() = MSComm1.Input
a = byb(0)
str1 = str1 & Hex(a) & ",“
End If
DoEvents
Loop
Text4 = str1
MSComm1.PortOpen = False '关通讯口
Form1.MousePointer = 0
Label6.Caption = "请单击此按钮进行通信 "
End If