串口接收没有实现,不科学,不理解

2020-01-17 19:11发布

大神们好,我的目的是要实现串口接收一组字符串并作出相应动作,下面的程序本意是要其接收到串口助手发送的11111111时P1^0置1,接收到22222222时P1^1置1的,但是我昨晚试了没有成功实现,楼主能帮我看看哪里不行?
#include <reg52.h>
#include <intrins.h>
#define uch unsigned char
#define uint unsigned int


uch idata buf[8];


void init(void)
{
TMOD = 0X20;
TH1 = 0XE8;
TH1 = 0XE8;
TR1 = 1;
SCON = 0X50; // 1 ,REN = 1
P1 = 0X00;
}


void receive(uch idata * d)
{
uch i;
while(RI == 0);
for(i=0; i<8; i++)
{
d[i] = SBUF;
}
if(d[0] == 1)
{
P1 = 0x01;
}
if(d[0] == 2)
{
P1 = 0x02;
}
if(d[0] == 3)
{
P1 = 0x04;
}
RI = 0;
}


void main(void)
{
while(1)
{
init();
receive(buf);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
steaven2016
1楼-- · 2020-01-19 10:42
while(RI == 0);
for(i=0; i<8; i++)
{
d[i] = SBUF;
}

------------------

for 你个鬼,第一行:等待串口字符过来;第2~:5行:明明收到的是一个字符,连续读8次SBUF你到底想作什么?
柯铭凯
2楼-- · 2020-01-19 10:56
steaven2016 发表于 2016-4-14 13:44
while(RI == 0);
for(i=0; i

有道理,我改下。
但是前辈,我用串口助手发的8个1过去。11111111也是没有动作,按理说d【0】比对到的也是1啊。
zhuxm
3楼-- · 2020-01-19 12:18
 精彩回答 2  元偷偷看……
柯铭凯
4楼-- · 2020-01-19 14:01
zhuxm 发表于 2016-4-14 14:41
把init函数放到在main()里这么难吗?,不断地给T1赋值,P0置0,中断能有吗?去下载《划时代-51 ...

谢谢,前辈,千言万语尽在不言中

一周热门 更多>