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

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

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

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

#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=0i<600i++) 

}

/*****************************************************

函数功能:向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)

 }

 }

}

C 语言

void UartInit(void) //9600bps@12MHz

{

PCON &= 0x7f //波特率不倍速

SCON = 0x50 //8位数据,可变波特率

BRT = 0xD9 //设定独立波特率发生器重装值

AUXR |= 0x04 //独立波特率发生器时钟为Fosc,即1T

AUXR |= 0x01 //串口1选择独立波特率发岁谈生燃消器为波特率发生器

AUXR |= 0x10 //启动独立波特率发生器

}

汇编

UARTINIT: 9600bps@12MHz

ANL PCON,#7FH 波特率不倍速

MOV SCON,#50H 8位数据,可变波特率

MOV BRT,#0D9H 设定独立波特率发生器重装值

ORL AUXR,#04H 独立波特率发生器时钟为Fosc,即1T

ORL AUXR,#01H 串口1选择独立波特率发生器为乎段碰波特率发生器

ORL AUXR,#10H 启动独立波特率发生器

RET

#include<reg51.h>

void initUART(void)

{

 TMOD=0x20   //M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位)

 SCON=0x50   //SM0=0,SM1=1,REN=1 串口工作方式1,允许接收

 TH1=0xfd    //晶液冲振11.0592时,波喊蔽特率9600

 TL1=TH1     //TL1计数,溢出后,TH1值送入TL1

 EA=1        闹渗歼//开总中断

 ES=1        //允许串口中断

 TR1=1       //启动定时器1

}

void main()

{

while(1)

initUART()  //调用串口初始化子程序

}

void UARTinterrupt( ) interrupt 4

{

if(RI)

  RI=0

P1=SBUF

}

}


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

原文地址: https://outofmemory.cn/yw/12536368.html

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

发表评论

登录后才能评论

评论列表(0条)

保存