51单片机,这样延时可行吗?新手上路,麻烦高手们帮帮忙!

来源:百度知道 编辑:UC知道 时间:2024/09/25 22:23:43
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,t0,t1,count;
sbit beep=P2^3;
uint dt[]={50000,20000,10000,5000,1250,1000};
void delay(uint z);
void main(){
t0=0;
t1=0;
count=20;
TMOD=0x11;
EA=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536)/256;
TL1=(65536)%256;
TR0=1;
while(1){
if (t0==6){//间隔300ms定时器1开始计时
ET1=1;
TR1=1;
t0=0;
if(t1==20||t1==22) {//1s=20*50ms,0.1s=2*50ms
beep=1;
delay(20);//延时约20ms
beep=0;
}
if(t1>22){
if(t1==27)
t1=0;
beep=1;
delay(20);
beep=0;
}
}
}
}
void dt0() interrupt 1{
TH0=(65536-50000)/

应该是可以的.继续努力

用PROTEUS软件仿真 软件里可以用虚拟的示波器观看

没问题,你的要求精度不高,完全可以!!!!

可以先用KEIL 和 PROTUES仿真下,看下效果