8253定时器实现方波发生器.docx
《8253定时器实现方波发生器.docx》由会员分享,可在线阅读,更多相关《8253定时器实现方波发生器.docx(23页珍藏版)》请在冰点文库上搜索。
8253定时器实现方波发生器
1.1、课程设计的背景
单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),它最早是被用在工业控制领域,其设计理念是使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
目前单片机渗透到我们生活的各个领域,几乎随处都可以看到单片机的身影。
因此,对于工科生而言,学习单片机,必将成为我们在电子行业的一个重要组成部分。
由于单片机系统的本身限制,要实现一些功能的扩展,才可以满足生产生活的需要,所以,单片机系统的扩展,成为单片机系统的一个重要的研究方向。
我们在日常的学习中,为了能更好的运用以及巩固所学的硬件知识,运用那个课程中所学的理论知识与实践紧密结合,同时,培养我们独立地解决实际问题的能力,和锻炼运用硬件与软件结合的综合能力,学院开设此次课程设计,来满足课程的需要。
1.2、课程设计的目的
(1)熟练掌握单片机和8253的原理及应用
(2)掌握各芯片的逻辑功能及使用方法;
(3)了解面包板结构及其接线方法;
(4)了解单片机的基本工作原理;
(5)熟悉定时器的设计与制作。
1.3、课题要求
1、使用8253芯片实现方波输出;
2、输出的方波频率范围为500Hz到1000Hz,在此频率范围内,可以实现频率可调;
3、运用单片机,实现对定时器/计数器8253芯片的控制,来实现方波发生器的功能。
2、实验方案
2.1、设计思路
单片机可以实现方波输出,此课题则需要利用单片机对8253芯片的控制,使芯片工作在特定的工作方式,来实现方波的发生,因此,总结课题的要求,有如下方案可以讨论:
1、利用8086微处理器,控制8253芯片,是芯片工作在工作方式3,来实现方波的输出。
利用键盘,来实现对输出方波频率的调节,同时,还要加数码管,用以显示按键输入的新的频率数值。
2、使用51系列单片机,控制8253芯片,同样使8253芯片工作在方式3,使8253芯片实现方波的输出,配以数码管和键盘来实现对方波的输出频率调节。
3、使用51系列单片机,控制8253芯片使之工作在方式3,实现方波输出。
使用AD转换芯片ADC0809,与可变电阻器,给单片机输入频率信号,用以调节频率。
4、使用51系列单片机,控制8253芯片,工作在方波发生器方式,使用按钮,对频率实现等步长调节。
2.2、方案选择
1、对于方案1,使用8086微处理器实现对8253芯片的控制,对8253芯片的初始化程序如下:
MOVDX,04A6H;控制寄存器
MOVAX,36H;计数器0,方式3
OUTDX,AX
MOVDX,04A0H
MOVAX,7CH
OUTDX,AX
MOVAX,92H
OUTDX,AX;计数值927CH
MOVDX,04A6H
MOVAX,76H;计数器1,方式3
OUTDX,AX
MOVDX,04A2H
MOVAX,32H
OUTDX,AX
MOVAX,0;计数值32H
OUTDX,AX
MOVDX,04A6H
MOVAX,0B6H;计数器2,方式3
OUTDX,AX
MOVDX,04A4H
MOVAX,04H
OUTDX,AX
MOVAX,0;计数值04H
OUTDX,AX
由于8086微处理器在生产生活中并不是最为常见的,所以此方案实现起来并不十分方便,因此不采取此方案。
2、方案2的原理图如图1下:
图1方案2原理图
原理图中,利4x4矩阵键盘用以输入调节的频率。
从而实现频率可调,程序如下:
ORG0BB0H
AJMPMAIN
MAIN:
CLRP1.0;使GATE为低电平,禁止计数
MOVDPTR,#0FF2BH;送控制寄存器地址到数据指针寄存器
MOVA,#36H;送工作方式字到累加器00110111
MOVX@DPTR,A;工作方式字送到控制寄存器
MOVDPTR,#0FF28H;送通道0地址
MOVA,#16H;计数器/定时器初始值
MOVX@DPTR,A;初始值送入通道0寄存器
SETBP1.0;使GATE为高电平,允许计数
LOOP:
JNBP1.5,SUBFUNC;查询按键是否被按下
JNBP1.6,SUBFUNC
JNBP1.7,SUBFUNC
AJMPLOOP;返回子程序,继续扫描按键
SUBFUNC:
LCALLSCAN;按键被按下,调用子程序
AJMPLOOP
SCAN:
JNBP1.7,MAIN;复位键按下,执行复位操作
JNBP1.6,FADD;频率加操作
JNBP1.5,FSUB;频率减操作
FADD:
MOVR0,#100
LOOP1:
DJNZR0,LOOP1
MOVSP,#60H
SUBBA,#1;频率加步长
PUSHACC
AJMPINIT;中断处理
FSUB:
MOVR0,#100
LOOP2:
DJNZR0,LOOP2
MOVSP,#60H
ADDA,#1;频率减步长
PUSHACC
AJMPINIT;中断处理
INIT:
CLRP1.0
MOVDPTR,#0FF2BH;中断处理程序
MOVA,#36H
MOVX@DPTR,A
MOVDPTR,#0FF28H
POPACC
MOVX@DPTR,A
SETBP1.0
RET
END
方案2原理图中是数码管部分未画出。
由于使用此方案,系统组成复杂,不利于实验的调试。
因此不使用此方案。
3、方案3中的方波实现部分与方案2相同,区别在于频率调节部分,方案2是利用键盘直接键入新的频率值,而本方案是利用模拟信号输入来控制频率的改变,由于模拟信号连续,因此可以实现在要求的频率范围内连续调节。
其原理图如图2所示:
图2方案3原理图
在本方案中,加入了AD转换环节,是系统的复杂性大大提高,不利于实际的实现,因此,也不采用此方案。
4、方案4的方波实现与前者相同,区别是频率调节环节的变化。
此方案中,只用了三个按钮来实现频率的调节。
原理图如图3所示
图3方案4原理图
在此方案中,使用按钮来控制频率的改变,这样的设计,使系统得到了大大的简化,同时,硬件软件的实现十分简便,因此,在此课程设计中,选用方案4来完成课题的设计。
2.3、方案可行性研究
相比之下,方案4有着比较明显的优势。
因为方案4的硬件设计简单,频率的调节是用按钮实现,同时,8253芯片与单片机的接口使用的是74HC373地址锁存器,可以在送地址的时候保持地址有效电平,使地址与数据的传输分开。
而且对于方案4的软件的设计,只需要有初始化8253芯片,以及对按键的处理程序即可,因此可行性最高。
3、课题方案阐述
3.1、硬件设计
硬件的设计方框图如图4所示
图4硬件设计框图
硬件设计方案原理如下:
1、时钟发生电路由C1、C2和X1(晶振)产生脉冲给XLAT1、XLAT2作为外部振荡信号,复位信号由开关和RC电路构成;由于系统要对外部接口送数据,所以EA端始终为高电平;单片机P0口接8253的数据端口,由于单片机内部无上拉电阻,当作为输入或者输出时应在外部接上拉电阻,因此P0口需要外接上拉电阻。
系统的设计需要使用P0口的高2位作为地址线,同时P0口作为数据线使用,因此,需要加地址锁存器;频率调节电路是用按钮组成的,当按钮按下时,可以对频率进行等步长的递增或者递减,从而实现输出500到1000Hz频率可调的方波。
2、硬件设计原理图如方案4原理图所示。
3.2、各个部件功能描述
1、8253芯片的引脚图及功能
(1)8253芯片的引脚图如图5所示
图58253芯片引脚图
(2)8253芯片内部组成部分:
1)数据总线缓冲器(8位、三态、双向)。
数据中线缓冲器是8253与系统数据总线相连接时用的接口电路,它由8位双向三态缓冲器构成。
2)读/写控制逻辑。
读/写控制逻辑接收系统控制总线送来的输入信号,经组合后形成控制信号,对各部分操作进行控制。
可接收的控制信号有:
:
片选信号,低电平有效;
:
读信号,低电平有效;
:
写信号,低电平信号;
:
端口选择信号。
=00时,选中0通道;
=01时,选中1通道;
=10时,选中2通道;
=11时,选中控制寄存器。
8253的输入信号组合功能表如表1所示。
表18253输入信号组合的功能表
功能
0
1
0
00
写计数器0
0
1
0
01
写计数器1
0
1
0
10
写计数器2
0
1
0
11
写入控制字寄存器
0
0
1
00
读计数器0
0
0
1
01
读计数器1
0
0
1
10
读计数器2
0
0
1
11
无操作
1
×
×
××
禁止使用
0
1
1
××
无操作
3)计数器0~2。
三个完全相同的16位减计数器。
每个通各有3个引脚,它们是:
CLK0~CLK2计数器0~2的输入时钟脉冲此引脚输入;
OUT0~OUT2计数器0~2的输出端;
GATE0~GATE2计数器0~2的门控脉冲输入端。
4)控制字寄存器。
控制字寄存器是一种只写寄存器,在对8253编程时,由CPU用输出指令向它写入控制字,来选定计数器通道,规定各计数器的工作方式,读写格式和数制。
其格式如图6所示:
BCD
图68253控制字格式
控制字的位值及意义如上图。
5)8253芯片的工作方式:
工作方式0:
计数结束中断方式;
工作方式1:
可编程单稳态输出方式;
工作方式2:
比率发生器;
工作方式3:
方波发生器;
工作方式4:
软件触发选通;
工作方式5:
硬件触发选通;
其中,本课程设计用到的是方式3,——方波发生器。
工作在方式3的8253芯片的工作过程参看相关文献。
2、AT89C51的引脚及功能
(1)AT89C51单片机的引脚图如图7所示
图7AT89C51的引脚图
(2)各引脚的功能:
1)、主电源引脚
和
(40脚):
主电源接+5V
(20脚):
接地
2)、时钟电路引脚XTAL1和XTAL2
XTAL2(18脚):
接外部晶体振荡器的一端。
片内是一个振荡电路反相放大器的输出端。
XTAL1(19脚):
接外部晶体振荡器的另一端。
片内是一个振荡电路反相放大器的输入端
3)、控制信号RST/
、ALE/
、
和
/
RST/
(9脚)
复位端。
高电平有效,宽度在24个时钟周期宽度以上,使单片机复位。
该引脚有复用功能,
为备用电源输入端,防止主电源掉电。
ALE/
(30脚)
地址锁存信号端。
访问片外存贮器时,ALE作低八位地址的锁存控制信号。
平时不访问片外存贮器时,该端以六分之一的时钟振荡频率固定输出脉冲。
ALE端负载驱动能力为8个TTL门电路。
该引脚有复用功能,为片内程序存贮器编程(固化)的编程脉冲输入。
(29脚)
片外程序存贮器读选通信号端。
负载能力为8个TTL门电路。
/
(31脚)
端接高电平时,CPU取指令从片内程序存贮器自动顺延至片外程序存贮器。
端接低电平时,CPU仅从片外程序存贮器取指令。
该引脚有复用功能,
为片内程序存贮器编程时的编程电压。
4)输入/输出引脚P0、P1、P2和P3口
P0.0~P0.7(39~32脚):
访问片外存贮器时作为低八位地址线和八位数据线(复用)。
负载能力为8个LSTTL门。
P1.0~P1.7(1~8脚):
8位准双向I/O口。
负载能力为3个LSTTL门
P2.0~P2.7(21~28脚):
访问片外存贮器时作为高八位地址线
P3.0~P3.7(10~17脚):
8位准双向I/O口。
负载能力为3个LSTTL门。
另外还有专门的第二功能
P3口的第二功能
P3.0(10脚):
RXD(串行口输入端)
P3.1(11脚):
TXD(串行口输出端)
P3.2(12脚):
/INT0(外部中断0输入端)
P3.3(13脚):
/INT1(外部中断1输入端)
P3.4(14脚):
T0(定时器/计数器0外部输入端)
P3.5(15脚):
T1(定时器/计数器1外部输入端)
P3.6(16脚):
/WR(片外数据存贮器写选通信号输出端)
P3.7(17脚):
/RD(片外数据存贮器读选通信号输出端)
3、74HC373的引脚及功能
(1)74HC373的引脚图(图8):
图874HC373引脚图
(2)74HC373的功能
1)输出使能引脚OE和锁存控制引脚LE
1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(O0)、5(O1)、6(O2)、9(O3)、12(O4)、15(O5)、16(O6)、19(O7)全部呈现高阻状态(或者叫浮空状态);
当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(O0)、5(O1)、6(O2)、9(O3)、12(O4)、15(O5)、16(O6)、19(O7)立即呈现输入脚3、4、7、8、13、14、17、18的状态。
锁存端LE由高变低时,输出端8位信息被锁存,直到LE端再次有效。
当三态门使能信号OE为低电平时,三态门导通,允许O0~O7输出,OE为高电平时,输出悬空。
当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端LE为高电平时,输出O0~O7状态与输入端D0~D7状态相同;当LE发生负的跳变时,输入端D0~D7数据锁入O0~O7。
51单片机的ALE信号可以直接与74HC373的LE连接。
2)74HC373与单片机接口
D0~D7为8个输入端。
O0~O7为8个输出端。
G是数据锁存控制端;当G=1时,锁存器输出端同输入端;当G由“1”变为“0”时,数据输入锁存器中。
OE为输出允许端;当OE=“0”时,三态门打开;当OE=“1”时,三态门关闭,输出呈高阻状态。
在MCS-51单片机系统中,常采用74HC373作为地址锁存器使用,其连接方法如上图所示。
其中输入端1D~8D接至单片机的P0口,输出端提供的是低8位地址,G端接至单片机的地址锁存允许信号ALE。
输出允许端OE接地,表示输出三态门一直打开。
3.3、程序设计流程图
程序设计流程图如图9所示
图9程序设计流程图
3.4、程序设计
根据程序设计的流程图,可以编写如下程序代码:
ORG0000H
MAIN:
MOVR1,#09H
INIT:
CLRP1.0;使GATE为低电平,禁止计数
MOVDPTR,#0FF2BH;送控制寄存器地址器中
MOVA,#36H;送工作方式字
MOVX@DPTR,A;工作方式字送到控制寄存器
MOVDPTR,#0FF28H;送通道0地址
MOVA,R1;计数器/定时器初始值
MOVX@DPTR,A;初始值送入通道0寄存器
SETBP1.0;使GATE为高电平,允许计数
LOOP:
JNBP1.7,MAIN
JNBP1.6,FADD
JNBP1.5,FSUB
AJMPLOOP;返回子程序,继续扫描按键
FADD:
MOVA,R1
SUBBA,#01H;频率加步长
MOVR1,A
LCALLDELAY
AJMPINIT;中断处理
FSUB:
MOVA,R1
ADDA,#01H;频率减步长
MOVR1,A
LCALLDELAY
AJMPINIT;处理
DELAY:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVR0,#1
DJNZR0,DELAY
NOP
RET
END
4、仿真与调试
4.1、Proteus环境下的仿真调试
根据设计的原理图,在Proteus环境中,绘制出仿真电路图,如图10所示
图10仿真电路图
4.2、仿真结果
正确连接各部件线路,将源程序代码加入Keil编译环境中,编译调试程序,然后将正确编译、连接后生成的HEX文件,加入Proteus环境下的单片机中,是单片机可以仿真实际电路工作。
仿真的结果如图11、图12所示
图11输出波形图
图12输出方波的频率
5、设计中的问题
5.1、硬件连接的若干问题
在硬件连接过程中,遇到了一些问题,现做阐述如下:
1、由于P0口内部没有上拉电阻,所以在外接数据时要外加上拉电阻,用来保护电路不被损坏;
2、地址锁存器74HC373是连接单片机和8253芯片之间的用以锁
存地址。
这样的设计是由于数据线和地址线使用同样的P0端口,在输出地址时,由于需要对地址保持,从而需要对地址锁存,确保数据的正确传送。
3、由于仿真软件中,可以对8253芯片设置时钟频率,故无需外加时钟电路。
而在实际电路中,则需要正确接入时钟电路。
8253芯片对输入时钟脉冲有着固定的要求,因此,在实际电路中,需要根据手册,正确选择输入时钟信号。
5.2、软件调试的若干问题
程序设计的流程图列出来以后,就可以按照流程图的思路来编写程序。
当源程序编写好了之后,可以进行编译。
在编译的时候,遇到一些问题,现做阐述如下:
1、由于程序的编写是根据硬件的设计对应而来的,因此,在写程序的时候,要特别注意对各个引脚的操作一定要正确,否则,将会出现不能实现功能的问题。
如在对8253芯片写入初始化控制字和通道初值后,需要给8253芯片所选通道的门控信号一个上升沿脉冲,则对应的程序里,就要根据硬件的接法来给相应引脚送出上升沿脉冲。
2、由于硬件电路中,调节频率的电路是由按钮组成的,因此,在实现功能的时候,需要对电路加上去抖动环节。
在程序编写的时候,可以考虑使用软件去抖动。
在加入的去抖动的延时程序中,要注意延时时间选择要适当,保证功能实现的可靠性。
3、仿真环境中,需要使用HEX文件,因此,在编译源程序时,必须在编译环境Keil中,在输出选项中,选择创建HEX文件。
如果不选择此项,则即使编译成功,也不会产生仿真或者实际电路中所需要的HEX程序文件,不能达到所要实现的功能。
4、频率的是变化是按一定的规律的,8253芯片的输出方波的频率与其时钟输入的脉冲的频率以及输入的初始值有关,其规律如下:
其中,
是芯片的输出频率,
是时钟脉冲输入频率,n是输入初始值。
6、总结
6.1、设计心得体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管PNP管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
6.2、致谢
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
7、参考文献
1、张迎新《单微型计算机原理、应用及接口技术》国防工业出版社1993
2、戴梅萼,史嘉权《微型计算机技术及应用》清华大学出版社2003
3、仇玉章《32位微型计算机原理与接口技术》清华大学出版社2001
4、郑学坚,周斌《微型计算机原理及应用》清华大学出版社1998
5、李博成,侯伯亨《微型计算机原理及应用》电子科大出版社1998
6、邓元庆,贾鹏《数字电路与系统设计》电子科大出版社2003