单片机串口发送数组,程序如下,请帮忙修改!!!
现在可以发送字符串,但不会发送数组。求解!程序如下:#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有变化,现在无法发送出去! 展开
#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有变化,现在无法发送出去! 展开
2个回答
展开全部
二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,
作如下修改就可以了(仿真输出结果见代码后面的图):
#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点灯。这样能实现吗?
追答
这样看你的具体电路,还有你需要制定一套通信协议,就好像两个人接头对暗号一样
展开全部
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);
}
}
}
{
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);
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询