找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1673|回复: 8
收起左侧

关于单片机PWM寄存器取值和数据转换的问题

[复制链接]
ID:159419 发表于 2022-11-12 12:48 | 显示全部楼层 |阅读模式
请教各位大佬,昨天发有一贴幸得大佬指点出问题所在,不过在其中有一些不懂得地方请各位大佬帮忙指点一下。
http://www.51hei.com/bbs/dpj-224865-1.html

1.   PWMA_ARRH = f_pwm_set/256;   
      PWMA_ARRH = f_pwm_set%256;   

这里f_pwm_set的值是480000,  480000/256=1875=53, 1875/53值是753,转换成16进制取高位时超出部分是应舍弃后得到53的么?
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.   void CH1_PWM_SET(unsigned long f_set_ch1,float duty_ch1)       f_set_ch1值为480000,duty_ch1 值为2.5
   {
  float a;
        a = duty_ch1 * f_set_ch1;                a = 2.5*480000 = 1200000
        P_SW2 |= 0x80;
        PWMA_CCR1H = ((unsigned int)(a))/256;       = (unsigned int)(1200000)/256 = 20352/256 = 79
        PWMA_CCR1L = ((unsigned int)(a))%256;      = (unsigned int)(1200000)%256 = 20352%256 =128
这里的小数型1200000转换成INT形的值为什么是20352?   

20352/256的结果是79.5,    20352%256取余运算的结果为什么是128?   

请各位大佬指点,谢谢
回复

使用道具 举报

ID:384109 发表于 2022-11-12 21:05 | 显示全部楼层
看寄存器名称和设置方法,应该是一个16位的寄存器分为高8位和低8位分别设置, 16位的数据范围是65536,480000已经超出范围了,应该先确定清楚寄存器数值与实际PWM频率的计算关系
回复

使用道具 举报

ID:883242 发表于 2022-11-12 22:03 | 显示全部楼层
1875=53这个神奇的结论是怎么得出来的呢?
回复

使用道具 举报

ID:159419 发表于 2022-11-13 08:45 | 显示全部楼层
是的大佬,我后来也想到这个问题了,用24M做PWM的时候如果套用这个历程应该先做时钟分频,只是我发帖后有大神回复我的信息里关于数据转换的部分我没搞懂所以想先问问关于这块的问题。

1875=53这个我也是没搞懂怎么计算,是大佬的回复中这么写的
回复

使用道具 举报

ID:624769 发表于 2022-11-13 10:43 | 显示全部楼层
shendu0900 发表于 2022-11-13 08:45
是的大佬,我后来也想到这个问题了,用24M做PWM的时候如果套用这个历程应该先做时钟分频,只是我发帖后有大 ...

没搞懂,就应该原帖里继续问, 你另开一贴的是什么情况?  对别人尊重么?

1875 明显大于 256,  赋值给 一个 8位必定会舍弃高位,
稍微有一点点钻研精神的,1875取余就能得到83,那么,立刻就能想明白 这里的 53 是 0x53 , 或者 53H,

至于原帖中 究竟是笔误,还是他个人习惯,我不知道, 但是, 与其这样没头没脑的开新贴问, 你原帖里追问, 也许疑惑早没了,问题也早解决了, 话就说这么多了, 自己琢磨吧。
回复

使用道具 举报

ID:123289 发表于 2022-11-14 16:02 | 显示全部楼层
非要与超限的值较劲,有这个时间,学一些靠谱的东东不好吗?
回复

使用道具 举报

ID:159419 发表于 2022-11-15 10:24 | 显示全部楼层
188610329 发表于 2022-11-13 10:43
没搞懂,就应该原帖里继续问, 你另开一贴的是什么情况?  对别人尊重么?

1875 明显大于 256,  赋值给 一 ...

大佬,之前的帖子的这个问题我其实是私信过当时的那个大佬的,并不是不尊重别人,只是等了很久都没有回复才另外开贴问的,我学这个完全是自学,百度上查的资料总是乱七八糟不知道哪个是真的,一般只有找一个靠谱的地方问到一个正确的答案再反过去查过程
回复

使用道具 举报

ID:161164 发表于 2022-11-15 10:56 | 显示全部楼层
shendu0900 发表于 2022-11-15 10:24
大佬,之前的帖子的这个问题我其实是私信过当时的那个大佬的,并不是不尊重别人,只是等了很久都没有回复 ...

原贴已和私信都回覆了
回复

使用道具 举报

ID:159419 发表于 2022-11-15 11:46 | 显示全部楼层
感谢之前各位大佬的回复,经过之前的大佬指点已经明白了运算过程。

1875转2进制等于11101010011,去掉超出部分为01010011,转回10进制得到的值就是83。

之前脑袋有点糊涂,总是把01010011带回到16进制的转换所以得出的值是错的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表