串口初始化程序如下所示:
1#define UART_BPS 115200 //串口通信波特率
2U0LCR=0x83; //DLAB=1,允许设置波特率
3Fdiv=(Fpclk/16)/UART_BPS; //设置波特率
4U0DLM=Fdiv/256; //除数的高8位
5U0DLL=Fdiv%256; //除数的低8位
6U0LCR=0x03; //DLAB=0,禁止访问除数锁存器
波特率除数计算公式,其中,baud为所需要的波特率:
UxDLM,UxDLL=Fpclk/(16*baud)
U0DLL和U0DLM寄存器一起构成一个16位除数,U0DLL包含除数的低8位,U0DLM包含除数的高8位
第4句U0DLM=Fdiv/256可以看成Fdiv>>8位,右移8位就相当于除以256
第5句U0DLL=Fdiv%256是怎么一回事呢?等同于二进制的什么呢?