微机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一I/O地址译码与交通灯控制实验
一、实验目的
1、掌握并行接口8253的基本原理
2、掌握8253的编程方法
二、实验内容
如图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通变化规律燃灭。
三、编程分析
1、8255地址分析:控制寄存器地址: 0C40BH
A口地址: 04C408H
C口地址: 04C40AH
2、十字路口交通灯的变化规律要求
(1)南北路口的绿灯、东西路口的红灯同时亮三秒;
(2)南北路口的黄灯闪烁三次,同时东西路口的红灯继续亮;
(3)南北路口的红灯、东西路口的绿灯同时亮三秒;
(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁三次;
(5)转(1)重复。
3、C口置数分析
由于发光二极管是共阴极相连,所以若要其发亮应给高电平;黄灯闪烁是让其不断交替亮灭来实现;同时分析可知只要有绿灯亮,灯就会持续亮三秒,黄灯亮就会闪
烁三次。
4、程序设计流程图
四、汇编语言程序
STACK1 SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STACK1 DY PROC NEAR
PUSH CX
MOV AX, 0FFFFH ;延时程序
MOV CX, 02FFFH
L0:DEC AX
JNZ L0
LOOP L0
POP CX
POP AX
RET
DY ENDP
START: MOV DX, 0C40BH
MOV AL, B
OUT DX, AL
MOV DX, 0C40AH
MOV BL, 6H ;设置延迟3秒
L1:MOV AL, 00100100B ;南北绿灯亮,东西红灯亮
OUT DX, AL
CALL DY ;调用延迟子程序
DEC BL
JNZ L1
MOV BL, 4H ;设置第二次闪烁3次
L2:MOV DX, 0C40AH
MOV AL, 01000100B ; 南北黄灯亮,东西红灯亮
OUT DX, AL
CALL DY
MOV AL, 00000100B ;南北黄灯灭,东西红灯亮,实现要求闪的功能 OUT DX,AL
CALL DY
JNZ L2
MOV BL,6H ;第三次设置亮灭时间为3秒
L3:MOV AL,B ; 南北黄灯亮,东西红灯亮
OUT DX,AL
CALL DY
DEC BL
JNZ L3
MOV BL,4H
L4:MOV AL,B ;南北红灯亮,东西黄灯亮
OUT DX,AL
CALL DY
MOV AL,B ;南北红灯亮,东西黄灯灭,实现闪的功能OUT DX,AL
CALL DY
DEC BL
JNZ L4
MOV DL,0FFH ;判断是否有键按下,结束程序 MOV AH,06H
INT 21H
JZ START ;没有键按下,进入下一次循环 MOV AH,4CH
INT 21H
CODE ENDS
END START
五、实验现象:
红黄绿灯变化规律如下:
南北路口的绿灯、东西路口的红灯同时亮3秒左右;
南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;
南北路口的红灯、东西路口的绿灯同时亮3秒左右;
南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次;
依次重复。
六、实验感想
这是第一次微机实验,总体感觉挺难的。虽然课前进行了预习准备,但在调试时还是遇到了灯不亮的情况。仔细检查程序后没有发现什么问题,所以就换了一个实验箱,并得到了理想的效果。我觉得这个实验的关键是设置延时子程序DY,在每一次灯亮后,都要调用这个延时程序,并跳转到下一次灯亮。
实验二可编程定时器/计数器(8253)
一、实验目的
1、掌握并行接口8253的基本工作原理;
2、掌握8253的编程方法。
二、实验内容
1、按图虚线连接电路,将计数器0设置为工作方式0,计数器初值为N(N≤0FH),用
手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0遍高电平)。
2、按图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻
辑笔观察OUT1输出电平的变化(频率1Hz)。
三、 编程分析
1、8253控制寄存器地址: 0C403H
计数器0地址: 0C400H
计数器1地址: 0C401H
CLK0连接时钟:1MHz 。
2、程序参考流程图
四、汇编语言程序
(1):
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,0C403H
;计数器0,方式0
MOV AL,010H
MOV DX,0C400H
MOV AL,06H ;送初值6
OUT DX,AL
MOV CL,1
READ: INC CL ;自加1
CMP CL,0
JZ START
MOV DX,0C400H ;读计数器0口
IN AL,DX
MOV DL,AL
MOV CL,AL
CMP AL,9
JG BIG
ADD DL,30H ; 0到9,数字ASCII偏移30H
MOV AH,02H
INT 21H ;显示ASCII数字
MOV DL,0DH
INT 21H
JMP RETURN
BIG: ADD DL,37H ; 大于9,转换大写字母ASCII码 MOV AH,02H
INT 21H ;显示ASCII字母
MOV DL,0DH
INT 21H
JMP RETURN
RETURN: MOV DL, 0FFH
MOV AH, 06H
INT 21H
JZ READ ;有键按下回DOS,没有则继续执行