INC AH;AH自加
CMP AH,00H;AH 与00H作比较 JNZ MAIN;不相等,跳转到MAIN CALL BUF1;调用BUF1
MOV CX,00FFH;将00FFH初始给CX,循环次数
S3: PUSH CX;CX入栈
CALL DISP;显示 POP CX;CX出栈 LOOP S3;循环 CALL BUF3
S1: CALL DISP;显示
JMP S1;跳转到S1
TXD: MOV DX,LSTAT;
WAIT1: IN AL,DX;读取LSTAT中的值(读取线路状态寄存器)
TEST AL,20H;检验D5位是否为1,即检查发送保持器是否为空,不 为空则等待
JZ WAIT1;不为空等待
MOV AL,AH;从AH中取出发送数据 MOV DX,DATA OUT DX,AL RET;中断返回
RCV: MOV DX,LSTAT
WAIT2: IN AL,DX;读线路状态寄存器
TEST AL,01H;查接收缓冲器是否为满,不满则继续等待
JZ WAIT2
TEST AL,0EH
JNZ ERR;不相等,显示err MOV DX,DATA
IN AL,DX;读取DATA端口值 RET;中断返回
ERR: CALL BUF2;调用BUF2程序 S2: CALL DISP;调用显示程序
JMP S2;循环显示
DISP: MOV AL,0FFH ;00H
MOV DX,PA OUT DX,AL
MOV CL,0DFH ;20H ;显示子程序,5ms MOV BX,OFFSET BUF;将BUF的偏移值送BX
DIS1: MOV AL,[BX];将[AL]中的内容读到Al中
MOV AH,00H
PUSH BX ;BX入栈
MOV BX,OFFSET DATA1 ;将DATA1的偏移地址给BX ADD BX,AX
DIS2: DELAY:
LX1:
BUF1:
BUF2:
BUF3:
CODE ENDS
MOV AL,[BX] POP BX
MOV DX,PB OUT DX,Al MOV AL,CL
MOV DX,PA OUT DX,AL PUSH CX
MOV CX,00A0H LOOP DELAY
POP CX
CMP CL,0FEH JZ LX1 INC BX ROR CL,1 JMP DIS1 MOV AL,0FFH
MOV DX,PB OUT DX,AL RET MOV BUF,08H
MOV BUF+1,02H MOV BUF+2,05H MOV BUF+3,00H MOV BUF+4,17H MOV BUF+5,17H RET
MOV BUF,08H
MOV BUF+1,02H MOV BUF+2,05H MOV BUF+3,00H MOV BUF+4,0EH MOV BUF+5,18H RET
MOV BUF,09H
MOV BUF+1,00H MOV BUF+2,00H MOV BUF+3,0DH MOV BUF+4,10H MOV BUF+5,10H RET
END START
;读取对应的七段码 ;输出到PB端口 ;显示
;循环,延时
;01H
;相等跳转到LX1
;BX自加,地址后移一位 ;SHR CL,1
;跳转到DIS1,循环显示;PB端口清零
;中断返回 ;显示8250——
;显示err
;显示good--
思考题
如果使用通讯协议:
1 个起始位,7 位数据位,2 个停止位,波特率:9600。系统将如何实现。 解:将 MOV AL,18H
MOV DX,DATA OUT DX,AL MOV DX,MSB MOV AL,00 OUT DX,AL MOV AL,03H MOV DX,LINE OUT DX,AL
改为:
MOV AL,0CH
MOV DX,DATA ;ff80H OUT DX,AL MOV DX,MSB MOV AL,00 OUT DX,AL MOV AL,06H MOV DX,LINE OUT DX,AL
实验总结: