3实验三_定时计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三定时计数器实验
(实验前一定要先完成仿真电路设计,没有完成的不能进入实验室)
一、实验要求
设计一个如图所示的门铃电路,当按下按钮开关时,喇叭发出叮咚的门铃声音。
二、实验目的
掌握单片机定时计数器的定时模式及编程。
三、实验步骤
1、按实验一的方法设计电路原理图。
本实验需要选取的元器件有单片机AT89C51、瓷片电容CAP、电解电容CAP-ELEC、电阻RES、晶振CRYSTAL、按钮BUTTON、普通三极管PN2222、喇叭SPEAKER等。本实验中的元器件参数值:晶振X1频率为12MHz,瓷片电容C1、C2的值为30pF,电解电容C3的值为10uF,电阻R1为470,R2、R3的值为10K,单片机AT89c51的时钟频率12MHz。
2、编写源程序
程序设计方法
1.我们用单片机实定时/计数器T0的方式2来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过3次250us的定时,而500HZ 的频率要经过4次250us的定时。
2.在设计过程,只有当按下k1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。
3.“叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。也就是前0.5秒P3.2输出700HZ的频率,后0.5秒输出500HZ的频率。
四、仿真。
在PROTEUS ISIS环境,加载.HEX文件进行仿真。
五、写入实验箱单片机测试
启动ISP在线写程序,将仿真通过的.HEX文件写入综合实验箱的单片机中进行测试。检查是否和仿真的效果相同。
#include
unsigned char t500hz;
unsigned char t700hz;
unsigned int tcnt;
bit stop;
bit flag;
sbit SP1=P3^3;
sbit SPOUT=P3^2;
void main(void) {
TMOD=0x02;
TH0=0x06;
TL0=0x06;
ET0=1;
EA=1;
{
if(SP1==0)
{
//delay5ms();
if(SP1==0)
{
t500hz=0;
t700hz=0;
tcnt=0;
flag=0;
stop=0;
TR0=1;
//while(SP1==0);
//do{delay5ms();}
while(SP1==0);
}}
}}
void t0(void) interrupt 1 using 0 { tcnt++;
if(tcnt==2000)
{ tcnt=0;
if (flag==0)
{flag=~flag;}
else
{
TR0=0;
} }
if(flag==0) {
t700hz++;
if(t700hz==3) {t700hz=0; SPOUT=~SPOUT; } }
else
{
t500hz++;
if(t500hz==4) {
t500hz=0; SPOUT=~SPOUT; } }
}