当前位置:文档之家› 8251串行通讯实验

8251串行通讯实验

安徽师范大学数计学院实验报告专业名称11计科课程微机原理实验名称串行通信实验姓名学号1107040128251 可编程串行口与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 接+5Ve. 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 机屏幕上循环显示“Qingdong Microcomputer Institute ”六、实验代码MY_STACK SEGMENT PARA 'STACK'DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA'IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0)pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$'GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'D8251_0 DW 0000H ;DLAB=0:接收数据寄存器,发送保持寄存器;DLAB=1:波特率除数寄存器低位D8251_1 DW 0001H ;DLAB=0:中断允许寄存器;DLAB=1:波特率除数寄存器高位P8254_T0 DW 0020HP8254_MODE DW 0023HPC16550_0 EQU 03F8H ;DLAB=0:接收数据寄存器,发送保持寄存器;DLAB=1:波特率除数寄存器低位PC16550_1 EQU 03F9H ;DLAB=0:中断允许寄存器;DLAB=1:波特率除数寄存器高位PC16550_3 EQU 03FBH ;线路控制寄存器LCRPC16550_4 EQU 03FCH ;MODEM控制寄存器MCR PC16550_5 EQU 03FAH ;线路状态寄存器LSR DELAY_SET EQU 01FFH ;延时参数MES DB ' PCI CARD NOT FOUND! $'MES0 DB '***********************PCI CONFIG INFO*****************************',13,10,'$'MES1 DB 'PCI BIOS NOT FOUND!',10,13,'$'MES2 DB ' PCI CONFIG READ ERROR! $'DIS1 DB 'PCI ADDRESS 0 $';DIS5 DB 'BIOS NOT SUPPER!$'DIS6 DB 'READ PCI BOARD FAIL!$';-------PCI Configuration Space Registers-------------------------------BN DB ? ;BUS NUMBERDN_FN DB ? ;Device Number and Function NumberMY_DATA ENDsMY_CODE SEGMENT PARA 'CODE'MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK.386 ;386模式编译START: MOV AX,MY_DATAMOV DS,AXMOV ES,AXMOV AX,MY_STACKMOV SS,AXCALL FINDPCI ;查找PCI卡资源并显示MOV CX,word ptr IO_base_addressAND CX,0FFFCHADD D8251_0,CXADD D8251_1,CXADD P8254_T0,CXADD P8254_MODE,CXMOV DX,PC16550_3 ;DLAB为1允许访问波特率寄存器MOV AL,82HOUT DX,ALMOV DX,PC16550_0 ;波特率除数寄存器低位MOV AL,18HOUT DX,ALMOV DX,PC16550_1 ;波特率除数寄存器高位MOV AL,00HOUT DX,ALMOV DX,PC16550_3 ;DLAB为0MOV AL,03H ;附加奇偶标志位选择,无校验,1位停止位,8位字符03OUT DX,ALMOV DX,PC16550_4 ;RTS、DTR置0:请求发送、数据终端就绪MOV AL,03HOUT DX,ALMOV DX,PC16550_1 ;中断允许寄存器IER,屏蔽中断MOV AL,00HOUT DX,ALMOV DX,P8254_MODEMOV AL,36H ;计时器0,先低后高,方式3,二进制计数OUT DX,ALMOV DX,P8254_T0MOV AL,13H ;计数初值晶振6MHz 波特率4800BIT,分频频率为(6000/76.8=4EH)OUT DX,ALMOV AL,00HOUT DX,ALMOV DX,D8251_1MOV AL,4EH ;异步1个停止位,无奇偶校验,8位字符,波特率为=发送(接收)时钟/16OUT DX,ALMOV AL,37H ;不搜索,不内复位,请求发送,错误标志复位,正常通信,允许接收,数据准备好,允许发送OUT DX,ALAGAIN: MOV AH,30H ;发送初值NEXT: MOV DX,D8251_1NEXT1: IN AL,DXRCR AL,1 ;检测TXRDY是否为0,即判断发送是否准备好JNC NEXT1CALL DELAYMOV DX,D8251_0MOV AL,AHOUT DX,ALINC AHCALL RECEIVECMP AH,39H ;为9赋初值JBE NEXTJMP AGAIN;ERROR: MOV DX,OFFSET MES2 ;显示读错误信息MOV AH,09HINT 21HEXIT: MOV AX,4C00HINT 21HMY_PROC ENDpDELAY PROC NEAR ;延时程序PUSHFPUSH AXPUSH DXPUSH CXMOV CX,-1LOOP $ ;延时POP CXPOP DXPOPFRETDELAY ENDpRECEIVE PROC NEARPUSHFPUSH AXPUSH DXPUSH CXRECEIVE1: MOV DX,PC16550_5 ;接收缓冲区是否满IN AL,DXAND AL,01HJZ RECEIVE1 ;为0未满,继续CALL DELAYMOV DX,PC16550_0 ;PC机接收数据IN AL,DXMOV DL,ALMOV AH,02HINT 21HPOP CXPOP DXPOPFRETRECEIVE ENDp;BREAK PROC NEAR ;按任意键退出PUSHFPUSH AXPUSH DXMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN: POP DXPOP AXPOPFRETBREAK ENDP;;**************************************************** *************************; /* 找卡子程序 */;**************************************************** *************************;;FUNCTION CODEIO_port_addre EQU 0CF8H ;32位配置地址端口IO_port_data EQU 0CFCH ;32位配置数据端口IO_PLX_ID EQU 200810B5H ;PCI卡设备及厂商IDBADR0 = 10H ;基地址寄存器0 BADR1 = 14H ;基地址寄存器1 BADR2 = 18H ;基地址寄存器2 BADR3 = 1CH ;基地址寄存器3FINDPCI PROC NEAR ;查找PCI卡资源并显示PUSHADPUSHFDMOV EBX,080000000HFINDPCI_next:ADD EBX,100HCMP EBX,081000000HJNZ findpci_continueMOV DX,offset pcicardnotfind ;显示未找到PCI卡提示信息MOV AH,09HINT 21HMOV AH,4CHINT 21H ;退出findpci_continue:MOV DX,IO_port_addreMOV EAX,EBXOUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口CMP EAX,IO_PLX_IDJNZ findpci_next ;检查是否发现PCI卡MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR1OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_9054base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_9054base_address AND EAX,0fffffffehMOV dword ptr IO_9054base_address,EAX ;去除i/o指示位并保存MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR2OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_base_addressAND EAX,0fffffffehMOV dword ptr IO_base_address,EAX ;去除i/o指示位并保存MOV DX,offset good ;显示开始执行程序信息MOV AH,09HINT 21HPOPfdPOPadRETfindPCI ENDPMY_CODE ENDSEND START七、实验心得通过实验,进一步了解了串行通信的原理以及通过串行方式发送和接收数据的过程。

相关主题