微机原理硬件实验报告文档格式.docx
《微机原理硬件实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理硬件实验报告文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
STARTPROC
MOVAX,DATA
MOVDS,AX
KAI:
MOVAL,18H
MOVDX,2A8H
OUTDX,AL
CALLDELAY
LOOP1:
MOVBL,AL
ANDBL,0F0H
SHLBL,1
ANDAL,0FH
SHRAL,1
ADDAL,BL
JZKAI
JMPLOOP1
MOVAX,4C00H
INT21H
STARTENDP
DELAYPROC
PUSHCX
MOVCX,0FFFFH
DELOOP1:
NOP
DELOOP2:
LOOPDELOOP2
POPCX
LOOPDELOOP1
DELAYENDP
CODEENDS
ENDSTART
四、心得体会
这是微原硬件实验的第一次,主要是熟悉了将要使用的实验系统,学习了最基本的硬件测试的方法,对接口的地址、LED灯的控制。
学会了怎样通过软件延时让LED灯闪烁,同时也学会了HQFC软件的使用。
同时也体会到了硬件实验不同于软件实验,硬件实验需要用软件去控制硬件工作,要向接口输出数据和控制信息,同时还要注意硬件的时序问题,这样才能驱动硬件正常工作。
实验二可编程并行接口8255
一、实验目的
1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。
1.8255的工作方式
一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。
方式0是基本型输入/输出。
这种方式和外设交换数据时,8255端口与外设之间不使用联络线。
方式1为选通型输入/输出。
用这种方式和外界交换数据时,端口和外设之间要有联络信号。
方式2是双向数据传送,仅A口有这项功能。
当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。
2.工作方式选择字
8255工作方式选择字共8位(如图),存放在8255控制寄存器中。
最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。
3.C口置/复位控制字
8255的C口可进行位操作,即:
可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。
C口置/复位字共8位,各位含义如下:
3.8255A的控制信号与传输动作的对应关系
4.命令字与初始化编程
8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:
①向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。
②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。
这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。
注意:
“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。
3向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”
三、实验过程
1.流程图
2.电路连接
PC7~PC0/8255接K7~K0/逻辑电平开关
PA7~PA0/8255接L7~L0/LED显示
CS/8255接Y1/IO地址
3.源程序
CTDW28BH
ADW288H
CDW289H
STACK1SEGMENTSTACK'
STACK1ENDS
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAX,10001001B
MOVDX,CT
OUTDX,AX
MOVDX,C
INAX,DX
MOVDX,A
JMPLOOP1
MOVAX,4C00H
INT21H
四、心得建议
实验进入第二次,开始真正地通过接口芯片8255A控制外设的动作,编程上没有太大难度,关键是理解并行接口的工作原理以及认识了解8255接口芯片的控制方式以及编程技巧,以及简单地运用8255来进行数据传输。
实验三七段数码管
掌握数码管显示数字的原理
小键盘按键显示的原理
二、实验原理及内容
1.静态显示:
按4-4-1连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。
(或编程在数码管上循环显示“00-99”,位码驱动输入端S0、S1接PC0、PC1;
S2、S3接地。
2.实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
七段数码管的字型代码表如下表:
3.矩阵式键盘的按键识别方法
行扫描法:
判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
三、实验过程
2.源程序
;
数码管循环显示0~99
DATASEGMENT
RCDB00H,02H,04H,06H,08H,0AH,0CH,0EH
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
MOVAX,DATA
MOVDS,AX
MOVAL,8BH
MOVDX,28BH
OUTDX,AL
MOVCX,8
LEASI,RC
RESC:
LODSB
INCSI
LOOPRESC
LEABX,TABLE
MOVCX,99
SHOW:
MOVDX,28AH
MOVAL,01H
MOVAX,CX
AAM
XLATTABLE
MOVDX,288H
CALLDELAY
MOVAL,02H
MOVAL,AH
LOOPSHOW
MOVAX,4C00H
INT21H
PUSHCX
MOVCX,0FFFFH
LOOPDELOOP2
POPCX
LOOPDELOOP1
DELAYENDP
小键盘按键显示
DATAINDB5DUP(0);
按键存储
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H
CATDB01H;
选通端
COUNTHDB?
COUNTLDB?
DATALDB?
;
列检测向量
HNDB50H,54H,58H,5BH;
行向量表,得到入口地址
ORG50H;
列向量表
H1DB0FH,0EH,0DH,0CH
H2DB0BH,0AH,9H,8H
H3DB7H,6H,5H,4H
H4DB3H,2H,1H,0H
MOVES,AX
MOVAL,81H;
行输出,列输入
OUTDX,AL
HANG0:
MOVDX,28BH
MOVAL,00001110B
MOVAL,00001101B
MOVAL,00001011B
MOVAL,00001001B
MOVCOUNTH,3
MOVDATAL,01H;
初始化列检测向量以及列数
MOVCOUNTL,0
MOVDX,28AH;
读取列的输入值
INAL,DX
NOTAL;
对列值取反,方便检测
JNZLIE
HANG1:
MOVAL,00001111B
MOVAL,00001100B
MOVCOUNTH,2
HANG2:
MOVAL,00001010B
MOVCOUNTH,1
HANG3:
MOVAL,00001000B
MOVCOUNTH,0
JZXIAN
LIE:
TESTAL,DATAL;
查找列
JZNEXTL;
ZF=1,证明未找到列,继续扫描下一列
MOVAL,COUNTH;
ZF=0,找到按键,通过行查询入口地址
LEABX,HN
XLAT
MOVAH,0;
通过入口地址查找按键
MOVBX,AX
MOVAL,COUNTL
MOVBX,OFFSETTABLE;
通过按键查找对应数码管码值
CALLSTODT;
将存储的值向下挪一个单元
MOVDATAIN,AL;
储存按下的键
XIAN:
CALLSHODT;
显示
JMPLOOP1;
查询zf是否为1,
;
如果是1证明检测到按键,进行下一次扫描
不为1,则扫描下一列
NEXTL:
CMPCOUNTL,3;
判断列是否扫描完毕,扫描完毕后扫描下一行
JAEHANG0
INCCOUNTL
SHLDATAL,1
JMPLIE
STODTPROC
PUSHF
PUSHAX
MOVCX,4;
4个单元的搬移
MOVDI,OFFSETDATAIN
MOVSI,OFFSETDATAIN
ADDDI,4
ADDSI,3
STD;
方向:
递减
REPMOVSB;
转移串
POPAX
POPF
RET
STODTENDP
SHODTPROC
PUSHBX
MOVCX,15
SLOOP:
PUSHCX
MOVCX,4
MOVBX,OFFSETDATAIN
MOVCAT,01H
SHLOOP:
MOVAL,CAT;
数码管选通端输出
MOVDX,289H
MOVAL,[BX];
选择并显示码值
MOVAL,0
INCBX;
显示下一个数
SHLCAT,1
LOOPSHLOOP
LOOPSLOOP
POPBX
SHODTENDP
MOVCX,01DFH
MOVCX,0FFH
四、实验总结
这一次实验我们开始使用8255A和数码管共同配合显示,实现了更加复杂和精确的控制。
在实验过程中,数码管的扫描延迟的时间是一个问题,时间过短会导致显示数据闪烁,时间过长又不能连续显示,同时还要在下次扫描之前将上次的数据给清除,这样才能防止数码管在显示的时候有残影影响显示美观性。
通过本次实验学习了不同外设工作的配合,学会了数码管的使用和对延时的调试技巧。
此外做了小键盘的扫描显示,学会了如何使用8255的C口高四位输出,低四位输入,学会了如何去扫描小键盘,处理好中间的时序问题,同时使用子程序控制使编程可读性更强,对于软件编程与硬件接口的配合也有了更深一层的了解。
实验四可编程定时器/计数器(8253/8254)
学习掌握8253用作定时器的编程原理;
8253和8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。
8254是8253的改进型。
1.8253初始化
使用8253前,要进行初始化编程。
初始化编程的步骤是:
①向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。
②向使用的计数器端口写入计数初值。
2.8253控制字
3.音符频率对照
1.接线:
CS/8253接Y0/IO地址
GATE0/8253接+5V
CLK0/8253接1M时钟
OUT0/8253接喇叭或蜂鸣器
2源程序
COUNTDW299H
CTDW29BH
ADW288H
CDW28AH
CT2DW28BH
DB100HDUP(?
DELAYPROCNEAR
MOVCX,0FFFH
WAIT1:
CALLDELAY2
LOOPWAIT1
DELAYENDP
DELAY2PROCNEAR
MOVCX,02FFH
WAIT2:
LOOPWAIT2
DELAY2ENDP
MOVAX,DATA
MOVDX,CT2
MOVAL,80H
MOVDX,CT
MOVAL,01110110B
CALLS3
CALLS4
CALLS5
CALLS2
CALLS1
MOVAH,1
INT16H
JZSTART
S1PROCNEAR
MOVAL,00H
MOVAL,06H
MOVDX,A
MOVAL,01H
MOVDX,COUNT
MOVAX,3906
MOVAL,AH
S2PROCNEAR
MOVAL,5BH
MOVAX,3472
S3PROCNEAR
MOVAL,4FH
MOVAX,3125
S4PROCNEAR
MOVAL,66H
MOVAX,2933
S5PROCNEAR
MOVAL,6DH
MOVAL,01H
MOVAX,2604
S6PROCNEAR
MOVAL,7DH
MOVAX,2344
S7PROCNEAR
MOVAL