二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,
作如下修改就可以了(仿真输出结渣答果见代码后面的图):
#include<reg52.h>//注意:11.0592M晶振 波特率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=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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)