单片机串口通信问题
需求是接受:ff ff 09 01 十六进制数,发送!#0019$$.
#include "STC12C5A60S2.h" //库文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
char *strcat(char*str1,const char*str2);
/********************************************************************
初始定义
*********************************************************************/
uint i,j,l,m,n;
uchar a[]="0"; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
uchar s[]="";
uchar buffer[]="0";
uchar b;
uchar c[9]="!#001";
uchar d[6]="";
uchar e[3]= "$$" ;
/********************************************************************
功能:串口初始化,波特率9600,方式1
***
******************************************************************/
int zh(uchar s[])
{
int i,m,temp=0,n;
m=strlen(s);
for(i=0;i<m;i++)
{
if(s[i]>='A'&& s[i]<='F')
n=s[i]-'A'+10;
else if (s[i]>='a'&& s[i]<='f')
n=s[i]-'a'+10;
else n=s[i]-'0';
temp=temp*16+n;
}
return temp;
}
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
Init_Com();//串口初始化
while(1)
{
if(RI) //扫描判断tr是否接收到数据,
{
buffer[i]=SBUF; //接收数据SBUF赋与dat
RI=0;//RI 清零。
a[i]=buffer[i];
n=strlen(a);
if((n==8)||(n==10))
{
for(i=0;i<4;i++)
{
b=a[0];
for(j=0;j=n-1;j++)
{a[j]=a[j+1];
}
a[n]=b;
}
if(n==8)
{ sscanf(a,"%2s",s);
}
if(n==10)
{sscanf(a,"%4s",s);
}
}
m=zh(s);
d[0]=m/100+48;
d[1]=(m/10)%10+48;
d[2]= m%10+48;
strcat(c,d);
strcat(c,e);
l=strlen(c);
for(i=0;i<l;i++)
{SBUF=c[i];}
}
}
}