微机实验考试
date
Jul 8, 2018
slug
weiji-exam
status
Published
tags
开发测试
summary
本以为微机实验会很难很难(因为周围有几个同学都说没做完,emmm),于是就一直在搜集前面同学考过的题目来看,复习得神经兮兮的。。。结果手气太好,抽到一条类似的题目
type
Post
前言
本以为微机实验会很难很难(因为周围有几个同学都说没做完,emmm),于是就一直在搜集前面同学考过的题目来看,复习得神经兮兮的。。。结果手气太好,抽到一条类似的题目,反正吧,看了这么多题目,感觉这最后的考试就是大杂烩,把以前做过的芯片做个排列组和,感觉就是他的题库了。。。就是8255,8253,0832,0809加上4*4键盘,还有各种奇葩输出,输出到LED,蜂鸣器,直流电动机等等
正文
不多说,先放上一波考试题目
我比较懒,就随意记录一下思考过程吧,画的脑图太丑,就不挂上来了
首先要实现简单的硬延时跑马灯,这里就要涉及到8253以及8255,移动到第6位的时候就要开启跳转了,跳转到蜂鸣器,这里又得用到一次8253延时,响完之后就得关闭,然后重新跳转到跑马灯的实现过程中了。。思路很清晰,LED->蜂鸣器->LED
于是在队友的帮助下开始写代码。。代码如下:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AL,35H
MOV DX,293H ;控制口
OUT DX,AL ;输出控制字
MOV AL,00H ;低字节
MOV DX,290H ;通道0口
OUT DX,AL
MOV AL,20H ;高字节
OUT DX,AL
;级联
MOV AL,77H
MOV DX,293H
OUT DX,AL
MOV AL,00H
MOV DX,291H ;通道1口
OUT DX,AL
MOV AL,20H
OUT DX,AL
MOV DX,283H ;8255控制口
MOV AL,10010000B
OUT DX,AL
MOV BL,80H ;初始化
LIGHT1:
MOV DX,280H ;A口输入
IN AL,DX
AND AX,01H ;和00000001与保留最低位
CMP AL,01H ;比较最低位
JZ DOWN ;高电平不亮
MOV DX,282H ;低电平时C口输出
MOV AL,BL
OUT DX,AL ;输出
TEST AL,4H ;检测是否到达第六位
JNZ XIANG ;是第六位的话就响
WAN: ROR BL,1
ON:
MOV DX,280H ;A口输入
IN AL,DX
AND AX,01H
CMP AL,01H ;比较最低位是否为1
JNZ ON
DOWN:
MOV DX,280H ;A口输入
IN AL,DX
AND AX,01H
CMP AL,0H ;比较最低位是否为0
JNZ DOWN
JMP LIGHT1 ;最低位为0时跳到LIGHT1
XIANG: MOV DX,281H
MOV AL,01H
OUT DX,AL
MOV AL,35H
MOV DX,293H ;控制口
OUT DX,AL ;输出控制字
MOV AL,00H ;低字节
MOV DX,290H ;通道0口
OUT DX,AL
MOV AL,20H ;高字节
OUT DX,AL
;级联
MOV AL,11110001B
MOV DX,293H
OUT DX,AL
MOV AL,00H
MOV DX,291H ;通道1口
OUT DX,AL
MOV AL,10H
OUT DX,AL
CHK: MOV DX,280H
IN AL,DX
TEST AL,01H ;检测是否到达高电频
JZ CHK ;不是就继续监测,是就关闭蜂鸣器
MOV AL,0H
MOV DX,281H
OUT DX,AL
JMP WAN ;然后跳回跑马灯执行程序
CODE ENDS
END START
结语
先得谢谢两位队友的鼎力相助,因为他们,我完成了实验报告,因为本人不喜欢写实验报告,哈哈哈。。。
从这次考试里面又加深一波自己对于8253工作与各种方式下的应用,在这次考试里面确实只能用方式3或者是方式0,方式4是不能用的,方式4还得处理GATE信号会有点麻烦,一般都不会使用,所以这里推测期末考试很大可能性考方式0,方式2以及方式3?常规期末考试押题套路,猥琐地笑了。。。在这里方式2是不能用的,会少了一个CLK,这还是老师答辩的时候发现我的问题,emmmm....
顺便吐槽一下每次跟微机老师交流都会小紧张,语速极其快的问答让我的大脑超频工作,这样才能跟上他的节奏,这也从侧面反映了自己基础还是不牢靠,赶紧抓紧时间复习,下周五得考试了