sky's blog

记一次蛇皮的微机实验考试

字数统计: 1,235阅读时长: 5 min
2017/06/26 Share

前言

这是我在本博客发的第一篇心情随笔,因为突然想吐槽一下今天的微机实验考试!!!

缘由

今天的实验考试是真的皮,本来我已经搜集好了各种上次3班的题目,并且写好了代码,但是蛇皮的事情来了,今天去抽题目我发现……题目改……改了?
OK,改就改了吧,who怕who?
上去拿到了一张题目,乍一看,嗯,很容易,就是利用0809采集数据,转换后用IN5打到数码管上
但是蛇皮的事情来了
本来我们老师王莉说,只需要让数码管先显示低位,延时,再显示高位就好
结果一个不知道什么鬼的男老师冒出来
呵斥道:不准改题目,题目怎么要求怎么来
woc???我内心一万只草泥马路过
它的意思是,我要用数码管同时显示2个不同的数字???
但是万分懵逼???
因为之前从未做过类似实验,上课也没说过,这就真的皮了
后来可爱的王莉老师跟我们说,只需要用位选,然后用8255控制即可
我也立刻理解了她的意思
但是,更蛇皮的事情来了
因为是用PC7和PC6控制数码管高位和低位,所以两个之间有一个交替闪烁
老师这时候发话了,不行,你要用延时调到恰到好处,让人产生视觉延时
what????
视觉延时?自己手动调????
what?what?what?
好吧……然后我就像个智障一样,调啊调啊,好在最后差不多成了
妈的,真的是皮,花了一个小时,半个小时在问数码管位选的操作,半个小时在调视觉延时
血崩的实验课考试!!!!

代码

附上坑爹的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
PORT_A EQU 290H		;8255A口地址
PORT_B EQU 291H ;8255B口地址
PORT_C EQU 292H ;8255C口地址
PORT_CTL EQU 293H ;8255控制口地址
DATA SEGMENT
;数码管表,共阳(实验是共阴,所以要取反)
; 0 1 2 3 4 5 6 7
TUBE DB 40H,79H,24H,30H,19H,12H,02H,78H
; 8 9 A B C D E F
DB 00H,10H,08H,03H,46H,21H,06H,0EH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
MOV DX,PORT_CTL ;初始化8255
MOV AL,10010001B ;A口输入,读值,B口输出,打到数码管,C口输入,PC0接EOC判断用
OUT DX,AL
NEXT: MOV DX,280H ;指向ADC通道0
OUT DX,AL ;启动转换
MOV DX,PORT_C ;指向8255的C口
POLL:
IN AL,DX ;读C口值
TEST AL,01H ;测试PC0是否为1
JZ POLL ;是0,转换未结束,继续等待
MOV AL,10000000B
MOV DX,PORT_C
OUT DX,AL
MOV DX,280H ;是1,转换结束,指向ADC通道0
IN AL,DX ;读取转换后数据
AND AL,0FH ;取低4位
MOV BX,OFFSET TUBE ;指向数码管表
XLAT
NOT AL ;取反
MOV DX,PORT_B ;指向8255的B口
OUT DX,AL ;将低4位值显示在数码管上
MOV BX,15
DELAY: ;双重延时
MOV CX,0FFFFH
DELAY1:
LOOP DELAY1
DEC BX
JNZ DELAY
MOV AL,01000000B
MOV DX,PORT_C
OUT DX,AL
MOV DX,280H ;延时结束后,再指回ADC的通道0
IN AL,DX ;再读一次数据
AND AL,0F0H ;取高4位
MOV CL,4
ROR AL,CL
MOV BX,OFFSET TUBE ;指向数码管表
XLAT
NOT AL ;取反
MOV DX,PORT_B ;指向8255的B口
OUT DX,AL ;将高4位值显示在数码管上
MOV BX,15
DELAY2: ;再次双重延时
MOV CX,0FFFFH
DELAY3:
LOOP DELAY3
DEC BX
JNZ DELAY2
JMP NEXT ;延时结束,跳回NEXT,进行一下轮实现
CODE ENDS
END START

后记

你以为这结束了?
远远没有,后来帮了一个老表写他的实验代码
我真是日了狗了,什么题目
用0832产生一个按某种要求递增的电压,送给0809进行转换
然后用8253产生级联延时,然后用这个延时进行每次的电压递增
然后最后用8255控制LED灯,显示结果。
没错,这个题目我可以接受,虽然题目很bb,初始化很疯狂
但是我挺得住
可就在我脑子很混乱的分清地址和逻辑结构的时候
男老师又出现了,开始对我说:
这个不是很清楚吗,这个不是很简单吗?
考试的时候就这么多,你弄懂了就能考80了
再弄懂一个8251就能考90了
呵呵呵呵呵,我当时就想说,想太多了吧
还有8086最小系统,中断概念呢???
当然这不是重点,重点是,我懂好吗……
只是慢了点,渣不是我的错啊…………
哎……一次蛇皮的实验考试,不知道最后有几分,认栽了~~~~

点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 前言
  2. 2. 缘由
  3. 3. 代码
  4. 4. 后记