微机原理报告图文Word文件下载.docx
- 文档编号:7169667
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:22
- 大小:699.43KB
微机原理报告图文Word文件下载.docx
《微机原理报告图文Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理报告图文Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。
moval,输出内容
outdx,al
movah,0bh
int21h
or
jzal,al0100
int20h
-g
运行查看结果,修改输出内容
再运行查看结果
分析
该段程序的作用
3.利用EDIT工具编写汇编写跑马灯程序程序
实现功能
B.通过输出端口控制灯的工作状态(低电平灯亮C>
EDIT文件名.asm录入程序
按Alt键打开菜单进行存盘或退出
编译文件
MASM文件名.asm
连接文件
LINK文件名.obj
运行文件或用Debug进行调试。
四,程序流程图
图表1:
实验1的程序流程图
五,源程序代码
assumecs:
code,ds:
data
datasegment
countdw0
dataends
codesegment
init:
movdx,data
movds,dx
movdx,0eee0h
movbh,0feh
begin:
inal,dx
movbl,al;
将al暂存在bl中
testal,80h;
第七位为暂停键
jzbegin
testal,40h;
第六位控制左右移动
jzrightm
leftm:
moval,bh
outdx,al
calldelay
rolal,1
movbh,al
movah,0bh;
调用0B中断,检测是否有按键,有按键则退出,否则跳至start
oral,al
movax,4c00h
rightm:
roral,1
delayproc
andbl,3fh;
用al的后面六位控制延时时间movcl,bl
xorch,ch
addcx,1;
当cl为0时,循环次数会变成0FFFFH,故需要对cx进行+1处理
s1:
movcount,cx
movcx,0ffffh
s2:
nop
loops2
movcx,count
loops1
ret
delayendp
exit:
movax,4c00h
codeends
endinit
六,实验中遇到的问题及解决方法
一,由于这时第一次做微机原理硬件实验,一开始感到比较茫然,对in和out命令的使用不大熟练,之后通过翻阅教材,查看in和out命令的使用方法,编出了程序,之后主要剩下的问题主要是调试cx的值,使得LED便于观察。
二,本实验采用低六位控制延时,低六位越大,跑灯越慢,但当低六位为0时,延时最大,违反逻辑。
解决方法:
当cx为0时,循环次数为0FFFFH,导致延时最大,将cx进行+1处理后,问题解决。
七,实验收获和体会
在这次实验中,通过实验掌握直接使用Debug的I、O命令来读写IO端口,在编程中熟悉了in和out命令的用法,并对硬件连接有了进一步的认识,对硬件知识加加深了理解,在本次实验中尝试了对于微机接口的控制。
通过控制发光二极管的亮与灭,结合相关程序的设计,我们实现了一个简单的跑马灯程序。
结合查询拨码开关的状态,能够实现点亮发光二极管的方向、模式和速度的调整。
这个跑马灯实验的程序使用的是简单的分支结构。
通过在Debug环境下的I/O命令,我们测试了外设功能,这使我们了解了地址与端口的对应情况,从而明确了跑马灯程序编写的流程和注意事项。
通过该译码电路实验,我掌握了地址译码电路的设计方法和实现原理,对硬件的I/O接
口技术有了进一步的认识。
这次实验也为以后的实验打下了基础,特别是,应先理解了译码电路的工作原理,然后才能进行编程。
实验二8255A并行接口应用
1.掌握8255A的功能及方式0、1的实现
2.熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。
3.了解七段数码管显示数字的原理。
4.掌握同时显示多位数字的技术。
在实验一的基础上学习PIO芯片(8255编程应用,熟悉平台的主要内容。
CS用Y0(EE00H
(一简要说明:
在方式0(输入/输出下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段,B口接数码管的位选(即要使哪个数码管亮,高电平选中某一位数码管点亮。
8255A中
A端口地址EE00H
B端口地址EE01H
C端口地址EE02H
控制地址EE03H八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O命令来做。
(二6位数码管静态显示在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。
提示:
该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码
之后,6个数码管都有可能显示出相同的数字。
如果要使6个数码管“同时”显示不同的数字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应段值为1,然后关闭此数码管,再选择下一位数码管进行显示;
如果在一秒钟内,每一位数码管都能显示30次以上,则人眼看到的是几位数码管同时在显示。
实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。
(三6位数码管动态显示
要求在数码管电路1-6位数码管上按图3.2所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。
三,程序流程图
程序一:
静态显示学号
程序二动态显示hello
11
四,源程序代码
显示静态学号
code,ss:
stack,ds:
mesgdb0ddh,0d9h,39h,0f1h,0f4h,21h;
要显示的学号(654321)对应的数码管控制字节
pointdwmesg
numberdb1
stacksegment
db100dup(0
stackends
movdx,stack
movss,dx
movsp,100
moval,80h
movdx,0ee03h
s:
movbx,point
movnumber,1
movcx,6
s4:
movdx,0ee01h
moval,number
movdx,0ee00h
moval,[bx]
;
point存储mesg的首地址;
number控制哪个管亮;
初始化对8255的控制端口进行初始化要显示6位数,大的循环次数为6;
端口0EE01控制那个管亮;
端口0EE00控制亮什么12;
;
outdx,alcalldelayincbx;
调用延时;
bx+1,显示下一个数字;
将number左移一位,控制下一个数码管亮rolnumber,1loops4movah,0bhint21horal,aljzsmovax,4c00hint21h;
检测键盘缓冲区,有按键则退出
pushcxmovcx,4h;
延时子程序;
保护最外层的CX
pushcx
movcx,0fffh
loops2
popcxloops1popcxret;
返回保存的CX
code
endsendinit
程序二:
动态显示HELLO
mesgdb0,0,0,0,0,0,3Dh,0dch,8ch,8ch,0edh,0
pointdwmesg;
要显示的字符;
指针point控制显示内容13
db100dup(0stackends
movdx,datamovds,dx
movdx,0ee03houtdx,al
movcx,7s2:
calldisplay
incpoint
movpoint,offsetmesg初始化
movah,0bh
jzs1
displayprocpushcx
对8255的控制端口0ee03h进行初始化;
显示完完整的hello后,重新进行检测键盘缓冲区,有按键则退出;
其功能相当于程序一,控制静态显示一行14;
movdx,0eee0h时间
inal,dx
movcl,al
movch,0
addcx,0f0hs3:
movnumber,1movcx,6
movbx,points4:
movdx,0ee01hmoval,numberoutdx,al
movdx,0ee00hmoval,[bx]
incbx
rolnumber,1loops4
popcx
loops3
displayendp
delayprocpushcx
movcx,4h
s5:
利用八个开关的状态来控制每一行停留的;
调整cx,使得数码管显示便于观察;
延时子程序15
s6:
loops6
popcxloops5popcxret
delayendpcode
ends
五,实验中遇到的问题及解决方法
一静态显示中主要是对延迟时间的控制,通过调整cx,最终获得比较满意的显示。
二动态显示中由于使用的循环嵌套比较多,要注意保存和恢复cx,本实验采用堆栈的方法,很好得保存和恢复了cx,并借鉴实验一,利用八个开关的状态来控制每一行停留的时间,使得显示更可控。
六,实验心得与体会
这次实验中,我们使用8255A并行接口芯片和数码管实现了一个数码管的静态和动态显示字符的程序。
在实验过程中我遇到了很多困难,现在想来也许是4个微机接口原理硬件按实验中最难的一个。
这也许是由于课本的教学进度滞后于实验进度,我们不太清楚8255A的工作原理和编程要点。
首先,我们对于数码管的8段LED灯对应的端口地址并不清楚,所以要在Debug环境下使用I/O指令对其进行测试,确定下来这8段LED灯的地址,之后才可以根据所要输出的字符给出正确的编码。
第二个比较重要,而且也比较困扰我的问题是延时和数码管选通控制。
由于数码管是共阴极/共阳极的,如果不对选通信号进行控制,则它们在同一时间只能显示同一字符。
为了实现同时显示不同字符,就要通过扫描(依次点亮数码管)的方式来实现,这就要给CAT信号依次赋值,并且在扫描的过程中要用到延时。
动态显示的程序设计思想与静态时的大体相同,只是对动态的每一种状态进行一段时间的静态显示然后换状态而已,所以通过一个二层循环就能很好地解决这个问题。
通过这次实验,我在编程过程中学到了很多东西,不但巩固了书本的知识,而且体会到了编程的过程中思维必须很缜密,否则写出来的程序常会导致无法运行甚至死机。
实验三8253计数器/定时器的应用
一,实验目的
学习掌握8253用作定时器的编程原理
1.完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。
三,电路测试与连接
测试:
在Debug状态下,用“O”命令测试8353的发生功能,3组通道工作是否正常。
电路连接:
8253的CS接译码器输出Y1其地址为EE20-EE27H8253的OUT接蜂鸣器的BELL端8253的门控信号GATE接+5V8253的CLK端接Q7(32KHz
清零复位电路中的T/C端接地(或接RESET端)
注意:
由于8253计数速率应小于2MHz,CLK0的输入信号必须由8MHz经393分频到小于2MHz后使用。
393分频之后,Q0输出为4MHz,Q1输出为2MHz„„Q7输出32KHz。
编程提示:
1.8253控制端口地址为EE23H定时器0地址为EE20H定时器1地址为EE21H定时器2地址为EE22H2.定时器可工作在方式3下。
图表2:
音乐发声器程序流程图
首先附上两只老鼠的简谱:
datasegmentfreqdb
125,111,100,125,125,111,100,125,100,94,83,100,94,83,83,75,83,94,100,125,83,75,83,94,100,125,111,83,125,111,83,125countequ$-freqshowdb
21h,0f4h,0f1h,21h,21h,0f4h,0f1h,21h,0f1h,39h,0d9h,0f1h,39h,0d9h,0d9h,0ddh,0d9h,39h,0f1h,21h,0d9h,0ddh,0d9h,39h,0f1h,21h,0f4h,0d9h,21h,0f4h,0d9h,21h;
在数码管上显示对应的音符timedb
2,2,2,2,2,2,2,2,2,2,4,2,2,4,1,1,1,1,2,2,1,1,1,1,2,2,2,2,4,2,2,4;
每一个音符持续的时间dataendsstacksegment
db100dup(?
freq数据段中存放两只老虎的简谱
stackendscodesegment
data,ss:
stack
start:
movdx,data
movds,dxmoval,00010110bmovdx,0ee23h
对8253进行初始化,是计数器0工作
在方式3下
outdx,almoval,10000000bmovdx,0ee03houtdx,almoval,01hmovdx,0ee01houtdx,almovsi,0movch,0
movcl,count
端口0ee00控制显示对应的音符
端口0ee01控制那个管亮
对8255A进行初始化
cycle:
movdx,0ee00h
moval,show[si]outdx,almoval,freq[si]movdx,0ee20h
不同频率,对应不同初值
通过对端口0ee20福初值,产生对应频
率的方波
outdx,almovint
ah,0bh21h
oral,aljnzexitcalldelayincsiloop
cycle
调用延时子程序
movsi,0movch,0movcl,countjmpcycle
退出之前,再次初始化,否则程序exit:
moval,00010110b
退出后,bell将一直持续下去
movdx,0ee23h
movax,4c00h
delayprocnear
pushcx
movch,0
movcl,time[si]
loop1:
movdx,0eee0h
inal,dx
movch,al
movcl,0ffh
loop2:
movcx,0ffffh
loop3:
looploop3
looploop2
looploop1
延时子程序通过八个开关状态来控制整体音乐的快慢;
endstart
六,思考题
写出8253计数初值、输入频率和输出频率的关系。
答:
输出频率=输入频率/8253计数初值
最后计算得:
七,实验中遇到的问题及解决方法
由于对8253计数器的使用不熟悉,在初始化的时候遇到了一些问题,主要是对计数初值的输入方式,计数初值的格式,基础器工作方式等等一些内容的设置,解决之后后面的编程比较容易。
八,实验心得与体会
通过这次实验,我们学习了8253计数器的使用方法。
我们最先了解到的是8253的初始化,包括对于计数器的选择,计数初值的输入方式,计数初值的格式,基础器工作方式等等一些内容的设置。
之后通过加深对各种工作方式的理解,确定下来可以使用方式2或方式3来进行计数器的输出。
因为在这两个方式下8253可以充当分频器。
而在本实验中我选用了方式3,原因是方式2并非输出方波波形。
根据讲义上给出的各个音符的频率,以及8253计数器的输入频率,并通过公式:
(输出频率=输入频率/8253计数初值),我计算得到各个音阶对应的计数初值。
有了以上的准备,就可以进行实际的编程了。
对于乐曲的播放,选用的是逐个发出相应乐音并显示相应乐符的方法。
总体来说,本实验的程序比较简单,只要按要求写入几个计数器的控制字和初值即可,只是在写入的时候要注意控制字写入同一个端口(其实8253内部会加以区分并存入不同的寄存器),但各个计数器有自己的端口,在写入计数初值时不要写错端口。
而8253的时钟信号是由500KHZ信号由8MHZ时钟经74LS393分频获得。
通过本实验,我了解了8253的各种工作方式的特点,由8253的编程可以延伸出很多应用(函数发生器,计数器等等)。
实验四串行8215A实验
1.了解串行通信的一般原理和8251A的工作原理
2.初步了解RS232串行口标准及与TTL电路的连接方法;
3.学会扩充8251A的方法,并设计实现用8251A进行数据传输;
4.掌握8251A的编程方法。
(一自收自发:
采用查询方式:
将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。
1.连接线路,即:
1.8MHz信号接分频器74LS393的CLK端(已接好,从74LS393的Q4(250kHz接8253的CLK;
T/C接地或接RESET
2.GATE接+5V;
3.8253的OUT和8251A的TXC、RXC相连,作为发送时钟和接收时钟;
4.8251A的CS和Y2相连,Y2地址为EE40-EE47H;
5.8253的CS和Y1相连,Y1地址为EE20-EE27H;
6.用导线将TXD和RXD相接,成为自发自收方式;
7.CTS端必须为低电平(实验台中已接为低电平,8251A才可想外发送信号,RTS、DTR、DSR可不用。
(但实验台中RTS、DTR、DSR均已接地
1.按原理图连接所需连线;
2.在检测连线无误的情况下,方可开启电源。
3.运行调试程序,发送数据被接收后应正确无误地显示出来。
提示:
8251A数据口地址EE40H,控制口地址EE41H
8253控制口地址EE23H
8253通道0地址EE20H
8253通道1地址EE21H
8253通道2地址EE22H
图表3:
8251应用程序流程图
五,源程序代码assumecs:
datadatasegmentbufferdb'
Receivesuccessfully!
'
$-buffer;
发送的数据countequdataendscodesegmentstart:
movmovax,ds,dataaxmovmovoutdx,al,dx,0ee23h00010110bal;
对0ee23h进行初始化movmovdx,al,0ee20h7;
采用2400b/s的波特率,16的波特因子,则发送,接收频率为2400*16=38400hzoutdx,almovmovoutdx,al,dx,0ee41h40hal;
对8251复位26
calldelaymovoutal,dx,01001110bal;
方式控制字calldelaymovoutal,dx,37hal;
命令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 报告 图文