key3: test al,02h je key4 mov al,08h jmp key6
key4: test al,04h je key5 mov al,10h jmp key6
key5: test al,08h je nkey mov al,18h key6: add al,bl cmp al,10h jnc fkey mov bl,al mov bh,0h mov al,cs:[bx+147eH] ret
nkey: mov al,20h fkey: ret
data2: db 07h,04h,08h,05h,09h,06h,0ah,0bh DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh
for8251:call t8253 mov al,65h out dx,al call l4726 mov dx,SECOPORT mov al,25h out dx,al call l4726 mov dx,SECOPORT mov al,65h out dx,al call l4726 mov dx,SECOPORT mov al,4eh out dx,al call l4726
mov dx,SECOPORT mov al,25h out dx,al call l4726 ret
36
T8253: MOV DX,43H MOV AL,76H out dx,al MOV DX,41H MOV AL,0CH out dx,al MOV DX,41H MOV AL,00H out dx,al mov dx,SECOPORT mov dx,SECOPORT RET l4726: push bp mov bp,sp mov al,0ffh mov cl,0ffh shr al,cl mov byte ptr ds:[0754h],al pop bp ret
CODE ENDS END START
37
实验七 使用8251A串行接口应用实验—双机通信(接收)
一、实验目的
1、掌握双机通信的原理和编程方法 2、进一步学习8251A的使用方法
二、实验原理图
图3—11
三、实验内容
TXC和RXC分别为8251A的发送时钟和接收时钟。它由片外8253A 的OUT1提供。8251A的片选地址为050~05FH(系统中已连好)。本实验要求以查询方式进行收发。要完成本实验,需2台DVCC实验系统。其中一台为串行发送、一台为串行接收,在1号机上装串行发送程序,在2号机上装串行接收程序,则在1号机上键入的字符显示在2 号机的显示器上。
由于本系统监控中已对8253A、8251A进行初始化,因此本实验可以直接进入对串行口状态的查询。
38
实验线路连接
(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 ORG 1500H
START: JMP SERIAL SECOPORT EQU 0051H SEDAPORT EQU 0050H SERIAL: call for8251 cld MOV DS:[077AH],1702H MOV DS:[077CH],0501H MOV DS:[077EH],0802H MOV DS:[0740H],077FH watrxd: call disp MOV DX,SECOPORT IN AL,DX TEST AL,02H
39
JZ watrxd MOV DX,SEDAPORT IN AL,DX MOV BYTE PTR DS:[0701H],AL wattxd: MOV DX,SECOPORT IN AL,DX TEST AL,01H JZ WATTXD MOV DX,SEDAPORT MOV AL,BYTE PTR DS:[0701H] OUT DX,AL MOV BX,DS:[0740H] mov ds:[bx],al CMP BX,077ah jz serial1 dec BX MOV DS:[0740H],BX jmp watrxd
serial1:mov ds:[0740h],077fh jmp watrxd disp: 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+1588h] OUT DX,AL mov dx,0ff21h mov al,ah OUT DX,AL disp1: loop disp1 pop dx dec dx shr ah,01h jnz disp0 mov dx,0ff22h mov al,0ffh OUT DX,AL ret
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh
40