已知8251A发送的数据格式为:数据为7位,偶校验,1个停止位,波特率因子64,设8251A控制寄存器的地址码是3FBH,发送/接收寄存器的地址码是3F8H,编写用查询法收发数据的通信程序。
以下是8251A在同步模式和异步模式下模式寄存器的格式:
8251A模式寄存器的格式-异步模式

8251A模式寄存器的格式-同步模式

根据8251A模式寄存器的格式图(见下文附录)作如下分析:
1 2 3 4 5 6 7 8 9
| 波特率因子64:为异步模式,指令格式为: S2 S1 EP PEN L2 L1 B2 B1,B2B1:11
一个停止位:S2 S1:01;偶校验:EP:1
校验允许位:PEN:1
数据位7位:L2 L1:10
所以模式字为:01111011
|
以下是8251A控制寄存器的格式:

①发送端初始化程序与发送控制程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| MOV DX,3FBH ;设置模式字 MOV AL,01111011B OUT DX,AL MOV AL,00110011B ;设置控制字 OUT DX,AL MOV DI,0 ;变址寄存器初始化 MOV CX,80 ;共发送80个字符 BEGIN:MOV DX,3FBH IN AL,DX ;读状态字 AND AL,01H ;将发送允许位置1 JZ BEGIN MOV DX,3F8H ;设置发送数据口 MOV AL,BUFFER[DI] ;buffer为程序发送的数据块 OUT DX,AL INC DI ;INC指针加1 LOOP BEGIN HLT
|
②接收端初始化程序与接收端控制程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| MOV DX,3FBH ;设置模式字 MOV AL,01111011B OUT DX,AL MOV AL,00110100B ;设置控制字 OUT DX,AL MOV DI,0 ;变址寄存器初始化 MOV CX,80 ;共接收80个字符 NEXT:MOV DX,3FBH IN AL,DX ;读状态字 TEST AL,02H ;测试RxRDY位,如为0,则未收到字符,故继续读取状态字并测试 JZ NEXT ;TEXT AL,38H ;测试有无帧格式错误、奇/偶校验错误和覆盖错误,如果有则转入出错处理程序 MOV DX,3F8H IN AL,DX MOV BUFFER2[DI],AL ;buffer2为程序接收的数据块 INC DI MOV DX,3FBH; ;判断是否出错 IN AL,DX; TEST AL,00111000B; JZ ERROR LOOP NEXT ERROR TMP ERRORPROC
|
关于8251A芯片的初始化编程流程:8251A的编程约定