8051单片机的UART0串口初始化

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
}

智能音箱市场销售量未来3年内将保持50%以上的复合增速
直流电机调速器维护检修工作
华为nova8系列正式发布 搭载麒麟985芯片
晶圆代工打响价格战!
应用在紫外线杀菌灯中的UVC杀菌灯珠
8051单片机的UART0串口初始化
能量收集系统为无能为力者提供动力
塑料颗粒烘干水分测试方案
「模拟电路设计」输入偏置电流
吴恩达landing.ai旨在帮助制造商利用人工智能技术提升生产效率
MC44603P引脚功能的电压资料参数
无线充电与想象中相差甚远
案例I酒吧千万要做信号覆盖!快收藏这套宝藏清单~
0.1-50V可调电源电路原理图
电子元器件的几种识别方法
亚洲百人VR一体机体验!瑞芯微RK3288芯片显本色
回顾四十年间自动驾驶的发展和未来的应用
关于压电光纤相位调制器的简单介绍
300 CPU MMC卡密码忘了怎么办?方法有三种
Arrival成为最新一家有望上市的电动汽车初创公司