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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

沒有PWM效果?用STC官方的示范程序,用的stc15W204S單片機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:590194 發(fā)表于 2022-5-7 17:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
__REG52_H__中也添加了
sfr P1M0        =   0x92;   //0000,0000 端口1模式寄存器0
sfr P1M1        =   0x91;   //0000,0000 端口1模式寄存器1         

可是測試的時(shí)候P1.4并沒有PWM效果.接的是LED燈用的NMOS驅(qū)動(dòng)

單片機(jī)源程序如下:
/*------------------------------------------------------------------*/
/* --- 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>
/*************  功能說明    **************

本程序演示使用定時(shí)器做軟件PWM。

定時(shí)器0做16位自動(dòng)重裝,中斷,從T0CLKO高速輸出PWM。

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

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

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

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

#define     MAIN_Fosc       24000000UL      //定義主時(shí)鐘

#define     PWM_DUTY        6000            //定義PWM的周期,數(shù)值為時(shí)鐘周期數(shù),假如使用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輸出高電平的時(shí)間的變量。用戶操作PWM的變量。

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

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


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

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

    TR0 = 0;        //停止計(jì)數(shù)
    ET0 = 1;        //允許中斷
    PT0 = 1;        //高優(yōu)先級中斷
    TMOD &= ~0x03;  //工作模式,0: 16位自動(dòng)重裝
    AUXR |=  0x80;  //1T
    TMOD &= ~0x04;  //定時(shí)
    INT_CLKO |=  0x01;  //輸出時(shí)鐘

    TH0 = 0;
    TL0 = 0;
    TR0 = 1;    //開始運(yùn)行

    EA = 1;

    pwm = PWM_DUTY / 10;    //給PWM一個(gè)初值,這里為10%占空比
    LoadPWM(pwm);           //計(jì)算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);
        }
    }
}


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

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

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

/********************* Timer0中斷函數(shù)************************/
void timer0_int (void) interrupt 1
{
    if(P_PWM)
    {
        TH0 = (u8)(PWM_low >> 8);   //如果是輸出高電平,則裝載低電平時(shí)間。
        TL0 = (u8)PWM_low;
    }
    else
    {
        TH0 = (u8)(PWM_high >> 8);  //如果是輸出低電平,則裝載高電平時(shí)間。
        TL0 = (u8)PWM_high;
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:230742 發(fā)表于 2022-5-7 22:28 | 只看該作者
官方的程序好像是硬件PWM ,你這是想用軟件PWM
這也不搭啊。
我也是來學(xué)習(xí)的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2022-5-7 23:06 | 只看該作者
    INT_CLKO |=  0x01;  //輸出時(shí)鐘
永遠(yuǎn)是 1/2 的占空比, 你只有放在 定時(shí)器中斷里面 改變 IO的 高低電平,才能控制 占空比。光用 INT_CLKO 是沒用的。
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2022-5-8 07:10 | 只看該作者
經(jīng)測試STC官方的示例程序是有效的,樓主所做的改動(dòng)沒有看出不妥,建議檢查硬件電路。P1.4推挽模式驅(qū)動(dòng)一個(gè)LED無需放大器,LED串聯(lián)1K電阻即可。
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2022-5-8 09:43 | 只看該作者
從經(jīng)驗(yàn)上來看,可以懷疑官方的硬件沒廣告吹的那么牛13,但懷疑官家的DEMO就呵呵了。
建議查例程是否適用你的芯片,查硬件連接是否例規(guī)。
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2022-5-9 14:37 | 只看該作者
一再強(qiáng)調(diào)學(xué)會(huì)查手冊。
回復(fù)

使用道具 舉報(bào)

7#
ID:491577 發(fā)表于 2022-5-9 15:54 | 只看該作者
樓主是怎么判斷PWM沒有效果,是LEN不亮還是一直亮,單片機(jī)用的是5v,還是3.3v,NMOS管什么型號,耐壓多少。單片機(jī)與NMOS之間接多大電阻,如果是3.3v電壓有可能推不動(dòng)NMOS管,MOS管不是那么好推動(dòng)的,改NPN三極管比較好。
回復(fù)

使用道具 舉報(bào)

8#
ID:590194 發(fā)表于 2022-5-10 09:28 | 只看該作者
hhh402 發(fā)表于 2022-5-9 15:54
樓主是怎么判斷PWM沒有效果,是LEN不亮還是一直亮,單片機(jī)用的是5v,還是3.3v,NMOS管什么型號,耐壓多少。 ...

芯片用的是5V供電,NMOS 用的是AO3400,程序用的是推免,因?yàn)闇y試,所以LED就用了1個(gè)燈珠,常亮.并沒有一閃一閃的
回復(fù)

使用道具 舉報(bào)

9#
ID:590194 發(fā)表于 2022-5-10 09:33 | 只看該作者
yzwzfyz 發(fā)表于 2022-5-9 14:37
一再強(qiáng)調(diào)學(xué)會(huì)查手冊。

手冊我看了,P1.4,即定時(shí)器的輸出口,是可以作為模擬PWM輸出的.請問,我哪里疏忽了?
回復(fù)

使用道具 舉報(bào)

10#
ID:590194 發(fā)表于 2022-5-10 09:36 | 只看該作者
wulin 發(fā)表于 2022-5-8 07:10
經(jīng)測試STC官方的示例程序是有效的,樓主所做的改動(dòng)沒有看出不妥,建議檢查硬件電路。P1.4推挽模式驅(qū)動(dòng)一個(gè)L ...

對把,我覺得也沒有什么不對的地方,我用簡單的IO測試了這個(gè)口,是可以用推挽來驅(qū)動(dòng)LED的通和斷,芯片應(yīng)該沒問題啊..所以問問大神..
回復(fù)

使用道具 舉報(bào)

11#
ID:279411 發(fā)表于 2022-5-10 10:32 | 只看該作者
為啥你的TH0和TL0是0?
回復(fù)

使用道具 舉報(bào)

12#
ID:590194 發(fā)表于 2022-5-10 11:34 | 只看該作者
qq631946386 發(fā)表于 2022-5-10 10:32
為啥你的TH0和TL0是0?

我理解的是,在timer0_int執(zhí)行前,強(qiáng)制0,防止數(shù)據(jù)錯(cuò)誤.
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美天堂 | 91在线影院 | 成人免费高清 | 99久久婷婷国产综合精品电影 | 国产精品久久国产精品 | 欧美一级免费看 | www.久久精品视频 | 国产精品永久免费视频 | 青青草一区二区三区 | 成人视屏在线观看 | 久久人体视频 | 综合久久av| 国产精品毛片一区二区三区 | 福利久久| 亚洲第一视频网站 | 日韩精品在线一区 | 最新国产精品视频 | 三级高清| 一级免费毛片 | 一区欧美 | 免费a国产 | 91久久精品国产 | 羞羞色视频| 国产精品污www一区二区三区 | 欧美精品一区二区三区在线四季 | 成年人在线观看 | 欧美黑人一级爽快片淫片高清 | 天天亚洲 | 美女一区二区在线观看 | 国产精品天堂 | 久久久免费 | 精品一区二区三区在线观看国产 | 亚洲视频免费在线观看 | 亚洲精品久久久一区二区三区 | 91看国产 | 亚洲精品自拍视频 | 亚洲欧美日韩久久 | 国产在线观看一区二区 | 久久av影院| 国产伦精品一区二区三区高清 | 欧美二区在线 |