一个简易的51单片机串口接收和发送程序

程序功能:接收上位机发过来的一个字符串,然后把该字符串发送给上位机,
  字符串必须以!结尾
**********************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P2^7;
uchar flag = 0;
uchar index = 0;
uchar data c[100];
void Delay_ms(uint n)
{
 uchar i;
 while(n--)
     for(i = 0;i < 120;i++);
}
void Send_string(uchar *c)
{
 while(*c != '!')
 {
  SBUF=*c;
  c++;
  while(TI==0);
  TI=0;
 }
}
void main()
{
 SCON=0x50;	//串口模式1,允许接收
 TMOD=0x20;	//T1工作模式2
 TH1=0xF3;	//波特率4800
 TL1=0xF3;
 PCON=0x80;	//波特率倍增
 EA = 1;//开总中断
 ES = 1;//开串口中断
 TR1=1;//开定时器1中断
 while(1)
 {
  if((SBUF == '!')&&(flag == 1))
  {
    Send_string(c);
   LED = ~LED;
   index = 0;
   flag = 0;
  }
  /*
  需要理解虽然 读取SBUF和写入SBUF所用的SBUF是不同的,这里可以理解为有两个SBUF,
  一个SBUF_read和一个SBUF_write,当往SBUF中写数据时SBUF_read不变。
 */
 }
}
//串口接收中断函数
void Serial_INT() interrupt 4
{
 if(RI==0) return;
 ES=0;	//关闭串口中断
 RI=0;	//清接收中断标志
 c[index++]=SBUF;
    if(SBUF == '!')
   flag = 1;
 ES=1;
}

 

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值