CUMT中国矿业大学18级微机原理与接口技术实验考试

⚠感谢我可爱的室友们在实验考试前的一部分学习资料的提供
⚠感谢SWDL(大佬)、ZYLDL(大佬)、LXQDL(大佬)
⚠捕获一只大佬,同是矿大微机原理与接口技术实验考试https://blog.csdn.net/u011377996/article/details/80957490

⭐实验考试要求:
⚠不必担心箱子有没有坏,老师在考试前都会测一遍箱子,找出没有问题的箱子给大家用,但是不排除在考试中途坏掉了的可能性...
(据说后面考试的班级有出现箱子坏了的状况...)
⚠可带书,可带U盘(一定要带之前写的代码,考试就是前面芯片使用的大杂烩),甚至拿手机也么的问题(毕竟网上没原题)
⚠课程分值占比:20%平时(前三次实验+实验报告)+80%考试
⚠考试时间:2小时(如果2h未完成目标,将抽顺序检查成果)
⚠考试分组:4人/组,特殊情况3人/组或5人/组,大概率按学号顺序组安排(这个是老师安排,不能自由组队)
⚠未完成的情况下:据说考试成绩最高给到75(面对老师的提问回答流畅),然后根据表现酌情减分

⭐考试题目(第7套卷子)
键盘+DAC0832锯齿波+软延时(参考实验二中的第三个 [2-3] 和实验三中的第二个 [3-2] )
实验原理图还要画下217页的图6.20???
实验现象:一通电直流电机一直转,从小键盘输入F后,七段LED显示器显示F,直流电机变成锯齿波效果(转 -> 停 -> 转 -> 停),从键盘输入其他字符,七段LED显示器显示输入的字符,但直流电机一直转
用新箱子注意运行是点开始执行,不是开始调试 -> 连续执行,我们组就被这个问题坑了...

考试题目(第7套).jpg

⭐实物图有4张,都是一样的,角度稍有不同

实物图1.jpg
实物图2.jpg
实物图3.jpg
实物图4.jpg

⭐话不多说,上代码!!!

;端口地址
PORT_A      EQU    0290H;8255A口地址
PORT_B      EQU    0291H;8255B口地址
PORT_C      EQU    0292H;8255B口地址
PORT_CTL    EQU    0293H;8255控制口地址

;数据段,键盘扫描码表
DATA SEGMENT
;          0      1      2      3      4      5      6      7
TABLE DB   77H,   7BH,   7DH,   7EH,  0B7H,  0BBH,  0BDH,  0BEH
;          8      9      A      B      C      D      E      F
      DB  0D7H,  0DBH,  0DDH,  0DEH,  0E7H,  0EBH,  0EDH,  0EEH
;0~F的七段代码编码,实验箱是共阳极接法
TABLE1 DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
       DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
DATA ENDS

;代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
       MOV DS,AX
;初始化8255A,方式0,B口做输入,A口和C口输出
       MOV DX,PORT_CTL ;指向控制口
       MOV AL,10000010B ;控制字
       OUT DX,AL ;写入控制字
;向所有行送0
       MOV DX, PORT_A ;A口输出
       MOV AL,00H
       OUT DX,AL ;向A口各位输出
;读列,查看是否所有键均松开
       MOV DX,PORT_B
WAIT_OPEN:IN AL,DX;键盘状态读入B口
       AND AL,0FH ;只查低四位(列值)
       CMP AL,0FH ;是否都为1?(各键都松开? )
       JNE WAIT_OPEN ;否,继续查
;各键均已松开,再查列是否有0,即是否有键按下
WAIT_PRES:IN AL,DX ;读B口
        AND AL,0FH;只查低四位
        CMP AL,0FH;是否有键按下
        JE  WAIT_PRES;无,等待
;有键按下,延时20ms,消抖动
        MOV CX,16EAH
DELAY:  LOOP DELAY ;延时20ms
;再查列,看键是否仍被压着
        IN  AL,DX
        AND AL,0FH
        CMP AL,0FH
        JE  WAIT_PRES;已松开,转出等待压键
;键仍被压着,确定哪一个键被压下
        MOV AL,0FEH;先使D0=0
        MOV CL,AL ;CL=1111 1110B
NEXT_ROW:MOV DX,PORT_A;A口
        OUT DX,AL ;向一行输出低电平
        MOV DX, PORT_B  ;B口
        IN  AL,DX ;读入B口状态
        AND AL,0FH ;只截取列值
        CMP AL,0FH ;是否均为1?
        JNE ENCODE ;否,表示有键按下,转去编码
        ROL CL ,01 ;均为1,使下行输出0
        MOV AL,CL
        JMP NEXT_ROW ;查看下行
;已找到有一列为低电平,对压键的行列值进行编码
ENCODE: MOV BX,000FH ;建立地址指针,先指向F键对应的地址
        IN  AL,DX ;从B口读入行列值
NEXT_TRY:CMP AL,TABLE[BX] ;读入的行列值与表中查得的相等吗?
        JE  DONE ;相等,转出
        DEC BX ;不等,转向下一个(键值较小者)地址
        JNS NEXT_TRY ;若地址尚未减为负值,继续查
        MOV AH,01 ;若减为负值,置出错码01->AH中
        JMP EXIT ;退出
DONE:   MOV DX,PORT_C;C口输出
        MOV AL,TABLE1[BX];检查0~F的七段代码表
        OUT DX,AL
        CMP BX,0FH;看这里看这里看这里啊喂!!!这里做出改变,其余和实验[2-3]代码一致,BX中的值与F作比较
        JE DIANJI;看这里看这里看这里啊喂!!!这里做出改变,其余和实验[2-3]代码一致,若输入为F,就跳转电机那段
        MOV BX,500H;将500H存入BX中,用于双层循环延时
DELAY1: MOV CX,12346;将12356存入CX
DELAY2: LOOP DELAY2;循环DELAY2,每循环一次,CX自减一次
        DEC BX;BX减1
        JNZ DELAY1;若BX不为0,则跳至DELAY1
        JMP  START;循环检测该程序 
;直流电机的程序
DIANJI:
;锯齿波
BO:     MOV AL,0
AGAIN:  INC AL;AL=AL+1
        MOV DX,280H
        OUT DX,AL;数据打入输入寄存器,启动D/A转换
        MOV BX,100
DELAY3: MOV CX,10005;双层循环延时,软延时程序
LOOP1:  LOOP LOOP1;CX=CX-1
        DEC BX
        JNZ DELAY3
        CMP AL,0
        JNZ AGAIN;AL不为0,继续循环,为零则退出
        OUT DX,AL;数据打入输入寄存器
        JMP BO;循环检测该代码                  
EXIT:   HLT 
CODE    ENDS
        END START

⭐我猜你是在熬夜看代码(噗哈哈哈哈哈哈哈),或者是考场上现学?

咸鱼.gif

有趣有趣.gif

⭐嗷,最好是考前看到这篇文章叭,毕竟下面还有大礼包(5张18级考试真题的图)

第1套.jpg
第3套.jpg
第4套.jpg
第8套.jpg
第10套.png

慢慢摇.gif

⭐晚安,预祝成绩理想!!!加油!!!

你可能感兴趣的:(CUMT中国矿业大学18级微机原理与接口技术实验考试)