串行口独立波特率发生器
例如:Fosc=11.59200MHzBaud=9600
Reload=256-INT(1159200/9600/32/12+0.5)
=256-3
=253
=FD
Baud=1159200/(256-253)/32/12//检验有无误差
=9600
无误差
程序:
#include
#define uchar unsigned char
void SendByte(unsigned chardat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void SendStr(unsigned char*s)
{
while(*s!=' ')// 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
void initUART(void)
{
SCON=0x50; //SM1=1 SM0=0REN=1
BRT = 0XFD; //设置独立波特率发生器的重装值
AUXR=0X11;//设置独立波特率发生器
AUXR1 = 0X80;//串口设为txd--P1.3rxd--P1.2
}
void main()
{
initUART();
SendStr("正在初始化...");
while(1)
{
P0=0xfe;
}
}
void chuankou() interrupt 4
{
unsigned char i;
if(RI)
{
RI=0;
i=SBUF;
P2=i;
}
}
AUXR寄存
T0x12和T1x12用于设置定时器0和定时器1的速度。EXTRAM用于
设置是否允许使用内部扩展的1024字节扩展RAM。
1)UART_M0x6:串行口模式0的通信速度设置位。
0:UART串口模式0的速度是传统12T的8051速度,12分频。
1:UART串口模式0的速度是传统12T的8051的6倍,2分频。
2)BRTR:独立波特率发生器运行控制位。
0:不允许独立波特率发生器运行。
1:允许独立波特率发生器运行。
3)S2SMOD:UART2的波特率加倍控制位。
0:UART2的波特率不加倍。
1:UART2的波特率加倍。
4)BRTx12:独立波特率发生器计数控制位。
0:独立波特率发生器每12个时钟计数一次。
1:独立波特率发生器每1个时钟计数一次。
5)S1BRS:串口1波特率发生器选择位。
0:选择定时器1作为串口1波特率发生器。
1:选择独立波特率发生器作为串口1的波特率发生器,此
时定时器1得到释放,可以作为独立定时器使用。