微机原理实验报告.docx
- 文档编号:2036219
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:20
- 大小:275.69KB
微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
微机原理实验报告
实验一可编程定时器/计数器(8253)
一、实验目的
1、掌握并行接口8253的基本原理
2、掌握8253的编程方法
二、实验内容
1、按图虚线连接电路,将计数器0设置为工作方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0遍高电平)。
2、按图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)。
三、编程分析
1、8253地址分析:
控制寄存器地址:
0C403H
计数器0地址:
04C400H
计数器1地址:
04C401H
CLK0连接时钟:
1MHz。
2、程序参考流程图
(2)
四、汇编语言程序
程序1
DATASEGMENT
NDB0BH
DATAENDS
STACK1SEGMENTPARASTACK
DB20DUP(0)
STACK1ENDS
CODESEGMENT
START:
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
MOVAX,DATA
MOVDS,AX
MOVAL,10H
MOVDX,0C403H
OUTDX,AL;写控制字
MOVAL,N
MOVDX,0C400H
OUTDX,AL;写入计数器0初值,初始化完成
READ:
MOVDX,0C400H
INAL,DX;读入计数值
CMPAL,09H
JLEASCI
ADDAL,07H
ASCI:
ADDAL,30H;转化成ascii码
MOVDL,AL
MOVAH,02H
INT21H;显示计数值
MOVDL,0DH;加回车符,只显示一个符号
INT21H
MOVDL,0FFH;有键按下回DOS
MOVAH,06H
INT21H
JNZEXIT
JMPREAD
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
程序2
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0C403H
MOVAL,00110110B;计数器0方式3产生方波
OUTDX,AL
MOVDX,0C400H
MOVAX,1000;计数器0计数值1000
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,0C403H
MOVAL,01110110B;计数器1方式3
OUTDX,AL
MOVDX,0C401H
MOVAX,1000;计数器1送入记数值1000
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDL,0FFH;有按键时结束
MOVAH,06H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验二交通灯控制实验(8255)
一、实验目的
1、掌握并行接口8253的基本原理
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
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
DYPROCNEAR
PUSHAX
PUSHCX
MOVAX,0FFFFH;延时程序
MOVCX,02FFFH
L0:
DECAX
JNZL0
LOOPL0
POPCX
POPAX
RET
DYENDP
START:
MOVDX,0C40BH
MOVAL,10000000B
OUTDX,AL
MOVDX,0C40AH
MOVBL,6H;设置延迟3秒
L1:
MOVAL,00100100B;南北绿灯亮,东西红灯亮
OUTDX,AL
CALLDY;调用延迟子程序
DECBL
JNZL1
MOVBL,4H;设置第二次闪烁3次
L2:
MOVDX,0C40AH
MOVAL,01000100B;南北黄灯亮,东西红灯亮
OUTDX,AL
CALLDY
MOVAL,00000100B;南北黄灯灭,东西红灯亮,实现要求闪的功能
OUTDX,AL
CALLDY
DECBL
JNZL2
MOVBL,6H;第三次设置亮灭时间为3秒
L3:
MOVAL,10000001B;南北黄灯亮,东西红灯亮
OUTDX,AL
CALLDY
DECBL
JNZL3
MOVBL,4H
L4:
MOVAL,10000010B;南北红灯亮,东西黄灯亮
OUTDX,AL
CALLDY
MOVAL,10000000B;南北红灯亮,东西黄灯灭,实现闪的功能
OUTDX,AL
CALLDY
DECBL
JNZL4
MOVDL,0FFH;判断是否有键按下,结束程序
MOVAH,06H
INT21H
JZSTART;没有键按下,进入下一次循环
MOVAH,4CH
INT21H
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
INT21H
4、程序设计流程图
四、汇编语言程序
DATASEGMENT
LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DATAENDS
STACK1SEGMENTPARASTACK
DB20DUP(0)
STACK1ENDS
CODESEGMENT
START:
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETLIST
MOVDX,0C40BH
MOVAL,10001001B
OUTDX,AL;8255初始化
INPUT:
MOVDX,0C408H
MOVAL,0FFH
OUTDX,AL
MOVDX,0C40AH
INAL,DX;C口输入
CMPAL,0
JZINPUT
MOVAH,0
MOVDL,2
MOVCL,0
JISUAN:
DIVDL
INCCL
CMPAL,0
JNZJISUAN
DECCL
MOVAL,CL;计算出组号
XLAT
MOVDX,0C408H
OUTDX,AL;查表并从A口输出
MOVDL,7
MOVAH,2
INT21H;响铃
MOVAH,01H
INT21H
CMPAL,'';接收一字符
JZINPUT
EXIT:
MOVAH,4CH
INT21H
CODEENDS
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
ASSUMECS:
CODE
START:
MOVAL,10000000B;8250初始化,设DLAB=1
MOVDX,3FBH
OUTDX,AL
MOVAX,30H;写入除数低字节
MOVDX,3F8H
OUTDX,AL
MOVAL,AH;写入除数高字节
MOVDX,3F9H
OUTDX,AL
MOVAL,00001010B;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写入线路控制寄存器
MOVAL,00010000B;自检控制
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOVDX,3FDH;读线路状态寄存器
INAL,DX
TESTAL,00011110B;出错否
JNZERROR;出错,转ERROR
TESTAL,00000001B;接收数据就绪否
JNZRECEIVE;就绪,转接受
TESTAL,00100000B;发送寄存器空否,不空,返回等待
JZWAIT_FOR
MOVAH,1
INT21H;读键盘
MOVDX,3F8H;发送
OUTDX,AL
JMPWAIT_FOR;返回等待
RECEIVE:
PUSHCX
PUSHAX
MOVCX,02000H
T1:
MOVAX,0FFFFH
T2:
DECAX
JNZT2
LOOPT1;延时程序
MOVDX,3F8H;读接收数据
INAL,DX
ANDAL,01111111B;保留7位数据
CMPAL,03H;是Ctrl+C?
JNZCHAR
MOVAH,4CH;返回DOS
INT21H
CHAR:
PUSHAX
MOVDL,AL
MOVAH,2H;显示接收字符
INT21H
POPAX
JMPWAIT_FOR;返回等待
ERROR:
MOVDX,3FDH;出错则清除线路状态寄存器
INAL,DX
MOVDL,'?
';显示'?
'
MOVAH,02H
INT21H
JMPWAIT_FOR
CODEENDS
ENDSTART
程序2-双机通信
发送部分:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,80H;8250初始化,设DLAB=1
MOVDX,3FBH
OUTDX,AL
MOVAX,0030H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
MOVDX,3F9H
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写入线路控制寄存器
MOVAL,03H;数据终端就绪,请求发送数据
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOVDX,3FDH;读线路状态寄存器
INAL,DX
TESTAL,00100000B;发送寄存器空否,不空,返回等待
JZWAIT_FOR
SEND:
MOVAH,1
INT21H
CMPAL,21H
JZEXIT
MOVDX,3F8H;读键盘,若是'!
',返回DOS,若不是,则发送
OUTDX,AL
JMPWAIT_FOR;返回等待
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
接收部分:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,80H;8250初始化,设DLAB=1
MOVDX,3FBH
OUTDX,AL
MOVAX,0030H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
MOVDX,3F9H
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写入线路控制寄存器
MOVAL,03H;数据终端就绪,请求发送数据
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOVDX,3FDH;读线路状态寄存器
INAL,DX
TESTAL,00000001B;接收数据就绪否
JNZRECEIVE;转接收
JMPWAIT_FOR;返回等待
RECEIVE:
MOVDX,3F8H;读接收数据
INAL,DX
ANDAL,01111111B;保留7位数据
CMPAL,21H;是'!
'?
JNZCHAR
MOVAX,4C00H;返回DOS
INT21H
CHAR:
PUSHAX
MOVDL,AL
MOVAH,2;显示接收字符
INT21H
POPAX
JMPWAIT_FOR;返回等待
CODEENDS
ENDSTART
五、实验现象及分析:
自发自收:
输入带屏幕显示字符后,屏幕上会出现一个相同的字符
双机通信:
发送机发出一个字符,接收机屏幕上会显示该字符。
当发送字符为“!
”时,程序停止运行
六、实验出现错误及感想:
1、自发自收由于要求和细节比较多,难度较大,因此参照课本上的例题编写程序。
最后的结果是输入一个字符时,屏幕上会几乎同时显示两个相同的字符。
为了使发送和接收的过程更为明显,在程序中接受字符之前加一段延时。
这样得到的最终结果是:
发出一个带屏幕显示的字符后,过1~2秒的时间,屏幕上会显示一个相同的字符。
2、双机通信的编写较为顺利,由于有了自发自收编写程序的经验,双机通信第一次运行就完好地实现了功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告