mwnn 发表于 2020-1-11 22:41

一个简易的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;
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=SBUF;
    if(SBUF == '!')
   flag = 1;
ES=1;
}

mj8abcd 发表于 2020-1-11 22:48

wangy2000 发表于 2020-1-12 07:59

收藏谢谢分享

lis998 发表于 2020-1-12 18:08

mj8abcd 发表于 2020-1-12 18:40

wangxinyue 发表于 2020-1-13 09:07

sun5304 发表于 2020-2-11 08:49

damonduan 发表于 2020-3-19 21:03

谢谢分享

236244828 发表于 2020-3-20 08:59

不错吗,,,

学海无涯 发表于 2020-11-14 08:25

不错,学习了。
页: [1] 2
查看完整版本: 一个简易的51单片机串口接收和发送程序