#include<reg52.h>
#define uchar unsigned char
#define uint unsigend int
uchar flag,num,T0_flag,b,i;
uchar code string[]={" This is "};
sbit buzz=P1^4; //定义蜂鸣器
void init(); //初始化
void buzz_1();
void main() //主函数
{
init();
while(1)
{
buzz_1();
if(flag==1)
{
ES=0;
if(num==4||num==0)
{
ET0=0;
TR0=0;
buzz=0;
}
else if(num==1||num==2||num==3)
{
ET0=1;
TR0=1;
}
for(i=0;i<9;i++)
{
SBUF=string[i];
while(!
ti);
TI=0;
}
SBUF=num;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void init()
{
T0_flag=0;
b=0;
flag=0; //对串口中断标示位初始化
buzz=0; //蜂鸣器初始化为关闭状态
TMOD=0x20; //确定T0定时器工作方式1,T1定时器工作方式2
TH0=0x4c; //T0定时器高八位装入初值
TL0=0x00; //T0定时器低八位装入初值 用于设置50ms的中断
TH1=0xfd; //T1定时器高八位装入初值
TL1=0xfd; //TI定时器低八位装入初值 设置波特率 为9600
ET0=0; //打开T0 中断
TR0=0; //允许T0中断
TR1=1; //允许T1中断
REN=1; //允许串行接收位
SM0=0;
SM1=1; //设置SM0=1,SM1=1时 串口工作方式1
EA=1; //打开总中断
ES=1; //打开串口中断
}
void buzz_1()
{
switch(num)
{
case 1:
b=8;
break;
case 2:
b=4;
break;
case 3:
b=2;
break;
}
if(T0_flag==b && T0_flag!=0)
{
T0_flag=0;
buzz=~buzz;
}
}
void time_1() interrupt 1 //T0定时器 中断
{
TH0=0x4c;
TL0=0x00;
T0_flag++;
}
void ser() interrupt 4 //串口中断
{
RI=0;
num=SBUF;
flag=1;
}
这段代码,串口部分没问题 可以收发数据,但是蜂鸣器部分,不响, 我用T0定时器不工作,跪求高手指点! 万分感谢!
一周热门 更多>