📄 7_164165.asm
字号:
;//*******************************************************************
;//*文件名:串转并,并转串实验程序 FOR 8088
;功能:把开关量通过74**165串行输入到内存,并通过74**164串行输出到数码
; 管上显示。
;接线:对应连接八位逻辑电平输出模块的QH165、CLK165、SH/LD到8255模块的
; PC0、PC4、PC5。
; 对应连接静态数码管显示模块的DIN、CLK到8255模块的PC6、PC7。
; 对应连接8255模块的CS_8255到CPU模块的200H。
; 用8位数据线连接8255模块的JD4C(PB口)到八位逻辑电平显示模块的JD4B。
;//********************************************************************
;PC6——DIN
;PC7——CLK
;PC4——CLK165
;PC5——SH/LD
;PC0——QH165
;CS_8255——200H
PA8255 EQU 200H ;8255PA口地址
PB8255 EQU 201H ;8255PB口地址
PC8255 EQU 202H ;8255PC口地址
PCTL8255 EQU 203H ;8255控制口地址
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
PUSH CS
POP DS
MOV DX,PCTL8255
MOV AL,81H ;设置8255,PA、PC4~7出,PC0入
OUT DX,AL
BEGIN:
MOV DX,PCTL8255
MOV AL,09H ;PC4: CLK165 置“1”
OUT DX,AL
MOV AL,0AH ;PC5: SH/LD置“0”
OUT DX,AL
MOV AL,0BH ;PC5: SH/LD置“1”
OUT DX,AL
MOV AL,0
MOV CL,8H ;分八次读一个字节
INPUT: PUSH AX
MOV DX,PC8255 ;
IN AL,DX
RCR AL,1
POP AX
RCL AL,1
CALL CLK165
DEC CL
CMP CL,0
JNZ INPUT
MOV DX,PB8255 ;B口可观察输入值
OUT DX,AL
CALL DELAY
CALL OUTPUT ;调串行输出
JMP BEGIN ;重复
CLK165: PUSH AX
PUSH DX
MOV DX,PCTL8255
MOV AL,08H ;PC4: CLK165置“0”
OUT DX,AL
MOV AL,09H ;PC4: CLK165置“1”
OUT DX,AL
POP DX
POP AX
RET
OUTPUT: ;串行输出
MOV ah,AL
MOV CL,8H ;分八位写一个LED
WRITE1:
RCL AL,1
PUSH AX
JNC OUTDATA1
MOV DX,PCTL8255
MOV AL,0DH ;PC6:DIN 置“1”
OUT DX,AL
JMP NEXT1
OUTDATA1:
MOV DX,PCTL8255
MOV AL,0CH ;PC6:DIN 置“0”
OUT DX,AL
NEXT1:
MOV DX,PCTL8255;利用8255PC5口控制DCLK,使DCLK产生一低电平到高电平的跳变
MOV AL,0EH ;PC7:CLK 置“0”
OUT DX,AL
MOV AL,0FH ;PC7:CLK 置“1”
OUT DX,AL
POP AX
DEC CL
CMP CL,0
JNZ WRITE1
RET
delay proc near
push cx
mov cx,1000h
loop $
pop cx
ret
delay endp
LED: DB 3FH,06H,5BH,4FH,66H,6DH ;012345
DB 7DH,07H,7FH,6FH,77H,7CH ;6789AB
DB 39H,5EH,79H,71H,00H,40H ;CDEF -
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -