欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2397|回復(fù): 8
收起左側(cè)

使用單片機(jī)定時(shí)器輸出pwm,按鍵控制占空比,為什么端口沒(méi)有輸出pwm波形?求大佬們幫忙

[復(fù)制鏈接]
ID:858009 發(fā)表于 2022-1-6 17:10 | 顯示全部樓層 |閱讀模式
本帖最后由 qwettyuio 于 2022-1-7 09:00 編輯

單片機(jī)源程序如下:
#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定時(shí)器時(shí)鐘設(shè)置
        mTimer_x_ModInit(0,1);                                     //T0定時(shí)器模式設(shè)置16位定時(shí)器
        mTimer_x_SetData(0,0xC350);                                //T0定時(shí)器賦值5MS
        mTimer0RunCTL(1);                                          //T0定時(shí)器啟動(dòng)
        ET0   = 1;                                                 //T0定時(shí)器中斷開(kāi)啟
        EA    = 1;
}
void        mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中斷服務(wù)程序,使用寄存器組1
{
        mTimer_x_SetData(0,0xC350);                                          //非自動(dòng)重載方式需重新給TH0和TL0賦值        
        time++;
        if(time<condition)
        {
                pin1=1;
        }
        else
                pin1=0;
        if(time>=100)
        {
                time=0;
        }
}
void main( )
{
        CfgFsys( );                                                                //CH554時(shí)鐘選擇配置   
        mDelaymS(5);                                                               //配置時(shí)鐘后,建議延時(shí)穩(wěn)定時(shí)鐘
        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;
                                }
                        }
                }
        }
}

回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-1-6 21:45 | 顯示全部樓層
我是真的很不理解, CH554 明明有硬件PWM, 為什么非要模擬?

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

明明  condition  取值范圍 0~100  非要 int, 再配上無(wú)符號(hào), = 0 之后 直接 跳到 65526 翻回來(lái)要 按6552次
回復(fù)

使用道具 舉報(bào)

ID:979299 發(fā)表于 2022-1-6 22:30 | 顯示全部樓層
這個(gè)程序怎么組合到一起的,看不大懂
回復(fù)

使用道具 舉報(bào)

ID:858009 發(fā)表于 2022-1-7 08:45 | 顯示全部樓層
188610329 發(fā)表于 2022-1-6 21:45
我是真的很不理解, CH554 明明有硬件PWM, 為什么非要模擬?

明明  unsigned int condition=0

用uchar condition=0,也是不可以,ch554硬件的PWM不太會(huì)用,所以用模擬的,模擬沒(méi)有輸出
回復(fù)

使用道具 舉報(bào)

ID:301191 發(fā)表于 2022-1-7 20:18 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-1-7 21:37 | 顯示全部樓層
qwettyuio 發(fā)表于 2022-1-7 08:45
用uchar condition=0,也是不可以,ch554硬件的PWM不太會(huì)用,所以用模擬的,模擬沒(méi)有輸出

CH554的PWM已經(jīng)簡(jiǎn)單的不能再簡(jiǎn)單了, 總共就4個(gè)寄存器,其中兩個(gè)是設(shè)置頻占比的,一個(gè)是系統(tǒng)分頻的, PWM的所有控制開(kāi)關(guān),等于都限定在一個(gè)寄存器里了,比定時(shí)器都簡(jiǎn)單,說(shuō)得不好聽(tīng)一點(diǎn),隨便把這4個(gè)寄存器瞎猜嘗試設(shè)置一下,做個(gè)十來(lái)次實(shí)驗(yàn)也就出來(lái)了。 PWM1.png

PWM2.png


就這么點(diǎn)內(nèi)容,不難設(shè)置吧?


最后提一下,CH554 我記得IO 是默認(rèn)開(kāi)漏的。 你非要IO模擬的話,你要把IO設(shè)置成 輸出,推挽,

回復(fù)

使用道具 舉報(bào)

ID:858009 發(fā)表于 2022-1-11 11:16 | 顯示全部樓層
188610329 發(fā)表于 2022-1-7 21:37
CH554的PWM已經(jīng)簡(jiǎn)單的不能再簡(jiǎn)單了, 總共就4個(gè)寄存器,其中兩個(gè)是設(shè)置頻占比的,一個(gè)是系統(tǒng)分頻的, PWM ...

謝謝,解決l
回復(fù)

使用道具 舉報(bào)

ID:858009 發(fā)表于 2022-1-11 11:38 | 顯示全部樓層
188610329 發(fā)表于 2022-1-7 21:37
CH554的PWM已經(jīng)簡(jiǎn)單的不能再簡(jiǎn)單了, 總共就4個(gè)寄存器,其中兩個(gè)是設(shè)置頻占比的,一個(gè)是系統(tǒng)分頻的, PWM ...

沒(méi)有配置端口推挽輸出,問(wèn)題解決了
回復(fù)

使用道具 舉報(bào)

ID:858009 發(fā)表于 2022-1-11 11:42 | 顯示全部樓層
188610329 發(fā)表于 2022-1-7 21:37
CH554的PWM已經(jīng)簡(jiǎn)單的不能再簡(jiǎn)單了, 總共就4個(gè)寄存器,其中兩個(gè)是設(shè)置頻占比的,一個(gè)是系統(tǒng)分頻的, PWM ...

我想問(wèn)一下ch554定時(shí)器1控制定時(shí)器0啟動(dòng)的問(wèn)題,單片機(jī)步驟配置控制不了,想請(qǐng)教一下原因
void Time0_Init()
{
        count = 0;
        min   = 1;
        sec   = 0;
        mTimer0Clk12DivFsys();                                     //T0定時(shí)器時(shí)鐘設(shè)置
        mTimer1Clk12DivFsys();                                     //T1定時(shí)器時(shí)鐘設(shè)置
        mTimer_x_ModInit(0,1);                                     //T0定時(shí)器模式設(shè)置16位定時(shí)器
        mTimer_x_ModInit(1,2);                                     //T1定時(shí)器模式設(shè)置8位自動(dòng)重裝定時(shí)器
        mTimer_x_SetData(0,0xC350);                                //T0定時(shí)器賦值5MS
        mTimer_x_SetData(1,0x0038);                                //T1定時(shí)器賦值5MS
        mTimer0RunCTL(1);                                          //T0定時(shí)器啟動(dòng)
        mTimer1RunCTL(1);                                          //T1定時(shí)器啟動(dòng)
        ET0   = 1;                                                 //T0定時(shí)器中斷開(kāi)啟
        ET1   = 1;                                                 //T1定時(shí)器中斷開(kāi)啟
        EA    = 1;
}
void        mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中斷服務(wù)程序,使用寄存器組1
{
        mTimer_x_SetData(0,0xC350);                                          //非自動(dòng)重載方式需重新給TH0和TL0賦值       
        count++;
        if(count==20)
        {
                count=0;
                if(sec==0)
                {
                        if(min!=0)
                        {
                                sec=59;
                                min--;
                        }
                        else
                        {
                                mTimer0RunCTL(0);                                          //T0定時(shí)器停止
                        }
                }
                else sec--;
        }
}
void        mTimer1Interrupt( void ) interrupt INT_NO_TMR1 using 2
{
        cnt++;
        if(cnt>=15)     //計(jì)時(shí)3s
        {
                cnt=0;
                if(key1==1&&key2==1&&(min>0||sec>0))
                {
                        mTimer0RunCTL(1);  //開(kāi)啟定時(shí)器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);
        }
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表