微机接口技术实验报告

OR AL,00000010B OUT 92H,AL POP AX RET OPENA20 ENDP

DELAY PROC ;关闭a20地址线 PUSH CX MOV CX,1000H LOOPX: LOOP LOOPX POP CX RET DELAY ENDP

CLOSEA20 PROC ;关闭a20地址线 PUSH AX IN AL,92H AND AL,11111101B OUT 92H,AL POP AX RET CLOSEA20 ENDP CODE ENDS

END START

实验结果:向THS卡存储空间反复写256各A~Z,然后显示读提示信息,最后再从THS

卡存储空间读入256个A~Z,并在屏幕上显示读入数据。

实验五 七段数码管实验

一、实验目的

掌握数码管显示数字的原理,加深对8255的理解和应用。 二、实验内容

1、静态显示:将LED JUMP条线全部取下,将LED1和GND相连,8255CS<-->CS0,

PB0<->LED-A,PB1<->LED-B,PB2<->LED-C,PB3<->LED-D,PB4<->LED-E,PB5<->LED-F,PB6<->LED-G,PB7<->LED-DP。编程从键盘输入一位十进制数字(0-9),在七段数码管上显示出来。

2、动态显示:将LED2<->PA0,LED1<->PA1,其他的接线同静态显示方式一样。

编程在两个数码管上动态显示“56”

3、动态显示选作:实验连线和实验2动态显示一样,编程在两个数码管上循环显示00-99。 三、编程提示

1、实验箱上的七段数码管为共阴型段码,采用同相驱动,输入端加高电平,选中的数码管亮,

位码输入端低电平选中。 2、七段数码管的字型代码表如下表

四、程序框图(如图5)

实验程序

1、静态显示

;* 键盘输入数据(0-9)控制LED数码管显示 led jump调线帽全部取下来。;* ;*CS0--8255CS,PB0~PB7依次接led-A ~ led-dp led1 接地;*

DATA SEGMENT

IOPORT EQU 0A800H IO8255B EQU IOPORT+0A2H IO8255CON EQU IOPORT+0A6H

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

MESG1 DB 0DH,0AH,'Input a num (0--9),other key is exit:',0DH,0AH,'$' DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV DX,IO8255CON ;使8255的B口为输出方式 MOV AX,90H OUT DX,AL

SSS: MOV DX,OFFSET MESG1 ;显示提示信息 MOV AH,09H

INT 21H

MOV AH,01 ;从键盘接收字符 INT 21H

CMP AL,'0' ;是否小于0 JL EXIT ;若是则退出 CMP AL,'9' ;是否大于9 JG EXIT ;若是则退出

SUB AL,30H ;将所得字符的ASCII码减30H

MOV BX,OFFSET LED ;bx为数码表的起始地址 XLAT ;求出相应的段码 MOV DX,IO8255B ;从8255的A口输出 OUT DX,AL

JMP SSS ;转SSS EXIT: MOV AH,4CH ;返回 INT 21H CODE ENDS

END START

实验结果:先把跳线冒拔掉,再从键盘输入0~9的任意数字,LED数码管显示相

应的数字,如:键盘输入9,led数码管显示数字9。

2、动态显示

;* LED数码管实验 动态显示“56” ;*

;* led jump调线帽全部取下来,CS0--8255CS,PB0~PB7依次接led-A~led-dp led2<->PA0,LED1<->PA1;*

DATA SEGMENT

IOPORT EQU 0A400H

IO8255A EQU IOPORT+0A0H IO8255B EQU IOPORT+0A2H

IO8255CON EQU IOPORT+0A6H

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码 BUFFER1 DB 5,6 ;存放要显示的个位和十位 BZ DW ? ;位码 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX

MOV DX,IO8255CON ;将8255设为B,A口输出 MOV AL,80H

OUT DX,AL

MOV DI,OFFSET BUFFER1 ;设di为显示缓冲区 LOOP2: MOV BH,02

LLL: MOV BYTE PTR BZ,BH

PUSH DI DEC DI ADD DI, BZ

MOV BL,[DI] ;bl为要显示的数 POP DI MOV BH,0

MOV SI,OFFSET LED ;置led数码表偏移地址为SI ADD SI,BX ;求出对应的led数码

MOV AL,BYTE PTR [SI]

MOV DX,IO8255B ;自8255B的口输出 OUT DX,AL

MOV AL,BYTE PTR BZ ;使相应的数码管亮 MOV DX,IO8255A OUT DX,AL PUSH AX MOV AX,05

DELAY1:

MOV CX,60000

DELAY: LOOP DELAY ;延时 DEC AX

JNZ DELAY1 POP AX

MOV BH,BYTE PTR BZ SHR BH,1 JNZ LLL

MOV DX,0FFH MOV AH,06

INT 21H

JE LOOP2 ;有键按下则退出 MOV DX,IO8255B

MOV AL,0 ;关掉数码管显示 OUT DX,AL

MOV AH,4CH ;返回 INT 21H CODE ENDS

END START

实验结果:在LED数码管上面动态显示数字56,也要把跳线冒全部拔下。

3、动态显示

;* LED数码管实验 动态循环显示“00-99 led jump调线帽全部取下来。 *;

;* CS0--8255CS,PB0~PB7依次接led-A~led-dp led2<->PA0,LED1<->PA1 *;

DATA SEGMENT

IOPORT EQU 0A800H

IO8255A EQU IOPORT+0A0H

IO8255B EQU IOPORT+0A2H IO8255CON EQU IOPORT+0A6H

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码 BUFFER1 DB 0,0 ;存放要显示的十位和个位 BZ DW ? ;位码 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV DX,IO8255CON ;将8255设为A,B口输出 MOV AL,80H OUT DX,AL

MOV DI,OFFSET BUFFER1 ;设di为显示缓冲区 LOOP1: MOV CX,0100H ;循环次数 LOOP2: MOV BH,02

LLL: MOV BYTE PTR BZ,BH

联系客服:779662525#qq.com(#替换为@)