单片机串口通信问题

liyanzhao2016 2018-08-16 01:08:55
需求是接受: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];}
}
}
}
...全文
368 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
光立新 2018-08-24
  • 打赏
  • 举报
回复
这不像是个问题呀
Votangroom 2018-08-22
  • 打赏
  • 举报
回复
当然了,十六进制可没有!$这种
飞翔赛思 2018-08-22
  • 打赏
  • 举报
回复
需求是接受:ff ff 09 01 十六进制数,那你为什么不发送 ff ff 09 01 试试?
liyanzhao2016 2018-08-21
  • 打赏
  • 举报
回复
我接受的是16进制数,是不是还得转换成asc码?
of123 2018-08-17
  • 打赏
  • 举报
回复
关注一下波特率。可以用示波器抓一下波形,既可以看到输出的字符帧各 bit 是否正确,也可以测量 bit 周期是否如你预期。
liyanzhao2016 2018-08-16
  • 打赏
  • 举报
回复
输出不对,不是想要的代码
Votangroom 2018-08-16
  • 打赏
  • 举报
回复
lz贴代码干嘛?问题是什么?+1
worldy 2018-08-16
  • 打赏
  • 举报
回复
lz贴代码干嘛?问题是什么?

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧