用51单片机串口发送一组数据

#include"STC89C51RC_RD_PLUS.H"#defineucharunsignedchar#defineuintunsignedintucharaskc... #include "STC89C51RC_RD_PLUS.H"

#define uchar unsigned char
#define uint unsigned int

uchar askconfig[]= {0x4c,0x57,0x01,0x01,0x02,0x0d}; //发送握手
void System_Init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFC;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}

void Delay (uint Milliseconds)//延时1ms,
{
uchar b;
for(b=245;b>0;b--)
for (; Milliseconds > 0; Milliseconds--);
}

void main()
{
uchar begin,i;
System_Init();
Delay(200);
while(1)
{
if(RI==1) //用串口助手发一个值进入
{
begin=SBUF;
RI=0;
for(i=0;i>6;i++)
{
SBUF=askconfig[i];
while(!TI);
TI=0;
}

}
}
}

程序是我用串口发送一个值,然后串口启动,开始发送一组数据,在给串口一个值,串口回传一组数据。

不过程序好像发送的值在串口上显示的不对,不是数组里面的值,不知道问题出在哪儿,要是想让他出现数组里面的值,应该怎么样改?最佳答案我追加分,谢谢
晶振是14.7456M 波特率9600 单片机STC89C52
展开
 我来答
一概而论08
2011-05-17 · TA获得超过137个赞
知道小有建树答主
回答量:136
采纳率:100%
帮助的人:108万
展开全部
我一般用超级终端(位于 开始->附件),超级终端上显示的ASCII字符,而串口发送的则是字符的ASCII码,例如发送0x30这个值,则在超级终端上显示'0',如果想要在超级终端上显示"0x30"则需要依次发这四个字符的ASCII码,'0' 'x' '3' '0'.
不知道这对你的问题是否有帮助,再检查一下 {0x4c,0x57,0x01,0x01,0x02,0x0d}这个几值对应的ASCII字符,与串口上显示的比较一下,看看能否找到答案
更多追问追答
追问
这个程序我刚刚试验了下,我发送一个值,他不反馈那个数组的值 啊,一个值都不反馈
追答
先做一个测试,SBUF = '0',看看超级终端上显示什么。
还有,描述一下你的硬件环境。如何测试、现象等
303129231
2011-05-17 · 超过18用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:40.7万
展开全部
那串口上显示的值是多少啊
追问
我是用串口调试助手调试用的,实际运用是和单片机通讯的,就是不知道这个还要装换格式吗,就如楼上说的,转换为ASCII码?
追答
你发的是字符格式的 所以单片机接受的是他对应的ASCLL码  所以你不能用数组发 或者你接收后要处理转换一下 可以尝试用强制转换(int)试试 我没试过 不一定好用 呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式