
#ifndef uchar
#define uchar unsigned char
#define uint unsigned int
#endif
//__CONFIG(0x2129)
bit rec_flag //串口中断标志位,有串口中断,置1
uchar uartdata //串口数据保存到此位置中
void Uart_char(uchar dat)//串口发送一个数据
/*************************************************************
函数原型:void main(void)
功能:等待串口发送中断到来,将接收到的设计再通过串口发回
*************************************************************/
void main(void)
{
TRISB1=1
TRISB2=1
SPBRG=0X19 //设置波特率为9600BPS
TXSTA=0X24 //使能串口发送,选择高速波特率
RCSTA=0X90 //使能串口工作,连续接收
RCIE=0X1 //使能接收中断
GIE=0X1 //开放全局中断
PEIE=0X1 //使能外部中断
//INTCON=0X00
/* while(1) //查询模式下
{
RCIE=1
while(RCIF==0)
RCIE=0
Send_char(RCREG)
}
*/
while(1) //中断模式下,等待中断的到来
{
if(rec_flag==1) //如果接收中断到来
{
rec_flag=0//接收标志清零
Uart_char(uartdata)//将接收来的数据发送到串口
}
}
}
/**********************************************
函数原型:void Uart_char(uchar dat)
功能:将dat数据通过串口传送出去
**********************************************/
void Uart_char(uchar dat)
{
TXREG=dat //将dat数据存入TXREG
// TXEN=1 //启动发送,TSR开始移位 *** 作。
while (TRMT==0) //判断是否TSR发送完毕,未完等待。
// TXEN=0 //关发送功能,防止TXREG空时,TXIF产生置位
}
/**********************************************
函数原型:void interrupt usart(void)
功能:串口接收到数据,接受发来的数据将接
收到数据标志位rec_flag置1
**********************************************/
void interrupt usart(void)
{
if(RCIF) //判断是否为串口接收中断
{
rec_flag = 1
//RCIF=0
uartdata = RCREG// 接收数据并存储
//TXREG=recdata //把接收到的数据发送回去
}
}
这段程序应该对你有用
二进制数组不像字符串一样有结束标志,不能直接用发送数组的函数发送,
作如下修改就可以了(仿真输出结果见代码后面的图):
#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)
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)