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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

stc15w4k32單片機pwm程序求教

查看數: 4934 | 評論數: 8 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-1-12 20:08

正文摘要:

單片機stc15w4k32.有自帶pwm模塊。看數據手冊寫下如下漸亮燈程序。。下載后木有反應。。把知道哪錯了。。拜托大神指教。。。謝謝

回復

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


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)
{
  ;
}


}
ID:461428 發表于 2019-1-16 11:04
wulin 發表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自帶PWM模塊的示例程序

上面的程序好像有點問題,循環語句。。。while(b--)位置應該不對。。
ID:461428 發表于 2019-1-14 07:04
wulin 發表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自帶PWM模塊的示例程序

哦哦。。我的意思是連pca計數器都不用。。。直接用pwm模塊的計數器。。。。。。謝謝耐心回答。。。。
ID:213173 發表于 2019-1-13 20:10
kissme 發表于 2019-1-13 17:04
謝謝你。。。如果有單片機自帶的pwm模塊輸出pwm波的程序。。希望能拜讀。。。

上面的程序就是用STC15W404AS自帶PWM模塊的示例程序
ID:461428 發表于 2019-1-13 17:04
wulin 發表于 2019-1-13 08:13
特殊功能寄存器的配置通常用字節設置,多數不支持位操作。
給你一個PWM呼吸燈示例參考,MCU型號15W404AS, ...

謝謝你。。。如果有單片機自帶的pwm模塊輸出pwm波的程序。。希望能拜讀。。。
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;
        }
}

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区福利视频 | 国产一区二区欧美 | 欧美三级不卡 | 精品一级电影 | 精品国产精品三级精品av网址 | 欧美久久久久久久久 | 黄网站涩免费蜜桃网站 | 久久久无码精品亚洲日韩按摩 | 久久精品一级 | 国产黄视频在线播放 | 日韩在线观看视频一区 | 国产黄色大片在线免费观看 | 91精品国产欧美一区二区 | 亚洲三级在线 | 久久久亚洲一区 | 亚洲品质自拍视频 | 久久久欧洲 | 精品伦精品一区二区三区视频 | 精品一区二区久久久久久久网站 | 天天操操 | 91网站在线看 | 亚洲综合99 | 日日夜精品视频 | 亚洲综合天堂 | 米奇成人网 | 欧美日本一区 | av福利网 | 一区二区手机在线 | 中文字幕国产精品 | www.国产一区| 91免费小视频 | 日韩高清一区 | 91超碰caoporn97人人 | 久久精品a级毛片 | 欧美日韩亚洲国产综合 | 91精品国产综合久久精品图片 | 色久在线 | 97狠狠干| 草在线| 四虎在线观看 | 91国自视频 |