亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 關于單片機按鍵控制PWM大小的問題? [打印本頁]

作者: 。。jj    時間: 2020-2-22 10:15
標題: 關于單片機按鍵控制PWM大小的問題?
這兩天學習了PWM,想通過按鍵來控制PWM的大小,在網上找了一個程序,程序沒有問題,但有些地方我沒明白,希望大家幫我思考一下。
下面是我的分析和我的疑問,對于分析有錯誤的地方希望大家幫我指正。
分析:這個程序我認為應該是用兩個定時器來控制的,定時器0控制的是周期,定時器1控制的是占空比,通過改變定時器1中TH1的大小改變占空比的值。
疑問:單片機定時器的方式2不是自動重裝嗎,不是該是TH0自動把值賦給TL0嗎。我把定時器0的TH0的初值設為0,刪掉定時器0中斷中的TL0=0這句話,為什么led產生的現象就不對了呢(按鍵3無法一直控制占空比增加,按鍵4也無法一直控制占空比減少)。
          主函數中對占空比增加的控制,為什么TH0<200就可以,我把句子改為TH0<250就不行了呢。
#include <reg52.h>
#define out P2
sbit key3=P3^2;   
sbit key4=P3^3;   
//-----------------------------------------------------------------
void Init(void)
{        
      
        TMOD=0x22;  //T1=T0=??????2??????
        TH1=0;     //??????(0.128ms)
        TL1=0xff;
        TH0=0;      //??????=0??????  
        TL0=0;   
      TR0=1;        //?????T0???
        ET1=1;
        ET0=1;   
        EA=1;       //???ж??
}

void Timer0(void) interrupt 1
{
        out=0xff;      //??led
  TL0=0;
        TR1=1;         //????????
}

void Timer1(void) interrupt 3
{
        out=~out;      //??led
        TR1=0;         //??????????
}   
void delay( unsigned int i)
{
while(i--);
}
void main()
{
    Init();
    while(1)
    {
  key3=1;
  key4=1;
  if(key3==0)
  {
   delay(1000);
            if(key3==0)  
            {
    if(TH1<200)
     TH1++;
            }
        }
        else if (key4==0)
        {
   delay(1000);
            if(key4==0)  
            {
                if(TH1>0)
      TH1--;
            }
          }
     }
   
}



作者: 之一知足    時間: 2020-2-22 12:49
PWM輸出用一個定時器就ok了,給你一段參考
void Timer1() interrupt 3
{
        static u16 p;
        TH1=0XFC;        //給定時器賦初值,定時1ms
        TL1=0X18;
        /****電機控制****/
        p++;
        if(p<PWM)EN=1;
        if(p>=PWM)EN=0;
        if(p==10)p=0;//周期10*1ms
}
改變PWM只需要用按鍵改變變量PWM的值即可,這樣就可以輸出一個頻率固定,占空比可調的PWM波
作者: 。。jj    時間: 2020-2-22 15:39
之一知足 發表于 2020-2-22 12:49
PWM輸出用一個定時器就ok了,給你一段參考
void Timer1() interrupt 3
{

能把程序發完整嗎,你這個PWM是怎么變化的啊。
作者: 。。jj    時間: 2020-2-22 15:42
之一知足 發表于 2020-2-22 12:49
PWM輸出用一個定時器就ok了,給你一段參考
void Timer1() interrupt 3
{

如果PWM只是單純由按鍵控制的話,這個程序實現不了啊
作者: 之一知足    時間: 2020-2-22 18:09
。。jj 發表于 2020-2-22 15:39
能把程序發完整嗎,你這個PWM是怎么變化的啊。

你仔細看下這個定時器中斷函數里代碼什么意思,EN就是隨便定義的一個IO口,P和PWM是個變量,假如PWM值是4,p每1ms加一,所以前4ms EN是高電平,后6ms 輸出低電平,這不就是一個占空比40%的波形么
作者: 。。jj    時間: 2020-2-23 15:29
之一知足 發表于 2020-2-22 18:09
你仔細看下這個定時器中斷函數里代碼什么意思,EN就是隨便定義的一個IO口,P和PWM是個變量,假如PWM值是4 ...

你這個我試過了啊,根本無法控制。
void delay(ui i)
{
        while(i--);
}
void init()
{
        TMOD=0x01;
        TH0=0XFC;
        TL0=0X18;
        EA=1;
        TR0=1;
        ET0=1;
}
void anjian()
{
        if(key4==0)
        {
                delay(1000);
                if(key4==0)
                {
                        i++;
                }
        }
        while(!key4);
}
void main()
{
        while(1)
        {
                if(p>i)
                {
                        pwm=1;
                }
                else
                        pwm=0;
        }
}
void init1() interrupt 1
{
        TH0=0XFC;
        TL0=0X18;
        p++;
        if(p>10)
                p=0;       
}
作者: hantu    時間: 2020-2-23 17:32
一個定時器就夠了呀
作者: 之一知足    時間: 2020-2-23 18:04
。。jj 發表于 2020-2-23 15:29
你這個我試過了啊,根本無法控制。
void delay(ui i)
{

。。。你按鍵程序好像沒有放到循環里面吧
作者: haierzaifei11    時間: 2020-2-24 10:04
PWM只是單純由按鍵控制的話,這個程序實現不了




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1