#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4) //1T
unsigned char buf[0x10];
unsigned char str[]; //字符串数组
unsigned char rp = 0;
unsigned char sp = 0;
sfr AUXR = 0x8e;
sfr T2L = 0xD7;
sfr T2H = 0xD6;
void UartInit()
{
SCON = 0x50; //可变波特率8位数据方式
AUXR = 0x15; //不分频
T2L = BRT;
T2H = BRT >> 8;
ES = 1; //使能串口中断
EA = 1; //中断开关
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen) 这里是不是要先定义字符串数组,这里能不能优化一下
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
}
while (k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
EA = 0;
if (RI)
{
RI = 0 ;
buf[ rp++ ] = SBUF;
rp &= 0x0f;
}
EA = 1;
}
main()
{
UartInit(); //初始化串口
while ( 1 )
{
if( rp ^ sp )
{
send_char_com( buf[ sp++ ] );
sp &= 0x0f;
}
}
}
if( rp ^ sp ) 这个不好理解,谢谢
|