一般设置为2400的整数倍速,如2400, 4800,9600 19200波特率计算。。。115200. 当然你设置为1000也可以的。
//*******************************************************************
//函数名称:void SetBps(u16 uiBps)
//函数功能:设置串口接收数据的BPS
//入口参数:uiBps:接收数据的波特率
//*******************************************************************
void SetBps(u32 ulBps)
{
u16 uiDat;
uiDat = 65536 - CRYSTAL/ulBps/32;
TH2 = uiDat/256;
RCAP2H = uiDat/256;
TL2 = uiDat%256;
RCAP2L = uiDat%256;
TR2 = 1;
REN = 1;
}
建议你看看波特率与晶振的计算与关系,/zzwdkxx/article/details/8873061
单片机串行口方式0、方式1的初始化,方式1波特率的计算
下载一个单片机小精灵,就不要去算了,至于公式,资料上都很详细,和晶振有关,没啥可说,标志
TI
发送后为1,如果接收一个字节结束,则RI为1,找本书看看,
51单片机波特率=计数器或定时器的溢出速率/n在用串口方式1时计数器或定时器的溢出速率=计数速率/(256-THx)这中的n与你单片机在PCON中SMOD位的设置有关,SMOD设为1时n=32SMOD设为0时n=16因T1在做波特率发生器时TH1中是重(再)装载的值发送完成SCON中的ti位为1新接收到信息SCON中的ri位为1特别要注意的是二个中断标志位和其它的中断标志位全不一样,中断RETI返回指令不能对它们清除必须在程序中用软件去清除,否则会对你无完无了的中断,嘿嘿!
单片机不同晶振怎么计算延迟时间
改用12mhz的
它们的值还是0xfd,不过误差就是8.51%。
把定时器做波特率发生器,计算公式:
t1,t2计数器内部一样:
fosc/(32*12*(256-th1));
//11.0592,(9600,8,1)值为0xfd,fosc:晶振频率hz
11.0592m是因为在进行通信时,12m频率进行串行通信不容易实现标准的波特率,比如9600,4800,而11.0592m计算时正好可以得到,因此在有通信接口的单片机中,一般选11.0592m