AJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#4000H
MOVX A,@DPTR
MOV B,A (4000H)
SWAP A 交换
ANL A,#0FH 屏蔽高位
INC DPTR
MOVX @DPTR,A送4001H
INC DPTR
MOV A,B
ANLA,#0FH (4000)内容屏蔽高位
MOVX @DPTR,A 送4002H
SJMP $
END
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位的显示码。希望对你有帮助,
CODESEGMENT;ASSUME CS:CODE,DS:CODE,ES:CODE;以上是给代码段和数据段段地址赋值
ORG 3020H;代码从此地址开始
S2: MOV BX,4000H
MOV AL,[BX]
MOV AH,AL;以上三句代表将4000h(偏移地址)内容送到al 和ah中
MOV CL,4 ;设置右移次数
SHR AH,CL ;将ah中数据右移4次 就是将数据第四位舍去高四位放到第四位上 而高四位变为0
INC BX ;bx指向4001h
MOV [BX],AH ;将ah中移动好的数据放到4001h中 就是原来数据的高四位
AND AL,0FH ;保留al中数据低4位 高四位舍去
INC BX ;bx指向4002h
MOV [BX],AL;将al中数据放到4002h 就是原来数据的第四位
JMP $ ;停机
CODEENDS ;代码结束
END S2;程序结束
-----------------清零程序---------------------------
CODESEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3000H;前面你懂得
S1: MOV BX,4000H
MOV Al,00H ;al清零
MOV CX,0010H;循环次数16次
L1: MOV [BX],AX;将al中数据(地位都是0)放到bx中内容为地址的内存中(4000h)
INC BX ;指向内存中下一个单元
not al; 将al内容去反
LOOP L1;循环16次
JMP $;后面你懂得。
CODEENDS
END S1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)