状态寄存器用于寄存8251A的状态信息,供CPU查询。各位定义如下: 7 DSR TXRDY位:当数据缓冲空时置位,而TXRDY引脚只有当条件(数据缓冲器空·/CTS·TXE)成立时才置位。
溢出错误:CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。 帧错误:在字符结尾没检测到停止位,称为帧错误。
帧错误:** 1=帧出错,由命令中ER复位 除TXRDY外同管脚定义 奇偶错误:1=出错。由命令中ER复位 6 SYNDET 5 FE 4 O 3 P 2 TXE 1 RXRDY 0 TXRDY 溢出错误:**1=溢出错。由命令中ER复位 三、实验原理图
图3—10
31
四、实验内容
TXC和RXC分别为8251A的发送时钟和接收时钟。它由片外8253A 的OUT1提供。8251A的片选地址为050~05FH(系统中已连好)。本实验要求以查询方式进行收发。要完成本实验,需2台DVCC实验系统。其中一台为串行发送、一台为串行接收,在1号机上装串行发送程序,在2号机上装串行接收程序,则在1号机上键入的字符显示在2 号机的显示器上。
由于本系统监控中已对8253A、8251A进行初始化,因此本实验可以直接进入对串行口状态的查询。
五、实验线路连接
(1)将1号机SIO区RXD1插孔和2号机的TXD1插孔相连。 (2)将1号机SIO区TXD1插孔和2号机的RXD1插孔相连。 (3)将1号机和2号机的地线GND插孔相连。
六、实验步骤
1、准备2台DVCC系列实验系统,确定1号为发送,2号为接收。 2、确认1号和2号机通信线路连接无误。 3、仔细阅读,弄懂实验程序并画出程序流程图
4、在联机时,必须要2台上位机,接收实验程序的文件名为\\DVCC\\H8EXE\\H88S.EXE。发送实验程序的文件名为\\DVCC\\H8EXE\\H87S.EXE。
在单机时:
先运行2号机,在2号机处于命令提示符“P.”状态下输入F000,按F1键,再输入9500,按EXEC键。即可进入等待接收状态,显示器显示8251-2。
注意:串行接收实验的有关内容见实验七。
然后运行1号机,在1号机处于命令提示符“P.”状态下,输入F000,按F1键,再输入9300,按EXEC键。即可进入串行发送状态,显示器显示8251-1。
5、在1号机键盘上按动数字键,在2号机的显示器上应显示对应数字键值。当1号机上按“MON”键时,1号机显示GOOD,此时可按RESET键或STOP键退出。
七、实验参考程序
CODE SEGMENT ASSUME CS:CODE
32
ORG 1300H
START: JMP SERIAL SECOPORT EQU 0051H SEDAPORT EQU 0050H SERIAL: call for8251 MOV DS:[077AH],1701H MOV DS:[077CH],0501H MOV DS:[077EH],0802H redikey:call dispkey cmp byte ptr ds:[0752h],10h jc wattxd jmp funckey
WATTXD: MOV DX,SECOPORT IN AL,DX TEST AL,01H JZ WATTXD MOV AL,BYTE PTR DS:[0752H] MOV DX,SEDAPORT OUT DX,AL
WATRXD: MOV DX,SECOPORT IN AL,DX TEST AL,02H JZ WATRXD MOV DX,SEDAPORT IN AL,DX CMP BYTE PTR DS:[0752H],AL JZ seri2 MOV DS:[077AH],1c1cH MOV DS:[077CH],101bH mov ds:[077eh],1010h sererr: CALL DISP JMP sererr
seri2: mov cx,0018h ser3: call disp loop ser3 jmp redikey
funckey:CMP BYTE PTR DS:[0752H],1FH JNZ REDIKEY MOV DS:[077AH],191AH MOV DS:[077CH],1819H mov ds:[077eh],1010h monit: CALL DISP JMP monit dispkey:call disp
33
call key mov ah,al ;newkey mov bl,ds:[0748h] ;ltime mov bh,ds:[0749h] ;lkey mov al,01h mov dx,0ff21h out dx,al cmp ah,bh mov bh,ah ;bh=new key mov ah,bl ;al=time jz disk4 mov bl,88h mov ah,88h disk4: dec ah cmp ah,82h jz disk6 cmp ah,0eh jz disk6 cmp ah,00h jz disk5 mov ah,20h dec bl jmp disk7
disk5: mov ah,0fh disk6: mov bl,ah mov ah,bh
disk7: mov byte ptr ds:[0748h],bl mov byte ptr ds:[0749h],bh mov byte ptr ds:[0752h],bh mov al,ah ret disp: push cx mov dx,077fh mov ah,20h
disp0: mov cx,00ffh mov bx,dx mov bl,ds:[bx] mov bh,0h push dx mov dx,0ff22h mov al,cs:[bx+13fdh] out dx,al mov dx,0ff21h mov al,ah
34
out dx,al
disp1: loop disp1 pop dx dec dx shr ah,01h jnz disp0 pop cx ret
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh db 0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh db 90h,0a3h,0a1h,86h,8fh
key: mov al,0ffh mov dx,0ff22h out dx,al mov bl,00h mov ah,0feh mov cx,08h key1: mov al,ah mov dx,0ff21h out dx,al shl al,01h mov ah,al nop nop nop nop nop nop mov dx,0ff23h in al,dx not al nop nop and al,0fh jnz key2 inc bl loop key1 jmp nkey
key2: test al,01h je key3 mov al,00h jmp key6
35