C51单片机串口初始化

如题
Uart_Init()
{
SCON=0x52;
TCON=0x69;
TMOD=0x20; /12M时钟时,波特率为2400
TH1=0xf3;
}

12M时钟时,为什么波特率是2400,怎么算的

可以看出该串口工作在方式1,则波特率这样计算:
波特率 = ((2^SMOD)/32)*T1溢出率,
这里T1溢出率 = fosc/[12×(28-X)],则:
波特率=((2^SMOD)/32)×fosc/[12×(28-X)]
2^SMOD是2的SMOD次方,SMOD是波特率是否要加倍的控制位,默认是0,
fosc就是晶振的值,
X就是装入TH1的值,这里就是0xf3,
然后你代进去算就可以的值约为2403,也就算是2400了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-30

系统时钟12M/12=1M

定时器溢出率 1/(256-243)

所以波特率1000000/32/(256-243)=2403.8

SMOD=0 ,波特率不加倍

公式如下图:

也可用软件计算:

第2个回答  2014-10-30
根据工作方式不同有相应的初值计算公式的

这些在手册上都有
学单片机一定要很详细的阅读手册

51单片机串口初始化步骤,首先初始化那个在初始化那个,最好是华为等大...
设置系统时钟-》设定分频-》设定引脚输出输入方式(推挽或漏极开路)-》设定定时器1工作模式在八位自动重载模式-》载入定时器初始值-》开启定时器1-》开启串口0中断使能-》开启总中断使能-》开启串口0接受允许-》设定串口0工作模式-》初始化完成。将数据压入发送缓冲寄存器 用while 语句等待发送标志位被...

C51单片机串口初始化
可以看出该串口工作在方式1,则波特率这样计算:波特率 = ((2^SMOD)\/32)*T1溢出率,这里T1溢出率 = fosc\/[12×(28-X)],则:波特率=((2^SMOD)\/32)×fosc\/[12×(28-X)]2^SMOD是2的SMOD次方,SMOD是波特率是否要加倍的控制位,默认是0,fosc就是晶振的值,X就是装入TH1的值,这里就...

51如果要多次使用串口 需要多次初始化串口吗?
51单片机使用串口通信时,只需要初始化一次就行了,不需要多次初始化,可在主程序的while(1)循环语句前初始化一次即可。

51单片机 多机串口通信,这样初始化有错吗?
串口初始化没问题 我觉得问题在这里面, 应答时最好先关闭中断ES, 应答后再开中断,不然退出中断后又进入串口中断, 而且应答的数据0x11 和你前面判断的本机地址一样, 所以进入这个循环了, 你试试把应答的0x11改成其他数据。word=SBUF; \/\/这句最好是放在判断RB8之后 if(word==0x11)\/\/本机地址...

51单片机Keil C51下使用printf输出到串口,为何初始化了串口之后就可以使...
因为是这样的,在Keil\\C51\\LIB目录下有个putchar.c文件,printf函数会调用该文件中的 putchar函数,putchar里面的使用的寄存器都是标准51的(如TI,SBUF),它 们的地址是固定的,由此可知printf函数只针对串口0。如果想让printf函数支持串口1或串口2。。。那么修改putchar函数的寄存器即可,比如SBUF改为...

51单片机中串口如果只用来下载程序程序,还要初始化吗
只用来下程序,你的程序中不用串口就不需要初始化。凡是能够用串口下载程序的单片机,内部都有自举程序,这个程序是隐藏的,不占用用户程序空间,在自举程序中会对串口初始化,但一旦脱离自举程序把权限交给用户,进行了一次类似手机恢复出厂设置的动作,你程序中再次使用串口时还是得初始化。

51单片机如何初始化成8-n-1(8数据位,无奇偶校验位,1停止位)波特率,是...
用串口的模式1,是10位异步通信方式。1起始位,8数据位,1停止位,没有奇偶校验位。这种模式就是:8-n-1(8数据位,无奇偶校验位,1停止位)的模式。完全符合你的要求。--- 带奇偶校验位的,要用方式2或方式3。把奇偶校验位,放到TB8上,就可以发送了,这就是偶校验。接收的奇偶校验位,在...

在51单片机编程中 初始化程序的作用是什么
1.将一些变量转换为初始值,如0或1。2.如果使用zd,则需要设置定时器的工作模式和初始值。3.如果使用中断,应该打开相应中断源的中断并设置优先级。4.如果使用串口,则需要设置相应的串口工作模式和波特率。5.需要提前设置的其他数据变量和命令字。

单片机串口初始化作用是什么?initUart()函数的作用是什么?
它并不是程序所必要的.你若用了定时器,设置波特率,及中断等,那你就得初始化,当然初始化并不是非要写成一个函数.它也可以直接写到main函数的过程中,只是单独放到一个函数中便于阅读程序.一般分四个步骤:1)将相应的引脚配置成UART模式 2)配置和使能UART,包括配置波特率,是否使用FIF0,数据帧格式(...

51单片机串口通信c语言编程
\/\/串口接收程序 uchar receive(void){ re=SBUF; \/\/接收数据 while(RI==0);RI=0;return re;} \/\/串口初始化 void sinti(void){ SCON = 0x50;TMOD |= 0x20;TH1 = 0xFD;TR1 = 1;EA = 1;ES = 1;} void delay(int cnt){ while(--cnt);} \/\/主程序 int main...

相似回答