#define MHz 1000000U // 定义 MHz
#define gCLK (22.1184*MHz) // 系统时钟频率
#define UART_BAUD 9600 // 定义所用的波特率
// 串行通讯初始化函数,在程序开始时调用
void serial_init(void)
{
SCON = 0x50; // Mode 1: 8-bit UART, 允许接收
TMOD |= 0x20; // 定时器1 Mode 2: 8-Bit reload
PCON = 0x80; // SMOD = 1
TH1 = 256 - (uchar)(gCLK/192.0F/UART_BAUD);
TR1 = 1; // 定时器 1 启动
ES = 1; // 串行中断允许
}
此为最常用的模式:方式1,8位数据位,以定时器1作波特率发生器,SMOD置1。
当然,也可以将波特率的值以参数形式传入,如:
void serial_init(unsigned long lBaud){...}
但那样的话,TH1的赋值就要通过计算来得到,效率较低。
另外,使用不同波特率时要计算一下误差,防止误码率太高。
关键字:51单片机 UART0 初始化程序
引用地址:
通常用法的 51单片机 UART 0 初始化程序
推荐阅读最新更新时间:2024-03-16 13:54
51单片机对音频驱鼠器的设计
引言 长期以来,老鼠对家庭牛活、农业生产等造成很大困扰。然而,现存的机械法、化学药物法以及生物防治等,都存在着比较明显的缺点。机械灭鼠的缺陷体现在,当受到过这种器械伤害之后,老鼠会对这种器械保持很深的记忆,避免伤害再次发生。对于化学药物的长期使用,不仅会造成环境污染,甚至对人体也存在一定的危害。而对于生物防治,其控制力度难以把握,故而效果不太理想。所以,需要一种更加科学、环保而有效的产品来实现驱鼠功能。市面上现存的电子驱鼠产品电路设计复杂,成本较高,因此,基于51式单片机的音频驱鼠器应运而生。 1 音频驱鼠器的总体设计 驱鼠器的设计总体分为四个模块,即电源模块、感应模块、控制模块和音频模块。电源模块为整个系统提供+5V的直流电
[单片机]
硬件仿真器会不会被淘汰
谈起单片机的硬件仿真器,给我的第一印象便是非常的昂贵。像我这样想在不到十年就想学习用会市面上大部分流行的单片机的单片机爱好者来说,根本就不可能去花钱买那么昂贵的单片机硬件仿真器,因为单片机的种类实在是太多了。 现在51单片机的C语言编译器非常的好,加上我用的51单片机大部分都是带ISP功能的,还有,就是有几次用伟福仿真器,仿真时的效果让人很失望,而今我手上的伟福仿真器这几年基本上是处于下岗状态. 仿真,对于初学者来说,还是有着极大的诱惑力的,就像我们刚开始用protel99se画电路图时,总是担心什么地方没有画好,想仿真一下,但实际上,真正用着protel99se画图的工程师是很少用它来仿真的.学习单片机也是这差不多的情况. 还
[单片机]
基于51单片机的直流PTC热敏电阻恒温控制系统
1、引言 现有的加热器大都采用电热管、电热丝等传统器件 加热,电热管的外壳为不锈钢制成的钢管,内有发热元件电阻丝,加热时通过电阻丝及钢管向外界传热,当空气不流动时,电热管的热量就散不出去,温度会越来越 高,严重时会烧毁电热管,甚至发生火灾。而PTC热敏电阻作为发热材料,具有节能恒温、无明火、安全性好、发热量较易调节、受电源电压的波动影响小、升温 迅速等特点,因此,设计使用PTC热敏电阻做加热材料的恒温加热系统对安全度要求较高的应用是很有意义的。 2、系统总体设计方案 本系统采用AT89C2051为控制核 心,PTC热敏电阻对加热区域进行加热,数字温度计DS18B20实时采集温度,由外设键盘设定所要加热温度值的上限
[单片机]
51单片机——存储器
1.存储器概述 存储器是许多存储单元的集合,存储器单元实际上是时序逻辑电路(锁存器)的一种,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM)。 1.1 存储单位 位(bit):它是计算机中最小的数据单位。由于计算机采用二进制数,所以1位二进制数称作1bit,例如101011为6bit。 字节(Byte,单位简写为B):8位二进制数称为一个字节,1B=8bit。 字(Word):两个字节构成一个字,即2Byte=1Word。 在单片机中还有一个常用术语:字长。所谓字长是指单片机一次能处理的二进制数
[单片机]
51单片机——I2C总线驱动程序
为方便移植,采用多文件工程的方式。 void Delay10us()//延时10us { unsigned char a,b; for(b=1;b 0;b--) for(a=2;a 0;a--); } 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿 void I2cStart()//为方便与其他函数衔接,起始之后SDA和SCL都为0,虽然这与I2C总线空闲状态不符,但并不影响程序运行 { SDA=1; Delay10us(); SCL=1; Delay10us();//建立时间是SDA保持时间 4.7us SDA=0; Delay10us();//保持时间是 4us SCL=0;
[单片机]
关于51单片机晶振的问题总结
晶振是什么?全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。 在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解。 一,为什么51单片机爱用11.0592MHz晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶
[单片机]
ARM Linker的使用——应用程序运行环境的初始化
一般的可执行程序都包括代码段、数据段。也可以简单的看作由两部分组成:RO段和RW段。RO段一般包括代码段和一些常量,在运行的时候是只读的。而RW段包括一些全局变量和静态变量,在运行的时候是可以改变的(读写)。如果有部分全局变量被初始化为零,则RW段里还包括了ZI段。 RO: Read Only 代码段 RW: Read Write 已初始化的全局变量 ZI: Zero Init 未初始化的全局变量 因为RO段是只读的,在运行的时候不可以改变,所以,在运行的时候,RO段可以驻留在Flash里(当然也可以在SDRAM或者SRAM里了)。而RW段是可以读写的,所以,在运行的时候必须被装载到SDRAM或者SRAM里。
[单片机]
基于51单片机的电子测速里程防盗报警器设计
//************************************************************ //标题:4乘4键盘的输入函数 // 函数描述: char gotkey(void) // 从4*4小键盘输入数据,返回0~9,及其它数据. //*********************************************************** //时间迟延函数 //********************************************************* void delay (void) { unsigned char i,j; for
[单片机]