1、C8051f的UART0是异步、全双工串口。其波特率发生器规则由定时器1定时器供给。可装备为8位UART或9位UART(多机通讯第九位用于片选效果)。SYSCLK=24.5MHZ(我的板子选用内部晶振频率作为体系时钟) BAUDRATE=115200(波特率)
2、初值TH1 Tl1装备
由上述公式可计算初值:TH1 = 256-(SYSCLK/BAUDRATE/2)而程序内是TH1 = -(SYSCLK/BAUDRATE/2),这两种是相同的。第一种是以正数的二进制方式保存在计算机内。第二种是负数,取反加1求得补码保存在计算机中。结果是相同的。每逢TL1中的值溢出后 TH1存储的重装载值装载到TL1中开端计数。
3、初始化程序(今后运用可直接调用此初始化函数)。SYSCLK与BAUDRATE参数修正即可
void UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is
// 使能RX接纳
// ninth bits are zeros
// 铲除接纳和发送中止
if (SYSCLK/BAUDRATE/2/256 《 1) {
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON |= 0x10; // T1M = 1; SCA1:0 = xx
} else if (SYSCLK/BAUDRATE/2/256 《 4) {
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON |= 0x01; // T1M = 0; SCA1:0 = 01
CKCON &= ~0x12;
} else if (SYSCLK/BAUDRATE/2/256 《 12) {
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00
} else {
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON |= 0x02; // T1M = 0; SCA1:0 = 10
CKCON &= ~0x11;
}
TL1 = 0xff; // 定时器1加1 TL1溢出 此刻TH1中的重装载值加载 //到TL1中
TMOD |= 0x20; //定时器1设置为8位主动重装载形式
TMOD &= ~0xD0;
TR1 = 1; //敞开定时器1
TI0 = 1; // 发送完毕 此发送中止方位1
}