📄 shiyan.txt
字号:
MOV CNT, 0 ; 计数值初始为0
STI
MLOOP:
MOV AL,CNT
MOV NUM, AL
MOV AH,0
MOV SI, OFFSET LEDMAP
AND AL,0FH ; 低四位
ADD AX,SI
MOV SI,AX
MOV AL,[SI] ; 数据转换成显示码
MOV LEDBUF+5, AL
MOV SI, OFFSET LEDMAP
MOV AL, NUM ; 高四位
SHR AL, 4
MOV AH, 0
ADD AX, SI
MOV SI, AX
MOV AL, [SI]
MOV LEDBUF+4, AL
MOV DELAYT,2
DISPAGAIN:
CALL DISPLAYLED ; 显示
DEC DELAYT
JNZ DISPAGAIN
JMP MLOOP
START ENDP
CODE ENDS
END START
实验十 A/D0809 模数转换实验
; A/D 转换实验
OUTBIT EQU 0E101H ; 位控制口
CLK164 EQU 0E102H ; 段控制口(接164 时钟位)
DAT164 EQU 0E102H ; 段控制口(接164 数据位)
CS0809 EQU 0A000H
DATA SEGMENT
LEDBUF DB 6 DUP(?) ; 显示缓冲
NUM DB 1 DUP(?) ; 显示的数据
DELAYT DB 1 DUP(?)
LEDMAP: ; 八段管显示码
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
DATA ENDS
STACK SEGMENT STACK‘STACK’
STA DB 64 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA ,SS:STACK
DELAY PROC NEAR
PUSH AX ; 延时子程序
PUSH CX
MOV AL, 0
MOV CX,AX
LOOP $
POP CX
POP AX
RET
DELAY ENDP
DISPLAYLED PROC NEAR
MOV BX, OFFSET LEDBUF
MOV CL, 6 ; 共6 个八段管
MOV AH, 00100000B ; 从左边开始显示
DLOOP:
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
MOV AL, [BX]
MOV CH, 8 ; 送164
DLP:
PUSH AX
MOV AH, 0
TEST AL, 80H
JZ GN1
MOV AH, 1
GN1:
MOV DX, DAT164 ; 输出数据位
MOV AL, AH
AND AL,0FDH
OUT DX, AL
MOV DX, CLK164 ; 送出时钟脉冲
OR AL,02H
OUT DX, AL
AND AL,0FDH
OUT DX, AL
POP AX
SHL AL, 1
DEC CH
JNZ DLP
MOV DX, OUTBIT
MOV AL, AH
OUT DX, AL ; 显示一位八段管
PUSH AX
MOV AH, 1
CALL DELAY
POP AX
SHR AH, 1
INC BX
DEC CL
JNZ DLOOP
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
RET
DISPLAYLED ENDP
START PROC NEAR
MOV AX, DATA
MOV DS, AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV DX,0E100H
MOV AL,03H
OUT DX,AL
MOV LEDBUF, 03FH ; 显示 8.8.8.8.
MOV LEDBUF+1, 07FH
MOV LEDBUF+2, 03FH
MOV LEDBUF+3, 06FH
MOV LEDBUF+4, 0
MOV LEDBUF+5, 0
MLOOP:
MOV AL, 0
MOV DX, CS0809
OUT DX, AL ; 起动 A/D
MOV CX, 4H
LOOP $ ; 延时 > 100us
IN AL, DX ; 读入结果
MOV NUM, AL
MOV AH,0
MOV SI, OFFSET LEDMAP
AND AL,0FH ; 低四位
ADD AX,SI
MOV SI,AX
MOV AL,[SI] ; 数据转换成显示码
MOV LEDBUF+5, AL
MOV SI, OFFSET LEDMAP
MOV AL, NUM ; 高四位
SHR AL, 4
MOV AH, 0
ADD AX, SI
MOV SI, AX
MOV AL, [SI]
MOV LEDBUF+4, AL
MOV DELAYT,2
DISPAGAIN:
CALL DISPLAYLED ; 显示
DEC DELAYT
JNZ DISPAGAIN
JMP MLOOP
START ENDP
CODE ENDS
END START
实验十一 D/A0832 数模转换实验
; D/A 0832 数模转换实验
OUTBIT EQU 0E101H ; 位控制口
CLK164 EQU 0E102H ; 段控制口(接164 时钟位)
DAT164 EQU 0E102H ; 段控制口(接164 数据位)
CS0832 EQU 0B000H
DATA SEGMENT
LEDBUF DB 6 DUP(?) ; 显示缓冲
NUM DB 1 DUP(?) ; 显示的数据
DELAYT DB 1 DUP(?)
LEDMAP: ; 八段管显示码
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA , SS:STACK
DELAY PROC NEAR
PUSH AX ; 延时子程序
PUSH CX
MOV AL, 0
MOV CX,AX
LOOP $
POP CX
POP AX
RET
DELAY ENDP
DISPLAYLED PROC NEAR
MOV BX, OFFSET LEDBUF
MOV CL, 6 ; 共6 个八段管
MOV AH, 00100000B ; 从左边开始显示
DLOOP:
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
MOV AL, [BX]
MOV CH, 8 ; 送164
DLP:
PUSH AX
MOV AH, 0
TEST AL, 80H
JZ GN1
MOV AH, 1
GN1:
MOV DX, DAT164 ; 输出数据位
MOV AL, AH
AND AL,0FDH
OUT DX, AL
MOV DX, CLK164 ; 送出时钟脉冲
OR AL,02H
OUT DX, AL
AND AL,0FDH
OUT DX, AL
POP AX
SHL AL, 1
DEC CH
JNZ DLP
MOV DX, OUTBIT
MOV AL, AH
OUT DX, AL ; 显示一位八段管
PUSH AX
MOV AH, 1
CALL DELAY
POP AX
SHR AH, 1
INC BX
DEC CL
JNZ DLOOP
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
RET
DISPLAYLED ENDP
START PROC NEAR
MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV AX, TOP
MOV SP, AX
MOV DX, 0E100H
MOV AL,03H
OUT DX,AL
MOV LEDBUF, 03FH ; 显示083200.
MOV LEDBUF+1, 07Fh
MOV LEDBUF+2, 04Fh
MOV LEDBUF+3, 05Bh
MOV LEDBUF+4, 0
MOV LEDBUF+5, 0
MOV AL,0
MLOOP:
MOV DX, CS0832
OUT DX, AL ; 起动 D/A
PUSH AX
MOV NUM, AL
MOV AH,0
MOV SI, OFFSET LEDMAP
AND AL,0FH ; 低四位
ADD AX,SI
MOV SI,AX
MOV AL ,[SI] ; 数据转换成显示码
MOV LEDBUF+5, AL
MOV SI, OFFSET LEDMAP
MOV AL, NUM ; 高四位
SHR AL, 4
MOV AH, 0
ADD AX, SI
MOV SI, AX
MOV AL, [SI]
MOV LEDBUF+4, AL
MOV DELAYT,12
DISPAGAIN:
CALL DISPLAYLED ; 显示
DEC DELAYT
JNZ DISPAGAIN
POP AX
INC A L
JMP MLOOP
START ENDP
CODE ENDS
END START
实验十二 8251A 串行通讯实验
; 8251A 串行通讯实验
OUTBIT EQU 0E101H ; 位控制口
CLK164 EQU 0E102H ; 段控制口(接164 时钟位)
DAT164 EQU 0E102H ; 段控制口(接164 数据位)
IN_KEY EQU 0E103H ; 键盘读入口
CS8251D EQU 0A000H ; 串行通信控制器数据口地址
CS8251C EQU 0A001H ; 串行通信控制器控制口地址
DATA SEGMENT
LEDBUF DB 6 DUP(?) ; 显示缓冲
NUM DB 1 DUP(?) ; 显示的数据
DELAYT DB 1 DUP(?)
RBUF DB 0
TBUF DB 0
LEDMAP: ; 八段管显示码
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
KEYTABLE: ; 键码定义
DB 00H, 01H, 04H, 07H
DB 0FH, 02H, 05H, 08H
DB 0EH, 03H, 06H, 09H
DB 0DH, 0CH, 0BH, 0AH
DB 13H, 12H, 11H, 10H
DB 16H, 15H, 14H, 0FFH
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
DELAY PROC NEAR
PUSH AX ; 延时子程序
PUSH CX
MOV AL, 0
MOV CX,AX
LOOP $
POP CX
POP AX
RET
DELAY ENDP
DISPLAYLED PROC NEAR
MOV BX, OFFSET LEDBUF
MOV CL, 6 ; 共6 个八段管
MOV AH, 00100000B ; 从左边开始显示
DLOOP:
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
MOV AL, [BX]
MOV CH, 8 ; 送164
DLP:
PUSH AX
MOV AH, 0
TEST AL, 80H
JZ GN1
MOV AH, 1
GN1:
MOV DX, DAT164 ; 输出数据位
MOV AL, AH
AND AL,0FDH
OUT DX, AL MOV DX, CLK164 ; 送出时钟脉冲
OR AL,02H
OUT DX, AL AND AL,0FDH
OUT DX, AL
POP AX
SHL AL, 1
DEC CH
JNZ DLP
MOV DX, OUTBIT
MOV AL, AH
OUT DX, AL ; 显示一位八段管
PUSH AX
MOV AH, 1
CALL DELAY
POP AX
SHR AH, 1
INC BX
DEC CL
JNZ DLOOP
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
RET
DISPLAYLED ENDP
TESTKEY PROC NEAR
MOV DX, OUTBIT
MOV AL, 0
OUT DX, AL ; 输出线置为0
MOV DX, IN_KEY
IN AL, DX ; 读入键状态
NOT AL
AND AL, 0FH ; 高四位不用
RET
TESTKEY ENDP
GETKEY PROC NEAR
MOV CH, 00100000B
MOV CL, 6
KLOOP:
MOV DX, OUTBIT
MOV AL, CH ; 找出键所在列
NOT AL
OUT DX, AL
SHR CH, 1
MOV DX, IN_KEY
IN AL, DX
NOT AL
AND AL, 0FH
JNE GOON_ ; 该列有键入
DEC CL
JNZ KLOOP
MOV CL, 0FFH ; 没有键按下, 返回 0ffh
JMP EXIT1
GOON_:
DEC CL
SHL CL, 2 ; 键值 = 列 X 4 + 行
MOV CH, 4
LOOPC:
TEST AL, 1
JNZ EXIT1
SHR AL, 1
INC CL
DEC CH
JNZ LOOPC
EXIT1:
MOV DX, OUTBIT
MOV AL, 0
OUT DX, AL
MOV CH, 0
MOV BX, OFFSET KEYTABLE
ADD BX, CX
MOV AL, [BX] ; 取出键码
MOV BL, AL
WAITRELEASE:
MOV DX, OUTBIT
MOV AL, 0
OUT DX, AL ; 等键释放
MOV AH, 10
CALL DELAY
CALL TESTKEY
JNE WAITRELEASE
MOV AL, BL
RET
GETKEY ENDP
IINIT PROC NEAR ; 8251 初始化
MOV DX, CS8251C
MOV AL, 01001111B ; 1 停止位,无校验,8 数据位, x64
OUT DX, AL
MOV AL, 00010101B ; 清出错标志, 允许发送接收
OUT DX, AL
RET
IINIT ENDP
SEND PROC NEAR ; 串口发送
MOV DX, CS8251C
MOV AL, 00010101B ; 清出错,允许发送接收
OUT DX, AL
WAITTXD:
IN AL, DX
TEST AL, 1 ; 发送缓冲是否为空
JZ WAITTXD
MOV AL, TBUF ; 取要发送的字
MOV DX, CS8251D
OUT DX, AL ; 发送
RET
SEND ENDP
RECEIVE PROC NEAR ; 串口接收
MOV DX, CS8251C
WAITRXD:
IN AL, DX
TEST AL, 2 ; 是否已收到一个字
JE WAITRXD
MOV DX, CS8251D
IN AL, DX ; 读入
MOV RBUF, AL
RET
RECEIVE ENDP
START PROC NEAR
MOV AX, DATA
MOV DS, AX
MOV DX,0E100H
MOV AL,03H
OUT DX,AL
CALL IINIT
MOV LEDBUF, 0FFH ; 显示 8.8.8.8.
MOV LEDBUF+1, 0FFH
MOV LEDBUF+2, 0FFH
MOV LEDBUF+3, 0FFH
MOV LEDBUF+4, 0
MOV LEDBUF+5, 0
MLOOP:
CALL DISPLAYLED ; 显示
MOV DX, CS8251C
IN AL, DX ; 是否接收到一个字
TEST AL, 2
JNZ RCVDATA
CALL TESTKEY ; 有键入?
JE MLOOP ; 无键入, 继续显示
CALL GETKEY ; 读入键码
AND AL, 0FH ; 显示键码
MOV TBUF, AL
CALL SEND
JMP MLOOP
RCVDATA:
CALL RECEIVE ; 读入接收到的字
MOV AL, RBUF
AND AL, 0FH ; 只显示低四位
MOV AH, 0
MOV BX, OFFSET LEDMAP
ADD BX, AX
MOV AL, [BX] ; 转换成显示码
MOV LEDBUF+5, AL
JMP MLOOP
START ENDP
CODE ENDS
END START
实验十三 温度测量实验
OUTBIT EQU 0E101H ; 位控制口
CLK164 EQU 0E102H ; 段控制口(接164 时钟位)
DAT164 EQU 0E102H ; 段控制口(接164 数据位)
CS0809 EQU 0A000H
DATA SEGMENT
LEDBUF DB 6 DUP(?) ; 显示缓冲
NUM DB 1 DUP(?) ; 显示的数据
DELAYT DB 1 DUP(?)
LEDMAP: ; 八段管显示码
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
DELAY PROC NEAR
PUSH AX ; 延时子程序
PUSH CX
MOV AL, 0
MOV CX,AX
LOOP $
POP CX
POP AX
RET
Delay ENDP
DISPLAYLED PROC NEAR
MOV BX, OFFSET LEDBUF
MOV CL, 6 ; 共6 个八段管
MOV AH, 00100000B ; 从左边开始显示
DLOOP:
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
MOV AL, [BX]
MOV CH, 8 ; 送164
DLP:
PUSH AX
MOV AH, 0
TEST AL, 80H
JZ GN1
MOV AH, 1
GN1:
MOV DX, DAT164 ; 输出数据位
MOV AL, AH
AND AL,0FDH
OUT DX, AL
MOV DX, CLK164 ; 送出时钟脉冲
OR AL,02H
OUT DX, AL
AND AL,0FDH
OUT DX, AL
POP AX
SHL AL, 1
DEC CH
JNZ DLP
MOV DX, OUTBIT
MOV AL, AH
OUT DX, AL ; 显示一位八段管
PUSH AX
MOV AH, 1
CALL DELAY
POP AX
SHR AH, 1
INC BX
DEC CL
JNZ DLOOP
MOV DX, OUTBIT
MOV AL, 0
OUT DX,AL ; 关所有八段管
RET
DISPLAYLED ENDP
START PROC NEAR
MOV AX, DATA
MOV DS, AX
MOV DX,0E100H
MOV AL,03H
OUT DX,AL
MOV LEDBUF, 0F6H ; 显示L---.
MOV LEDBUF+1, 040H
MOV LEDBUF+2, 040H
MOV LEDBUF+3, 040H
MOV LEDBUF+4, 0
MOV LEDBUF+5, 0
MLOOP:
MOV AL, 0
MOV DX, CS0809
OUT DX, AL ; 起动 A/D
MOV CX, 4H
LOOP $ ; 延时 > 100us
IN AL, DX ; 读入结果
MOV NUM, AL
MOV AH,0
MOV SI, OFFSET LEDMAP
AND AL,0FH ; 低四位
ADD AX,SI
MOV SI,AX
MOV AL,[SI] ; 数据转换成显示码
MOV LEDBUF+5, AL
MOV SI, OFFSET LEDMAP
MOV AL, NUM ; 高四位
SHR AL, 4
MOV AH, 0
ADD AX, SI
MOV SI, AX
MOV AL, [SI]
MOV LEDBUF+4, AL
MOV DELAYT,2
DISPAGAIN:
CALL DISPLAYLED ; 显示
DEC DELAYT
JNZ DISPAGAIN
JMP MLOOP
START ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -