久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4917|回復: 7
上一主題 下一主題
收起左側

stc15w4k32單片機pwm程序求教

[復制鏈接]
跳轉到指定樓層
樓主
ID:461428 發表于 2019-1-12 20:08 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機stc15w4k32.有自帶pwm模塊。看數據手冊寫下如下漸亮燈程序。。下載后木有反應。。把知道哪錯了。。拜托大神指教。。。謝謝

mmexport1547294737523.jpg (1.6 MB, 下載次數: 41)

mmexport1547294737523.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2019-1-13 08:13 | 只看該作者
本帖最后由 wulin 于 2019-1-13 10:21 編輯

特殊功能寄存器的配置通常用字節設置,多數不支持位操作。
給你一個PWM呼吸燈示例參考,MCU型號15W404AS,按默認CCP0輸出端P1.1。注意特殊功能寄存器的配置與STC15W4K32有所區別。
#include <STC15F2K60S2.H>//15系列頭文件
#define uint unsigned int
#define uchar unsigned char
//sbit key1=P4^2;        
//sbit key2=P4^4;        
sbit LED=P1^0;
uchar num=0x00;
bit a=0;
uint b;
void PWM_Init()
{
        CCON = 0;                        //初始化PCA控制寄存器
                                                                                                //PCA定時器停止
                                                                                                //清除CF標志
                                                                                                //清除模塊中斷標志
        CL = 0;                          //復位PCA寄存器
        CH = 0;
        CMOD = 0x02;                     //設置PCA時鐘源,PWM頻率=12MHZ/2/256=23.4375KHZ
                                                                                                //PWM頻率=11.0592MHZ/2/256=21.600KHZ
        PCA_PWM0 = 0x00;                 //PCA模塊0工作于8位PWM
        CCAP0H = CCAP0L = 0xff;          //PWM0的初始占空比為100%
        CCAPM0 = 0x42;                   //PCA模塊0為8位PWM模式
        CR = 1;                          //PCA定時器開始工作
}
void scan()
{
        static uint count1=0,count2=0;        
        if(a==0)
        {
                count1++;
                if(count1>=2000)
                {                        
                        count1=0;
                        if(num<0xff)
                        {
                                num++;
                                if(num==0xff)
                                {
                                        a=1;
                                        b=5000;
                                        while(b--);
                                }
                        }
                }
        }
        else
        {
                count2++;
                if(count2>=2000)
                {                        
                        count2=0;
                        if(num>0)
                        {
                                num--;
                                if(num==0)
                                {
                                        a=0;
                                        b=5000;
                                        while(b--);
                                }
                        }
                }
        }
}

void main()
{
        P1M0 = 0x02;                        //P1.1推挽輸出
        P1M1 = 0x00;                        //P1.1推挽輸出
        PWM_Init();
        while(1)
        {
                scan();
                CCAP0H=num;
        }
}
回復

使用道具 舉報

板凳
ID:461428 發表于 2019-1-13 17:04 來自觸屏版 | 只看該作者
wulin 發表于 2019-1-13 08:13
特殊功能寄存器的配置通常用字節設置,多數不支持位操作。
給你一個PWM呼吸燈示例參考,MCU型號15W404AS, ...

謝謝你。。。如果有單片機自帶的pwm模塊輸出pwm波的程序。。希望能拜讀。。。
回復

使用道具 舉報

地板
ID:213173 發表于 2019-1-13 20:10 | 只看該作者
kissme 發表于 2019-1-13 17:04
謝謝你。。。如果有單片機自帶的pwm模塊輸出pwm波的程序。。希望能拜讀。。。

上面的程序就是用STC15W404AS自帶PWM模塊的示例程序
回復

使用道具 舉報

5#
ID:461428 發表于 2019-1-14 07:04 來自觸屏版 | 只看該作者
wulin 發表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自帶PWM模塊的示例程序

哦哦。。我的意思是連pca計數器都不用。。。直接用pwm模塊的計數器。。。。。。謝謝耐心回答。。。。
回復

使用道具 舉報

6#
ID:461428 發表于 2019-1-16 11:04 來自觸屏版 | 只看該作者
wulin 發表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自帶PWM模塊的示例程序

上面的程序好像有點問題,循環語句。。。while(b--)位置應該不對。。
回復

使用道具 舉報

7#
ID:210959 發表于 2019-4-27 02:13 | 只看該作者
本帖最后由 51heizlxz 于 2019-4-27 17:24 編輯

最近也在學PWM,以下程序使用PWM通道,可以實現呼吸燈效果。樓主少設置東西了,比如 PWM2CR 是擴展的XSFR,需要先設置P_SW2|=0x80;才能讀寫,否則讀取的是XRAM存儲器。
而且在循環中改變PWM2T2的值,如果PWM波的周期沒到就改變了呢?
我在中斷里改PWM2T2的值,一個PWM周期變一次。
還有樓主好像也沒有設置PWM周期 PWMC=3000;

#include "STC15W4K.H"

#define uchar unsigned char
#define uint  unsigned int

void PWM_CBIF() interrupt 22
{
  static uint idata a=1;
  static uint idata b=0;

  if(a==1)
  {
   b++;
   if(b==3000)
     a=0;
  }
  if(a==0)
  {
   b--;
   if(b==0)
   { a=1; b++; }
  }

  P_SW2|=0x80;
  PWM2T2=b;
  P_SW2&=0x0F;

  PWMIF=0;
}

void main()
{

P2M0=0;
P2M1=0;  //設置P2端口為準雙向弱上拉
          //因系統上電后,與PWM有關的端口均為高阻態
          //所以,這里要設置為弱上拉狀態
P_SW2|=0x80;

PWMCFG=0x00;    //配置PWM初始輸出為低電平
PWMCKS=0x03;    //PWM使用系統時鐘
PWMCR=0x01;     //PWM通道2輸出使能
PWM2CR=0x08;    //PWM輸出為P2.7

PWMC=3000;   

PWM2T1=0;   //第一次翻轉的PWM計數值
PWM2T2=1;   //第二次翻轉的PWM計數值

P_SW2&=0x0F;

PWMCR=0xC1;        //PWM計數器開始
EA=1;                   //開總中斷

while(1)
{
  ;
}


}
回復

使用道具 舉報

8#
ID:210959 發表于 2019-4-27 02:26 | 只看該作者
樓主少設置東西了,PWM周期沒有設置PWMC=3000;
PWM2CR和PWM2T2 等寄存器是擴展XSFR不能直接讀寫,
需要先設置 P_SW2|=0x80;否則讀取的是XRAM存儲器。
而且,如果在循環中改變PWM2T2的值好像不行,應該每個PWM周期改變一次PWM2T2的值。


回復

使用道具 舉報

9#
ID:210959 發表于 2019-4-27 08:57
呼吸燈效果:

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产激情视频网址 | 亚洲精品福利视频 | www.欧美| 久久综合狠狠综合久久综合88 | 欧美涩 | 日韩在线视频一区 | 亚洲a在线视频 | www性色| 伊人网在线看 | 亚洲国产精品久久 | 午夜天堂精品久久久久 | 欧美精品一区二区免费 | 欧洲亚洲精品久久久久 | 免费簧片视频 | 久青草影院 | 久久精品一区二区视频 | 91视频官网| 国产日韩欧美精品一区二区 | 亚洲成人a v| 在线观看av网站 | 亚洲大片 | 台湾av在线| 国产91精品在线 | 黄视频网站在线 | 在线播放中文字幕 | 奇米超碰| 亚洲激情在线观看 | 久久久久久久av麻豆果冻 | 范冰冰一级做a爰片久久毛片 | 亚洲欧美日韩精品久久亚洲区 | 久久免费视频1 | 成人欧美一区二区三区黑人孕妇 | 在线视频一区二区三区 | 精品av久久久久电影 | 香蕉av免费 | 精品国产一区二区三区日日嗨 | 欧美一区二区三区国产精品 | 99re在线视频| 精品在线一区 | 国产成人精品综合 | 精品美女在线观看视频在线观看 |