微原硬件实验三8253计数器定时器的实际应用.docx

上传人:b****8 文档编号:11504402 上传时间:2023-03-02 格式:DOCX 页数:14 大小:325.70KB
下载 相关 举报
微原硬件实验三8253计数器定时器的实际应用.docx_第1页
第1页 / 共14页
微原硬件实验三8253计数器定时器的实际应用.docx_第2页
第2页 / 共14页
微原硬件实验三8253计数器定时器的实际应用.docx_第3页
第3页 / 共14页
微原硬件实验三8253计数器定时器的实际应用.docx_第4页
第4页 / 共14页
微原硬件实验三8253计数器定时器的实际应用.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

微原硬件实验三8253计数器定时器的实际应用.docx

《微原硬件实验三8253计数器定时器的实际应用.docx》由会员分享,可在线阅读,更多相关《微原硬件实验三8253计数器定时器的实际应用.docx(14页珍藏版)》请在冰豆网上搜索。

微原硬件实验三8253计数器定时器的实际应用.docx

微原硬件实验三8253计数器定时器的实际应用

专业:

信息工程

学生姓名:

×××

学号:

×××

指导教师:

××

完成时间:

2013年11月29日

实验三:

8253计数器/定时器的应用

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

 

一、实验目的3矚慫润厲钐瘗睞枥庑赖。

二、实验原理及内容3聞創沟燴鐺險爱氇谴净。

1、实验原理3残骛楼諍锩瀨濟溆塹籟。

①8253定时器介绍3酽锕极額閉镇桧猪訣锥。

②8253初始化3彈贸摄尔霁毙攬砖卤庑。

③8253控制字3謀荞抟箧飆鐸怼类蒋薔。

④注意事项4厦礴恳蹒骈時盡继價骚。

2、实验内容4茕桢广鳓鯡选块网羈泪。

①基本功能4鹅娅尽損鹌惨歷茏鴛賴。

②拓展功能5籟丛妈羥为贍偾蛏练淨。

三、硬件连接图及程序流程图5預頌圣鉉儐歲龈讶骅籴。

1、硬件连接图5渗釤呛俨匀谔鱉调硯錦。

①8253定时器5铙誅卧泻噦圣骋贶頂廡。

②数码管6擁締凤袜备訊顎轮烂蔷。

③译码器7贓熱俣阃歲匱阊邺镓騷。

④扬声器7坛摶乡囂忏蒌鍥铃氈淚。

⑤分频器8蜡變黲癟報伥铉锚鈰赘。

2、程序流程图9買鲷鴯譖昙膚遙闫撷凄。

四、源程序10綾镝鯛駕櫬鹕踪韦辚糴。

五、实验结果12驅踬髏彦浃绥譎饴憂锦。

六、实验总结13猫虿驢绘燈鮒诛髅貺庑。

1、都是不认真听课惹的祸13锹籁饗迳琐筆襖鸥娅薔。

2、难听的曲子13構氽頑黉碩饨荠龈话骛。

七、实验收获与心得体会13輒峄陽檉簖疖網儂號泶。

八、思考题13尧侧閆繭絳闕绚勵蜆贅。

1、实验目的

1、进一步熟悉汇编语言;

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

2、实验原理及内容

1、实验原理

①8253定时器介绍

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

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

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

识饒鎂錕缢灩筧嚌俨淒。

Ⅱ、实验箱上的8253,其数据线D7—D0,地址线A1、A0和控制线RD、WR通过总线驱动卡和微机系统的三总线相连。

除此之外,三个计数器的引出段和片选端都是悬空的,这意味着实验箱上的8253的三个计数器都归用户使用,你可以单独使用其中的一个计数器,也可以串联使用其中的2个或3个计数器。

凍鈹鋨劳臘锴痫婦胫籴。

Ⅲ、8253计数器的输入信号,其频率不能超过2MHz,否则长时间使用,芯片过热,容易烧毁

②8253初始化

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

初始化编程的步骤是:

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

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

③8253控制字

图一:

8253控制字

说明:

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码数

④注意事项

测试:

在Debug状态下,用“O”命令测试8353的发生功能,3组通道工作是否正常。

电路连接:

8253的CS接译码器输出Y1其地址为EE20-EE27H

8253的OUT接蜂鸣器的BELL端

8253的门控信号GATE接+5V

8253的CLK端接Q7(32KHz)清零复位电路中的T/C端接地(或接RESET端)

注意:

由于8253计数速率应小于2MHz,CLK0的输入信号必须由8MHz经393分频到小于2MHz后使用。

393分频之后,Q0输出为4MHz,Q1输出为2MHz……Q7输出32KHz。

恥諤銪灭萦欢煬鞏鹜錦。

编程提示:

8253控制端口地址为E823H

定时器0地址为E820H

定时器1地址为E821H

定时器2地址为E822H

定时器可工作在方式3下

2、实验内容

①基本功能

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

图二:

音符频率对照表

②拓展功能

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

3、硬件连接图及程序流程图

1、硬件连接图

①8253定时器

图三:

8253定时器

②数码管

图四:

数码管

③译码器

图五:

译码器

④扬声器

图六:

扬声器

⑤分频器

图七:

分频器

2、程序流程图

图八:

程序流程图

4、源程序

;doremifasolasido

;7d6f645e534b433e

datasegment;数据段

songdb7dh,7dh,6fh,7dh,5eh,64h

db7dh,7dh,6fh,7dh,53h,5eh

db7dh,7dh,3eh,4bh,5eh,64h,6fh

db43h,43h,4bh,5eh,53h,5eh;音乐音符

countequ$-song

numdb21h,21h,0f4h,21h,39h,0f1h

db21h,21h,0f4h,21h,0d9h,39h

db21h,21h,0fdh,0ddh,39h,0f1h,0f4h

db61h,61h,0ddh,39h,0d9h,39h;数码管字符

aequ0e800h;A端口地址,数码管段选

bequ0e801h;B端口地址,数码管位选

cequ0e803h;8255A控制字地址

controlequ0e823h;8253控制字地址

clk0equ0e820h;定时器0地址

dataends

stacksegmentstack'stack'

db100dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movsi,offsetsong;将音符数据首地址偏移量赋给si

movdi,offsetnum;将数码管字符数据首地址偏移量赋给di

movdx,control

moval,16h

outdx,al;设置8253控制字

movdx,c;将8255A控制字地址赋给dx

moval,80h

outdx,al;设置8255控制字

loop1:

movcx,count;将音符个数赋给cx,用于计数,此处$=42鯊腎鑰诎褳鉀沩懼統庫。

loop2:

movdx,clk0;将定时器0地址赋给dx

moval,[si];将音符数据赋给al

outdx,al;?

蜂鸣器响,是否会一直发声?

movdx,b;数码管位选地址赋给dx

moval,01h

outdx,al;最左边数码管亮

movdx,a;数码管段选地址赋给dx

moval,[di]

outdx,al;数码管显示数据[di]

callfarptrdelay;延时

movdx,clk0;将定时器0地址赋给dx

moval,0;将音符数据赋给al

outdx,al;?

蜂鸣器响,是否会一直发声?

movdx,b;数码管位选地址赋给dx

moval,01h

outdx,al;最左边数码管亮

movdx,a;数码管段选地址赋给dx

moval,[di]

outdx,al;数码管显示数据[di]

callfarptrdelay2

incdi

incsi

movah,0bh;检测键盘按键

int21h

cmpal,0ffh

jzstop

deccx

jzloop1

jnzloop2

stop:

movah,4ch

int21h

delayprocfar;延时子程序

pushcx;入栈保护

pushax

pushbx

movcx,0ffffh;2的8次方=65536;0ffffh

loop3:

nop;CPU空操作

movbx,0f5eh;cx*bx可以控制分频为1000Hz;5f5eh硕癘鄴颃诌攆檸攜驤蔹。

loop4:

decbx;?

?

?

?

?

内层循环是否需要空操作

jnzloop4;当dx>0时,继续减一

looploop3;当cx>0时,继续空操作

popbx;出栈恢复

popax

popcx

ret

delayendp

delay2procfar;延时子程序

pushcx;入栈保护

pushax

pushbx

movcx,0ffffh;2的8次方=65536;0ffffh

loop5:

nop;CPU空操作

movbx,055eh;cx*bx可以控制分频为1000Hz;5f5eh阌擻輳嬪諫迁择楨秘騖。

loop6:

decbx;?

?

?

?

?

内层循环是否需要空操作

jnzloop6;当dx>0时,继续减一

looploop5;当cx>0时,继续空操作

popbx;出栈恢复

popax

popcx

ret

delay2endp

codeends

endstart

5、实验结果

完成基本要求。

蜂鸣器按照生日快乐歌的简谱:

“112143,112154,1116432,776454”演奏,最左边的数码管实时的显示该音符。

音符与音符之间的间隔与音符本身的长度相等。

最后键盘按键触发程序终止,数码管全灭,蜂鸣器不发声。

氬嚕躑竄贸恳彈瀘颔澩。

没有完成提高要求。

6、实验总结

1、都是不认真听课惹的祸

有一次我们运行程序发现错误,但是单步调试却始终发现不了错误。

纠结了许久之后终于发现原来是端口地址写错了!

因为指导书上的地址是错误的,而上课的时候又没有认真听老师讲课,导致我们浪费了这么多时间……釷鹆資贏車贖孙滅獅赘。

2、难听的曲子

在程序测试伊始,我们为方便起见,设计的是每个音符之间没有停顿,结果发现一旦两个相同音符连在一起,那么根本听不出来两个音符的味道,到了无法忍受的地步。

于是,我们修改了程序,在每个音符演奏完之后再次调用延时子程序,给予扬声器一个与音符同等时间长度的不发声时间,其实现效果良好。

怂阐譜鯪迳導嘯畫長凉。

7、实验收获与心得体会

此次实验是最后一次微原硬件实验,是我们第一次在课堂上完成实验,当然,也是唯一一次了。

在程序的调试过程中,渐渐发现了自身存在的许多问题。

比如有一次发现程序不执行循环,对程序进行单步调制之后才发现,原来仅仅是一个数字写错了,到时条件转移到错误的地方,程序出错。

由此可见,编程时马虎不得的事情,对细节的注重是每一个合格的程序员的必修课。

谚辞調担鈧谄动禪泻類。

八、思考题

问:

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

答:

输出频率=输入频率/计数初值

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

当前位置:首页 > 工程科技 > 电子电路

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

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