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

单片机串口发送数组,程序如下,请帮忙修改!!!,第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);

 }

 }

}

#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++);

}

}

通过SBUF! 一块是接受,一块发送!还要设置工作方式。

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

修改如下:

#include<reg52h>

sbit shuru=P1^0;

unsigned char PuZh[16] = "a";

unsigned char BuZh[16] = "b";

bit flaga=0,flagb=0;

void UsartConfiguration();

void Delay10ms(unsigned int c); //误差 0us

void main()

{

unsigned char i;

UsartConfiguration();

while(1)

{

    if(shuru==0 && flaga==0)

    {

    for(i=0; i<16; i++)

        { 

        SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器

        while(!TI); //等待发送数据完成

        TI=0; //清除发送完成标志位

        TR1 = 0; 

        ES = 0; 

        EA = 0; 

        }

        flaga=1;

        flagb=0;

        Delay10ms(500); //延时一下再发 

    }

    else if(shuru==1 && flagb==0)

    {

    for(i=0; i<16; i++)

        { 

        SBUF = BuZh[i]; //将要发送的数据放入到发送寄存器

        while(!TI); //等待发送数据完成

        TI=0; //清除发送完成标志位

        TR1 = 0; 

        ES = 0; 

        EA = 0; 

        }

        flaga=0;

        flagb=1;    

        Delay10ms(500); //延时一下再发

    }

}

/

 函 数 名 :UsartConfiguration()

 函数功能 :设置串口

 输 入 : 无

 输 出 : 无

/

void UsartConfiguration()

{

SCON=0X50; //设置为工作方式1

TMOD=0X20; //设置计数器工作方式2

PCON=0X80; //波特率加倍

TH1=0XFA; //计数器初始值设置,注意波特率是4800的

TL1=0XFA;

// ES=1; //打开接收中断

// EA=1; //打开总中断

TR1=1; //打开计数器

}

void Delay10ms(unsigned int c) //误差 0us

{

unsigned char a, b;

for (;c>0;c--)

{

for (b=38;b>0;b--)

{

for (a=130;a>0;a--);

}

程序采用了查询式发送,for(i=0;i<6;i++) {SendChar(askconfig[i]); },共发送了6个字符。

再去查询收到否。

这种方法,就是有问题的,发送6个字符时,就可能收到了好几个字符,而没有及时保存,完全可能丢失信息。

应该采用中断方式接收;发送,也可以用查询,也可以用中断。

方法弄清楚了,程序就容易编写、调试了。

以上就是关于单片机串口发送数组,程序如下,请帮忙修改!!!全部的内容,包括:单片机串口发送数组,程序如下,请帮忙修改!!!、单片机串口向PC传送一个unsigned int 的数据 急求程序、单片机怎么通过串口发送一串数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9472909.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存