8251串行通讯实验.docx
《8251串行通讯实验.docx》由会员分享,可在线阅读,更多相关《8251串行通讯实验.docx(14页珍藏版)》请在冰豆网上搜索。
8251串行通讯实验
师大学
数计学院实验报告
专业名称11计科
课程微机原理
实验名称串行通信实验
姓名
学号110704012
8251可编程串行口与PC机通讯实验
一、实验目的
(1)掌握8251芯片的结构和编程,掌握微机通讯的编制。
(2)学习有关串行通讯的知识。
(3)学习PC机串口的操作方法。
二、实验说明
1、8251信号线
8251是CPU与外设或Mode之间的接口芯片,所以它的信号线分为两组:
一组是用于与CPU接口
的信号线,另一组用于与外设或Mode接口。
(1)与CPU相连的信号线:
除了双向三态数据总线(D7~D0)、读(RD)、写(WR)、片选(CS)之外,还有:
RESET:
复位。
通常与系统复位相连。
CLK:
时钟。
由外部时钟发生器提供。
C/D:
控制/数据引脚。
TxRDY:
发送器准备好,高电平有效。
TxE:
发送器空,高电平有效。
RxRDY:
接收器准备好,高电平有效。
SYNDET/BRKDET:
同步/中止检测,双功能引脚。
(2)与外设或Mode相连的信号线:
DTR:
数据终端准备好,输出,低电平有效。
DSR:
数据装置准备好,输入,低电平有效。
RTS:
请求发送,输出,低电平有效。
CTS:
准许传送,输入,低电平有效。
TxD:
发送数据线。
RxD:
接收数据线。
TxC:
发送时钟,控制发送数据的速率。
RxC:
接收时钟,控制接收数据的速率。
2、8251的初始化编程和状态字
8251是一个可编程的多功能串行通信接口芯片,在使用前必须对它进行初始化编程。
初始化编
程包括CPU写方式控制字和操作命令字到8251同一控制口,在初始化编程时必须按一定的顺序。
如
下面的流程图:
三、实验原理图
四、实验容
本实验由实验器发送一串字符0~9,PC机串口接收并在超级终端上显示。
五、实验步骤
与PC机通讯应用实验
(1)实验连线:
a.用串口线把实验机8251模块的RS232通讯口与PC机相连,把串口旁边的短路块SW1短路在2-2/3-3上,
SW2短路在RS232上。
b.把8251实验区TxD、RxD分别与RS232实验区中的TxD、RxD相连。
c.8254定时器电路的CLK0和8251的CLOCK连到信号源CLK1(短路在1.5MHz)。
d.8254定时器电路的OUT0接8251的TxC和RxC,8254定时器电路的GATE接+5V
e.8251选通线CS与ISA总线接口模块的0000H相连,8254选通线CS与ISA总线接口模块的0020H相连。
f.8251及8254的WR连到8086主模块的,8251及格8254的RD连8086主模块的RD。
g.8251及8254模块的数据(D0~D7)、地址线(A0~A7)分别连到主模块的数据(AD0~AD7)、地址线(A0~A7)。
(2)PC机设置:
进入WINDOWS附件——>通讯——>超级终端。
进入终端后在“连接时使用”下
拉框选择你所使用的COM口,波特率设置为4800,数据位8位,奇偶校验位无,停止位1位,流量
控制无。
等待接收数据。
(3)编译、运行程序(8251xp.asm),运行程序前先按硬件复位,正常运行后应在PC机屏幕上循环显示“QingdongMicrocomputerInstitute”
6、实验代码
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0)
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
D8251_0DW0000H;DLAB=0:
接收数据寄存器,发送保持寄存器;DLAB=1:
波特率除数寄存器低位
D8251_1DW0001H;DLAB=0:
中断允许寄存器;DLAB=1:
波特率除数寄存器高位
P8254_T0DW0020H
P8254_MODEDW0023H
PC16550_0EQU03F8H;DLAB=0:
接收数据寄存器,发送保持寄存器;DLAB=1:
波特率除数寄存器低位
PC16550_1EQU03F9H;DLAB=0:
中断允许寄存器;DLAB=1:
波特率除数寄存器高位
PC16550_3EQU03FBH;线路控制寄存器LCR
PC16550_4EQU03FCH;MODEM控制寄存器MCR
PC16550_5EQU03FAH;线路状态寄存器LSR
DELAY_SETEQU01FFH;延时参数
MESDB'PCICARDNOTFOUND!
$'
MES0DB'***********************PCICONFIGINFO*****************************',13,10,'$'
MES1DB'PCIBIOSNOTFOUND!
',10,13,'$'
MES2DB'PCICONFIGREADERROR!
$'
DIS1DB'PCIADDRESS0$';
DIS5DB'BIOSNOTSUPPER!
$'
DIS6DB'READPCIBOARDFAIL!
$'
;-------PCIConfigurationSpaceRegisters-------------------------------
BNDB?
;BUSNUMBER
DN_FNDB?
;DeviceNumberandFunctionNumber
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
.386;386模式编译
START:
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;查找PCI卡资源并显示
MOVCX,wordptrIO_base_address
ANDCX,0FFFCH
ADDD8251_0,CX
ADDD8251_1,CX
ADDP8254_T0,CX
ADDP8254_MODE,CX
MOVDX,PC16550_3;DLAB为1允许访问波特率寄存器
MOVAL,82H
OUTDX,AL
MOVDX,PC16550_0;波特率除数寄存器低位
MOVAL,18H
OUTDX,AL
MOVDX,PC16550_1;波特率除数寄存器高位
MOVAL,00H
OUTDX,AL
MOVDX,PC16550_3;DLAB为0
MOVAL,03H;附加奇偶标志位选择,无校验,1位停止位,8位字符03
OUTDX,AL
MOVDX,PC16550_4;RTS、DTR置0:
请求发送、数据终端就绪
MOVAL,03H
OUTDX,AL
MOVDX,PC16550_1;中断允许寄存器IER,屏蔽中断
MOVAL,00H
OUTDX,AL
MOVDX,P8254_MODE
MOVAL,36H;计时器0,先低后高,方式3,二进制计数
OUTDX,AL
MOVDX,P8254_T0
MOVAL,13H;计数初值晶振6MHz波特率4800BIT,分频频率为(6000/76.8=4EH)
OUTDX,AL
MOVAL,00H
OUTDX,AL
MOVDX,D8251_1
MOVAL,4EH;异步1个停止位,无奇偶校验,8位字符,波特率为=发送(接收)时钟/16
OUTDX,AL
MOVAL,37H;不搜索,不复位,请求发送,错误标志复位,正常通信,允许接收,数据准备好,允许发送
OUTDX,AL
AGAIN:
MOVAH,30H;发送初值
NEXT:
MOVDX,D8251_1
NEXT1:
INAL,DX
RCRAL,1;检测TXRDY是否为0,即判断发送是否准备好
JNCNEXT1
CALLDELAY
MOVDX,D8251_0
MOVAL,AH
OUTDX,AL
INCAH
CALLRECEIVE
CMPAH,39H;为9赋初值
JBENEXT
JMPAGAIN
;
ERROR:
MOVDX,OFFSETMES2;显示读错误信息
MOVAH,09H
INT21H
EXIT:
MOVAX,4C00H
INT21H
MY_PROCENDp
DELAYPROCNEAR;延时程序
PUSHF
PUSHAX
PUSHDX
PUSHCX
MOVCX,-1
LOOP$;延时
POPCX
POPDX
POPAX
POPF
RET
DELAYENDp
RECEIVEPROCNEAR
PUSHF
PUSHAX
PUSHDX
PUSHCX
RECEIVE1:
MOVDX,PC16550_5;接收缓冲区是否满
INAL,DX
ANDAL,01H
JZRECEIVE1;为0未满,继续
CALLDELAY
MOVDX,PC16550_0;PC机接收数据
INAL,DX
MOVDL,AL
MOVAH,02H
INT21H
POPCX
POPDX
POPAX
POPF
RET
RECEIVEENDp
;
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
;
;*****************************************************************************
;/*找卡子程序*/
;*****************************************************************************
;
;FUNCTIONCODE
IO_port_addreEQU0CF8H;32位配置地址端口
IO_port_dataEQU0CFCH;32位配置数据端口
IO_PLX_IDEQU200810B5H;PCI卡设备及厂商ID
BADR0=10H;基地址寄存器0
BADR1=14H;基地址寄存器1
BADR2=18H;基地址寄存器2
BADR3=1CH;基地址寄存器3
FINDPCIPROCNEAR;查找PCI卡资源并显示
PUSHAD
PUSHFD
MOVEBX,080000000H
FINDPCI_next:
ADDEBX,100H
CMPEBX,081000000H
JNZfindpci_continue
MOVDX,offsetpcicardnotfind;显示未找到PCI卡提示信息
MOVAH,09H
INT21H
MOVAH,4CH
INT21H;退出
findpci_continue:
MOVDX,IO_port_addre
MOVEAX,EBX
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
CMPEAX,IO_PLX_ID
JNZfindpci_next;检查是否发现PCI卡
MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR1
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_9054base_address,EAX
ANDEAX,1
JZfindPCI_next;检查是否为i/o基址信息
MOVEAX,dwordptrIO_9054base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_9054base_address,EAX;去除i/o指示位并保存
MOVDX,IO_port_addre
MOVEAX,EBX
ADDEAX,BADR2
OUTDX,EAX;写地址口
MOVDX,IO_port_data
INEAX,DX;读数据口
MOVdwordptrIO_base_address,EAX
ANDEAX,1
JZfindPCI_next;检查是否为i/o基址信息
MOVEAX,dwordptrIO_base_address
ANDEAX,0fffffffeh
MOVdwordptrIO_base_address,EAX;去除i/o指示位并保存
MOVDX,offsetgood;显示开始执行程序信息
MOVAH,09H
INT21H
POPfd
POPad
RET
findPCIENDP
MY_CODEENDS
ENDSTART
七、实验心得
通过实验,进一步了解了串行通信的原理以及通过串行方式发送和接收数据的过程。
输出数据是以字符为单位首先送到数据发送保持寄存器中,再进入发送移位寄存器,这些过程都是并行方式传送的。
在发送移位寄存器中,按照事先和接收端约定的字符传输格式,加上起始位,奇偶校验位和停止位,然后再以约定的波特率先低位后高位地发送出去。
在实验中,选择的时钟频率脉冲为1MHz,波特率选择为1200B/s。
串行通信时,构成一个字符或数据的各位按时间先后,从低位到高位一位一位地传送,占用较少的通信线,使成本降低,因而适合远距离的传输。
串行通信常用作计算机与低速外设或计算机之间传输信息。
当传输距离较远时,可采用通信线路(如线、无线电台等)。
此外在使用时,发送及接收端必须具备并行-串行转换电路。