51串口通信发送和接收

   //发送数据波特率为9600
//1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。
//2、如果接收到1,则将P10置高电平,接收到0,P01置低电平。(用来控制一个LED)
#include "STC/STC15F2K60S2.H"
sbit LED = P0^1;
sbit ledle = P2^5;
sbit bell = P4^5;
unsigned char UART_buff,buff;
bit New_rec = 0, Send_ed = 1, Money = 0;
unsigned flag1 = 0;//接收完成标志位
unsigned flag2 = 0; //发送完成标志位
//----------------------------------------------
void main (void)
{
// ledle = 1;
 SCON = 0x50;   //串口方式1 ,允许接收
 AUXR = 0x00;
 PCON = 0x00;
 TMOD = 0x20;   //定时器工作方式2,使用定时器1作为波特率发生器
    TH1 = 0xFD; 
    TL1 = 0xFD;
 REN = 1;   
 TR1 = 1;       //开启定时器T1                
    ES = 1;       //打开串口中断.
    EA = 1;    //开启总中断
 
    while(1)
 {
     if(flag1 == 1)
   LED = 0;
  if(flag1 == 0)
   LED = 1;
    
  while(flag2 == 0);
       while(1)
  {
   if(flag2 == 1)
   {
    SBUF =  UART_buff;  
    flag2 = 0;
   }
  }           
     
  
 }
}


//----------------------------------------------
void ser_int (void) interrupt 4
{
    if(RI == 1)
 {  //如果收到
      RI = 0;      //清除标志
 
 UART_buff = SBUF;
 if(UART_buff == '1')  //输入文本模式1点亮LED
   flag1 = 1;
    if(UART_buff == '0') //熄灭LED
 { 
   flag1 = 0;
 }
 if(UART_buff == '$') 
  flag2 = 1;
  }
 else     //发送完毕
 {
   TI = 0;  //清除标志
  Send_ed = 1;
 }
 
}
//----------------------------------------------

猜你喜欢

转载自blog.csdn.net/zl1107604962/article/details/47208221