c51串口程序简单问题?

2019-07-16 02:25发布

#include<reg51.h>
unsigned char flag;
int zhibi_js[8], com_dat; //从串口接收的数据
unsigned char a;
/***************************
        串口初始化
***************************/
void uart_inint()
{
     REN=1;
  SM0=0;
     SM1=1;
  TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  EA=1;
     ES=1;
}
/***************************
         判断
***************************/
void panduan ()
{
        if((zhibi_js[2]=0xEF)&&(zhibi_js[3]=0x01))                       //如果数组第2位和第3位是EF 01时
    a=1;                                 //判断a值为1
  if((zhibi_js[2]=0xEF)&&(zhibi_js[3]=0x02))              //如果数组第2位和第3位是EF 02时
    a=5;                                //判断a值为5
  if((zhibi_js[2]=0xEF)&&(zhibi_js[3]=0x03))             //如果数组第2位和第3位是EF 03时
    a=10;                                //判断a值为10
  if((zhibi_js[2]=0xEF)&&(zhibi_js[3]=0x04))              //如果数组第2位和第3位是EF 03时
    a=20;                                //判断a值为20
  if((zhibi_js[2]=0xEF)&&(zhibi_js[3]=0x05))              //如果数组第2位和第3位是EF 03时
          a=50;                                //判断a值为50
  else
    a=0;                   //否则a为0
}
/**********************************
     接收中断
**********************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1)   
{
  zhibi_js[com_dat] = SBUF;      //串口接收数组
  RI = 0;
  com_dat++;
  if(com_dat == 8) flag=1,com_dat = 0;  //当数组个数是8个时com_dat清零,防止溢出  
}
EA = 1;
}
void main()
{
     uart_inint();
  while(1)               
  {   
   if(flag==1)   //如果收到数组            
   {                  
     ES=0;
     flag=0;
           panduan();      //判断a的值
     SBUF=a;    //串口发送a的值
     while(!ti);
     TI=0;
     ES=1;
   }
  }
}
编译的时候0错误0警告  可是为什么我用串口助手不管发送什么数组单片机发回来a的值都是32,问下我这程序错在哪!谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
您好,早安
1楼-- · 2019-07-16 03:12
你串口助手那里选择发送十六进制类型。你这种情况是显示类型为阿诗玛
fishpss
2楼-- · 2019-07-16 04:52
if(com_dat == 8) flag=1,com_dat = 0;这个语句有问题吧,有一个道号也能编译通过么?假如是分号,那么这两条语句就要加{}括在一起,不然每接一个数据com_dat会被清零一次。

一周热门 更多>