void mInitSTDIO( )
{
? ? UINT32 x;
? ? UINT8 x2;?
? ? SM0 = 0;? ? //該位為0選擇8位數(shù)據(jù)異步通信
? ? SM1 = 1;? ? //該位為1設(shè)置可變波特率,由定時(shí)器T1或者T2產(chǎn)生
? ? //SM0=0, SM1=1 模式1,8位異步通信方式,波特率可變,由定時(shí)器T1或者T2產(chǎn)生
? ? SM2 = 0;? ? //串口0使用模式1;在模式1時(shí),如果SM2=1,那么只有接收到有效的停止位時(shí),接收才有效
? ??
? ? //使用Timer1作為波特率發(fā)生器
? ? RCLK = 0;? ?//UART0接收時(shí)鐘,該位為0選擇Timer1溢出脈沖產(chǎn)生波特率
? ? TCLK = 0;? ?//UART0發(fā)送時(shí)鐘,該位為0選擇Timer1溢出脈沖產(chǎn)生波特率
? ? PCON |= SMOD;//SMOD=0慢速模式, SMOD=1快速模式
? ? x = 10 * FREQ_SYS / UART0_BUAD / 16;? ? //如果更改主頻,注意x的值不要溢出? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? x2 = x % 10;
? ? x /= 10;
? ? if ( x2 >= 5 ) x ++;? ? //四舍五入
? ? TMOD = TMOD & ~ bT1_GATE & ~ bT1_CT & ~ MASK_T1_MOD | bT1_M1;? ?//0X20,Timer1作為8位自動(dòng)重載定時(shí)器
? ? T2MOD = T2MOD | bTMR_CLK | bT1_CLK; //Timer1時(shí)鐘選擇
? ? TH1 = 0-x;? //12MHz晶振,buad/12為實(shí)際需設(shè)置波特率
? ? TR1 = 1;? ? //啟動(dòng)定時(shí)器1
? ? TI = 1;
? ? REN = 1;? ? //串口0接收使能
}
請(qǐng)問在系統(tǒng)時(shí)鐘設(shè)為24M時(shí),這里的串口配置程序需要修改??x = 10 * FREQ_SYS / UART0_BUAD / 16;? ? //如果更改主頻,注意x的值不要溢出 TH1 = 0-x;? //12MHz晶振,buad/12為實(shí)際需設(shè)置波特率 這兩句怎么理解?如果產(chǎn)品工作環(huán)境溫差大的話,這個(gè)串口的誤差率在允許范圍內(nèi)?