蜂鸣器程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV TH1,#06H//置定时器初值
MOV TL1,#06H
SETB TR1//启动定时器1
LP1:JBC TF1,LP2//查询计数溢出
SJMP LP1//未溢出继续计数
LP2:DJNZ R5,LP1//未到0.5ms继续循环
RET//返回主程序
END
C语言:
#include <reg52.h>
}
sbit beep=P2^3;//位定义
void main()
{
while(1)//大循环
{
delay(1);//延时0.5ms
beep=~beep;//取反
}
}
2、用定时器1、方式2实现延时
方式2最大定时:256 1us=0.256ms
所以选择定时0.25ms,那么循环2次实现0.5ms延时
计数值0.25ms/1us=250
要求:让蜂鸣器响,频率为1KHZ
1、延时子程序实现
汇编:ORG 0000H
SJMP START
ORG 0030H
START:MOV P2,#11110111B//P2^3控制蜂鸣器
LCALL DELAY
MOV P2,#11111111B
LCALL DELAY
AJMP START
DELAY:MOV R5,#125
#define uchar unsigned char
#define uint unsigned int
sbit D0=P2^3;
char num=0;//定义变量
void main()
{
TMOD=0x20;//定时器1方式2
TH1=6;//装入初值
TL1=6;
EA=1;//开总中断
ET1=1;//开定时器1中断
则256-250=06H
汇编:ORG 0000H
SJMP START
ORG 0030H
START:
MOV P2,#11110111B
LCALL DELAY
MOV P2,#11111111B
LCALL DELAY
AJMP START
DELAY:MOV R5,#02H//置计数循环初值2
MOV TMOD,#20H//置定时器1方式2
L1:NOP//
NOP
DJNZ R5,L1
RET//返回主程序
END
C语言:
#include <reg52.h>
#define uint unsigned int//宏定义
void deBiblioteka Baiduay(uint z )//延时0.5ms
{
uint i,j;
for(i=z;i>0;i--)
for(j=55;j>0;j--);
TR1=1;//启动定时器1
D0=0;//蜂鸣器响
while (1);
{if(num==2)//循环两次实现0.5ms延时
{num=0;//把num清零重新再计数
D0=~D0;//让蜂鸣器状态取反
}
}
}
void T1_time()interrupt3
{
num++;
}
相关文档
最新文档