串行通信实验16550
第12章串行通信16550

2、错误检测 (1)奇偶校验错:出现错误启动重发。 (2)帧错:以起始位开始,停止位终止为一帧,帧错是指在停止位应该 收到逻辑“1”,但收到逻辑“0”,表示帧错。 (3)溢出错,在接受时,如果接受缓冲器满,此时有收到一个新帧,便 产生溢出错。
SYN
SOH
标题
STX
数据 块
ETB/ ETX
CRC1
CRC2
SYN:同步字符; SOH:报头开始; STX:正文开始; ETX:数据终止 CRC:校错。
(2)面向比特的通信规程 SDLC(synchronousn data link control):同步数据链路控制规程。 HDLC(high-level data link control):高级数据链路控制规程。 特点:没有采用控制字符,而是采用比特组合进行控制,数据块的长 度是任意的。
MODEM的调制类型一般有3种:ASK,FSK,PSK
(1)ASK:幅移键控
逻辑0
逻辑1
(2)FSK:频移键控 1200Hz 2400Hz
逻辑0
逻辑1
(3)PSK:相移键控
四、串行通信规程(protocol) 串行通信规程( )
1、基本概念:为了使通信顺利进行,发送和接收都要共同遵守一些基本的 通信规程,如:同步方式、传输控制、校验方式、数据编码、传输速率、通信 报文格式、控制字符的定义等。 2、异步通信和同步通信 (1)异步通信( ASYNC: Asynchronous Data Communication ) 它用起始位表示字符的开始,用停止位表示字符的结束。 它用起始位表示字符的开始,用停止位表示字符的结束。 (2)同步通信 SYNC: Synchronous Data Communication ) 同步通信( 以同步字符表示字符的开始。
16550说明

DX,LSR AL,DX AL,20H
XXX DX,THR AL,‘A’ DX,AL
;以查询方式发送数据 ;发送数据
2020年3月7日2时35分
13 guzhaolin@
16550初始化流程
16550串口芯片的初 始化编程就是设置波 特率、确定串行通信 的数据帧格式、使能 等。
2020年3月7日2时35分
线路控制寄存 器D7(即 基地址+3 DLAB)=1
写除数低8位 基地址+0
设置 波特 率
写除数高8位 基地址+1
线路控制寄存
器D7(即
基地址+3
DLAB)=0
设置数据位数、 停止位、校验 位
2020年3月7日2时35分
5 guzhaolin@
线路状态寄存器LSR
D7 D6 D5 D4 D3 D2 D1 D0 0
1
1
111
1
1
恒定 :
值
发 送
移
位
空
: 发 送 缓 冲 空
::::
检帧奇数
测错偶据
到
校溢
间
验出
断
错错
: 接 收 数 据 就
误绪
2020年3月7日2时35分
6 guzhaolin@
2020年3月7日2时35分
11 guzhaolin@
16550初始化程序
CTR EQU 3FBH DLSB EQU 3F8H DMSB EQU 3F9H
;控制口 ;除数低字节口 ;除数高字节口
MOV AL,10000000B
MOV OUT MOV MOV OUT MOV INC OUT MOV MOV OUT
实验4(16550接口实验)

实验4:16550串行接口应用实验一、实验目的1、掌握串行通信接口芯片16550的工作方式及应用编程。
2、学习有关串行通信知识。
二、实验原理分析1、异步传送方式与异步通信串行通信分为同步传送方式和异步传送方式两种,本实验是异步方式下的串行通信,其具体原理如下。
异步传送的数据以字节为单位,传送时各个字符可以连续传送,也可以断续传送,由发送方来决定。
数据传输的速率(波特率)是双方事先约定好的。
双方各自用自己的时钟信号来控制发送和接收。
异步通信采用异步传送方式,通信以“帧”为传送单位,一个帧由起始位开始,停止位结束。
两个帧之间为空闲位。
通常一帧信息由7~12位二进制组成,每帧数据由四个部分组成,帧格式如下图所示。
其中:(1)起始位:当传输线上没有信号时,处于连续的逻辑1状态。
当有数据帧传输时,以1位逻辑0开始,作为数据帧的起始位。
(2)数据位:起始位后紧接的是数据位,一般为5~8位,具体位数由收发双方约定,先发送低位。
(3)奇偶校验位:使用1位数据作为传送数据的奇偶位校验。
(4)停止位:最后传输的是停止位,用1~2位(1、1.5或2)逻辑1来标志数据帧的传输结束。
2、16550基本结构16550内部结构见实验指导书P57,图3-6-2所示:实验指导书P57,16550内部结构示意图(1)数据总线缓冲器:是一个三态双向8位数据缓冲器,16550通过它与系统的数据总线连接,传送控制字、数据和状态信息。
(2)选择和读写控制逻辑:接收来自CPU的地址、片选和控制信息,产生16550内部各端口的读写操作命令。
(3)发送器:由发送保持寄存器(THR)、发送移位寄存器和发送同步控制器等三部分组成。
待发送的数据写入发送保持寄存器,数据发送时,其内容自动转入到发送移位寄存器,并转换为串行数据格式,在同步时钟控制下,由SOUT(TXD)引脚发送。
(4)接收器:由接收缓冲寄存器(RBR)、接收移位寄存器和接收同步控制器等三部分组成。
第3次(2)实验 16550串口实验

第三次实验(2) 16550串口实验9.8(1)串口通讯基础实验(16550-1.asm )需要示波器MY16550_0 EQU 9C80HMY16550_1 EQU 9C81HMY16550_3 EQU 9C83HMY16550_4 EQU 9C84HCODE SEGMENTASSUME CS:CODESTART: MOV DX,MY16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,MY16550_0MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,MY16550_4MOV AL,03HOUT DX,ALCALL DALLYMOV DX,MY16550_1 MOV AL,00HOUT DX,ALCALL DALLYA1: MOV DX,MY16550_0 MOV AL,55HOUT DX,ALCALL DALLYCALL BREAKJMP A1DALLY: PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,1000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETBREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN:RETBREAK ENDPCODE ENDSEND START.8 (2)串口自发自收应用实验( 16550-2.asm )可以做显示26个大写字母MY16550_0 EQU 9C80H;收发寄存器 DLAB = 0 ;;或 DLAB = 1波特率低8位除数 Page 290 表9.3 MY16550_1 EQU 9C81H;中断允许寄存器IER DLAB = 0;或 DLAB = 1波特率高8位除数 Page 290 表9.3 MY16550_3 EQU 9C83H ; LCR 线路控制寄存器MY16550_4 EQU 9C84H ; MODEM 控制寄存器 MCRMY16550_5 EQU 9C85H ; LCR 线路状态寄存器 LSRDATA SEGMENTAA DB 40H 41H ~ 5A H : A ~ ZDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,MY16550_0MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,MY16550_4MOV AL,03HOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,00HOUT DX,ALCALL DALLYA1: INC AA ; AA DB 40H 41H ~ 5A H : A ~ ZMOV DX,MY16550_0 ; 发送MOV AL,AAOUT DX,ALCALL DALLYA2: CALL BREAKMOV DX, MY16550_5 ; LCR 线路状态寄存器 LSRIN AL,DXAND AL,01HJZ A2MOV DX,MY16550_0IN AL,DXMOV AH,0EHINT 10H ;收到 ---屏幕显示 CALL DALLYCMP AL,5AHJNZ A1MOV AX,4C00HINT 21HDALLY: PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,2000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETBREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN:RETBREAK ENDPCODE ENDSEND START9.8(3)与PC串口通讯基础实验(16550-3.asm )MY16550_0 EQU 9C80HMY16550_1 EQU 9C81HMY16550_3 EQU 9C83HMY16550_4 EQU 9C84HPC16550_0 EQU 03F8HPC16550_1 EQU 03F9HPC16550_3 EQU 03FBHPC16550_4 EQU 03FCHINTCSR_BYTE0 EQU 9438HINTCSR_BYTE1 EQU 9439HINTCSR_BYTE2 EQU 943AHINTCSR_BYTE3 EQU 943BHIMB4_BYTE3 EQU 941FHDATA SEGMENTCSBAK DW ?IPBAK DW ?MKBAK DB ?DTABLE DB 54H, 68H,69H,73H,20H,69H,73H,20H,54H,61H,6EH,67H, 64H, 75H, 20H, 53H,DB 70H, 65H, 61H, 6BH,69H,6EH,67H,21HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: CLIMOV AX,DATAMOV DS,AXMOV AX,0000HMOV ES,AXMOV DI,01CCH ;INT 73H,01CCH=73H*4 MOV AX,ES:[DI]MOV IPBAK,AX ;IPMOV AX,OFFSET MYINTCLDSTOSWMOV AX,ES:[DI] ;CSMOV CSBAK,AXMOV AX,SEG MYINTSTOSWIN AL,0A1HMOV MKBAK,ALAND AL,0F7HOUT 0A1H,ALMOV DX,PC16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,PC16550_0 ;9600 (bit/s)MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,PC16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,PC16550_3MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,PC16550_4MOV AL,03HOUT DX,ALCALL DALLYMOV DX,PC16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,MY16550_0 ;9600 (bit/s) MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,MY16550_4MOV AL,03HOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,01HOUT DX,ALCALL DALLYMOV DX,INTCSR_BYTE0 MOV AL,00HOUT DX,ALMOV DX,INTCSR_BYTE1 MOV AL,1FHOUT DX,ALMOV DX,INTCSR_BYTE2 MOV AL,3FHOUT DX,ALMOV DX,INTCSR_BYTE3 MOV AL,00HOUT DX,ALSTIMOV BX,OFFSET DTABLE MOV CX,0018HA1: MOV DX,PC16550_0MOV AL,[BX]OUT DX,ALINC BXCALL DALLYLOOP A1CALL BREAKMYINT: PUSH DSPUSH AXPUSH BXPUSH CXPUSH DXMOV DX,IMB4_BYTE3 IN AL,DXMOV DX,INTCSR_BYTE2 MOV AL,3FHOUT DX,ALMOV AL,63HOUT 0A0H,ALMOV AL,62HOUT 20H,ALMOV DX,MY16550_0IN AL,DXMOV AH,0EHINT 10HPOP DXPOP CXPOP BXPOP AXPOP DSIRETDALLY: PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,2000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETBREAK PROC NEARCLIMOV AL,MKBAKOUT 0A1H,ALMOV AX,0000HMOV ES,AXMOV DI,01CCH ;INT 73H,01CCH=73H*4 MOV AX,IPBAKCLDSTOSWMOV AX,CSBAKSTOSWMOV DX,INTCSR_BYTE1MOV AL,00HOUT DX,ALSTIMOV AX,4C00HINT 21HBREAK ENDPCODE ENDSEND START9.8(4-1)串口双机通讯基础实验1号机程序(16550-41.asm 发)MY16550_0 EQU 9C80HMY16550_1 EQU 9C81HMY16550_3 EQU 9C83HMY16550_4 EQU 9C84HMY16550_5 EQU 9C85HDATA SEGMENTAA DB 2FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,MY16550_0 MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,MY16550_1 MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3 MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,MY16550_4 MOV AL,03HOUT DX,ALCALL DALLYMOV DX,MY16550_1 MOV AL,00HOUT DX,ALCALL DALLYA1: INC AAMOV DX,MY16550_0 MOV AL,AAOUT DX,ALCALL DALLYCMP AL,39HJNZ A1MOV AX,4C00HINT 21HDALLY: PUSH CXPUSH AXMOV CX,0300HD1: MOV AX,3000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETCODE ENDSEND START9.8(4-2)串口双机通讯基础实验2号机程序(16550-42.asm 中断方式收)MY16550_0 EQU 9C80HMY16550_1 EQU 9C81HMY16550_3 EQU 9C83HMY16550_4 EQU 9C84HINTCSR_BYTE0 EQU 9438HINTCSR_BYTE1 EQU 9439HINTCSR_BYTE2 EQU 943AHINTCSR_BYTE3 EQU 943BHIMB4_BYTE3 EQU 941FHDATA SEGMENTCSBAK DW ?IPBAK DW ?MKBAK DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: CLIMOV AX,DATAMOV DS,AXMOV AX,0000HMOV ES,AXMOV DI,01CCH ;INT 73H,01CCH=73H*4 MOV AX,ES:[DI]MOV IPBAK,AX ;IPMOV AX,OFFSET MYINTCLDSTOSWMOV AX,ES:[DI] ;CSMOV CSBAK,AXMOV AX,SEG MYINTSTOSWIN AL,0A1HMOV MKBAK,ALAND AL,0F7HOUT 0A1H,ALMOV DX,MY16550_3MOV AL,80HOUT DX,ALCALL DALLYMOV DX,MY16550_0 ;9600 (bit/s) MOV AL,0CHOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,00HOUT DX,ALCALL DALLYMOV DX,MY16550_3MOV AL,1BHOUT DX,ALCALL DALLYMOV DX,MY16550_4MOV AL,03HOUT DX,ALCALL DALLYMOV DX,MY16550_1MOV AL,01HOUT DX,ALCALL DALLYMOV DX,INTCSR_BYTE0MOV AL,00HOUT DX,ALMOV DX,INTCSR_BYTE1MOV AL,1FHOUT DX,ALMOV DX,INTCSR_BYTE2MOV AL,3FHOUT DX,ALMOV DX,INTCSR_BYTE3MOV AL,00HOUT DX,ALSTIA1: CALL BREAKJMP A1MYINT: PUSH DS ;中断服务程序 PUSH AXPUSH BXPUSH CXPUSH DXMOV DX,IMB4_BYTE3IN AL,DXMOV DX,INTCSR_BYTE2MOV AL,3FHOUT DX,ALMOV AL,63HOUT 0A0H,ALMOV AL,62HOUT 20H,ALMOV DX,MY16550_0IN AL,DXMOV AH,0EHINT 10HPOP DXPOP CXPOP BXPOP AXPOP DSIRETDALLY: PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,2000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETBREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE RETURNCLIMOV AL,MKBAKOUT 0A1H,ALMOV AX,0000HMOV ES,AXMOV DI,01CCH ;INT 73H,01CCH=73H*4 MOV AX,IPBAKCLDSTOSWMOV AX,CSBAKSTOSWMOV DX,INTCSR_BYTE1MOV AL,00H OUT DX,AL STIMOV AX,4C00H INT 21H RETURN:RET BREAK ENDP CODE ENDSEND START。
串行通信实验16550

(一)实验名称串行通信实验16550(二)实验内容1)串行通讯基础实验。
编写程序,向串口连续发送一个数据(55H),将串口输出连接到示波器上,用示波器观察数据输出产生的波形。
2)串口自发自收应用实验。
编写程序,将一串数据发送至串口,再接收回来显示。
(三)实验目的1)学习和掌握有关串行通信的知识2)学习和体会16550的工作原理、工作方式,利用其进行应用编程3)学习和掌握PC机串口的操作方法(四)实验日期、时间和地点2011—1—4 6,7节2011-1-7 1,节微机高级实验室(五)实验环境(说明实验用的软硬件环境及调试软件)PC机一台,PIT-B实验箱一套,TDPIT、td-debug软件环境一套(六)实验步骤(只写主要操作步骤,要简明扼要,还应该画出程序流程图或实验电路的具体连接图)一:二:自发自收(七)实验结果(经调试通过的源程序的所有代码,应包含必要的说明文字)MY_03F8 EQU 0E480HMY_03FB EQU 0E483HMY_03FD EQU 0E485HDATAS SEGMENTNUM DB 55H;此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 10 DUP(0);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;初始化16550MOV DX,MY_03FB ;16550控制寄存器地址送DXMOV AL,80H ;置DLAB=1,设置除数寄存器OUT DX,ALCALL DALLYMOV DX,MY_03F8 ;除数寄存器地址送DXMOV AX,03C0H ;波特率为1200bit/sOUT DX,ALCALL DALLYMOV AL,AHINC DXOUT DX,ALCALL DALLYMOV DX,MY_03FB ;16550控制寄存器地址送DXMOV AL,0BH ;8位数据位,奇校验,1位停止位OUT DX,ALCALL DALLYCALL GOMOV AH,4CHINT 21HGO PROC NEARLOP1:MOV DX,MY_03FD ;通信状态寄存器地址送DXIN AL,DXCALL DALLYTEST AL,20H ;检测发送器是否准备就绪 JZ LOP1LOP2:MOV DX,MY_03F8MOV AL,NUMOUT DX,ALCALL DALLYCALL BREAKJMP LOP2RETGO ENDPDALLY PROC NEARPUSH CXPUSH AXMOV CX,0100HD1: MOV AX,1000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPBREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN:RETBREAK ENDPCODES ENDSEND START二:自发自收MY_03F8 EQU 0E480HMY_03FB EQU 0E483HMY_03FD EQU 0E485HMY_03FC EQU 0E48CHDATAS SEGMENTSTR1 DB'this is good'LEN EQU $-STR1STR2 DB 20 DUP (0),'$';此处输入数据段代码DATAS ENDSSTACKS SEGMENTDW 10 DUP (0);此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX;初始化16550MOV DX,MY_03FB ;16550控制寄存器地址送DXMOV AL,80H ;置DLAB=1,设置除数寄存器OUT DX,ALCALL DALLYMOV DX,MY_03F8 ;除数寄存器地址送DXMOV AX,03C0H ;波特率为1200bit/sOUT DX,ALCALL DALLYMOV AL,AHINC DXOUT DX,ALCALL DALLYMOV DX,MY_03FB ;16550控制寄存器地址送DXMOV AL,1BH ;8位数据位,奇校验,1位停止位OUT DX,ALCALL DALLYMOV DX,MY_03FCMOV AL,03HOUT DX,ALCALL DALLYCALL GOLEA DX,STR2 ;显示str2MOV AH,09HINT 21HMOV AH,4CHINT 21HGO PROC NEARLEA BX,STR1LEA DI,STR2MOV CX,LENINC CXLOP1:DEC CXJZ DONELOP2:MOV DX,MY_03FDIN AL,DXTEST AL,20H ;测试发送是否就绪JZ LOP2MOV DX,MY_03F8MOV AL,[BX] ;取出发送区域的待发送数据 OUT DX,ALLOP3:MOV DX,MY_03FDIN AL,DXTEST AL,1EH ;数据是否有错误JNZ ERROR ;跳转错误处理TEST AL,01H ;查看接受缓存器是否有信息 JZ LOP3MOV DX,MY_03F8IN AL,DXMOV [DI],ALINC BXINC DIJMP LOP1CLC ;接收成功,清CY标志位JMP DONEERROR:STC ;接收不成功,置CY标志位DONE:RETGO ENDPDALLY: PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,2000HD2: DEC AXJNZ D2 LOOP D1POP AXPOP CX RETCODES ENDSEND START。
微机接口实验报告16550串口控制器应用实验

【实验目的】掌握16550的工作方式及应用。
学习PC机串口的操作方法。
【试验设备】PC微机一台、TD-PIT+实验系统一套、示波器一台。
【实验内容】编写程序,向串口连续发送一个数据53H(“1”的个数为偶数)或57H(“1”的个数为奇数)。
将串口输出连接到示波器上,用示波器观察数据输出产生的波形,分析串行数据格式。
【实验原理】16550是一种连接任何类型虚拟串行接口的可编程通信接口,与Intel微处理器完全兼容的使用非常广泛的异步接收器/发送器(UART)。
它内置了16字节的FIFO缓冲,最大通讯速率可达115Kb/s,是现代基于微处理器设备包括PC机和许多调制解调器的最普遍的通信接口。
16550的引脚如图11-1所示,其内部结构如图11-2所示。
图11-1 16550引脚图1.端口地址的使用16550内部有11个寄存器,在芯片选择有效的前提下,由芯片的寄存器选择输入线A2,A0和A0来确定访问的寄存器,芯片中采用两条措施来解决端口地址少的问题(只有8个地址)。
(1)保持寄存器和接收数据寄存器共用一个地址,以“写入”访问前者、“读出”访问后者加以区分。
(2)除数寄存器的高字节与中断允许寄存器使用相同地址,高字节和接收数据寄存器、发送保持寄存器使用相同的地址,为了区分,借用线路控制寄存器的最高位DLAB位来区分。
访问除数寄存器时,令DLAB位为“1”;访问接收数据寄存器、发送保持寄存器和中断允许寄存器时,则将DLAB位置“0”。
具体说明如表11-1所示。
图11-2 16550的内部结构图DLAB A2A1A0 被访问的寄存器0 000 接收数据寄存器(读),发送保持寄存器(写)0 001 中断允许寄存器IER1 000 波特率除数寄存器(低字节)1 001 波特率除数寄存器(高字节)X 010 中断识别寄存器IIR(只读),FIFO控制器FCR(只写)X 011 线路控制寄存器LCRX 100 MODEM控制寄存器MCRX 101 线路状态寄存器LSRX 110 MODEM状态寄存器MSRX 111 Scratch寄存器2.(1)线路控制寄存器(LCR),主要用于指定异步串行通信的数据格式。
可编程串行通信接口芯片16550与8250
D1
△DSR
D0
△CTS
△表示变化的状态
△允许发送(CTS) △ 数据装置就绪(DSR) △ 响铃指示 △ 数据载波检测(DCD)
2023年5月4日星期四
7.中断允许寄存器IER
反映了接收器和发送器以及Modem是否允许中 断的情况,通过设置可以指定其中的某些部件 允许中断。它是一个可读可写的寄存器。
其它引脚
1. 电源及时钟VCC,GND,XTLA1,XTLA2 2. 数据线:D7~D0 3. 片选信号:CS0,CS1和/CS2(输入) 4. 选通信号:
地址输入选通: /ADS 数据输入选通:DISTR和/DISTR(接/IOR) 数据输出选通:DOSTR和/DOSTR(接/IOW) 5. 主复位:MR 6. 接收时钟: =接收波特率的16倍 7. 清除发送: /CTS 8. 数据装置(MODEM)准备好: /DSR 9. 接收线路信号检测: /RLSD(有效时表示Modem检测数据载波 10.振铃指示:/RI 有效表示Modem已经接收到一个电话振铃信号
读/写操作 OUT (写) IN (读) IN(读)或 OUT(写) IN(读)或 OUT(写) IN(读)或 OUT(写) IN (读) IN(读)或 OUT(写) IN(读)或 OUT(写) IN(读) IN(读)
2023年5月4日星期四
2.串行接口初始化
串行接口初始化的任务: (1)设置波特率 (2)确定通信的具体格式 (3)设置操作方式 (4)设定是否使用中断、是否自测试操作等
D7 D6 D5 D4
IEE 0 0
0
0
1 允许中断 0 禁止中断 1 允许中断 0 禁止中断
Modem状态中断 接收字符代码错 或接收中止状态中断
16550与PC机串口通信实验
;T16550-2.asm;16550与PC机串口通信实验;***************根据CHECK配置信息修改下列符号值*******************INTR_IV ADD EQU 01CCH ;INTR对应的中断矢量地址INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址INTR_IM EQU 0F7H ;INTR对应的中断屏蔽字PCI_INTCSR EQU 9438H ;PCI卡中断控制寄存器地址IOY0 EQU 9C00H ;片选IOY0对应的端口始地址;****************************************************************MY16550_0 EQU IOY0+00H*4 ;16550数据缓冲寄存器端口地址MY16550_1 EQU IOY0+01H*4 ;16550中断允许寄存器端口地址MY16550_3 EQU IOY0+03H*4 ;16550线路控制寄存器端口地址PC_COM1_0 EQU 03F8H ;PC机COM1数据缓冲寄存器端口地址PC_COM1_1 EQU 03F9H ;PC机COM1中断允许寄存器端口地址PC_COM1_3 EQU 03FBH ;PC机COM1线路控制寄存器端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDA TA SEGMENTCS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存INTR原中断屏蔽字的变量STR1 DB 'Communication with computer!$' ;字符串DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXCLIMOV DX,PCI_INTCSRSUB DX,19HIN AL,DXMOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00HOUT DX,AXADD DX,2MOV AX,003FHOUT DX,AXMOV AX,0000H ;替换INTR的中断矢量MOV ES,AXMOV DI,INTR_IV ADDMOV AX,ES:[DI]MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址MOV AX,OFFSET MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址ADD DI,2MOV AX,ES:[DI]MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址MOV AX,SEG MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口段地址MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位IN AL,DXMOV IM_BAK,AL ;保存INTR原中断屏蔽字AND AL,INTR_IMOUT DX,ALMOV DX,PC_COM1_3 ;设置PC机COM1线路控制寄存器MOV AL,80H ;准备设置波特率除数寄存器OUT DX,ALMOV DX,PC_COM1_0 ;设置COM1除数寄存器低字节0CHMOV AL,0CH ;000C对应9600 bit/sOUT DX,ALMOV DX,PC_COM1_1 ;设置COM1除数寄存器高字节00HMOV AL,00HOUT DX,ALMOV DX,PC_COM1_3 ;设置COM1线路控制寄存器,初始化数据格式MOV AL,1BH ;偶校验,1位停止位,字符宽度为8OUT DX,ALMOV DX,PC_COM1_1 ;设置中断允许寄存器MOV AL,00H ;中断不打开OUT DX,ALMOV DX,MY16550_3 ;设置16550线路控制寄存器MOV AL,80H ;准备设置波特率除数寄存器OUT DX,ALMOV DX,MY16550_0 ;设置除数寄存器低字节0CHMOV AL,0CH ;000C对应9600 bit/sOUT DX,ALMOV DX,MY16550_1 ;设置除数寄存器高字节00HMOV AL,00HOUT DX,ALMOV DX,MY16550_3 ;设置线路控制寄存器,初始化数据格式MOV AL,1BH ;偶校验,1位停止位,字符宽度为8OUT DX,ALMOV DX,MY16550_1 ;设置中断允许寄存器MOV AL,01H ;允许接收缓冲寄存器满产生中断OUT DX,ALSTIMOV BX,OFFSET STR1MOV CX,001CHSEND: MOV DX,PC_COM1_0 ;将字符串数据写入COM1发送缓冲寄存器MOV AL,[BX]OUT DX,ALINC BXCALL DALL YLOOP SENDQUIT: CLIMOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器MOV AX,0000HOUT DX,AXMOV AX,0000H ;恢复INTR原中断矢量MOV ES,AXMOV DI,INTR_IV ADDMOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址MOV ES:[DI],AXADD DI,2MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址MOV ES:[DI],AXMOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字MOV AL,IM_BAKOUT DX,ALSTIMOV AX,4C00H ;返回到DOSINT 21HMYISR PROC NEAR ;中断处理程序MYISRMOV DX,MY16550_0 ;读取16550接收缓冲寄存器数据并显示IN AL,DXMOV AH,0EHINT 10HOVER: MOV DX,PCI_INTCSRSUB DX,19HIN AL,DXMOV DX,PCI_INTCSR ;清PCI卡中断控制寄存器标志位ADD DX,2MOV AX,003FHOUT DX,AXMOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令MOV AL,20HOUT DX,ALMOV AL,20HOUT 20H,ALIRETMYISR ENDPDALL Y PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,0100HD1: MOV AX,2000HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALL Y ENDPCODE ENDSEND START。
TLC16550C芯片的介绍(R232串行口通讯)
2 Tlc16c550引脚
Tlc16c550是TI公司的异步通 信芯片,他具有以下特点:管 脚与TLc16c750兼容;最高可 达1M的波特率,且波特率发 生器可编程设定;由软件设 定的FIFO以减少CPU中断;有 可编程的串行数据发送格式: 数据位长度为5、6、7、8; 具有奇偶校验或无校验方式; 停止位长度为1、1.5、2;采 用44脚PLCC封装。其引脚如 右 图 所 示 。
0010 0000
3 4
THR空 Modem状态
读IIR或写 THR
检测到数据载波,检测到振铃,读MSR modem状态变化等
5.3.3FIFO控制寄存器
FIFO的操作是通过FCR来设置,其字段定义如下文所描述。当使用FIFO 时,UART中最多可存放16字节数据;反之则只能存放一个数据,即相 当于只有一个字节大小。 位6和7:接收FIFO的跟踪级别,确定产生FIFO中断的数据数目。00:一 和 字节;01:4字节;10:8字节;11:14字节。 位4,5:保留。 , : 位3:DMA模式,当FCR0=1时,控制RXRDY和TXRDY(从0到1)。 : 位2:发送FIFO复位。写1时会清除发送FIFO,并自动清0。 : 位1:接收FIFO复位。写1时会清除接收FIFO,并自动清0。 : 位0:FIFO使能。写1时使能接收和发送FIFO,清0时会清除接收和发送 : FIFO。 当使能FIFO后,其工作方式有两种:中断方式和查询方式。 首先分析中断方式。当接收FIFO使能,且接收线路状态中断和接收 数据就绪中断使能(即FCR0=1,IER0=1,IER2=1),接收中断产生的 过程如下:当FIFO中数据的数目达到跟踪级别,UART产生中断并且IIR 中出现接收数据就绪的标志。当FIFO中数据的数目低于跟踪级别后,中 断信号返回无效状态,接收数据就绪的标志也自动清除。当一个字符从 RSR送入接收FIFO时,LSR中的数据就绪位(LSR0)将置起;当FIFO 变空,该位会自动清除。
16550说明
2020年3月7日2时35分
12 guzhaolin@
IER LSR THR
EQU 3F9H EQU 3FDH EQU 3F8H
;中断允许寄存器 ;通信线状态寄存器 ;发送缓冲器
MOV AL,00000110B MOV DX,IER OUT DX,AL
;以中断方式发送接收数据
MOV XXX: IN
16550初始化流程
16550串口芯片的初 始化编程就是设置波 特率、确定串行通信 的数据帧格式、使能 等。
2020年3月7日2时35分
线路控制寄存 器D7(即 基地址+3 DLAB)=1
写除数低8位 基地址+0
设置 波特 率
写除数高8位 基地址+1
线路控制寄存
器D7(即
基地址+3
DLAB)=0
设置数据位数、 停止位、校验 位
TEST JZ MOV MOV OUT
DX,LSR AL,DX AL,20H
XXX DX,THR AL,‘A’ DX,AL
;以查询方式发送数据 ;发送数据
2020年3月7日2时35分
13 guzhaolin@
1 除数寄存器(高字节)DLM 0 中断标识寄存器IIR(只读)
FIFO控制器FCR(只写)
1 传输线控制寄存器LCR
3F8H 3F9H 3FAH 3FBH
× 1 0 1 传输线状态寄存器LSR
3FDH
2020年3月7日2时35分
4 guzhaolin@
线路控制寄存器LCR
DLAB
D7 D6 D5 D4 D3
2020年3月7日2时35分
11 guzhaolin@
16550初始化程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)实验名称
串行通信实验16550
(二)实验内容
1)串行通讯基础实验。
编写程序,向串口连续发送一个数据(55H),将串口输出连
接到示波器上,用示波器观察数据输出产生的波形。
2)串口自发自收应用实验。
编写程序,将一串数据发送至串口,再接收回来显示。
(三)实验目的
1)学习和掌握有关串行通信的知识
2)学习和体会16550的工作原理、工作方式,利用其进行应用编程
3)学习和掌握PC机串口的操作方法
(四)实验日期、时间和地点
2011—1—4 6,7节
2011-1-7 1,节
微机高级实验室
(五)实验环境(说明实验用的软硬件环境及调试软件)
PC机一台,PIT-B实验箱一套,TDPIT、td-debug软件环境一套
(六)实验步骤(只写主要操作步骤,要简明扼要,还应该画出程序流程图或实验电路的具体连接图)
一:
二:自发自收
(七)实验结果(经调试通过的源程序的所有代码,应包含必要的说明文字)
MY_03F8 EQU 0E480H
MY_03FB EQU 0E483H
MY_03FD EQU 0E485H
DATAS SEGMENT
NUM DB 55H;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
DW 10 DUP(0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;初始化16550
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,80H ;置DLAB=1,设置除数寄存器
OUT DX,AL
CALL DALLY
MOV DX,MY_03F8 ;除数寄存器地址送DX
MOV AX,03C0H ;波特率为1200bit/s
OUT DX,AL
CALL DALLY
MOV AL,AH
INC DX
OUT DX,AL
CALL DALLY
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,0BH ;8位数据位,奇校验,1位停止位
OUT DX,AL
CALL DALLY
CALL GO
MOV AH,4CH
INT 21H
GO PROC NEAR
LOP1:
MOV DX,MY_03FD ;通信状态寄存器地址送DX
IN AL,DX
CALL DALLY
TEST AL,20H ;检测发送器是否准备就绪 JZ LOP1
LOP2:
MOV DX,MY_03F8
MOV AL,NUM
OUT DX,AL
CALL DALLY
CALL BREAK
JMP LOP2
RET
GO ENDP
DALLY PROC NEAR
PUSH CX
PUSH AX
MOV CX,0100H
D1: MOV AX,1000H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:RET
BREAK ENDP
CODES ENDS
END START
二:自发自收
MY_03F8 EQU 0E480H
MY_03FB EQU 0E483H
MY_03FD EQU 0E485H
MY_03FC EQU 0E48CH
DATAS SEGMENT
STR1 DB'this is good'
LEN EQU $-STR1
STR2 DB 20 DUP (0),'$';此处输入数据段代码DATAS ENDS
STACKS SEGMENT
DW 10 DUP (0);此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
;初始化16550
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,80H ;置DLAB=1,设置除数寄存器
OUT DX,AL
CALL DALLY
MOV DX,MY_03F8 ;除数寄存器地址送DX
MOV AX,03C0H ;波特率为1200bit/s
OUT DX,AL
CALL DALLY
MOV AL,AH
INC DX
OUT DX,AL
CALL DALLY
MOV DX,MY_03FB ;16550控制寄存器地址送DX
MOV AL,1BH ;8位数据位,奇校验,1位停止位
OUT DX,AL
CALL DALLY
MOV DX,MY_03FC
MOV AL,03H
OUT DX,AL
CALL DALLY
CALL GO
LEA DX,STR2 ;显示str2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
GO PROC NEAR
LEA BX,STR1
LEA DI,STR2
MOV CX,LEN
INC CX
LOP1:
DEC CX
JZ DONE
LOP2:
MOV DX,MY_03FD
IN AL,DX
TEST AL,20H ;测试发送是否就绪
JZ LOP2
MOV DX,MY_03F8
MOV AL,[BX] ;取出发送区域的待发送数据 OUT DX,AL
LOP3:
MOV DX,MY_03FD
IN AL,DX
TEST AL,1EH ;数据是否有错误
JNZ ERROR ;跳转错误处理
TEST AL,01H ;查看接受缓存器是否有信息 JZ LOP3
MOV DX,MY_03F8
IN AL,DX
MOV [DI],AL
INC BX
INC DI
JMP LOP1
CLC ;接收成功,清CY标志位JMP DONE
ERROR:
STC ;接收不成功,置CY标志位DONE:
RET
GO ENDP
DALLY: PUSH CX
PUSH AX
MOV CX,0100H
D1: MOV AX,2000H
D2: DEC AX
JNZ D2 LOOP D1
POP AX
POP CX RET
CODES ENDS
END START。