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

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

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

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

#include<reg52h>//注意:110592M晶振 波特率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 晶振=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单片机把一个整型数组数据,发送给等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9838027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存