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

標題: 沒有PWM效果?用STC官方的示范程序,用的stc15W204S單片機 [打印本頁]

作者: sq8422779    時間: 2022-5-7 17:21
標題: 沒有PWM效果?用STC官方的示范程序,用的stc15W204S單片機
__REG52_H__中也添加了
sfr P1M0        =   0x92;   //0000,0000 端口1模式寄存器0
sfr P1M1        =   0x91;   //0000,0000 端口1模式寄存器1         

可是測試的時候P1.4并沒有PWM效果.接的是LED燈用的NMOS驅動

單片機源程序如下:
/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article, please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/

#include    <reg52.h>
/*************  功能說明    **************

本程序演示使用定時器做軟件PWM。

定時器0做16位自動重裝,中斷,從T0CLKO高速輸出PWM。

本例程是使用STC15F/L系列MCU的定時器T0做模擬PWM的例程。

PWM可以是任意的量程。但是由于軟件重裝需要一點時間,所以PWM占空比最小為32T/周期,最大為(周期-32T)/周期, T為時鐘周期。

PWM頻率為周期的倒數。假如周期為6000, 使用24MHZ的主頻,則PWM頻率為4000HZ。

******************************************/

#define     MAIN_Fosc       24000000UL      //定義主時鐘

#define     PWM_DUTY        6000            //定義PWM的周期,數值為時鐘周期數,假如使用24.576MHZ的主頻,則PWM頻率為6000HZ。

#define     PWM_HIGH_MIN    32              //限制PWM輸出的最小占空比。用戶請勿修改。
#define     PWM_HIGH_MAX    (PWM_DUTY-PWM_HIGH_MIN) //限制PWM輸出的最大占空比。用戶請勿修改。

typedef     unsigned char   u8;
typedef     unsigned int    u16;
typedef     unsigned long   u32;

sfr P3M1  = 0xB1;   //P3M1.n,P3M0.n     =00--->Standard,    01--->push-pull
sfr P3M0  = 0xB2;   //                  =10--->pure input,  11--->open drain
sfr AUXR  = 0x8E;
sfr INT_CLKO = 0x8F;

//sbit    P_PWM = P3^5;       //定義PWM輸出引腳。
sbit  P_PWM = P1^4;       //定義PWM輸出引腳。STC15W204S

u16     pwm;                //定義PWM輸出高電平的時間的變量。用戶操作PWM的變量。

u16     PWM_high,PWM_low;   //中間變量,用戶請勿修改。

void    delay_ms(unsigned char ms);
void    LoadPWM(u16 i);


/******************** 主函數**************************/
void main(void)
{
    P_PWM = 0;
//    P3M1 &= ~(1 << 5);  //P3.5 設置為推挽輸出
//    P3M0 |=  (1 << 5);

  P1M1 &= ~(1 << 4);  //P1.4 設置為推挽輸出   STC15W204S
  P1M0 |=  (1 << 4);

    TR0 = 0;        //停止計數
    ET0 = 1;        //允許中斷
    PT0 = 1;        //高優先級中斷
    TMOD &= ~0x03;  //工作模式,0: 16位自動重裝
    AUXR |=  0x80;  //1T
    TMOD &= ~0x04;  //定時
    INT_CLKO |=  0x01;  //輸出時鐘

    TH0 = 0;
    TL0 = 0;
    TR0 = 1;    //開始運行

    EA = 1;

    pwm = PWM_DUTY / 10;    //給PWM一個初值,這里為10%占空比
    LoadPWM(pwm);           //計算PWM重裝值


    while (1)
    {
        while(pwm < (PWM_HIGH_MAX-8))
        {
            pwm += 8;       //PWM逐漸加到最大
            LoadPWM(pwm);
            delay_ms(8);
        }
        while(pwm > (PWM_HIGH_MIN+8))
        {
            pwm -= 8;   //PWM逐漸減到最小
            LoadPWM(pwm);
            delay_ms(8);
        }
    }
}


//========================================================================
// 函數: void  delay_ms(unsigned char ms)
// 描述: 延時函數。
// 參數: ms,要延時的ms數, 這里只支持1~255ms. 自動適應主時鐘.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 備注:
//========================================================================
void  delay_ms(unsigned char ms)
{
     unsigned int i;
     do{
          i = MAIN_Fosc / 13000;
          while(--i)    ;
     }while(--ms);
}

/**************** 計算PWM重裝值函數 *******************/
void    LoadPWM(u16 i)
{
    u16 j;

    if(i > PWM_HIGH_MAX)        i = PWM_HIGH_MAX;   //如果寫入大于最大占空比數據,則強制為最大占空比。
    if(i < PWM_HIGH_MIN)        i = PWM_HIGH_MIN;   //如果寫入小于最小占空比數據,則強制為最小占空比。
    j = 65536UL - PWM_DUTY + i; //計算PWM低電平時間
    i = 65536UL - i;            //計算PWM高電平時間
    EA = 0;
    PWM_high = i;   //裝載PWM高電平時間
    PWM_low  = j;   //裝載PWM低電平時間
    EA = 1;
}

/********************* Timer0中斷函數************************/
void timer0_int (void) interrupt 1
{
    if(P_PWM)
    {
        TH0 = (u8)(PWM_low >> 8);   //如果是輸出高電平,則裝載低電平時間。
        TL0 = (u8)PWM_low;
    }
    else
    {
        TH0 = (u8)(PWM_high >> 8);  //如果是輸出低電平,則裝載高電平時間。
        TL0 = (u8)PWM_high;
    }
}

作者: 啤酒瓶子老大    時間: 2022-5-7 22:28
官方的程序好像是硬件PWM ,你這是想用軟件PWM
這也不搭啊。
我也是來學習的。
作者: 188610329    時間: 2022-5-7 23:06
    INT_CLKO |=  0x01;  //輸出時鐘
永遠是 1/2 的占空比, 你只有放在 定時器中斷里面 改變 IO的 高低電平,才能控制 占空比。光用 INT_CLKO 是沒用的。
作者: wulin    時間: 2022-5-8 07:10
經測試STC官方的示例程序是有效的,樓主所做的改動沒有看出不妥,建議檢查硬件電路。P1.4推挽模式驅動一個LED無需放大器,LED串聯1K電阻即可。
作者: man1234567    時間: 2022-5-8 09:43
從經驗上來看,可以懷疑官方的硬件沒廣告吹的那么牛13,但懷疑官家的DEMO就呵呵了。
建議查例程是否適用你的芯片,查硬件連接是否例規。
作者: yzwzfyz    時間: 2022-5-9 14:37
一再強調學會查手冊。
作者: hhh402    時間: 2022-5-9 15:54
樓主是怎么判斷PWM沒有效果,是LEN不亮還是一直亮,單片機用的是5v,還是3.3v,NMOS管什么型號,耐壓多少。單片機與NMOS之間接多大電阻,如果是3.3v電壓有可能推不動NMOS管,MOS管不是那么好推動的,改NPN三極管比較好。
作者: sq8422779    時間: 2022-5-10 09:28
hhh402 發表于 2022-5-9 15:54
樓主是怎么判斷PWM沒有效果,是LEN不亮還是一直亮,單片機用的是5v,還是3.3v,NMOS管什么型號,耐壓多少。 ...

芯片用的是5V供電,NMOS 用的是AO3400,程序用的是推免,因為測試,所以LED就用了1個燈珠,常亮.并沒有一閃一閃的
作者: sq8422779    時間: 2022-5-10 09:33
yzwzfyz 發表于 2022-5-9 14:37
一再強調學會查手冊。

手冊我看了,P1.4,即定時器的輸出口,是可以作為模擬PWM輸出的.請問,我哪里疏忽了?
作者: sq8422779    時間: 2022-5-10 09:36
wulin 發表于 2022-5-8 07:10
經測試STC官方的示例程序是有效的,樓主所做的改動沒有看出不妥,建議檢查硬件電路。P1.4推挽模式驅動一個L ...

對把,我覺得也沒有什么不對的地方,我用簡單的IO測試了這個口,是可以用推挽來驅動LED的通和斷,芯片應該沒問題啊..所以問問大神..
作者: qq631946386    時間: 2022-5-10 10:32
為啥你的TH0和TL0是0?
作者: sq8422779    時間: 2022-5-10 11:34
qq631946386 發表于 2022-5-10 10:32
為啥你的TH0和TL0是0?

我理解的是,在timer0_int執行前,強制0,防止數據錯誤.




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品国产乱码久久久久久影片 | 女人毛片a毛片久久人人 | 午夜爽爽男女免费观看hd | av午夜电影 | 日韩精品在线看 | 国产一级免费视频 | 久久伊人免费视频 | av午夜激情 | 午夜视频在线 | 日韩视频国产 | 欧美v在线 | 日本精品一区二区三区在线观看视频 | 国产伊人精品 | 欧美激情久久久 | 亚洲第一网站 | 久久综合久久综合久久 | 毛片久久久| 99精品视频免费观看 | 国产成人精品久久二区二区91 | 草比av| 91tv在线观看 | 欧美精品一区在线观看 | 欧美日韩在线视频一区二区 | 日韩在线一区二区三区 | 成人中文字幕av | 国产成人精品久久二区二区91 | 久久精品一区二区三区四区 | 一级毛片观看 | 超碰人人做 | 蜜桃毛片 | 九九热热九九 | 欧洲尺码日本国产精品 | 欧美一级黄色网 | 精品久久久久久亚洲精品 | 欧美国产日韩一区二区三区 | 亚洲风情在线观看 | 日韩欧美网 | 国产性网 | 成人在线视频一区二区三区 | 一区视频在线免费观看 | 国产精品久久久久一区二区三区 |