📄 8259a.txt
字号:
1. 初始化8253A的计数器0为工作方式0,装入时间常数FFFFH,结束中断时显示信息:8253A INTERRUPT EXPERIMENT!
CODE SEGMENT PARA
ASSUME CS:CODE,DS:CODE
INT71H PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
STI
JMP START
STRING DB '8253A INTERRUPT EXPERIMENT!',0AH,'$'
VH DW ?
VL DW ?
START: PUSH CS
POP DS
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
MOV DX,300H
MOV AX,0FFFFH
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,00100000B
OUT 0A0H,AL
OUT 20H,AL
CLI
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
INT71H ENDP
MAIN PROC FAR
PUSH CS
POP DS
MOV AH,35H
MOV AL,71H
INT 21H
MOV VH,ES
MOV VL,BX
MOV DX,OFFSET INT71H
MOV AL,71H
MOV AH,25H
INT 21H
IN AL,0A1H
AND AL,11111101B
OUT 0A1H,AL
STI
MOV DX,303H
MOV AL,00110000B
OUT DX,AL
MOV DX,300H
MOV AX,0FFFFH
OUT DX,AL
MOV AL,AH
OUT DX,AL
LP: MOV AH,1
INT 16H
JZ LP
MOV DX,VL
MOV DS,VH
MOV AL,71H
MOV AH,25H
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
2. 初始化8253A的计数器0为工作方式3,装入时间常数FFFFH,显示0、1、2、。。。、9十个数字。
CODE SEGMENT PARA
ASSUME CS:CODE,DS:CODE
INT71H PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
STI
JMP START
VH DW ?
VL DW ?
NUM DB 30H
START: PUSH CS
POP DS
MOV DL,NUM
INC NUM
MOV AH,2
INT 21H
MOV AL,00100000B
OUT 0A0H,AL
OUT 20H,AL
CLI
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
INT71H ENDP
MAIN PROC FAR
PUSH CS
POP DS
MOV AH,35H
MOV AL,71H
INT 21H
MOV VH,ES
MOV VL,BX
MOV DX,OFFSET INT71H
MOV AL,71H
MOV AH,25H
INT 21H
IN AL,0A1H
AND AL,11111101B
OUT 0A1H,AL
STI
MOV DX,303H
MOV AL,00110110B
OUT DX,AL
MOV DX,300H
MOV AX,0FFFFH
OUT DX,AL
MOV AL,AH
OUT DX,AL
LP: CMP NUM,3AH
JNZ LP
MOV DX,303H
MOV AL,00111110B
OUT DX,AL
MOV DX,VL
MOV DS,VH
MOV AL,71H
MOV AH,25H
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
异步串行通信:
STACK SEGMENT PARA STACK
DW 100H DUP(?)
STACK ENDS
DATA SEGMENT
SEND DB 0FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:
MOV AX,DATA
MOV DS,AX
MOV DX,303H
MOV AL,10110110B ;初始化8253:使用计数器2、读/写2个字节、工作方式3、码制为二进制
OUT DX,AL
MOV DX,302H ;置计数器2的初值为13H,因为波特率为4800
MOV AL,13
OUT DX,AL
MOV AL,0
OUT DX,AL
MOV DX,31BH ;置除数锁存器访问允许
MOV AL,80H
OUT DX,AL
MOV DX,318H ;置除数锁存器值为0018H
MOV AL,18
OUT DX,AL
MOV DX,319H
MOV AL,00H
OUT DX,AL
MOV DX,31BH ;设定通信线路控制寄存器的字长为8位
MOV AL,03H
OUT DX,AL
MOV DX,319H ;设定中断允许寄存器为不允许任何中断
MOV AL,0
OUT DX,AL
LP1:
MOV DX,31DH ;测试线路状态寄存器的第5位,当其为1时CPU才能向UART写数据
IN AL,DX
TEST AL,00100000B
JZ LP1
MOV DX,318H
MOV AL,SEND ;写入数据
OUT DX,AL
MOV AH,1
INT 16H
JZ LP1
MOV AX,4C00H
INT 21H
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -