8086单片机七段数码管显示8位16进制计数器的汇编语言程序

8086单片机七段数码管显示8位16进制计数器的汇编语言程序,第1张

8255参考程序

.486

DATA SEGMENT AT 0 USE16

PORTA EQU 203H A口

PORTB EQU 207H B口

PORTC EQU 20BH C口

CONTROL EQU 20FH 控制口

PORT1 EQU 340H 七段码段地址

PORT2 EQU 360H 七段码位地址

ORG 4200H

DATA1 DB 6 DUP (?) 输入数据区

ORG 4210H

DATA2 DB 6 DUP (?) 显示缓宴伍冲区

DATAENDS

CODESEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

DB 67H,77H,7CH,39H,5EH,79H,71H 段码表

START: MOV AX,DATA 初始化

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV SS,AX

MOV SP,1000H

LEA DX,CONTROL ...8255初始化

MOV AL,10001001B ...

OUT DX,AL ..清显示

MOV DX,PORTA....

MOV AL,00H ....

OUT DX,AL...

LP:

LEA DX,PORTC ...AL= 读数据

IN AL,DX ...

LEA SI,DATA1 ...存数据

MOV [SI],AL ...

CALL CZ 调用拿者拆字子程序

CALL DISP 调用显示子程序

JMP LP 循环取数显示

CZ PROC

PUSH CX

LEA SI,DATA1 SI= 拆字,取数

LEA DI,DATA2 DI= 显示缓冲区首消祥薯址

CZ0:

MOV BL,[SI]

AND BL,0F0H BL=

MOV CL,4

ROL BL,CL

MOV [DI],BL (DI)=

INC DI

MOV BL,[SI]

AND BL,0FH BL=

MOV [DI],BL

INC SI

INC DI

CMP SI, 08H....

JBE CZ0

POP CX

RET

CZ ENDP

DISP PROC 显示子程序

PUSH CX

PUSH DX

LEA BX,TAB

LEA SI,DATA2

MOV AH,0C1H

DISP1:

MOV DX,PORT2

MOV AL,AH

OUT DX,AL AL= , AL= 位输出

MOV DX,PORT1

MOV AL,[SI]

XLAT

OUT DX,AL AL=,AL= 段输出

MOV CX,0200H

LOOP $

INC SI

SAL AH,1

OR AH,0C0H

CMP AH,0C0H

JNZ DISP1

POP DX

POP CX

RET

DISP ENDP

CODE ENDS

END BEG

用8255扩展I/O口显示6位的显示码。希望对你有帮助,

正好我们做了这个实验

你知道的,把数据段中的端口地址改为你的计算机可识别的8255A的端口地址

从键盘接收数字,在七段数码管上显示

data segment

ioport equ 2400h-0280h

io8255a equ ioport+288h

io8255b equ ioport+28bh

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

mesg1db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$'

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov dx,io8255b使8255的A口为输出方式

mov ax,10000000b80h,A组方式0,A口输出,B组方式0,B口输出,C口输出

out dx,al

sss:

mov dx,offset mesg1显示提示信息

mov ah,09h

int 21h

mov ah,01 从键盘接收字符

int 21h

cmp al,'0' 是否小于0

jb sss 若是则退出

cmp al,'9' 是否大于9

ja sss 若是则退出

and al,0fh 将所得字符的ASCII码减银运拆30H

mov bx,offset led bx为数码表的起锋枣始地址

xlat 求出相应的段码

mov dx,io8255a 从8255的A口输出

out dx,al

jmp sss转悄则SSS

exit:

mov ah,4ch 返回DOS

int 21h

code ends

end start


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8283923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存