找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2165|回复: 2
收起左侧

51单片机如何读取串口的数据,又如何通过串口向GA6发送AT指令呢?

[复制链接]
ID:727575 发表于 2020-4-27 10:54 | 显示全部楼层 |阅读模式
如题
回复

使用道具 举报

ID:367369 发表于 2020-4-27 19:28 | 显示全部楼层
收发都使用SBUF寄存器,

在串口中断中
接收:
for(i=0;i<数组长度,i++)
接收数组【i】=SBUF;
发送:
while(TI)
for(i=0;i<数组长度,i++)
SBUF=发送数组【i】;
回复

使用道具 举报

ID:367369 发表于 2020-4-27 19:34 | 显示全部楼层
这是我以前用WIFI模块时的代码,希望对你有帮助

/**串口数据使用**/
#define RX1_Lenth  32   //串口接收缓冲长度
uchar RX1_Buffer[RX1_Lenth]; //接收缓冲
uchar TX1_Cnt; //发送计数
uchar RX1_Cnt; //接收计数
int  B_TX1_Busy; //发送忙标志
/**wifi模块命令**/
unsigned char  LYMS[13]="AT+CWMODE=2\r\n";
unsigned char  RST[8]="AT+RST\r\n";
unsigned char  SZDLJ[13]="AT+CIPMUX=1\r\n";
unsigned char  KQFU[21]="AT+CIPSERVER=1,5000\r\n";
unsigned char  FSSJ[13]="AT+CIPSEND=\r\n";//AT+CIPSEND= 发送数据
void Delay3(unsigned int N) //延时
{
int i;
for(i=0;i<N*10;i++);
}
/*********************************************************************/
void Uart_Init(void) //打开中断接口
{
  TMOD = 0x21;   //定时器工作在定时器1的方式2
  PCON = 0x00;   //不倍频
  SCON = 0x50; //串口工作在方式1,并且启动串行接收
  TH1 = 0xFd;    //设置波特率 9600
  TL1 = 0xFd;
  TR1 = 1;  //启动定时器1

  IT0=1;
  IT1=1;

  EX0=1;
  EX1=1;
  ET0=1;

  PX0=0;
  PX1=0;
  PT0=1;
  PS=0;
  ES = 1;  //开串口中断
  EA = 1;  //开总中断
  RX1_Cnt=0;  //接受计数清零
  TX1_Cnt = 0; //发送计数清零
  B_TX1_Busy = 0;//初始化判忙标志位  
}
void wifi(void) //WiFi调试
{
char i=0;
/******************设置WiFi模块**********************************************/
for(i=0;i<13;i++)//AT+CWMODE=2 设置成路由模式
{
  SBUF=LYMS[i];Delay3(5);
}
Delay3(1000);
for(i=0;i<8;i++)//AT+RST 重启
{
  SBUF=RST[i];Delay3(5);
}
Delay3(5000);
for(i=0;i<13;i++)//AT+CIPMUX=1 设置成多连接
{
  SBUF=SZDLJ[i];Delay3(5);
}
Delay3(2000);
for(i=0;i<21;i++)//AT+CIPSERVER=1,5000 开启TCP服务端口
{
  SBUF=KQFU[i];Delay3(5);
}
Delay3(2000);
}
void main()
{
Uart_Init();
wifi();
while(1)
  {

   }
}
void UART1_int (void) interrupt 4    //串口中断
{
if(RI)
{
  RI = 0;
  RX1_Buffer[RX1_Cnt] = SBUF;  //保存一个字节
  if(RX1_Buffer[0]==0x45)
  {
   RX1_Cnt++;
  }
  else
  {
   RX1_Cnt=0;
  }
  if(RX1_Cnt>=10)
  {
   if(RX1_Buffer[0]==0x45&&RX1_Buffer[1]==0x53&&RX1_Buffer[2]==0x50)
   {
    if(RX1_Buffer[4]==0x4C&&RX1_Buffer[5]==0x45&&RX1_Buffer[6]==0x44)
    {
     if(RX1_Buffer[7]==0x31)
     {
      
     }
    }
     }
   RX1_Cnt=0;
  }
   
}

if(TI)
{
  TI = 0;
  B_TX1_Busy = 0;  //清除发送忙标志
}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表