更改HIRC频率的步骤如下:
1. Trim value = RCTRIM0(HIRCTRIM[8:1]) + RCTRIM1(HIRCTRIM[0])
将Trim value–15可以调整HIRC的频率为16.6 MHz。
2. 将计算值写回RCTRIM0 和RCTRIM1,写入后HIRC的更改会立即生效。
3. 每次上电后HIRC会恢复成16 MHz,使用者需要通过写SFR来更改HIRC。
4. 按照16.588 MHz重新计算baud rate,再设定timer产生的baud rate就能符合标准baud rate。
void Make_HIRC_16p6MHz(void)
{
unsigned char hircmap0, hircmap1;
unsigned int trimvalue16bit; /* Since only power on will reload RCTRIM0 and RCTRIM1 value, check power on flag*/
//产生上电复位(冷复位),其它任何方式复位不会影响改位(POF)
if((PCON & SET_BIT4) == SET_BIT4)
{
hircmap0 = RCTRIM0;
hircmap1 = RCTRIM1;
trimvalue16bit = ((hircmap0<<1) + (hircmap1&0x01));
trimvalue16bit = trimvalue16bit - 15;
hircmap1 = trimvalue16bit & 0x01;
hircmap0 = trimvalue16bit >> 1;
TA = 0xaa;
TA = 0x55;
{
RCTRIM0 = hircmap0;
}
TA = 0xaa;
TA = 0x55;
RCTRIM1 = hircmap1;
//After modify HIRC value, clear power on flag
PCON &= CLR_BIT4;
}
}
把上面的代码 放入在初始化函数中。就可以提高到主频16.6Mhz
void Uart0_MyInit_Base16p6MHz(void)
{
P06_Quasi_Mode;
P07_Quasi_Mode;
//SCON寄存器:模式1/接收总是有效不管停止位的逻辑电平/接收使能
SM0 = 0;
SM1 = 1;
SM2 = 0;
REN = 1;
P06_Quasi_Mode;
P07_Quasi_Mode;
SCON = 0x50; //UART0 Mode 1/SM1=1/REN=1
//模式1/接收总是有效不管停止位的逻辑电平/接收使能
set_SMOD; //UART0 Double Rate Enable
T3CON &= 0xF8; //T3PS:2/T3PS:11/T3PS:0 = 000(时钟分频 = 1/1)
set_BRCK; //串口0波特率时钟源为Timer3
RH3 = 0xff;
RL3 = 0xf7;
set_TR3;
ES = 1;
}
把上面的代码放入初始化中,就可以调整串口的波特率为115200