求大神帮忙看看有没有哪里错的,微机与接口的课程设计,学的不是很好
;我想做一个简易汽车里程表,只能进行0-f的计数,按五次脉冲代表1公里,七段数码管上显示公里数,结束时在LCD上显示抵达目的地等字;检测过语法没错误,但还没到实验箱上测试
; 连线:
; 8255 CS ------ 端口地址 300CS
; 8255 PA0 ---- 开关K0
; 8255 PB口 ---- 七段数码管
; 8255 PC0 ---- 发光二极管 L0
; 8255 PC4 ---- 数码管电源
; 8253 CS ------ 端口地址 320CS
; 8253 GATE1 -- (A10)+5V
; 8253 CLK1 ---- 单脉冲 SP
; 8253 OUT1 ---- 发光二极管 L15
; LCD E/CS ----- 端口地址 360CS
; LCD R/S ------ A0
; LCD R/W ------ A1
;运行:按下开关K0,L0亮,代表汽车启动,此时数码管电源接通,数值为零,LCD屏幕初始化,连续按5次脉冲,L15闪烁一次,并且数
;码管上数值变为1,每按5次脉冲,L15都会闪烁一次,并且数码管上的值会加1
;当把开关K0关闭,LCD上会显示
;
;
CS8255 EQU 0303H
PORTA EQU 0300H
PORTB EQU 0301H
PORTC EQU 0302H
CS8253 EQU 0323H
COUNT0 EQU 0320H
COUNT1 EQU 0321H
COUNT2 EQU 0322H
LCD EQU 0360H
WRICODE EQU LCD+0 ;写命令
WRDATA EQU LCD+1 ;写数据
RDSTAT EQU LCD+2 ;读状态
RDDATA EQU LCD+3 ;读数据
DATA SEGMENT
SEG7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H,77H,7CH,39H,5EH,79H,71H,"$"
HZ DB "抵达目的地"
DB "16电信"
DB "吴**"
DB "3166004038"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC NEAR
MAIN: MOV DX,CS8255 ;8255初始化
MOV AL,90H ;A口输入,B、C口输出
OUT DX,AL
L: MOV DX,PORTA ;检测K0是否为1,即开关是否启动
IN AL,DX
TEST AL,00000001
JZ L
MOV AL,01H ;LCD清除显示初始化
CALL WCmd
MOV DX,PORTC
MOV AL,11H
OUT DX,AL ;数码管控制电源开,电源提示灯LO亮
MOV DX,PORTB
MOV AL,3FH
OUT DX,AL ;数码管输出数字0
MOV DX,CS8253 ;8253初始化
MOV AL,01010100B;计数1 方式2
OUT DX,AL
MOV AL,1
PUSH AX ;进栈
DISPY:
MOV DX,COUNT1 ;加1公里发光二极管闪烁一次
MOV AL,5
OUT DX,AL
POP AX ;出栈
MOV DX,PORTB ;数码管数字变化
LEA BX,SEG7
PUSH AX
XLAT ;令AL=seg[AL]
OUT DX,AL
POP AX
INC AL
PUSH AX
MOV DX,PORTA ;检测K0是否为1,即开关是否启动
IN AL,DX
TEST AL,00000001
JZ DISPY
POP AX ;释放AX
MOV AL,30H ;30H--基本指令操作
CALL WCmd
MOV AL,01H ;清除显示
CALL WCmd
MOV CX,2888H ;延时
LOOP $
MOV AL,06H ;指定在资料写入或读取时,光标的移动方向
CALL WCmd
MOV AL,0CH ;开显示,关光标,不闪烁
CALL WCmd
MOV BX,OFFSET HZ ;显示汉字和字符
MOV AH,40H
MOV AL,80H
CALL WCmd
NEXT: MOV AL,00H
XLAT
CALL WData
INC BX
DEC AH
JNZ NEXT
JMP MAIN
START ENDP
WData PROC NEAR
CALL DELAY
MOV DX,WRDATA
OUT DX,AL
RET
WData ENDP
WCmd PROC NEAR
CALL DELAY
MOV DX,WRICODE
OUT DX,AL
RET
WCmd ENDP
DELAY PROC NEAR
MOV CX,0080H
LOOP $
RET
DELAY ENDP
CODE ENDS
END START