访问电脑版页面

导航:老古开发网手机版51单片机51单片机串口

8051单片机的UART0串口初始化

导读:
关键字:
uarto,初始化,8051单片机,

1、C8051f的UART0是异步、全双工串口。其波特率发生器规定由定时器1定时器提供。可配置为8位UART或9位UART(多机通讯第九位用于片选作用)。SYSCLK=24.5MHZ(我的板子采用内部晶振频率作为系统时钟) BAUDRATE=115200(波特率)

2、初值TH1 Tl1配置

8051单片机的UART0串口初始化

由上述公式可计算初值: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

}

来源:工程师周亮   作者:lhl545545  2018/12/25 15:03:00
栏目: [ 51单片机串口]

相关阅读

51单片机串口通讯编程的方式解析

在VB下PC机与MCS-51单片机的串行通信

如何计算8051单片机的波特率

AT89S51单片机串行口的内部结构及功能介绍

51单片机的串口通信协议

C51单片机串口的使用方法解析

51单片机IO口模拟串口的实现

51单片机IO口模拟串口通讯的设计

MCS-51单片机多机通信的工作原理解析

AT89S51单片机串行口的结构

51单片机三种模拟串口的设计方案解析

如何设置51单片机的串行口来实现与PC机通信

51单片机与PC机的串口通讯设计

AT89S51单片机串行口的内部结构解析

8051单片机实现高速串行通信的设计

8051单片机的UART0串口初始化

C51单片机串口通讯的硬件电路图

51单片机实现串口接收和发送数据的两种方法解析

51单片机串口通讯设计

AT89S51单片机串行口的内部结构及工作原理介绍