一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com
仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。
免责声明,本人菜只因一只,内容仅供参考,错了不负责哈
微机实验四报告
一:实验目的
1、掌握8255的工作原理及编程方法。
二:实验使用的主要模块
①I/O地址译码电路②逻辑电平开关电路③LED显示电路④七段数码管显示电路⑤接口集成电路
二、实验题目
2.1、题目1:8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7,电路模块原理图见前面介绍。编程从8255C口输入数据,再从A口输出。
2.1.1、源代码及注释
DATAS SEGMENT;数据段设置
porta equ 288H ;74LS138的/Y1地址:288h
portb equ 289H
portc equ 28AH
portcon equ 28BH
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
;代码段代码
MOV DX,PORTCON
MOV AL,10001001B;控制字设置,让ABC都工作于方式0,C口输入A口输出B口随意
OUT DX,AL
AGAIN:
MOV DX,28AH;C口地址
IN AL,DX;输入
MOV DX,288H;A口地址
OUT DX,AL;输出
MOV AH,1;判断按键中断
INT 16H
JE AGAIN
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.2、题目2:将8255的A口PA0~PA7与七段数码管的“段码”输入端a、b、c、d、e、f、g、dp相连,位码驱动输入端S3~S0接8255的PC3~PC0,电路模块原理图见前面介绍。编程实现在两位数码管上显示“56”。
2.2.1、源代码及注释
DATAS SEGMENT ;数据段
porta equ 288H ;74LS138的/Y1地址:288h
portb equ 289H
portc equ 28AH
portcon equ 28BH
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
delay proc near ;延时子程序
push bx
push cx
mov bx,2000 ;延时时间为bx*cx,具体值需要实验并调试
lll: mov cx,50000 ;通过实验将值设为200*3000,实验现象清晰明显
ll: loop ll
dec bx
jne lll
pop cx
pop bx
ret
delay endp
START:
MOV AX,DATAS
MOV DS,AX
mov dx,portcon ;以下是代码段
mov al,10000000B ;设置方式与输入/输出
out dx,al
AGAIN:
mov al,02H ;在数码管第2位显示
mov dx,portc
out dx,al ;设置数码管的地址
mov al,5dh
mov dx,porta
out dx,al
call delay; ;数码管输出5
mov al,01H ;在数码管第1位显示,且代码与上一段基本一致
mov dx,portc
out dx,al ;设置数码管的地址
mov al,6dh
mov dx,porta
out dx,al
call delay ;数码管输出6
mov ah,1
int 16h ;按键检测
je AGAIN ;若无按键则循环显示
JNE EXIT ;若有按键输入则中断且退出
EXIT:
mov ah,4ch
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.3、题目3: 通过并行接口8255实现十字路口交通灯的模拟控制,如图29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。 十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮一定时间。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮一定时间。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
2.3.1、源代码及注释:
DATAS SEGMENT ;数据段设置
porta equ 288H ;74LS138的/Y1地址:288h
portb equ 289H
portc equ 28AH
portcon equ 28BH
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
;因为黄灯和红绿灯亮灯时间不一样,因此要用不同延时时长的延时子程序,通过实验测试得具体值
delay_long proc near ;长延时子程序
push bx
push cx
mov bx,2000 ;
lll0: mov cx,50000 ;
ll0: loop ll0
dec bx
jne lll
pop cx
pop bx
ret
delay_long endp
delay_short proc near ;短延时子程序
push bx
push cx
mov bx,2000 ;
lll1: mov cx,5000 ;
ll1: loop ll01
dec bx
jne lll
pop cx
pop bx
ret
delay_short endp
START:
MOV AX,DATAS
MOV DS,AX
;以下为代码段
mov dx,portcon
mov al,B;设置为输出模式
out dx,al
AGAIN:mov dx,portc
mov al,B;保持亮灯
out dx,al
call delay_long
mov cx,3 ;南北绿灯、东西红灯
AGAIN1:mov dx,portc
mov al,B
out dx,al
call delay_short ;东西红灯继续亮
mov dx,portc
mov al,B
out dx,al
call delay_short
loop AGAIN1 ;循环3次,三次闪烁黄灯
mov dx,portc
mov al,B;保持亮灯
out dx,al
call delay_long
mov cx,3 ;南北红灯、东西绿灯
AGAIN2:mov dx, portc
mov al,B
out dx,al
call delay_short ;南北红灯继续亮
mov dx,portc
mov al,B
out dx,al
call delay_short
loop AGAIN2;循环三次,3次闪烁
mov ah,1
int 16h
je AGAIN1;无按键按下,继续循环执行
JNE EXIT ;若有按键输入则中断且退出
EXIT:MOV AH,4CH
INT 21H
CODES ENDS
END START