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;
 }
 
}
//----------------------------------------------
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值