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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2226|回復: 8
打印 上一主題 下一主題
收起左側

使用單片機定時器輸出pwm,按鍵控制占空比,為什么端口沒有輸出pwm波形?求大佬們幫忙

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 qwettyuio 于 2022-1-7 09:00 編輯

單片機源程序如下:
#define uchar unsigned char
sbit key1 = P3^2;   
sbit key2 = P3^0;   
sbit pin1 = P1^4;
sbit led1 = P3^1;
uchar condition=0,time;
void Time0_Init()
{
        mTimer0Clk12DivFsys();                                     //T0定時器時鐘設置
        mTimer_x_ModInit(0,1);                                     //T0定時器模式設置16位定時器
        mTimer_x_SetData(0,0xC350);                                //T0定時器賦值5MS
        mTimer0RunCTL(1);                                          //T0定時器啟動
        ET0   = 1;                                                 //T0定時器中斷開啟
        EA    = 1;
}
void        mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中斷服務程序,使用寄存器組1
{
        mTimer_x_SetData(0,0xC350);                                          //非自動重載方式需重新給TH0和TL0賦值        
        time++;
        if(time<condition)
        {
                pin1=1;
        }
        else
                pin1=0;
        if(time>=100)
        {
                time=0;
        }
}
void main( )
{
        CfgFsys( );                                                                //CH554時鐘選擇配置   
        mDelaymS(5);                                                               //配置時鐘后,建議延時穩定時鐘
        Time0_Init();
        mDelaymS(5);
        while(1)
        {               
                if(key1==0)
                {
                        mDelaymS(50);
                        if(key1==0)
                        {
                                led1=0;
                                condition+=10;
                                if(condition>=100)
                                {
                                        condition=100;
                                }
                        }
                }
                if(key2==0)
                {
                        mDelaymS(50);
                        if(key2==0)
                        {
                                led1=1;
                                condition-=10;
                                if(condition<=0)
                                {
                                        condition=0;
                                }
                        }
                }
        }
}

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

使用道具 舉報

沙發
ID:624769 發表于 2022-1-6 21:45 | 只看該作者
我是真的很不理解, CH554 明明有硬件PWM, 為什么非要模擬?

明明  unsigned int condition=0
偏偏要  if(condition<=0)    無符號,你還指望能 < 0 ?

明明  condition  取值范圍 0~100  非要 int, 再配上無符號, = 0 之后 直接 跳到 65526 翻回來要 按6552次
回復

使用道具 舉報

板凳
ID:979299 發表于 2022-1-6 22:30 | 只看該作者
這個程序怎么組合到一起的,看不大懂
回復

使用道具 舉報

地板
ID:858009 發表于 2022-1-7 08:45 | 只看該作者
188610329 發表于 2022-1-6 21:45
我是真的很不理解, CH554 明明有硬件PWM, 為什么非要模擬?

明明  unsigned int condition=0

用uchar condition=0,也是不可以,ch554硬件的PWM不太會用,所以用模擬的,模擬沒有輸出
回復

使用道具 舉報

5#
ID:301191 發表于 2022-1-7 20:18 | 只看該作者
頂一下
回復

使用道具 舉報

6#
ID:624769 發表于 2022-1-7 21:37 | 只看該作者
qwettyuio 發表于 2022-1-7 08:45
用uchar condition=0,也是不可以,ch554硬件的PWM不太會用,所以用模擬的,模擬沒有輸出

CH554的PWM已經簡單的不能再簡單了, 總共就4個寄存器,其中兩個是設置頻占比的,一個是系統分頻的, PWM的所有控制開關,等于都限定在一個寄存器里了,比定時器都簡單,說得不好聽一點,隨便把這4個寄存器瞎猜嘗試設置一下,做個十來次實驗也就出來了。




就這么點內容,不難設置吧?


最后提一下,CH554 我記得IO 是默認開漏的。 你非要IO模擬的話,你要把IO設置成 輸出,推挽,

回復

使用道具 舉報

7#
ID:858009 發表于 2022-1-11 11:16 | 只看該作者
188610329 發表于 2022-1-7 21:37
CH554的PWM已經簡單的不能再簡單了, 總共就4個寄存器,其中兩個是設置頻占比的,一個是系統分頻的, PWM ...

謝謝,解決l
回復

使用道具 舉報

8#
ID:858009 發表于 2022-1-11 11:38 | 只看該作者
188610329 發表于 2022-1-7 21:37
CH554的PWM已經簡單的不能再簡單了, 總共就4個寄存器,其中兩個是設置頻占比的,一個是系統分頻的, PWM ...

沒有配置端口推挽輸出,問題解決了
回復

使用道具 舉報

9#
ID:858009 發表于 2022-1-11 11:42 | 只看該作者
188610329 發表于 2022-1-7 21:37
CH554的PWM已經簡單的不能再簡單了, 總共就4個寄存器,其中兩個是設置頻占比的,一個是系統分頻的, PWM ...

我想問一下ch554定時器1控制定時器0啟動的問題,單片機步驟配置控制不了,想請教一下原因
void Time0_Init()
{
        count = 0;
        min   = 1;
        sec   = 0;
        mTimer0Clk12DivFsys();                                     //T0定時器時鐘設置
        mTimer1Clk12DivFsys();                                     //T1定時器時鐘設置
        mTimer_x_ModInit(0,1);                                     //T0定時器模式設置16位定時器
        mTimer_x_ModInit(1,2);                                     //T1定時器模式設置8位自動重裝定時器
        mTimer_x_SetData(0,0xC350);                                //T0定時器賦值5MS
        mTimer_x_SetData(1,0x0038);                                //T1定時器賦值5MS
        mTimer0RunCTL(1);                                          //T0定時器啟動
        mTimer1RunCTL(1);                                          //T1定時器啟動
        ET0   = 1;                                                 //T0定時器中斷開啟
        ET1   = 1;                                                 //T1定時器中斷開啟
        EA    = 1;
}
void        mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中斷服務程序,使用寄存器組1
{
        mTimer_x_SetData(0,0xC350);                                          //非自動重載方式需重新給TH0和TL0賦值       
        count++;
        if(count==20)
        {
                count=0;
                if(sec==0)
                {
                        if(min!=0)
                        {
                                sec=59;
                                min--;
                        }
                        else
                        {
                                mTimer0RunCTL(0);                                          //T0定時器停止
                        }
                }
                else sec--;
        }
}
void        mTimer1Interrupt( void ) interrupt INT_NO_TMR1 using 2
{
        cnt++;
        if(cnt>=15)     //計時3s
        {
                cnt=0;
                if(key1==1&&key2==1&&(min>0||sec>0))
                {
                        mTimer0RunCTL(1);  //開啟定時器0;
                }
        }
}
void main( )
{
        Time0_Init();
        Init_1621();       //初始化HT1621
        HT1621_all_off();  //清空LCD顯示       
        while(1)
        {
                Write_1621(0,0xF0,4);               
                if(key1==0)
                {
                        delay_ms(100);
                        if(key1==0)
                        {
                                if(min!=999)
                                {
                                        min++;
                                }
                        }
                        while(!key2);
                        delay_ms(1000);
                        while(!key2);
                }
                if(key2==0)
                {
                        delay_ms(100);
                        if(key2==0)
                        {
                                if(min!=0)
                                {
                                        min--;
                                }
                        }
                        while(!key1);
                        delay_ms(1000);
                        while(!key1);
                }
                min0=min/100%10;
                min1=min/10%10;
                min2=min/1%10;
                sec1=sec/10%10;
                sec2=sec/1%10;
                Display_Init(min0,min1,min2,sec1,sec2);
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 情侣av | 蜜桃视频在线观看免费视频网站www | 成人久久| 成人免费视频网站在线看 | 国内精品一区二区三区 | 精品久久久久久久 | 中日韩欧美一级片 | 综合久久网 | 99热这里 | 精品欧美一区二区三区免费观看 | 亚洲成人一级 | 欧美精品video | 欧美日韩久久精品 | 成人在线播放网站 | 国产精品成人一区二区三区吃奶 | 欧美日韩精品免费 | 最新中文字幕一区 | 亚洲成人精品 | 91视频官网 | 99精品欧美一区二区蜜桃免费 | 久久91av| 亚洲视频国产视频 | 91在线最新 | 日韩一区精品 | 欧美在线网站 | 成人精品鲁一区一区二区 | 日韩一区二区在线播放 | 日韩乱码在线 | 午夜在线免费观看 | 免费看大片bbbb欧美 | 亚洲精品视频在线播放 | 在线观看中文字幕一区二区 | 日本不卡在线观看 | 亚洲视频 欧美视频 | 亚洲一区二区三区在线观看免费 | 亚洲精品国产第一综合99久久 | av男人的天堂av | 久久伊| 日韩视频精品在线 | 欧美在线亚洲 | 日韩中文字幕在线观看 |