求助一个单片机串口通信问题,跪求了!

2019-07-15 19:43发布

#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定时器不工作,跪求高手指点! 万分感谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。