单片机串口通信编程

2019-07-16 05:16发布

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>       
#define uint unsigned int
unsigned char flag_uart,flag_time,flag_on,a,i,t0_num,ad_val,a,s;
float ad_vo;
void init()
{
            TMOD|= 0x20;      //定时器1工作方式2                    
                PCON|= 0x80;
                TH1 = 0xF3;                                        // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
            TL1 = 0xF3;         
                TR1  = 1;
       
                ET0=1;
                SM0=0;
                SM1=1;
                REN=1;                                                                        
                EA   = 1;        // 开总中断
                ES   = 1;        //开串口中断   

}
void main()
{                                                                                                                                                                                                  


        while(1)
        {
                         init();
                if(flag_uart==1)
                {
                        flag_uart=0;
                        ES=0;
                        TI=1;
                switch(flag_on)
                        {
                                case 2: puts("Turn on ad! ");
                                                //TR0=1;
                                                break;
                                case 0: printf("Turn off ad! ");
                                                //TR0=0;
                                                break;
                                case 1: puts("Error! ");
                                                break;
                        }
                       
                        while(!TI);
                        TI=0;
                        ES=1;
            }
        }
}
                  
void ser() interrupt 4
{

        if(RI==1)
        {  RI=0;                  //先是收到电脑发送过来的数据,数据放在在SBUF中          
          
          a=SBUF; }
          s=a;
          
          flag_uart=1;
          if(s==1)
                flag_on=0;
          else
                flag_on=1;
}



  //为什么中断服务程序中的s        与a始终为0,导致始终执行的是 case 0中的语句?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。