北交大微机原理实验报告.docx
- 文档编号:30727863
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:26
- 大小:748.07KB
北交大微机原理实验报告.docx
《北交大微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《北交大微机原理实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
北交大微机原理实验报告
北京交通大学
微机原理与接口技术
实验报告
2014/12/21Sunday
目录
实验一交通灯控制实验2
一、实验目的2
二、实验内容2
三、程序流程图3
四、程序设计3
五、实验中遇到的问题及解决方法5
六、体会与收获6
实验二可编程定时器/计数器(8253)7
一、实验目的7
二、实验内容7
三、实验流程图8
四、程序设计8
五、实验中遇到的问题及解决方法10
六、体会与收获10
实验三PC机串行通讯实验11
一、实验目的11
二、实验内容11
三、程序流程图12
四、程序设计14
五、实验中遇到的问题及解决方法17
六、体会与收获17
实验四竞赛抢答器18
一、实验目的18
二、实验内容18
三、程序流程图19
四、程序设计19
五、实验中遇到的问题及解决方法20
六、体会与收获21
实验一交通灯控制实验
一、实验目的
掌握8255方式0的工作原理及对并口的使用。
二、实验内容
通过并行接口8255实现十字路口交通灯的模拟控制。
如图L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律亮灭。
十字路口交通灯的变化规律要求:
(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3)南北路口的红灯、东西路口的绿灯同时亮3秒左右。
(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5)转
(1)重复。
三、程序流程图
四、程序设计
DATASEGMENT
XDB?
DATAENDS
STACK1SEGMENTSTACK
DW100HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0EC0BH;写控制字
MOVAL,80H;PC0~PC7输出
OUTDX,AL
L0:
MOVDX,0EC0AH
MOVAL,24H;南北绿灯,东西红灯亮
OUTDX,AL
CALLDELAY
CALLDELAY;长延时,3s左右
CALLDELAY
CALLDELAY
CALLDELAY
CALLDELAY
CALLDELAY
MOVBL,8
MOVAL,04H
L1:
XORAL,40H;南北黄灯闪,东西红灯亮
OUTDX,AL
CALLDELAY;延时
CALLDELAY
DECBL;闪烁4次
JNZL1
CALLDELAY
MOVAL,81H;南北红灯亮,东西绿灯亮
OUTDX,AL
CALLDELAY
CALLDELAY
CALLDELAY;长延时,3s左右
CALLDELAY
CALLDELAY
CALLDELAY
CALLDELAY
MOVBL,8
MOVAL,80H
L2:
XORAL,02H;南北红灯亮,东西黄灯闪
OUTDX,AL
CALLDELAY;延时
CALLDELAY
DECBL
JNZL2;闪烁4次
CALLDELAY
MOVDL,0FFH
MOVAH,06H
INT21H
JZL0;六号功能判断若无字符输入ZF=1继续循环
MOVAH,4CH
INT21H
DELAY:
PUSHCX
PUSHDX
MOVCX,4000H
LOP1:
MOVDX,0FFFFH
LOP2:
DECDX
JNZLOP2
LOOPLOP1
POPDX
POPCX
RET
CODEENDS
ENDSTART
五、实验中遇到的问题及解决方法
1.关于片选地址的问题
由于TPC卡使用PCI总线,而PCI总线结构支持即插即用功能,每台微机分配给PCI扩展板的资源是动态浮动的,不像ISA总线是固定的。
因此分配给设备的I/O基地址、MEM基地址空间及INT中断号会因为不同的微机而变化。
所以实验时需要使用当前微机中动态分配的地址。
方法:
启动“TPC-2003A集成开发环境”软件---硬件检测---报告卡硬件资源。
结果如下图所示:
其中EC00H:
是TPC设备在微机中被动态分配的I/O基地址,相当于原固定I/O基地址0280H。
综上所述,8255动态分配地址:
控制寄存器:
0EC0BH
C口地址:
0EC0AH
2.如何实现按下键盘结束循环的功能
使用调用DOS功能子程序中的6号功能即可完成这项任务。
具体操作是:
当(DL)=0FFH时,执行键盘输入操作,在执行功能子程序时:
有键按下,ZF=0,字符的ASCII码在AL中;无键按下:
ZF=1。
因此,我们只需在程序后面加一条JZ指令即可控制循环结束。
六、体会与收获
本次实验上手较为简单,只需注意一下TPC卡动态分配端口地址和开发环境的使用即可。
虽然难度不是很大,但对于初次接触理论课中所学习的硬件接口的我们,亲自动手操作无疑让我们加深了对8255的了解,巩固了课上所学习的基础知识。
本次实验同时也巩固了第四章所学习的内容,应用并掌握了了汇编程序的的编译环境,为今后的实验打下了基础。
实验二可编程定时器/计数器(8253)
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
1.按下图虚线连接电路,将计数器0设置为工作方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0遍高电平)。
2.按下图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)。
三、实验流程图
四、程序设计
实验1
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0EC03H;计数器0,方式0
MOVAL,00010000B
OUTDX,AL
MOVDX,0EC00H
MOVAL,0EH;送初值E
OUTDX,AL
MOVCL,1
READ:
INCCL;自加1
CMPCL,0
JZSTART
MOVDX,0EC00H;读计数器0口
INAL,DX
MOVDL,AL
MOVCL,AL
CMPAL,9
JGBIG
ADDDL,30H;0到9,显示ASCII数字
MOVAH,02H
INT21H
MOVDL,0DH
INT21H
JMPJUDGE
BIG:
ADDDL,37H;大于9,显示ASCII字母
MOVAH,02H
INT21H
MOVDL,0DH;加回车符,只显示一个符号
INT21H
JMPJUDGE
JUDGE:
MOVDL,0FFH;有键按下回DOS
MOVAH,06H
INT21H
JZREAD
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验2
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0EC03H;计数器0置控制字为工作方式3
MOVAL,00110110B
OUTDX,AL
MOVDX,0EC00H
MOVAX,1000;向计数器0送初值
OUTDX,AL;先送低字节后送高字节
MOVAL,AH
OUTDX,AL
MOVDX,0EC03H;计数器1置控制字为工作方式3
MOVAL,01110110B
OUTDX,AL
MOVDX,0EC01H;向计数器1送初值
MOVAX,1000;先送低字节后送高字节
OUTDX,AL
MOVAL,AH
OUTDX,AL
NEXT:
MOVDL,0FFH;DOS6号功能调用,按任意键返回
MOVAH,06H
INT21H
MOVAH,4CH;返回系统
INT21H
CODEENDS
ENDSTART
五、实验中遇到的问题及解决方法
在屏幕上显示计数器数值时,如果直接从计数器读取此时的计数值,然后调用02H功能输出,则屏幕上显示的不是数字,而是乱码。
原因是,02H功能是在屏幕上输出DL中所存ASCII码所代表的字符,因此,在输出时,应先将DL中的数据变换为其所对应的ASCII码。
六、体会与收获
通过实验,学会8253芯片和微机接口原理和方法,掌握8253定时器/计数器的基本工作原理、工作方式和编程原理,熟悉汇编代码的编写。
实验中,连接电路,利用代码控制实验电路,深对课本理论的理解。
实验三PC机串行通讯实验
一、实验目的
1.进一步了解串行通信的基本原理
2.掌握串行接口芯片8250的基本原理和编程方法
3.熟悉PC机串行口的基本连接方法
二、实验内容
1.PC机RS-232串口自发自收
按照PC机串口自发自收的连接方法(将RS232C的DB9的电缆插头第2脚和第3脚短接)连线。
编写PC机自发自收串行通信程序,要求:
从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。
2.2台PC间RS-232串口通信
按照PC机RS-232串口直接互连的方法连接两台PC机。
编写PC机直接互连串行通信程序;要求:
由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。
当键入感叹号“!
”,结束收发过程。
由乙机键盘键入字符经串口发送给甲机,再由甲机通过串口接收字符并显示在屏幕上。
当键入感叹号“!
”时,结束收发过程。
即,全双工模式。
实验提示:
1.连接线
DB-9连接器双机近距离通信连接图
2.8250寄存器地址
PC机自带两个串口,分为COM1和COM2,地址分别在3F8-3FFH和2F8-2FFH,接口芯片选用8250。
8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(LCR)的最高位DLAB来决定。
各寄存器的地址和格式如下所示:
三、程序流程图
自发自收:
双机通信:
发送程序:
接收程序:
四、程序设计
程序1——自发自收:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,80H;初始化
MOVDX,3FBH
OUTDX,AL
MOVAX,30H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
MOVDX,3F9H
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇数校验
MOVDX,3FBH
OUTDX,AL;写入线路控制寄存器
MOVAL,0FH
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,01000000B;发送寄存器空否,不空,返回等待
JZWAIT_FOR
MOVAH,1
INT21H;读键盘
MOVDX,3F8H;发送
OUTDX,AL
JMPWAIT_FOR;返回等待
RECEIVE:
MOVDX,3F8H;读接收数据
INAL,DX
ANDAL,01111111B;保留7位数据
CMPAL,21H;是否'!
'
JNZCHAR
MOVAH,4CH;返回DOS
INT21H
CHAR:
PUSHAX
MOVDL,AL
MOVAH,02H;显示接收字符
INT21H
POPAX
JMPWAIT_FOR;返回等待
ERROR:
MOVDX,3FDH;出错则清除线路状态寄存器
INAL,DX
MOVDL,'?
';显示'?
'
MOVAH,02H
INT21H
JMPWAIT_FOR
CODEENDS
ENDSTART
程序2——双机通信:
DATASEGMENT
D1DB?
CHLDB0AH,0DH,'$';换行
DATAENDS
STACK1SEGMENTSTACK
DW100HDUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAX,DATA
MOVDS,AX
MOVDX,3FBH
MOVAL,10000000B
OUTDX,AL;置线路控制寄存器DLAB为“1”
MOVDX,3F8H
MOVAX,60H
OUTDX,AL
INCDX
MOVAL,AH
OUTDX,AL;波特率1200
MOVDX,3FBH
MOVAL,00001010B
OUTDX,AL
MOVDX,3FCH
MOVAL,00000011B
OUTDX,AL
MOVDX,3F9H
MOVAL,00000000B
OUTDX,AL
WAIT1:
MOVDX,3FDH;读线路状态寄存器
INAL,DX
TESTAL,00011110B;判断是否有错:
终止符、帧格式、奇偶、溢出
JNZERROR
TESTAL,00000001B;判断是否收到
JNZRECEIVE
TESTAL,00100000B;判断发送端是否空
JZWAIT1
MOVDL,0FFH;六号功能调用读入待发送数据
MOVAH,06H
INT21H
JZWAIT1
MOVDX,3F8H;写发送REG
OUTDX,AL
JMPWAIT1;返回WAIT1
CHAR:
PUSHAX
MOVDL,AL;显示接收
MOVAH,02H
INT21H
MOVDX,OFFSETCHL;输出字符串换行
MOVAH,09H
INT21H
POPAX
JMPWAIT1
ERROR:
MOVDX,3FDH;读线路状态寄存器
INAL,DX
MOVDL,'?
';对于错误显示'?
"
MOVAH,02H
INT21H
JMPWAIT1
RECEIVE:
MOVDX,3F8H
INAL,DX;读数据接收寄存器
CMPAL,'!
';判断是否结束
JNECHAR
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
五、实验中遇到的问题及解决方法
自发自收的实验中,发送出去的字符只有在下次发送后才能在屏幕上显示出来,使得屏幕上显示的字符出现交替排列,即对角线上的字符一致,为发送和接收到的字符。
这是因为每次程序在等待键盘输入后才能重新读取线路控制寄存器的状态,之后才能接收数据。
虽然结果不是很直观,但原理上没有错误。
双工通信实验中也出现了这个问题,即接收数据时,接收机只有在按下键盘后才能显示接收到的数据,这个问题和程序设计的逻辑有关。
但很可惜最终没有解决。
六、体会与收获
此次实验还是使我加深了对串行接口芯片8250的基本原理和编程方法的了解,另外还熟悉RS232C的DB9的电缆插头各管脚的功能。
对于第二部分的实验,老师要求改为全双工方式,即两台机器既可做接收机又可做发送机。
刚开始挺茫然后来与同学交流之后尝试就成功了。
虽然最后的结果并不完美,但在实际操作中加深对串口通信的理解才是最重要的。
实验四竞赛抢答器
一、实验目的
1、了解微机化竞赛抢答器的基本原理。
2、进一步学习使用并行接口。
二、实验内容
下图为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。
在七段数码管上将其组号(0~7)显示出来,并使喇叭响一下。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
实验提示:
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。
根据读取数据可判断其组号。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
响铃的DOS功能调用:
MOVDL,7;响铃ASCII码为07
MOVAH,2
INT21H
8255动态分配地址:
控制寄存器:
0EC0BH
A口地址:
0EC08H
C口地址:
0EC0AH
三、程序流程图
四、程序设计
DATASEGMENT
LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DATAENDS
STACK1SEGMENTSTACK
DW100HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0EC0BH
MOVAL,89H
OUTDX,AL;对8255进行初始化
L0:
MOVDX,0EC0AH
INAL,DX;读C口状态
CMPAL,0;如果为0则循环
JZL0
MOVBL,0
L1:
INCBL
SHRAL,1;将AL逻辑右移
JNCL1
DECBL
MOVAL,BL;求出组号
MOVBX,OFFSETLIST;七段显示代码表的首址送BX
ANDAX,00FFH;屏蔽AX高字节,组号
ADDBX,AX;形成显示字符的地址
MOVAL,[BX];取出字符送AL
MOVDX,0EC08H
OUTDX,AL;送到A口输出显示
MOVDL,7
MOVAH,2
INT21H;响铃功能调用
MOVAH,01H
INT21H
CMPAL,20H;当为空格时跳到CLOSE
JZCLOSE
MOVAH,4CH
INT21H
CLOSE:
MOVAL,0
MOVDX,0EC08H
OUTDX,AL
JMPL0
CODEENDS
ENDSTART
五、实验中遇到的问题及解决方法
本次实验的难点在于如何将8位开关信号转化为对应的二进制数字信号,我使用的方法是:
将8位开关信号逻辑右移,并记录右移次数,直至出现1时停止计数,则,此时的计数值即为第几位开关信号。
其次,在实验的过程中,发现实验结果很不稳定,刚开始运行正确的程序,在第二次运行时就不出现任何结果。
之后更换了实验仪器后结果又正确了。
我怀疑可能是实验箱在经过长时间工作后产生了故障,因此不能出现预期的结果。
六、体会与收获
最后一次实验总体来说较为简单,重点依然在于8255的应用,此外结合了数码管的显示原理,和一定的编程技巧;但是,本次实验并未实现综合实验的目的,个人建议应结合至少两个接口芯片来安排本次实验,从而达到充分结合理论知识的目的。
总体来说,这四个实验都对我有一定帮助作用,主要是对课本知识的系统运用,让我对所学知识有更好的理解,受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交大 微机 原理 实验 报告