微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > c51串口程序简单问题?

c51串口程序简单问题?

时间:10-02 整理:3721RD 点击:
#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,问下我这程序错在哪!谢谢了

你串口助手那里选择发送十六进制类型。你这种情况是显示类型为阿诗玛

if(com_dat == 8) flag=1,com_dat = 0;这个语句有问题吧,有一个道号也能编译通过么?假如是分号,那么这两条语句就要加{}括在一起,不然每接一个数据com_dat会被清零一次。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top