微机原理报告图文.docx

上传人:b****7 文档编号:11146798 上传时间:2023-02-25 格式:DOCX 页数:22 大小:699.43KB
下载 相关 举报
微机原理报告图文.docx_第1页
第1页 / 共22页
微机原理报告图文.docx_第2页
第2页 / 共22页
微机原理报告图文.docx_第3页
第3页 / 共22页
微机原理报告图文.docx_第4页
第4页 / 共22页
微机原理报告图文.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理报告图文.docx

《微机原理报告图文.docx》由会员分享,可在线阅读,更多相关《微机原理报告图文.docx(22页珍藏版)》请在冰豆网上搜索。

微机原理报告图文.docx

微机原理报告图文

微原硬件实验报告

班级:

08211108班

学号:

08210234

班内序号:

19

姓名:

王绪东

实验一熟悉实验环境及IO的使用

一,实验目的

1.通过实验了解和熟悉实验台的结构,功能及使用方法。

2.通过实验掌握直接使用Debug的I、O命令来读写IO端口。

3.学会Debug的使用及编写汇编程序

二,实验内容

1.学习使用Debug命令,并用I、O命令直接对端口进行读写操作,

2.用汇编语言编写跑马灯程序。

(使用EDIT编辑工具实现功能

A.通过读入端口状态(ON为低电平,选择工作模式(灯的闪烁方式、速度等。

B.通过输出端口控制灯的工作状态(低电平灯亮

三,实验步骤

1.实验板的IO端口地址为EEE0H

在Debug下,

I是读命令。

(即读输入端口的状态---拨码开关的状态

O是写命令。

(即向端口输出数据---通过发光管来查看

进入Debug后,

读端口拨动实验台上八位拨码开关

输入I端口地址回车

屏幕显示xx表示从端口读出的内容,即八位开关的状态ON是0,OFF是1写端口

输入O端口地址xx(xx表示要向端口输出的内容回车

查看实验台上的发光二极管状态,0是灯亮,1是灯灭。

2.在Debug环境下,用a命令录入程序,用g命令运行

C>Debug-a

movdx,端口地址

moval,输出内容

outdx,al

movah,0bh

int21h

or

jzal,al0100

int20h

-g

运行查看结果,修改输出内容

再运行查看结果

分析

movah,0bh

int21h

or

jzal,al0100

int20h

该段程序的作用

3.利用EDIT工具编写汇编写跑马灯程序程序

实现功能

A.通过读入端口状态(ON为低电平,选择工作模式(灯的闪烁方式、速度等。

B.通过输出端口控制灯的工作状态(低电平灯亮C>EDIT文件名.asm录入程序

按Alt键打开菜单进行存盘或退出

编译文件

C>MASM文件名.asm

连接文件

C>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

int21h

oral,al

jzbegin

movax,4c00h

int21h

rightm:

moval,bh

outdx,al

calldelay

roral,1

movbh,al

movah,0bh;调用0B中断,检测是否有按键,有按键则退出,否则跳至start

int21h

oral,al

jzbegin

movax,4c00h

int21h

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

int21h

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

四,源程序代码

程序一:

显示静态学号

assumecs:

code,ss:

stack,ds:

data

datasegment

mesgdb0ddh,0d9h,39h,0f1h,0f4h,21h;要显示的学号(654321)对应的数码管控制字节

pointdwmesg

numberdb1

dataends

stacksegment

db100dup(0

stackends

codesegment

init:

movdx,data

movds,dx

movdx,stack

movss,dx

movsp,100

moval,80h

movdx,0ee03h

outdx,al

s:

movbx,point

movnumber,1

movcx,6

s4:

movdx,0ee01h

moval,number

outdx,al

movdx,0ee00h

moval,[bx]

;point存储mesg的首地址;number控制哪个管亮;初始化对8255的控制端口进行初始化要显示6位数,大的循环次数为6;端口0EE01控制那个管亮;端口0EE00控制亮什么12;;

outdx,alcalldelayincbx;调用延时;bx+1,显示下一个数字;将number左移一位,控制下一个数码管亮rolnumber,1loops4movah,0bhint21horal,aljzsmovax,4c00hint21h;检测键盘缓冲区,有按键则退出

delayproc

pushcxmovcx,4h;延时子程序;保护最外层的CX

s1:

pushcx

movcx,0fffh

s2:

loops2

popcxloops1popcxret;返回保存的CX

delayendp

code

endsendinit

程序二:

动态显示HELLO

assumecs:

code,ss:

stack,ds:

data

datasegment

mesgdb0,0,0,0,0,0,3Dh,0dch,8ch,8ch,0edh,0

pointdwmesg;要显示的字符;指针point控制显示内容13

numberdb1

dataends

stacksegment

db100dup(0stackends

codesegment

init:

movdx,datamovds,dx

movdx,stack

movss,dx

movsp,100

moval,80h

movdx,0ee03houtdx,al

s1:

movcx,7s2:

movbx,point

calldisplay

incpoint

loops2

movpoint,offsetmesg初始化

movah,0bh

int21h

oral,al

jzs1

movax,4c00h

int21h

displayprocpushcx

;对8255的控制端口0ee03h进行初始化;显示完完整的hello后,重新进行检测键盘缓冲区,有按键则退出;其功能相当于程序一,控制静态显示一行14;

movdx,0eee0h时间

inal,dx

movcl,al

movch,0

addcx,0f0hs3:

pushcx

movnumber,1movcx,6

movbx,points4:

movdx,0ee01hmoval,numberoutdx,al

movdx,0ee00hmoval,[bx]

outdx,al

calldelay

incbx

rolnumber,1loops4

popcx

loops3

popcx

ret

displayendp

delayprocpushcx

movcx,4h

s5:

pushcx

movcx,0fffh

;利用八个开关的状态来控制每一行停留的;调整cx,使得数码管显示便于观察;延时子程序15

s6:

loops6

popcxloops5popcxret

delayendpcode

ends

endinit

五,实验中遇到的问题及解决方法

一静态显示中主要是对延迟时间的控制,通过调整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

assumecs:

code,ds:

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

outdx,al

movax,4c00h

int21h

delayprocnear

pushcx

movch,0

movcl,time[si]

loop1:

pushcx

movdx,0eee0h

inal,dx

movch,al

movcl,0ffh

loop2:

pushcx

movcx,0ffffh

loop3:

looploop3

popcx

looploop2

popcx

looploop1

popcx

ret

delayendp

codeends

延时子程序通过八个开关状态来控制整体音乐的快慢;;

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:

code,ds:

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;命令

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1