永发信息网

单片机和串口调制助手通信数据接收不到

答案:4  悬赏:50  手机版
解决时间 2021-02-10 05:24
程序代码如下!
#include
#include
//unsigned char uchar;
#define uchar unsigned char;

sbit p17=P1^7; //控制485发送接收使能
uchar ch;//要接收的数据
uchar count;
#define InBuf_len 4 // 定义接收数组长度
uchar InBuf[InBuf_len]; //串口数据接收缓冲区数组
char a[2]={1,2};//转存要发送的数
bit read_flag= 0 ;

void receive(void) interrupt 4//接收中断服务子程序
{
if(RI==1)
{
p17=1;
count=0;
//uchar ch;
ch=SBUF;
if(ch>127)
{
count=0;
InBuf[count]=ch-128;
//checksum=ch-128;
}
else
{
count++;
InBuf[count]=ch;
//checksum^=ch;
if((count==(InBuf_len- 1 )))
{
read_flag=1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,就置位取数标志
count=0;
}
}
p17=0;
}
}
void send_char(char b) //向串口发送一个字节数据//
{//char b;
SBUF=b; //将需发送的字节放到发送缓冲区//
while(TI==0); //等待发送完成//
TI=0; //清除发送完成中断标志//
}

void send_string(char *str,int strlen) //向串口发送一个字符串,strlen为该字符串长度
{
int k=0;
while(k {
send_char(*(str + k));
k++;
}
}
void delay() //延时//
{
char i,j;
for(i=0;i<200;i++)
{
for(j=0;j<200;j++){}
}
}

void UART_Init() //串口初始化函数
{

SCON=0x50; //无校验//0xD0//0xF0;////方式1 允许接受//SM2=0
TMOD=0x20; //T1模式2自动重装 T0模式1,16位定时,
TCON=0x40;
PCON=0x00; ///0x00波特率不加倍SMOD=0////0x80;波特率翻倍SMOD=1
TH1=0x40; //波特率为9600,3.6864MHz 时为 40
TL1=0x40;
TI=1;
TR1 = 1; //波特率开启 //TR0=1;//T0开启
IE&=0xf7; //关定时器1的中断
IE |= 0x90 ; //Enable Serial Interrupt ES=1,EA=1
// ES = 1;
// EA = 1;
}

void change() //收到的数据交换存储,
{
a[1]=InBuf[2];
a[0]= InBuf[3];
//InBuf[4]=a;
}

main()
{
int i;
char s[6]="error";
WDT_CONTR=0x35;
read_flag=1;//先向pc机发送一个响应,看是否已连接正常
//初始化//
UART_Init();

printf("%s","kaishi!\n");

while(1)
{
// scanf("%d",&i);
//printf("%d",i);
if(read_flag)
{
read_flag=0;//标志位清0;

if(InBuf[0]==5&&InBuf[1]==5)//判断是否时正确命令,若是则发送响应 ,否则提示错误,发送0
{
change();
p17=1;
send_string(a,2);
p17=0;

for(i=0;i<2;i++)
{
printf("%c",a[i]);
}

}

else
{
for(i=0;i<5;i++)
{p17=1;
//send_char('e');//提示命令错误
send_string(s,6);
p17=0;
}
}
}
}

}这里用到max485芯片P1^7为控制引脚哪里不明白可以说!

单片机连接电脑时已经将485转成232了 ,再烧写程序时串口调试助手上显示数据,但是都是乱码看不懂!
最佳答案
一. 电脑与单片机电路连接应当使用 485转232的转换器,这个你没讲清楚,否则是不能相连的。
二. 发送前max485芯片的控制脚驱动后要加延时,发送后也是。
三. 编程养成好习惯。程序的调试要从最简单的开始,一步步验证。你可以先让单片机只做一件事,就是使能后,循环发送一个相同字节。验证是否好使。如没问题,一步步增加代码,这样出了问题好知道是哪的事。
四. 电脑接收的设置,电脑自身收发是否好使,这些环节都要检查。
祝你顺利。
全部回答
把原程序发上来,帮你调试,别发图片,看的不方便。更主要是不能调试的。更不能自己现打这些程序吧。既然来提问,也得自己有诚意。这样,没有一点诚心,别人怎么帮你。
你让单片机发数据,然后用示波器打脚看有没有波形,其次,计算机是232,应该用max232,485的电平是不一样的,并且带电插拔串口很容易烧串口的!
你用RS485通信,串口调试助手电脑端是RS232啊,你的硬件连接有没有问题啊?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国建设银行(来安支行)地址好找么,我有些事
组成蛋白质的基本元素是A. C、H、O、N B. C、
钙片什么时候吃最好?还是空腹吃好
中国邮政储蓄银行(来安县支行)地址有知道的么
成都铁路局火车票代售处(中兴路店)地址有知道
梦到一条花蛇,我扯着它的尾巴用力甩没打死,
一个手机广告歌曲 一个女的戴着耳麦唱的
中国工商银行(来安支行)地址好找么,我有些事
大鹏发艺地址有知道的么?有点事想过去
花椒可以反复使用吗?就是炝锅的时候用了一次
中国农业银行(汊河支行)地址有知道的么?有点
UG6.0如何用拉伸做出全封闭的片体
滦南青年俱乐部这个地址在什么地方,我要处理
【过年的来历】阅读:过年的来历(寒假新时空6
中国农业银行(大英营业所)地址在哪,我要去那
推荐资讯
一位女歌手唱英文歌中间是海威恶go,inwhat
老窖馒头这个地址在什么地方,我要处理点事
黑客如何查找网络安全漏洞
我的世界神奇宝贝欧卡里路怎么学会波导弹
玫瑰之约婚纱摄影(中心大桥与洋湖线交叉口南1
怎样换房贷更划算5分
毕业论文开题报告中计划在哪方面有所突破怎么
已婚女梦见小男孩叫我妈妈快去接他???
优之良品中的那个之字可用哪个符号代替,电脑
我有一张民生借记卡不想要,需要去银行注销吗
神洲宾馆-停车场怎么去啊,我要去那办事
眼镜单光和散光有什么区别?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?