微机原理实验报告Word下载.docx
《微机原理实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告Word下载.docx(20页珍藏版)》请在冰点文库上搜索。
MOVAX,DATA
MOVDS,AX
MOVAL,10H
MOVDX,0C403H
OUTDX,AL;
写控制字
MOVAL,N
MOVDX,0C400H
写入计数器0初值,初始化完成
READ:
INAL,DX;
读入计数值
CMPAL,09H
JLEASCI
ADDAL,07H
ASCI:
ADDAL,30H;
转化成ascii码
MOVDL,AL
MOVAH,02H
INT21H;
显示计数值
MOVDL,0DH;
加回车符,只显示一个符号
INT21H
MOVDL,0FFH;
有键按下回DOS
MOVAH,06H
JNZEXIT
JMPREAD
EXIT:
MOVAH,4CH
CODEENDS
ENDSTART
程序2
ASSUMECS:
CODE
MOVDX,0C403H
MOVAL,00110110B;
计数器0方式3产生方波
OUTDX,AL
MOVDX,0C400H
MOVAX,1000;
计数器0计数值1000
MOVAL,AH
OUTDX,AL
MOVAL,01110110B;
计数器1方式3
MOVDX,0C401H
计数器1送入记数值1000
有按键时结束
MOVAH,06H
CODEENDS
实验二交通灯控制实验(8255)
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、程序设计流程图
N
四、汇编语言程序
STACKSEGMENT
DB100DUP(0)
STACKENDS
CODE,SS:
STACK
DYPROCNEAR
PUSHAX
PUSHCX
MOVAX,0FFFFH;
延时程序
MOVCX,02FFFH
L0:
DECAX
JNZL0
LOOPL0
POPCX
POPAX
RET
DYENDP
MOVDX,0C40BH
MOVAL,10000000B
MOVDX,0C40AH
MOVBL,6H;
设置延迟3秒
L1:
MOVAL,00100100B;
南北绿灯亮,东西红灯亮
CALLDY;
调用延迟子程序
DECBL
JNZL1
MOVBL,4H;
设置第二次闪烁3次
L2:
MOVDX,0C40AH
MOVAL,01000100B;
南北黄灯亮,东西红灯亮
CALLDY
MOVAL,00000100B;
南北黄灯灭,东西红灯亮,实现要求闪的功能
DECBL
JNZL2
MOVBL,6H;
第三次设置亮灭时间为3秒
L3:
MOVAL,10000001B;
JNZL3
MOVBL,4H
L4:
MOVAL,10000010B;
南北红灯亮,东西黄灯亮
MOVAL,10000000B;
南北红灯亮,东西黄灯灭,实现闪的功能
OUTDX,AL
JNZL4
判断是否有键按下,结束程序
JZSTART;
没有键按下,进入下一次循环
MOVAH,4CH
CODEENDS
ENDSTART
五、实验现象及分析:
红黄绿灯变化规律如下:
南北路口的绿灯、东西路口的红灯同时亮3秒左右;
南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;
南北路口的红灯、东西路口的绿灯同时亮3秒左右;
南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次;
依次重复。
六、实验出现错误及感想:
延时过短,经计算后采用新的循环数值,得到预期结果
此程序条理很清晰,调试非常顺利。
两个实验的独自完成,使我对汇编语言产生了浓厚的兴趣,对之后的实验也有了信心。
实验三竞赛抢答器(8255)
一、实验目的
1、了解微机化竞赛抢答器的基本原理。
2、进一步学习使用并行接口。
二、实验内容
图5-4为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。
在七段数码管上将其组号(0~7)显示出来,并使喇叭响一下。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
1、设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。
根据读取数据可判断其组号。
2、计算组号的算法:
组号=C口数据连续除以2得到商为零的除法运算次数
MOVAH,0
MOVDL,2
MOVCL,0
JISUAN:
DIVDL
INCCL
CMPAL,0
JNZJISUAN
DECCL
MOVAL,CL
3、响铃的DOS功能调用:
MOVDL,7;
响铃ASCII码为07
MOVAH,2
4、程序设计流程图
LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
MOVBX,OFFSETLIST
MOVAL,10001001B
8255初始化
INPUT:
MOVDX,0C408H
MOVAL,0FFH
C口输入
JZINPUT
MOVAL,CL;
计算出组号
XLAT
查表并从A口输出
MOVDL,7
MOVAH,2
响铃
MOVAH,01H
CMPAL,'
'
;
接收一字符
EXIT:
ENDSTART
五、实验现象及分析:
初始状态为数码管全亮。
拨下任一开关后,铃响,同时数码管显示该组的组号。
按空格键,恢复到初始状态
六、实验出现错误及感想:
1、组号的计算是一个难点,在这个算法的设计上花费了较多的时间。
我用除2循环实现要求之后,经过与别人交流,发现用移位算法更为直观,方便理解。
但是除以2与右移一位本来是等价的,所以这两种算法本质还是相同的。
2、第一次运行时发生故障,抢答后无法恢复初始状态。
经检查发现相关代码位置有误,重新调整之后实现预想结果。
实验四8250串行通信实验
1、掌握串行接口芯片8250的基本原理和编程方法
2、熟悉PC机串行的基本连接方法
3、进一步了解串行通信的基本原理
1、PC机RS-232串口自发自收
2、自发自收实验:
将RS232C的DB9的电缆插头第2脚和第3脚短接,然后编程实现。
3、2台PC的串行通信:
用RS232C的DB9的电缆(交叉线)将两台机器连接,然后编程实现收发数据。
三、硬件连接
程序1-自发自收
CODESEGMENT
8250初始化,设DLAB=1
MOVDX,3FBH
MOVAX,30H;
写入除数低字节
MOVDX,3F8H
MOVAL,AH;
写入除数高字节
MOVDX,3F9H
MOVAL,00001010B;
7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;
写入线路控制寄存器
MOVAL,00010000B;
自检控制
MOVDX,3FCH
写入Modem控制寄存器
MOVAL,0
写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOVDX,3FDH;
读线路状态寄存器
INAL,DX
TESTAL,00011110B;
出错否
JNZERROR;
出错,转ERROR
TESTAL,00000001B;
接收数据就绪否
JNZRECEIVE;
就绪,转接受
TESTAL,00100000B;
发送寄存器空否,不空,返回等待
JZWAIT_FOR
MOVAH,1
INT21H;
读键盘
MOVDX,3F8H;
发送
JMPWAIT_FOR;
返回等待
RECEIVE:
PUSHCX
MOVCX,02000H
T1:
MOVAX,0FFFFH
T2:
DECAX
JNZT2
LOOPT1;
读接收数据
ANDAL,01111111B;
保留7位数据
CMPAL,03H;
是Ctrl+C?
JNZCHAR
MOVAH,4CH;
返回DOS
CHAR:
MOVDL,AL
MOVAH,2H;
显示接收字符
ERROR:
出错则清除线路状态寄存器
MOVDL,'
?
'
;
显示'
JMPWAIT_FOR
程序2-双机通信
发送部分:
MOVAL,80H;
8250初始化,设DLAB=1
MOVAX,0030H
MOVAL,0AH;
7位数据,1位停止,奇校验
MOVAL,03H;
数据终端就绪,请求发送数据
发送寄存器空否,不空,返回等待
SEND:
INT21H
CMPAL,21H
JZEXIT
读键盘,若是'
!
返回DOS,若不是,则发送
MOVAX,4C00H
接收部分:
CODE
转接收
CMPAL,21H;
是'
MOVAX,4C00H;
MOVDL,AL
MOVAH,2;
自发自收:
输入带屏幕显示字符后,屏幕上会出现一个相同的字符
双机通信:
发送机发出一个字符,接收机屏幕上会显示该字符。
当发送字符为“!
”时,程序停止运行
1、自发自收由于要求和细节比较多,难度较大,因此参照课本上的例题编写程序。
最后的结果是输入一个字符时,屏幕上会几乎同时显示两个相同的字符。
为了使发送和接收的过程更为明显,在程序中接受字符之前加一段延时。
这样得到的最终结果是:
发出一个带屏幕显示的字符后,过1~2秒的时间,屏幕上会显示一个相同的字符。
2、双机通信的编写较为顺利,由于有了自发自收编写程序的经验,双机通信第一次运行就完好地实现了功能。