北京邮电大学微机原理硬件实验报告.docx

上传人:b****5 文档编号:14272252 上传时间:2023-06-22 格式:DOCX 页数:23 大小:260.08KB
下载 相关 举报
北京邮电大学微机原理硬件实验报告.docx_第1页
第1页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第2页
第2页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第3页
第3页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第4页
第4页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第5页
第5页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第6页
第6页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第7页
第7页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第8页
第8页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第9页
第9页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第10页
第10页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第11页
第11页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第12页
第12页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第13页
第13页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第14页
第14页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第15页
第15页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第16页
第16页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第17页
第17页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第18页
第18页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第19页
第19页 / 共23页
北京邮电大学微机原理硬件实验报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北京邮电大学微机原理硬件实验报告.docx

《北京邮电大学微机原理硬件实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学微机原理硬件实验报告.docx(23页珍藏版)》请在冰点文库上搜索。

北京邮电大学微机原理硬件实验报告.docx

北京邮电大学微机原理硬件实验报告

北京邮电大学

微机原理硬件实验报告

实验一 基础的I/O实验

一、实验目的

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

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

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

二、实验要求

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

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

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

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

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

三、实验原理

1、I/O端口的读写

I是读命令(即读输入端口的状态;-拨码开关的状态),O是写命令(即向端口输出数据;-通过发光管来查看)。

对于读端口来说,输入I端口地址回车,屏幕显示xx表示从端口读出的内容,即八位开关的状态ON是0,OFF是1。

对于写端口来说,输入O端口地址xx(xx表示要向端口输出的内容)回车,查看实验台上的发光二极管状态,0是灯亮,1是灯灭。

2、延时的实现

由于系统的时钟频率很高,如果直接使用这个时钟控制走马灯的话,将会造成灯闪烁过快,无法看到走马灯的形式。

所以,必须在程序中加入软件延时。

软件延时实现的方法有很多,基本的软件延时通常是由循环体来实现。

3、本次实验平台示意图

我们使用DOS主机控制这款PCI实验平台,读I/O即为读左下角8个开关的状态,写I/O即为写左下角八个LED的电平,控制其亮灭。

四、软件程序流程图

五、源程序

 

datasegment

timesdw0fffh ;控制延时的内存变量

dataends

stacksegment

db100dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

begin:

 movax,data

movds,ax

movbl,0feh  ;控制亮一个灯

abc:

  movdx,0eee0h ;I/O地址

pushax

moval,bl

outdx,al  ;将BL输出到I/O

calldelay  ;延时

popax

lok:

  pushax

inal,dx

movch,al ;如果暂停键被按下

andch,04h

cmpch,04h

popax

jzlok   ;暂停

pushax

inal,dx

movbh,al ;比较反向键

andbh,01h

cmpbh,01h

popax

jzleft  ;向左移动

jmpright ;向右移动

left:

 pushax

inal,dx  ;比较灯型键

andal,08h

cmpal,08h

jzleft1  

rolbl,1  ;移动一格

left1:

 rolbl,1   ;若灯型有效

popax  ;再移动一格

jmpspeed

right:

 pushax

inal,dx

andal,08h ;比较灯型键

cmpal,08h

jzright1 ;右移一格

rorbl,1

right1:

rorbl,1 ;灯型有效再右移一格

popax

jmpspeed

speed:

 pushax

inal,dx

movbh,al

popax   ;比较加速键

andbh,02h

cmpbh,02h

jzspeed1  ;高速模式

jmpspeed2 ;低速模式

speed1:

  pushax

movax,06ffh

movtimes,ax ;延时变量修改

popax    ;延时变短

jmpjian

speed2:

  pushax

movax,0fffh

movtimes,ax ;延时变量修改

popax     ;延时变长

jmpjian

jian:

 movah,0bh  ;判断键盘

int21h

oral,al

jzabc  ;无按键按下,循环

movax,4c00h–按键按下,停止

int21h

delayproc   ;延时子函数

pushcx

movcx,times ;延时时长由

dl1:

  pushax     ;times确定

popax

pushcx

dl2:

  pushax

popax

loopdl2

popcx

loopdl1

popcx

ret

delayendp

codeends

endbegin

 

六、实验结果

经过测试,我们的实验板可以完成如下功能:

1、跑马灯具备两档速度控制

2、跑马灯可以切换方向(左右)

3、当按下暂停按键时,跑马灯暂停,拨起后继续工作

4、灯型按钮可以实现一格移位与两格移位的切换

5、程序运行中,按下键盘任意按键可以退出程序

七、实验中遇到的问题

1、软件延时的设计

由于主板主频为1.7GHZ,所以必须实现软件延时,才可以保证灯的点亮时间。

经过设计与计算,我们使用循环的总线操作来做这个软件延时。

具体是使用循环的PUSH和POP操作来占用总线时间。

2、实验操作问题

我们一到机房,就想当然的先把电脑打开。

但是电脑打开的过程中出现了问题。

我们询问老师后才得知,必须先给实验板上电,再打开电脑才可以。

否则电脑的配置将会出现错误。

八、思考题

1、在debug的a命令中,有些语句可以不写h字符的原因

在debug的a命令中,所有的输入数据都默认为16进制,这与在edit中编写asm文件是不一样的。

由于默认是16进制数字,所以省略掉h完全可以的。

九、实验感想

这是微原硬件实验的第一次实验,我通过这个小实验熟悉了我所使用的DOS系统和硬件环境,基本掌握了硬件测试方法,对接口地址和LED灯有了基本了解,为后续实验打下了基础。

实验三 8253计数器/定时器的应用

一、实验目的

1、学习掌握8253用作定时器的编程原理。

二、实验要求

完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。

音符频率对照表

音符

1(do)

2(re)

3(mi)

4(fa)

5(so)

6(la)

7(si)

i(do)

频率(Hz)

256

288

320

341

384

426.6

480

512

 

 

 

 

 

 

 

 

 

扩展功能:

利用小键盘实现弹琴功能,并显示弹奏的乐谱。

三、实验原理

1、定时器/计数器简介

I8253和I8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。

I8254是I8253的改进型。

微机系统使用的8254,其3个通道均有固定的用途:

0号计数器为系统时钟源,每隔55ms向系统主8259IR0提一次中断请求;1号计数器用于动态存储器的定时刷新控制;2号计数器为系统的发声源。

用户在使用微机系统的时候,可以使用0号和2号计数器,但不能改变对1号计数器的初始化。

2、初始化

使用8253前,要进行初始化编程。

初始化编程的步骤是:

1向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

2向使用的计数器端口写入计数初值

3、控制字

D7D6=00:

使用0号计数器,D7D6=01:

使用1号计数器

D7D6=10:

使用2号计数器,D7D6=11:

无效

D5D4=00:

锁存当前计数值

D5D4=01:

只写低8位(高8位为0),读出时只读低8位

D5D4=10:

只写高8位(低8位为0),读出时只读高8位

D5D4=11:

先读/写低8位,后读/写高8位计数值

D3D2D1=000:

选择方式0,D3D2D1=001:

选择方式1

D3D2D1=X10:

选择方式2,D3D2D1=X11:

选择方式3

D3D2D1=100:

选择方式4,D3D2D1=101:

选择方式5

D0=0:

计数初值为二进制,D0=1:

计数初值为BCD码数

四、软件程序流程图

1、程序框图

这次实验中,我们用到的程序模块较复杂,所以先拿程序框图来说明各个子程序之间的关系,这样更加一目了然。

主程序中有两个主要的模块,一个是工作方式的选择模块,用来确定当前程序运行在什么状态(播放音乐或者弹琴),另一个模块是显示模块,用来在数码管显示当前播放器所播放的是哪一个音。

工作模块选择模块下有两个个子模块,分别是播放音乐模块和电子琴模块。

播放音乐模块是用来播放音乐,它在适当的时候从内存中取预置的音乐的一个音,把这个音有关的信息放到内存中特定的位置,并设定这个音的持续时间。

电子琴模块用来检测是否有键盘输入,一旦检测到有键盘输入,则把对应的音的有有关信息放到内存中特定的位置。

流程是先扫描键盘,把对应于八个音的八个键的工作状态读入PC中;再对检测输入模块读入的信息进行响应,通过这些信息判断哪些键被按下,把音符存入内存特定位置。

蜂鸣器播音模块从内存中特定位置中取出要播放的音的有关信息,并通过设置8253达到播放不同频率的音的效果。

三个模块彼此独立又彼此相联系,从而使得程序工作有条不紊。

2、程序流程图

本次实验的程序流程图如上图所示,在初始化完成后,我们先驱动数码管显示当前内存中即将播放的音符,再判断工作模式。

如果是电子琴模式,就扫描键盘,由键盘控制播放的音符。

如果是自动音乐模式,就从内存中读出乐谱开始播放。

最后判断乐曲有无播放完毕,播放完毕则重新开始。

接收到键盘的输入后,退出程序。

五、源程序

 

delaymacro;定义一个用于延时的宏

locallp1,lp2

pushcx

movcx,time

lp1:

  pushcx

movcx,time

lp2:

  looplp2

popcx 

looplp1

popcx

over    ;调用结束程序的宏

endm

;------------------------------

over  macro;用于判断是否结束程序的宏

localll

pushax

movah,0bh

int21h

oral,al

jzll

jmpexit

ll:

  popax

endm

;------------------------------

dis  macro  ;让数码管显示的宏 

pushax

pushdx

movdx,pa

leadi,num0

moval,show

movah,0

adddi,ax

moval,[di]

outdx,al

popdx

popax

endm

;------------------------------------

data  segment

time  dw100h ;数码管延时

time2 dw500h ;播音延时计数

time3 dw20h  ;空音延时计数

count dw0;用来计算播放到哪一个音

;------------------------------------

pa   dw0ee00h  ;8255的四个端口

pb   dw0ee01h

pc   dw0ee02h

ctrl  dw0ee03h

;-----------------------------------

c0   dw0ee20h ;计数器的四个端口

c1   dw0ee21h

c2   dw0ee22h

ctrlc dw0ee23h

cnum  db00110110b;播音时的控制字

cnum0 db00110010b;播空(不出声)时的控制字

;--------------------------------------

num0  db 00000000b;空音对应的显示

num1  db 00100001b;以下是8个音对应

num2  db 11110100b;的数码管显示

num3  db 11110001b

num4  db 00111001b

num5  db 11011001b

num6  db 11011101b

num7  db 01100001b

num8  db 11111101b

;----------------------------------------

sou  dw10d ;空音的分频比

sou1  dw125d ;8个音的分频比

sou2  dw111d

sou3  dw100d

sou4  dw94d

sou5  dw83d

sou6  dw75d

sou7  dw67d

sou8  dw63d

play_ dw0;存放正要播放的音的分频比

play  db0;正在播放的音

show  db0;正在显示的音

pplay db0;前一个播放的间

pfun  db0;前一次所使用的功能

gate  db0;

;-----------------------------------------

;乐谱《菊花台》

music db3h,3h,0h,3h,2h,3h,3h,0h

db3h,5h,3h,2h,3h,3h,3h,0h

db1h,1h,1h,2h,3h,5h,3h,0h

db2h,2h,2h,1h,2h,2h,2h,0h

db3h,3h,5h,3h,6h,5h,5h,0h

db6h,5h,5h,3h,5h,5h,0h,5h

db3h,3h,2h,3h,5h,3h,2h,0h

db2h,2h,2h,1h,2h,2h,2h,0h

number dw$-music

;---------------------------------------

data  ends

;--------------------------------------

sta  segmentstack'stack'

db100dup(?

sta  ends

;--------------------------------------

code  segment

assumess:

sta,ds:

data,cs:

code

start:

 movax,data

movds,ax

moves,ax

;----------------------------------------

;初始化8255芯片

mov al, 10000001b   ;

mov dx,ctrl

out  dx,al

;固定使用一个数码管

movdx,pb

moval,01h

outdx,al

;开始时显示为空

mov  show, 0

;下面是主程序

lp:

  dis

delay

call  mode

jmp  lp

;----------程序结束--------------------

exit:

 movax,4c00h

int  21h

;---------------------------------------

mode  procnear;模式选择函数

mov dx,0eee0h;读入端口,确定工作状态

inal,dx

testal,01h

jzmus

;---------------------------------------

movpfun,1h;1指的是是弹琴状态

callinput

movbl,gate

cmpbl,0

jznosou    ;GATE为零是,表示没有按键输入

movbh,cnum;预定控制字

jmpsetc;

nosou:

 movax,0

movplay,al;设定下一个播放的音

movshow,al;设置数码管的显示

movax,10d

movplay_,ax;设定下一整体上播放的音的分频比

movbh,cnum0 ;设定控制字  

;--------------下面是播放的有关代码-----

setc:

movah,pplay;如所播放的音和前一个

moval,play

;一样,则跳过设置8253的代码

cmpah,al

jznoset

callcset

noset:

 jmpmodex

;-------------------------------------

Mus:

  moval,pfun

cmpal,0

jzjump

;检查上次所使用的功能,如果不同则重新调制

movpfun,0

movcount,0h

movcx,0

;CX为延时计数器

jump:

 cmpcx,0

jnzcon;延时示结果,跳过根据count的户数,确定下一个播放的音

leasi,music

movbx,count 

moval,[si+bx]

cmpal,0

jzstop

;根据播放的是不是空音,设置不同的延时

movcx,time2

movbh,cnum

jmpnext4   

stop:

 movcx,time3

movbh,cnum0

next4:

 movshow,al;设置数码管

movplay,al

leasi,sou

movah,0

addsi,ax

addsi,ax

movdx,[si];取出对应音的分频比

movplay_,dx ;设置分频比

callcset

;COUNT计数自增

movbx,count

incbx

cmpbx,number

jzback

movcount,bx

jmpcon

back:

 movcount,   0h

con:

  deccx;延时计数减1

modex:

 ret

mode  endp

;----------------------------------------

cset  procnear

movdx,ctrlc

moval,bh;使用之前设置好的控制字

outdx,al

movdx,c0;设置分频比

movax,play_

outdx,al;

moval,ah

outdx,al

moval,play;

movpplay,al 

ret

cset  endp

;----------------------------------------

input     proc  near

push  cx

;----------------------------------------

movdx,pc

moval,0efh;扫描第一行

out dx,al

in al,dx

notal

andal,  0fh

movbl,  al

movcl,  4h ;移至高4位

sal bl,cl   

mov al,0dfh ;扫描第二行

outdx,al

in al,dx

notal

andal, 0fh

or bl, al;8个键的状态放在BL里   

call chg

;------------------------------------------

next1:

     pop cx

ret

input     endp

;----------------------------------------

chg      proc  near

movcx,8h   ;从BL最低位检测起

movbh,1h

lpchg:

     test bh, bl

jznext2  ;若无则检测下一位

movplay,cl  ;设置释放

movshow,cl  ;设置数码管显示

leasi,sou

addsi,cx

addsi,cx

movax,[si]

movplay_,ax ;设置分频比

movgate,1  

jmpchgex ;检测到一个按下则结束

next2:

 salbh,1

looplpchg

movgate,0  ;没有按键输入

chgex:

 ret

chg  endp

;---------------------------------------

code  ends

end  start

 

六、电路连接图

实验中的电路图的连线方法为:

8253的CS接译码器输出Y1;8253的OUT端接蜂鸣器的BELL端;8253的门控信号GATE接+5V;8253的CLK端接Q7,清零复位电路的T/C端接地。

具体的电路图如下所示:

七、实验结果

经过测试,我们的实验板可以完成如下功能:

1、在DOS运行程序后,可以自动播放《菊花台》歌曲,播放完后自动从头再次播放。

在播放的同时,数码管的最低位显示当前正在播放的音符。

2、将最低位拨码开关推上去,进入电子琴模式。

在电子琴模式下,按下小键盘的八个按键,可以弹奏对应的音符。

数码管的最低位显示当前正在播放的音符。

3、程序运行中,按下键盘任意按键可以退出程序

八、实验中遇到的问题

1、多个程序同时进行的问题

在实验中,由于数码管显示、按键检测,蜂鸣器播放是同时进行的,所以在三个子程序的连接方面比较麻烦。

汇编语言是一个顺序执行的语言,这种并行的思想让我们很是头疼。

最后,我们在参考了一些代码实例后,灵活的使用内存保存阶段性数据,实现的三个功能程序的紧密相连。

2、键盘防抖问题

虽然上一个实验中,我们已经做过了按键防抖,但是在这个实验中,我们在设计防抖功能时还是遇到了一些问题。

由于这个按键的防抖不仅要检测上升沿,当输出为高电平时,需要持续输出同一个音符,这对于我们也是一个挑战。

最后,我们上网学习了类似的代码,很好的解决了这个问题。

九、思考题

写出计数初值、输入频率和输出频率的关系。

设计数初值为

,输入频率和

,输出频率为

,则有以下关系

则音符频率对照如下:

音符

1(do)

2(re)

3(mi)

4(fa)

5(so)

6(la)

7(si)

i(

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2