#include 'Reg52.H '
/* * * * * * * * * * * * * * * * * *
请事先计算选择的水晶振动能达到的最高速度。 波特率不能超过最高速度
(1)波特率加倍) SMOD=1) Max_Baud=FOSC/12/16
)波特率不加倍(SMOD=0):Max_Baud=FOSC/12/32
例如,22.1184MHz水晶振动,波特率为倍时,最大波特率=22118400/12/16=115200
* * * * * * * * * * * * * * * * *
#define FOSC 22118400 //振荡频率
#定义保真9600//波特率
#定义Smod1//波特率是否加倍
#if SMOD
# define TC _ val (256-fosc/16/12/baud ) ) )。
#else
# define TC _ val (256-fosc/32/12/baud ) )。
#endif
类型无符号char uint 8;
类型def unsigned int uint 16;
codeconstcharstr1[ ]=' therstringistransmittedfrom 80 c 51! rn ';
codeconstcharstr2[ ]=' author : xqlu (at ) ysu.edu.cnr(n );
/*********函数声明***********************/
语音识别(语音;
语音助手(uint 8;
voidsendrstr (常数单元8 * ptr );
/**********主函数*************************/
语音主(语音) )。
{
uint8 i=0;
InitUART (;
wile(str2[I]!=' ' )
{
sendonebyte(str2[I];
}
sendrstr(str1;
wile(1;
}
/**********中断服务函数* * * * * * * * * * * * * * * * * * * * * * * * /
voidUart_ISR(void ) interrupt 4
{
uint8 RX_Data;
//只根据“接收”中断,到了“发送”中断就直接关掉
是if (射频)
{
RI=0; //串行中断标志无法自行清除,需要手动清除
RX_Data=SBUF;
发送一次字节(rx _ data;
}
else
TI=0; //串行端口中断发生在发送缓冲数据之后
}
/***********串行初始化函数* * * * * * * * * * * * * * * * * * * * * * * /
语音(语音) )
{
TMOD=0x20;
SCON=0x50;
TH1=TC_VAL;
TL1=TH1;
PCON=0x80; //将发送速率加倍
ES=1;
EA=1;
TR1=1;
}
/*********串行发送字符函数* * * * * * * * * * * * * * * * * * * * * /
语音感知字节(uint8c )
{
ES=0; //禁止发送中断
SBUF=c;
while (! 钛;
TI=0;
ES=1;
}
/*********串行发送字符串函数* * * * * * * * * * * * * * * * * * * /
voidsendrstr (常数单元8 * ptr ) ) )。
{
德奥
{
发送一个字节(* ptr;
}while(*ptr!=' ';
}