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,问下我这程序错在哪!谢谢了
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会被清零一次。