单片机串口发送数组,程序如下,请帮忙修改!!!

现在可以发送字符串,但不会发送数组。求解!程序如下:#include<reg52.h>//注意:11.0592M晶振波特率9600sbitkey1=P2^0;sbitke... 现在可以发送字符串,但不会发送数组。求解!程序如下:

#include<reg52.h>//注意:11.0592M晶振 波特率9600
sbit key1=P2^0;
sbit key2=P2^1;
unsigned char code J50-2[ ]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0X4B,0X22,0X01,0X03,0X01,0X0A,0X0A,0X7C,0X00}; //如何发送出去
unsigned char code J50-3[ ]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0XAC,0X22,0X02,0X03,0X01,0X0A,0X0A,0X1A,0X00}; //如何发送出去
unsigned char code String1[ ]={"Test 1 Pass !\r\n"};
unsigned char code String2[ ]={"Test 2 Pass !\r\n"};

/**************************************************************
函数功能:延时若干毫秒
**************************************************************/
void delayms(unsigned int ms)
{
unsigned int i;
while(ms--)
for(i=0;i<600;i++);
}
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void SendByte(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
/*****************************************************
函数功能:向PC发字符串
***************************************************/
void SendStr(unsigned char *str) //第2种发送字符串函数
{
while(*str!=0)
{
SendByte(*str);
str++;
delayms(1); //延时 N ms
}
}
/*****************************************************
函数功能:串口初始化
***************************************************/
void UartInit(void)
{
SCON=0x50; //串口工作方式1,8位UART,波特率可变
TH2=0xFF;
TL2=0xFD; //波特率:115200 晶振=11.0592MHz
RCAP2H=0xFF;
RCAP2L=0xFD; //16位自动再装入值
TCLK=1;
RCLK=1;
C_T2=0;
EXEN2=0; //波特率发生器工作方式
TR2=1 ; //定时器2开始
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
UartInit();
SendStr("How are you!\r\n");
while(1)
{
//SendStr(J50-2); //发送不成功
if(key1==0)
{
P1=0xFE;
SendStr(String1); //发送数据
delayms(10); //10ms发送一次数据
P1=0XFF;
delayms(10);
}
//SendStr(J50-3); //发送不成功
if(key2==0)
{
P1=0xFD;
SendStr(String2); //发送数据
delayms(10); //10ms发送一次数据
P1=0XFF;
delayms(10);
}
}
}
本程序是通过单片机发送数据串后,对方接到数据后对应单片机p1有变化,现在无法发送出去!
展开
 我来答
he_123456
2017-04-10 · TA获得超过2892个赞
知道大有可为答主
回答量:3162
采纳率:58%
帮助的人:1347万
展开全部

二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,

作如下修改就可以了(仿真输出结果见代码后面的图):

#include<reg52.h>//注意:11.0592M晶振 波特率9600
sbit key1=P2^0;
sbit key2=P2^1;
unsigned char code J50_2[ ]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0X4B,0X22,0X01,0X03,0X01,0X0A,0X0A,0X7C,0X00}; //如何发送出去
unsigned char code J50_3[ ]={0X00,0X00,0XFF,0X09,0X09,0XFF,0XFF,0XAC,0X22,0X02,0X03,0X01,0X0A,0X0A,0X1A,0X00}; //如何发送出去
unsigned char code String1[ ]={"Test 1 Pass !\r\n"};
unsigned char code String2[ ]={"Test 2 Pass !\r\n"};
/**************************************************************
函数功能:延时若干毫秒
**************************************************************/
void delayms(unsigned int ms) 
{
 unsigned int i;
 while(ms--) 
 for(i=0;i<600;i++); 
}
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void SendByte(unsigned char dat)
{
 SBUF=dat;
 while(TI==0);
 TI=0;
}
/*****************************************************
函数功能:向PC发字符串
***************************************************/
void SendStr(unsigned char *str) //第2种发送字符串函数
{
while(*str!=0)
 {
 SendByte(*str);
 str++;
 delayms(1); //延时 N ms
 }
}
/*****************************************************
函数功能:向串口发n个字节数据
***************************************************/
void SendnBytes(unsigned char *str,unsigned int n) //发送n个字节函数
{
while(n--!=0)
 {
 SendByte(*str);
 str++;
 delayms(1); //延时 N ms
 }
}
/*****************************************************
函数功能:串口初始化
***************************************************/
void UartInit(void)

 SCON=0x50; //串口工作方式1,8位UART,波特率可变 
TH2=0xFF; 
 TL2=0xFD; //波特率:115200 晶振=11.0592MHz 
 RCAP2H=0xFF; 
 RCAP2L=0xFD; //16位自动再装入值
TCLK=1; 
 RCLK=1; 
 C_T2=0; 
 EXEN2=0; //波特率发生器工作方式
TR2=1 ; //定时器2开始 
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
 UartInit();
 SendStr("How are you!\r\n");
 while(1)
 { 
 //SendStr(J50_2); //发送不成功
 SendnBytes(J50_2,sizeof(J50_2)); //发送成功
if(key1==0)
 {
 P1=0xFE;
 SendStr(String1); //发送数据
delayms(10); //10ms发送一次数据 
P1=0XFF;
 delayms(10);
 } 
 //SendStr(J50_3); //发送不成功
 SendnBytes(J50_3,sizeof(J50_3)); //发送成功
if(key2==0)
 {
 P1=0xFD;
 SendStr(String2); //发送数据
delayms(10); //10ms发送一次数据 
P1=0XFF;
 delayms(10);
 }
 }
}

更多追问追答
追问
我用串口工具是可以看到程序实现了。
我现在要让单片机A发这两个数组给另一快单片机B,单片机B收到对应数组后再反馈数据给单片机A,让A点灯。这样能实现吗?
追答
这样看你的具体电路,还有你需要制定一套通信协议,就好像两个人接头对暗号一样
zhxiufan
2017-04-10 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
void main(void)
{
unsigned char nn;
UartInit();
SendStr("How are you!\r\n");
while(1)
{
nn=0;
while(nn<16)
{
SendByte(J50-2[nn]);
nn++;
}
if(key1==0)
{
P1=0xFE;
SendStr(String1); //发送数据
delayms(10); //10ms发送一次数据
P1=0XFF;
delayms(10);
}
nn=0;
while(nn<16)
{
SendByte(J50-3[nn]);
nn++;
}

if(key2==0)
{
P1=0xFD;
SendStr(String2); //发送数据
delayms(10); //10ms发送一次数据
P1=0XFF;
delayms(10);
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式