#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 ) 這個不好理解,謝謝
|