用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 展开
#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 展开
展开全部
我一般用超级终端(位于 开始->附件),超级终端上显示的ASCII字符,而串口发送的则是字符的ASCII码,例如发送0x30这个值,则在超级终端上显示'0',如果想要在超级终端上显示"0x30"则需要依次发这四个字符的ASCII码,'0' 'x' '3' '0'.
不知道这对你的问题是否有帮助,再检查一下 {0x4c,0x57,0x01,0x01,0x02,0x0d}这个几值对应的ASCII字符,与串口上显示的比较一下,看看能否找到答案
不知道这对你的问题是否有帮助,再检查一下 {0x4c,0x57,0x01,0x01,0x02,0x0d}这个几值对应的ASCII字符,与串口上显示的比较一下,看看能否找到答案
更多追问追答
追问
这个程序我刚刚试验了下,我发送一个值,他不反馈那个数组的值 啊,一个值都不反馈
追答
先做一个测试,SBUF = '0',看看超级终端上显示什么。
还有,描述一下你的硬件环境。如何测试、现象等
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询