串行通信接口
串行通信接口 4.4.1一 基本概念 ⒈ 串行传送的特点
①在一根传输线上即传送数据又传送联络信号 ② 有固定的数据传输协议。
③ 线上的通信信号一般不是TTL 电平,因此与CPU 通信必需进行电平转换。
④ 传送信息的速率要求双方约定。
⒉ 数据传送方式
单工:仅一方对另一方传送数据。
半双工:双方可相互传送数据,但不能在同一时刻进行。 全双工:双方在同一时刻都能进行传送和接收数据。 ⒊ 调制解调器
调制解调之间为拟模信号(两种不同频率),适用于远距离数据通信。
调制解调作用为:数字信号转换成模拟信号、模拟信号转换
零MODEM 方式:不需要调制解调器传输距离小于15米。
4. 通信数据奇偶校验 7位单位编码的字符后附1奇偶位,使整个字节的“1”
个数为偶数或为奇数。
1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 1
0 0 0 0 1 0 0 1 5. 传输速率
波特率:每秒时间内传送二进制数据的位数。 单位:(B/S)如1200B/S 2400B/S 4800BS 9600BS 发送/接收时钟:数字波形的每一位需多个时钟支持,
发送/接收时钟频率为每秒时间内所需采样时钟个数数。
波特因子:发送/接收1位数据所需的时钟个数。 发送/接收时钟频率=波特率*波特因子 6.串行通信的基本方式
异步串行通信方式:
以字符为信息单位传送:1帧仅一个字符。
字符与字符之间异步:字符与字符之间随机传送。
位与位之间同步:位与位之间有严格的定时。 同步串行通信方式
以字符块为信息单位传送:1帧成百上千个字符。 字符与字符之间同步:字符与字符之间有严格的定时。
位与位之间同步:位与位之间有严格的定时。
二 串行通信数据格式
1.异步通信数据格式
起始位(1) 数据位(5~8) 效验位(0~1)停止位(1~2)
2.数据位采样:
3.
双同步: 同步码1 同步码2 数据块 块效验 单同步: 同步码1 数据块 块效验 外同步: 数据块 块效验
同步码为专用同步字符ASCII (26H )
同步码为专用二进制码(01111110)
同步通信解决在数据块中出现同码的问题,如在数据块中
有01111110的数据,解决的办法为:发送时只要遇见连5个“1”插入一个“0”,接收时只要遇见连5个“1”删除紧跟后面一个“0”。
4.同步异步通信应用场合
同步:要求快速、连续传输大批量数据。
异步:数据不连续、数据量较少、数据传输速率较低。
三 串行通信接口
EIA-RS-232C 的接口标准
信号线功能、电气特性、物理特性
⒈
① 25芯(9芯)信号线
2#(3#)TXT :发送数据(输出)。 3#(2#)RXT :接收数据(输入)。 4#(7#)RTS :请求发送数据(输出)。 5#(8#)CTS :允许发送数据(输入)。 6#(6#)DSR :对方准备好(输入)。 20#(4#)DTR :本方准备好(输出)。
8#(1#)DCD :对方接收另一端(远地)数据时状态(输入)。
22#(9#)RI :对方收到振铃时状态(输入)。 7#(5#)GND :地脚。 ② 信号线的连接 有MODEM 时的连接:
无MODEM 时简单连接:
⒉RS-232信号线上的电气特性 ①RS-232接口
EIA-RS-232C 电平:逻辑1 –3~-15v 逻辑0 +3~+15v TTL 电平:逻辑1 +2~+5v 逻辑0 0v
232C/TTL电平转换器:MC1488/MC1489 (需+15、-15v )。
MAX232 (需+5v) ② RS-485接口 二线:AA` BB`
AA`与BB`压差高于200MV 为逻辑1。 AA`与BB`压差低于200MV 为逻辑0。
专用RS-485/TTL转换芯片。MAX485 MAX1487 RS-485特点:
传输速率高:距离15M 时10MB/S(232C 最快20KB/S)。 传输距离远:速率100KB/S时12000M (232C 最远15M )。 抗干扰强。
能实现多点对多点通信:目前最大可达256对。
③ RS-232C 、RS-485电平转换电路
J2
⒊ RS-232物理特性
114
Tx D R x D R TS C TS DSR SG DTR DC D
[***********]8219
R I
[**************]3
DC D DSR R x D R TS Tx D C TS DTR R I SG
162738495
DB 9
DB 2
5
⒋ RS-485应用的连接
D D
四 可编程串行接口芯片8251A ⒈ 外部特性和内部结构
D0~D7
RESET
CLK C/D /RD /WR /CS /DTR /DSR /RTS /CTS
TXD TXRDY TXEMPT Y /TXC
RXD RXRDY SYNDET /RXC
CPU 接口的数据线:D0~D7 CPU 接口的地址线:C/D
CPU 接口的控制线:/RD、/WR、/CS
MODEM 的号线:/DTR、/DSR、/RTS、/CTS 发送线等: TXD 、TXRDY (准备好)、TXC (发送时钟),
TXE (发送缓冲器空)。
接收线等:RXD 、RXRDY (准备好)、RXC (接收时钟)。 ⒉ 内部寄存器
① 接收缓存器(CPU 读):/CS=0、C/D=0、/RD=0
当RXRDY=1时,缓存器中接收好数据通知CPU 读数。
② 送缓存器(CPU 写):/CS=0、C/D=0、/WR=0
当TXRDY=1时,缓存器中数据已空通知CPU 写数。 ③ 方式命令字 /CS=0、C/D=1、/WR=0 D1D0(B1B0):00 同步方式
01 异步方式波特因子为1。 10 异步方式波特因子为16。 11 异步方式波特因子为64。 D3D2(L1L0):00 字符长度为5位。
01 字符长度为6位。 10 字符长度为7位。 11 字符长度为8位。
D5D4(EP PEN):X0 无校验。 01 奇校验。 11 偶校验。 D7D6(S1S0):同步方式 X0 内同步。 X1 外同步。 0X 双同步。 1X 单同步。
异步方式
00 不用。
01 停止位1位。 10停止位1.5位。
11停止位2位。 ④ 工作命令字 /CS=0、C/D=1、/WR=0 D0(TXEN ):1允许发送、0 禁止发送。* D1(DTR ): 1本设备准备好。 D2(RXE ): 1允许接收、0 禁止接收。* D3(SBRK ):1 使TXD=0、0 TXD正常。 D4(ER ): 1 清状态字中错误标志、0 保留错误标志。 D5(RTS ): 1 请求发送/RTS有效、0/RTS无效。 D6(IR ): 1 内部复位,复位后才能写方式命令。* D7(EH ): 1 启动搜索同步字符。
写方式与工作命令的顺序:
复位→方式命令→工作命令1→工作命令2→工作命令3。。。 ⑤ 状态字 /CS=0、C/D=1、/RD=0 D0(TXRED ):1发送准备好。* D1(RXRED ):1接收准备好。* D2(TXE ): 1发送器空。 D3( P E ): 1奇偶错。 D4(OE ): 1 溢出错。 D5(FE ): 1 格式错。 D6(SYNDET ):1同步检出。 D7(DSR ) :1 对方准备好。
⒊ 8251编程过程
① 内部复位(奇地址写) 工作命令清零
即:工作命令D6置1
② 写方式命令(奇地址写) D7D6:停止位 D5D4:效验位 D3D2:数据位 D1D0:波特因子
③ 工作命令(奇地址写)
D7~D0=37H 允许发送、允许接收等。 ④ 状态字寄存器(奇地址读)
D0=1:可以写数(发送) D1=1:可以读数(接收) ⑤ 发送/接收(偶地址读)
4. 8251应用举例 双机通信:
异步方式、数据位8位、停止位2位、无校验、波特率 4800B/S、波特因子16、口地址:308H 、309H 。
CPU 与8251的连接:D0~D7、/CS、C/D、/RD、/RW
8251的通信线连接:TXD 、RXD
8251的通信时钟频率线连接:/TXC、/RXC
② 发送程序
MOV MOV OUT 令
MOV OUT NOP MOV OUT 8/因子64 MOV OUT MOV
DX ,309H AL ,00 DX ,AL AL ,40H DX ,AL AL ,0CFH DX ,AL AL ,37H DX ,AL CX ,2DH
; 复位→方式命令→工作命
; 内部复位(D6=1)
;方式命令:停止2/无效/数据
;工作命令:D0=1允许发送 ;发送字节数
备好
MOV L1: MOV IN AND JZ SI ,300H DX ,309H AL ,DX AL ,01H L1
;发送首址
;D0:发送准备好
;发送状态(TXRED )未准
MOV DX ,308H MOV OUT INC LOOP MOV INT ③ 接收程序
MOV MOV OUT MOV OUT NOP
MOV OUT MOV 误标志
OUT MOV MOV L2: MOV IN AND JZ MOV IN MOV AL ,[SI] DX ,AL L1
AX ,4C00H 21H
DX ,309H AL ,00 DX ,AL AL ,50H DX ,AL AL ,0CFH DX ,AL AL ,14H DX ,AL CX ,2DH DI ,400H
DX ,309H AL ,DX
AL ,02H L2 DX ,308H AL ,DX
[DI],AL
;发送数据
;复位→方式命令→工作命令 ;内部复位(D6=1)
;方式命令
;D2=1允许接收、D4=1清错 ;工作命令 ;接收字节数 ;接收首址
;D1接收准备好 ;接收未准备好转 ;取数据
SI
INC DI LOOP L2
STOP : MOV AX,4C00H INT 21H
五 PC 微机异步通信
⒈ 8250引脚连接图(教材 图9.33)
① 地址控制信号
片选:CS0、CS1、/CS2、/ADS PC 机用/CS2作片选。 地址线:A0、A1、A2 ② 读/写控制信号
数据输入选通信号:DISTR 、/DISTR。 数据输出选通信号:DOSTR 、/DOSTR。 PC 机用/DISTR、/DOSTR连/IOR、/IOW ③ 中断信号
请求信号:INTRPT 控制请求信号:/OUT2 ④ 时钟信号
PC 机时钟为1.8432M ⑤ 通信信号
控制信号:/RTS、/CTS、/DTR、/RLSD、/RI、/DSR 数据输入信号:SIN 数据输出信号:SOUT ⒉ 内部寄存器
① 收发数据寄存器:地址 A2~A0=000 PC 机口址:3F8H ② 中断允许寄存器:地址 A2~A0=001 PC 机口址:3F9H D0=1 接收缓冲满允许中断。 D1=1 发送缓冲空允许中断。
③ 波特率除数L :地址 A2~A0=000(DLAB=1)口址:3F8H ④ 波特率除数H :地址 A2~A0=001(DLAB=1)口址:3F9H 此处波特率除数 BRD=时钟频率/(16*实际波特率) 如2400B/S BRD=1832000/(16*2400)=30H 如9600B/S BRD=1832000/(16*9600)=0CH
⑤ 方式寄存器:地址 A2~A0=011 PC 机口址:3FBH D1D0:数据长度 四个状态分别为5、6、7、8位。 D2:停止位位数 0为1位、1为1.5位(数据为5位) 或2位(数据为6、7、8位)。 D3: 为1允许校验。
D4 为0奇校验、为1偶校验。 D6D5:一般为00。 D7(DLAB ):DLAB=1为设波特率。DLAB=0为其它寄存器。 ⑥ 通信状态寄存器:地址 A2~A0=101 PC 机口址:3FDH D0:为1接收数据寄存器满,CPU 可以读数据。 D5:为1发送数据寄存器空,CPU 可以写数据。
⒊ 8250编程步骤 ① 设置波特率
。置DABL=1即D7=1(3FBH/2FBH口) 。送波特低字节(3F8H/2F8H口) 。送波特高字节(3F9H/2F9H口)
②置通信协议 要求DABL=0即D7=0(3FBH/2FBH口) ③置中断允许状态(3F9H/2F9H口) 。不允许(3F9H/2F9H口)=00
。接收中断允许(3F9H/2F9H口)=05 。发送中断允许(3F9H/2F9H口)=06 ④收发缓冲器有无数据(3FDH/2FDH口) 。D0=1收缓冲器有数据 。D5=1发缓冲器数据空
⑤ 收发数据(3F8H/2F8H口) 查询方式通信编程(零MODEM ) 要求:甲乙两PC 机工作在COM1口、9600B/S、停
止位1位、数据位8位,无校验、 传送1K 字节。
甲机发送程序: BIGIN : MOV AX ,CS MOV DS ,AX MOV DX ,3FBH ;方式寄存器 MOV AL ,80H OUT DX ,AL ;DABL=1 MOV DX ,3F8H MOV AL ,0CH ;波特率低字节 OUT DX ,AL MOV DX ,3F9H MOV AL ,00H ;波特率高字节 OUT DX ,AL MOV DX ,3FBH ;
MOV
AL ,03H
⒌
OUT MOV MOV
OUT
MOV
MOV SEND1: MOV IN TEST JZ MOV MOV OUT INC LOOP MOV INT RET BUF DB 乙机接收程序: BIGIN : MOV MOV MOV MOV OUT MOV MOV OUT MOV MOV OUT MOV
DX ,AL ;DABL=0方式寄存
DX ,3F9H
AL ,00H DX ,AL
;中断允许寄存器清
CX ,3FFH
SI ,OFFSET BUF DX ,3FDH AL ,DX AL ,20H
SEND1 ; 发送缓存器为空否 DX ,3F8H AL ,[SI] DX ,AL SI
SEND1
AX ,4C00H 21H “1K 字节” AX ,CS DS ,AX DX ,3FBH ;方式寄存器 AL ,80H DX ,AL ;DABL=1 DX ,3F8H AL ,0CH ;波特率低字节
DX ,AL DX ,3F9H AL ,00H ;波特率高字节 DX ,AL DX ,3FBH
;方式寄存器
器 零
LOAD1: BUF MOV OUT MOV MOV OUT MOV MOV MOV IN TEST JZ MOV IN MOV INC LOOP MOV INT RET DB AL ,03H
DX ,AL ;DABL=0
DX ,3F9H ;中断允许寄存器 AL ,00H
DX ,AL ; CX ,3FFH
SI ,OFFSET BUF DX ,3FDH AL ,DX AL ,01H
LOAD1 ; 接收缓存器满否 DX ,3F8H AL ,DX [SI],AL SI
SEND1
AX ,4C00H 21H
1024 DUP(?)
6.中断方式通信编程(零MODEM )
以中断方式接收ACSCII 字符程序(COM1通信 )。 数据格式为:7位数据位、2位停止位、偶校验、波特
率9600B/S,IRQ3中断。
CODE SEGMENT
ASSUME CS :CODE ,DS :CODE ORG 100H START MOV AX,CS MOV DS,AX MOV ES,AX CLI
;保存中断0BH 的原中断向量
MOV AH,35H MOV AL,0BH INT 21H MOV IPP,BX MOV AX,ES MOV ESP,AX
;修改中断0BH 的中断向量为:CODE :INITEST
MOV DX,OFFSET INTTEST MOV AH,25H MOV AL,0BH INT 21H
;设置波特率
MOV DX,03FBH MOV AL,80H OUT DX,AL
MOV DX,3F8H MOV AL,0CH OUT DX,AL MOV DX,3F9H MOV AL,0 OUT DX,AL
;确定通信协议
MOV DX,3FBH MOV AL,1BH OUT DX,AL
;设置OUT2=1 IRQ3使能 MOV DX,3FCH
MOV AL,08H ;OUT2=1 IRQ3使能 OUT DX,AL
;设置允许接收中断
MOV DX,3F9H ;接收中断允许 MOV AL,01 OUT DX,AL
STI
;主程序
MAIN: MOV AH,1 INT 16H ;判有无按键 JZ NEXT MOV AH,0
INT 16H ;取按键ASCII CMP AL,27
JZ MAINEND ;为[ESC]键转结束处理 NEXT: MOV AX,COUNT1 ;接收字符计数单元 CMP AX,COUNT ;判有无接收新字符 JZ MAIN
INC COUNT1 ;显示字符计数单元 LEA DX,DISP ;显示接收的字符 MOV AH ,09 INT 21H JMP MAIN MAINEND: CLI
;恢复中断0BH 的原中断向量 MOV AX,ESP MOV DS,AX MOV DX,IPP MOV AL ,0BH MOV AH,25H INT 21H STI
MOV AX ,4C00H
INT 21H ;程序结束返回DOS 状态 ;中断服务程序 INTTEST PROC FAR PUSH ES PUSH DS PUSH AX
断嵌套
PUSH BX PUSH CX PUSH DX STI ;开中断 即在中断服务程序时允许中MOV AX,CS MOV DS,AX
;接收数据并保存
MOV DX,2F8H
IN AL,DX
LEA SI,BUFF
MOV BX,COUNT
MOV [SI+BX],AL
INC COUNT
LEA SI,DISP ;存放主程待显示处 MOV [SI+11],AL
;清ISR 对应位
EXIT: MOV AL,20H
OUT 20H,AL
POP DX
POP CX
POP BX
POP AX
POP DS
POP ES
IRET
INTTEST ENDP
BUFF DB 1024H DUP(0)
COUNT DW 0
COUNT1 DW 0
DISP DB "........OK OK.........",0AH,0DH,24H ESP DW 0
IPP DW 0
CODE ENDS END START