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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2107|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜免费福利视频 | 久久99精品国产自在现线小黄鸭 | 男人视频网站 | 久久精品亚洲成在人线av网址 | 91久色| 2022精品国偷自产免费观看 | 精品综合 | 成人av一区二区亚洲精 | 99爱视频 | 国产 日韩 欧美 中文 在线播放 | 日韩三级电影在线看 | 中文字幕免费中文 | 国产网站在线免费观看 | 91资源在线播放 | 久久久久国产 | 四虎成人精品永久免费av九九 | 久久在线看 | 国产精品美女久久久久aⅴ国产馆 | 黄色小视频入口 | 国产亚洲精品久久久久久牛牛 | 99精品国产一区二区青青牛奶 | 国产成人99久久亚洲综合精品 | 久久在看 | 亚洲综合五月天婷婷 | 国产日韩欧美 | 一区精品视频在线观看 | 99成人在线视频 | 欧美一区二区三区在线看 | 国产在线中文字幕 | 亚洲精品中文在线 | 亚洲啊v在线 | 亚洲色欲色欲www | 91深夜福利视频 | 自拍偷拍小视频 | 免费在线一区二区 | 国产91丝袜在线播放 | 欧美日韩综合 | 精一区二区 | 国产精品中文字幕在线播放 | 91在线一区 | 国产成人在线免费 |