二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,
作如下修改就可以了(仿真输出结果见代码后面的图):
#include<reg52h>//注意:110592M晶振 波特率9600sbit 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 晶振=110592MHz
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);
}
}
}
我现在就给你写个,
unsigned char n;
unsigned char tab[20]; 定义一个有20个元素的数组,其中每个元素是1BYTY
即8位2进制数。
for(n=0;n<20;n++) 做一个20次的循环
{
ES=0; 关闭串口中断,以免误进入中断程序,当然没有中断程序的话可以不关闭
SBUF=tab[n]; 把数组tab[20]中的数据依次装入串口发送寄存器;
while(!TI); 等待发送,
TI=0; 发送完1BYTE后,清除发送中断标志位,这里是采用查询法,也可以用
} 中断法
看来你是个初学者
希望对你有帮助!
void Init_Serial(void)
{ RD485=0;
SCON = 0x50; //串口工作方式1
TMOD = (TMOD&0x0F)|0x20; //选择定时器1方式2
PCON = 0x80; // 波特率倍增
TH1 = 0xF6; // 计数初值9600bps
TR1 = 1; // 启动定时器1
IE |= 0x90 ; //Enable Serial Interrupt
SBUF=0x00;
RI=0;
}
void delay(void)
{ unsigned int i;
for(i=0; i<9500; i++);
}
void sendbit(unsigned char ch,int len)
{
int flaglen=0;
RD485=1;
delay();
while (flaglen<len) {
while(!TI) /检查发送标志/
{; }
TI=0;
SBUF=(ch+flaglen); /发送数据/
flaglen++;
}
delay();
RD485=0;
} void serial () interrupt 4 using 3
{ if (RI)
{
if(fg>=3)
fg=0;
b[fg]=SBUF;
fg++;
RI = 0 ;
}
}
这个程序的单片机晶振是18432M的,你用的时候把要发送的整形数据的高低八位放到字符型的数组里,通过中断就能在另一个单片机里接收了,这个程序在发送和接收的单片机里都能用。
#include <AT89X51h>
#define uchar unsigned char
#define uint unsigned int
uchar idata trdata[]={'8','9','S','5','1',0x0d,0,0x00};
uchar idata trdata1[]={'R','I','C','H','M','C','U',0x0d,0,0x00};
main()
{
uchar i;
uint j;
SCON= 0x40; //串口方式1
PCON=0; //SMOD=0
REN=1; //允许接收
TMOD= 0x20; //定时器1定时方式2
TH1= 0xe6; //12MHz 1200波特率
TL1= 0xe6;
TR1= 1; //启动定时器
while(1)
{
i=0;
while(trdata[i]!=0x00)
{
SBUF=trdata[i];
while(TI==0);
TI=0;
i++;
}
for (j=0;j<50000;j++);
i=0;
while(trdata1[i]!=0x00)
{
SBUF=trdata1[i];
while(TI==0);
TI=0;
i++;
}
for (j=0;j<50000;j++);
}
}
以上就是关于单片机串口发送数组,程序如下,请帮忙修改!!!全部的内容,包括:单片机串口发送数组,程序如下,请帮忙修改!!!、求一个51串口发送数组程序、c51语言编写,串口通讯程序,实现AT89S52单片机把一个整型数组数据,发送给等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)