欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 14278|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STC8A系列單片機(jī)10位PWM,改變占空比操作

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:326785 發(fā)表于 2018-12-10 11:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 黃進(jìn)盛 于 2018-12-10 13:58 編輯
  1. STC8系列單片機(jī)10位占空比調(diào)節(jié)程序演示:(程序片段)
復(fù)制代碼
  1. #include <pwm.h>

  2. unsigned int Set_PWM;//10位占空比預(yù)存變量0-1023

  3. void PWM_Init(void)
  4. {
  5.   CCON = 0x00;
  6.   CMOD = 0x08;//PCA時(shí)鐘為系統(tǒng)時(shí)鐘
  7.   CL = 0x00;  //PCA計(jì)數(shù)器初始值低8位
  8.   CH = 0x00;  //PCA計(jì)數(shù)器初始值高8位
  9.   CCAPM0 = 0x42; //PCA模塊0為PWM工作模式
  10.   PCA_PWM0 = 0xc0;//PCA模塊0輸出10位PWM
  11.   CCAP0L = 0x00;
  12.   CCAP0H = 0x00;//PCA模塊用在PWM 模式中時(shí),用來(lái)控制輸出的占空比。
  13.   CR = 1; //啟動(dòng)PCA計(jì)時(shí)器
  14. }
  15. void PWM_Output()
  16. {
  17.         PCA_PWM0=0x30&(Set_PWM>>2);//高兩位XCCAPnH[1:0]
  18.   CCAP0H =Set_PWM;//低8位CCAPnH[7:0]
  19. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:399820 發(fā)表于 2019-1-23 14:53 | 只看該作者
這段不對(duì),PCA_PWM0=0x30&(Set_PWM>>2);//高兩位XCCAPnH[1:0] ,應(yīng)該是PCA_PWM0=0x30&(Set_PWM>>4);,右移4位才能將Set_PWM的第8、9位和0x30相與,才能取出Set_PWM的第8、9位賦值給PCA_PWM0,例如:Set_PWM=0b 10 0000 1111,Set_PWM>>4后等于0b 00 0010 0000 ,然后和0x30相與:0b 00 0010 0000 & 0b 0011 0000 (0x30) =0x32

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:399820 發(fā)表于 2019-1-23 14:56 | 只看該作者
這段不對(duì),PCA_PWM0=0x30&(Set_PWM>>2);//高兩位XCCAPnH[1:0]
回復(fù)

使用道具 舉報(bào)

地板
ID:326785 發(fā)表于 2019-2-18 11:28 | 只看該作者
多謝指點(diǎn),但Set_PWM>>4后等于0b 00 0010 0000 ,然后和0x30相與:0b 00 0010 0000 & 0b 0011 0000 (0x30) =0x32,是等于0x20吧。
回復(fù)

使用道具 舉報(bào)

5#
ID:226798 發(fā)表于 2019-9-5 16:21 來(lái)自觸屏版 | 只看該作者
樓主我想問(wèn)問(wèn)你的問(wèn)題解決了嗎?我測(cè)試10位PWM占空比,但是9位與10位就是寫不對(duì),用或操作看到寄存器的值居然是與操作
回復(fù)

使用道具 舉報(bào)

6#
ID:432495 發(fā)表于 2019-12-6 08:40 | 只看該作者

#include <pwm.h>

unsigned int Set_PWM;//10位占空比預(yù)存變量0-1023

void PWM_Init(void)
{
  CCON = 0x00;
  CMOD = 0x08;//PCA時(shí)鐘為系統(tǒng)時(shí)鐘
  CL = 0x00;  //PCA計(jì)數(shù)器初始值低8位
  CH = 0x00;  //PCA計(jì)數(shù)器初始值高8位
  CCAPM0 = 0x42; //PCA模塊0為PWM工作模式
  PCA_PWM0 = 0xc0;//PCA模塊0輸出10位PWM
  CCAP0L = 0x00;
  CCAP0H = 0x00;//PCA模塊用在PWM 模式中時(shí),用來(lái)控制輸出的占空比。
  CR = 1; //啟動(dòng)PCA計(jì)時(shí)器
}
void PWM_Output()
{
        PCA_PWM0=0x30&(Set_PWM>>2);//高兩位XCCAPnH[1:0]
  CCAP0H =Set_PWM;//低8位CCAPnH[7:0]
}
回復(fù)

使用道具 舉報(bào)

7#
ID:432495 發(fā)表于 2019-12-6 08:41 | 只看該作者

void PWM_Output()
{
        PCA_PWM0=0x30&(Set_PWM>>2);//高兩位XCCAPnH[1:0]
  CCAP0H =Set_PWM;//低8位CCAPnH[7:0]
}
回復(fù)

使用道具 舉報(bào)

8#
ID:432495 發(fā)表于 2019-12-6 09:01 | 只看該作者
PWM_Output()做如下修改
void PWM_Output()
{
      //比較值更新
        PCA_PWM0|=0x0C&(Set_PWM>>6);//高兩位XCCAPnL[1:0],比較值高2位
        CCAP0L =Set_PWM;//低8位CCAPnL[7:0], 比較值低8位
     //重載值更新
       PCA_PWM0|=0x30&(Set_PWM>>4);//高兩位XCCAPnH[1:0],重載值高2位
        CCAP0H =Set_PWM;//低8位CCAPnH[7:0],重載值低8位
}

我也是反復(fù)調(diào)試才發(fā)現(xiàn),比較值和重載值必須這樣同步跟新才行,只有比較值同步更新重載進(jìn)去的重載值才有比較的數(shù)據(jù),實(shí)際輸出占空比=(400H-Set_PWM)/400H.
回復(fù)

使用道具 舉報(bào)

9#
ID:230975 發(fā)表于 2019-12-6 10:23 | 只看該作者
為什么不直接使用STC8的硬件PWM功能呢。
回復(fù)

使用道具 舉報(bào)

10#
ID:301826 發(fā)表于 2019-12-18 10:46 | 只看該作者

PWM_Output()做如下修改
void PWM_Output()
{
      //比較值更新
        PCA_PWM0|=0x0C&(Set_PWM>>6);//高兩位XCCAPnL[1:0],比較值高2位
        CCAP0L =Set_PWM;//低8位CCAPnL[7:0], 比較值低8位
     //重載值更新
       PCA_PWM0|=0x30&(Set_PWM>>4);//高兩位XCCAPnH[1:0],重載值高2位
        CCAP0H =Set_PWM;//低8位CCAPnH[7:0],重載值低8位
}

我也是反復(fù)調(diào)試才發(fā)現(xiàn),比較值和重載值必須這樣同步跟新才行,只有比較值同步更新重載進(jìn)去的重載值才有比較的數(shù)據(jù),實(shí)際輸出占空比=(400H-Set_PWM)/400H.
回復(fù)

使用道具 舉報(bào)

11#
ID:301826 發(fā)表于 2019-12-18 10:47 | 只看該作者
這樣操作還是有問(wèn)題
回復(fù)

使用道具 舉報(bào)

12#
ID:385637 發(fā)表于 2019-12-18 11:20 | 只看該作者
看網(wǎng)上很多人說(shuō)STC8系列還沒STC15系列穩(wěn)定,抗干擾更差是真的嗎?
回復(fù)

使用道具 舉報(bào)

13#
ID:316880 發(fā)表于 2020-3-5 11:59 | 只看該作者
     //重載值更新
       PCA_PWM0|=0x30&(Set_PWM>>4);//高兩位XCCAPnH[1:0],重載值高2位
        CCAP0H =Set_PWM;//低8位CCAPnH[7:0],重載值低8位

   Set_PWM = 520;這樣賦值可以直接得到一個(gè)固定的PWM,但是Set_PWM ++;限制 if(Set_PWM >=1023) Set_PWM =0;這樣就不能現(xiàn)實(shí)0-5V,大于1023以后只能0-1.8v不知道是不是溢出賦值不對(duì),不知道怎么才正確,10位的不會(huì)用,還是8位一個(gè)字節(jié)沒有問(wèn)題,如果哪個(gè)知道10位PWM,怎么0-1023,賦值的大神,希望留下答案。
回復(fù)

使用道具 舉報(bào)

14#
ID:548519 發(fā)表于 2020-3-13 18:28 | 只看該作者
PCA_PWM0=0x30&(Set_PWM>>4)|0xc0;//高兩位XCCAPnH[1:0]  
 CCAP0H =Set_PWM;//低8位CCAPnH[7:0]

這樣可以實(shí)現(xiàn)0~1023更新占空比
回復(fù)

使用道具 舉報(bào)

15#
ID:226798 發(fā)表于 2020-3-14 05:14 來(lái)自觸屏版 | 只看該作者
我遇到過(guò),經(jīng)驗(yàn)是將寄存器值直接賦值
回復(fù)

使用道具 舉報(bào)

16#
ID:58799 發(fā)表于 2020-8-2 23:07 | 只看該作者
qj0200 發(fā)表于 2020-3-13 18:28
PCA_PWM0=0x30&(Set_PWM>>4)|0xc0;//高兩位XCCAPnH[1:0]  
 CCAP0H =Set_PWM;//低8位CCAPnH[7:0 ...

大神 你這個(gè)  沒問(wèn)題了
回復(fù)

使用道具 舉報(bào)

17#
ID:294397 發(fā)表于 2021-12-9 09:56 | 只看該作者
第10樓的 PCA_PWM0 不能 PCA_PWM0 |=xxxxx;   比較值 和 重載值 都不能,
不然次數(shù)多了就值不再更新了,可以 printf (PCA_PWM0) 值的變化。   
回復(fù)

使用道具 舉報(bào)

18#
ID:491923 發(fā)表于 2021-12-15 16:02 | 只看該作者
qj0200 發(fā)表于 2020-3-13 18:28
PCA_PWM0=0x30&(Set_PWM>>4)|0xc0;//高兩位XCCAPnH[1:0]  
 CCAP0H =Set_PWM;//低8位CCAPnH[7:0 ...

大神!確實(shí)是大神!!!
回復(fù)

使用道具 舉報(bào)

19#
ID:286816 發(fā)表于 2022-3-22 11:41 | 只看該作者
哪一個(gè)引腳輸出呀,是那一句控制的,小白看不懂
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表