durongze 发表于 2025-2-20 20:32:03

问一下 AI8051U 的《30-红外发射程序(NEC码)-使用PWM4产生38KHz载波》 里的内容

#define MAIN_Fosc       24000000UL         
#define Baudrate      115200L
#define TM            (65536 -(MAIN_Fosc/Baudrate/4))    //哪位大佬给解释一下,这个如何理解呢?    65535 减去 x 是啥操作啊?      x 是晶振频率/波特率/4这里为啥要除以4呢?   百思不得姐啊?

                                  1. 为了精确度的考虑? 把晶振振荡次数分割成波特率的4倍,这样不论是高电平时还是低电平时都能取到电平稳定时的最中间时刻的值?
                                  2. 那么65535又为啥要去减呢?用16位的宽度去表示1/4波特所耗时间的晶振振荡次数? 难道不是除法,而是减法?我是不是进入了思维误区?



    TL1= TM;
    TH1= TM>>8;





durongze 发表于 2025-2-20 20:40:58



分母是每个时钟单位所占的tm1ps, 分子是65535 减去-x, x是16位的一个数字。为啥是减法呢?



durongze 发表于 2025-2-20 21:16:02

               

DebugLab 发表于 2025-2-21 01:57:40

定时器是65535+1=0(65536)溢出时输出信号(请求中断或产生波特率或输出时钟)
要定时1个数,值是65535
要定时2个数,值是65534
要定时3个数,值是65533
所以定时几个数就是65536减几
除以4是MCU内部硬件决定的,这是固定值,直接按公式计算就行


_奶咖君_ 发表于 2025-2-21 14:31:16

<p>没啥思维误区,只不过是你触碰到了不是你自己所在的领域的东西罢了,,按照手册里的要求用就行了。</p>
<p>再往里面深究就到了芯片设计的领域了。如果你感兴趣就去研究怎么设计,如果你不感兴趣,遇到这种问题就告诉自己,看手册里是这么写的,我就要这么去用。</p>
页: [1]
查看完整版本: 问一下 AI8051U 的《30-红外发射程序(NEC码)-使用PWM4产生38KHz载波》 里的内容