导航:首页 > 操作系统 > 单片机fdh

单片机fdh

发布时间:2025-03-10 13:56:17

A. 在知道单片机振荡频率和波特率的情况下如何计算计数初值

这涉及到很多个知识点,我们一步一步来推导。

首先单片机的种类是很多的,不同单片机类型的时钟树结构和UART配置方式各有差异。这里我们只讨论教学中较常用的51单片机。假定使用11.0592MHz外部晶体谐振器,需要获得19200波特率。

经典51单片机是12分频的,1个机器周期=12个振荡周期,所以内部的工作频率实际是11.0592MHz÷12 = 921.6kHz。

经典51单片机的UART如果工作在模式1或模式3下,波特率由定时器1的溢出时间决定,并且还会经过16分频(SMOD=1)或32分频(SMOD=0)。921600÷19200 = 48,48无法被32整除、只能被16整除得到3,因此必须设置SMOD=1。

定时器1的工作方式是向上累加,溢出时产生重载。因此重载初值为 100h - 3h = FDh。

B. 51单片机波特率如何设置啊

串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =((2^SMOD)/64)• fosc
方式1的波特率 =((2^SMOD)/32)•(T1溢出率)
方式3的波特率 =((2^SMOD)/32)•(T1溢出率)
注意:SMOD为PCON寄存器的最高位(即PCOM<7>)。
T1 溢出率 = fosc /{12×[256 -(TH1)]} --将该公式代人方式1或3
最后推出公式:TH1=256-(fosc*2^SMOD)/(baudrate*12*32);
呵呵
如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的话
12M的晶振就不能得到9600波特率了(除非你改变你的晶振,但是那样的晶振好像没有卖) 所以你只能选择方式1或3
而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点
TH1又只能是整数的 所以传输时会有误差.
参考:
#include<reg51.h>
#define baudrate 9600UL
#define fosc 11059200UL//其中,UL是不能省略的,代表长整型。
unsigned char a,flag;
void serial_init(void)
{ unsigned char S_MOD=1;
TMOD=0x20;//T1工作在方式2
SCON=0x50;//SM0=0 SM1=1->串口通信在模式1,
//SM2=0->多级通信中使用的位,REN=1;
PCON=0;
if((PCON&0x80)==0x80) S_MOD=2;
TH1=256-(fosc*S_MOD)/(baudrate*12*32);//其中SMOD=0,
TL1=256-(fosc*S_MOD)/(baudrate*12*32);
TR1=1;ES=1;EA=1;
}

阅读全文

与单片机fdh相关的资料

热点内容
用单片机测车距 浏览:394
去哪里找加密的便签 浏览:19
武汉订酒店旅馆哪个app平台好 浏览:114
c语言在线编译器字节流 浏览:317
带队伍pdf 浏览:951
电脑如何形成服务器 浏览:522
javaprint换行 浏览:785
华为手机压缩文件夹怎么操作 浏览:99
c语言垃圾堆这个文件夹可以删吗 浏览:758
websocketssl加密 浏览:924
系统类算法 浏览:657
ai算法血检t细胞衰老 浏览:473
如何查看文件夹是否安装过程 浏览:195
编译原理画出下面的状态转换图 浏览:40
倩女幽魂什么服务器比较火 浏览:466
内江市程序员招聘 浏览:466
程序员老师身份 浏览:52
手机生兼职app的哪个比较靠谱 浏览:569
lua编译有什么用 浏览:352
买了服务器如何架设 浏览:931