使用“三总线”方式连接 825
扫描二维码
随时随地手机看文章
本文将使用“三总线”方式连接 8255。
有这样一个问题:按键计数,按一下键,显示数字加一。
两个按键控制分别控制两组数码管,每个按键控制一个两位数码管,显示十进制数,0到99。
题目给定的电路图中,共有四个共阴数码管,用 8255 的 PA 来驱动段,位,则使用了单片机 P1 口,按键使用了 P2 口。
呵呵,题目给定的电路,看起来,有些杂乱。做而论道修改了一下,如下所示:
; 8255 控制字格式如下:
;+-----+-----+-----+-----+-----+-----+-----+-----+
;| 1 | PA_FUNC |PA_IO|PC7_4|PB_F |PB_IO|PC3_0|
;+-----+-----+-----+-----+-----+-----+-----+-----+
;| 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
;+-----+-----+-----+-----+-----+-----+-----+-----+
;
呵呵,百度这排版格式,把控制字显示的乱七八糟 ! 复制到记事本再看吧。
仿照题目的要求,用汇编语言编写了如下的程序:
ORG 0000H
START:
MOV R1, #03H ;控制寄存器地址
MOV A, #89H ;控制字
MOVX @R1, A ;PA PB输出, PC输入
MOV SP, #70H
MOV 30H, #01 ;初始显示8031
MOV 31H, #255 - 8
MOV 32H, #03
MOV 33H, #255 - 4
MOV 34H, #00
MOV 35H, #255 - 2
MOV 36H, #08
MOV 37H, #255 - 1
MOV R4, #0 ;初值0
MOV R5, #0
MOV R1, #02H ;PC
;----------------------------------初始化结束
M_LOOP:
CALL DISP
MOVX A, @R1
JNB ACC.0, K1_1
JNB ACC.1, K2_1
JMP M_LOOP
;---------------------
K1_1:
CALL DISP
MOVX A, @R1
JNB ACC.0, K1_2
JMP M_LOOP
K1_2:
CALL DISP
MOVX A, @R1
JNB ACC.0, K1_2
INC R4
CJNE R4, #100, K1_3
MOV R4, #0
K1_3:
MOV A, R4
MOV B, #10
DIV AB
MOV 34H, B
MOV 36H, A
JMP M_LOOP
;---------------------
K2_1:
CALL DISP
MOVX A, @R1
JNB ACC.1, K2_2
JMP M_LOOP
K2_2:
CALL DISP
MOVX A, @R1
JNB ACC.1, K2_2
INC R5
CJNE R5, #100, K2_3
MOV R5, #0
K2_3:
MOV A, R5
MOV B, #10
DIV AB
MOV 30H, B
MOV 32H, A
JMP M_LOOP ;主程序循环
;----------------------------------主程序到此为止
DISP: ;显示子程序
PUSH PSW
PUSH ACC
SETB RS0
MOV R0, #30H ;显示缓冲区首址
MOV R1, #00H ;PA
MOV R2, #4
D_LOOP:
MOV A, @R0
ADD A, #(SEG_TAB - $ - 3)
MOVC A, @A + PC
MOVX @R1, A ;写入PA
INC R0
INC R1 ;PB
MOV A, @R0
MOVX @R1, A ;写入PB
DJNZ R7, $
DJNZ R7, $
MOV A, #255 ;消隐
MOVX @R1, A ;写入PB
INC R0
DEC R1
DJNZ R2, D_LOOP
POP ACC
POP PSW
RET
;---------------------
SEG_TAB:
DB 3FH, 06H, 5BH, 4FH, 66H
DB 6DH, 7DH, 07H, 7FH, 6FH
;----------------------------------
END
程序启动后,首先显示出来 8031,如上面的插图所示。
以后,分别按动两个按键,即可看到两组数码管分别显示出来加一、加一的现象。