Thông báo

Collapse
No announcement yet.

Moi người xem giúp cầnh code tạo pwm 20khz này vs nhé.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Moi người xem giúp cầnh code tạo pwm 20khz này vs nhé.

    Code:
    #include <REGX51.H>
    sbit    PWM = P2^3;
    sbit    TANG = P1^2;
    sbit    GIAM = P1^5;
    unsigned char dem=0,tocdo=25;
    
    bit TANG1=1,TANG0=1,GIAM0=1,GIAM1=1;
    
    void timer0(void) interrupt 1
    {
    TR0 = 0;
    TF0 = 0;
    dem++;
    if(dem > 100)
    dem = 0;
    if(dem<tocdo)
    PWM = 1;
    else
    PWM = 0;
    TR0 = 1;
    }
    
    void phimnhan()
    {
    //////////////////////////
    TANG0=TANG1;TANG1=TANG;
    if((TANG0==1)&&(TANG1==0))
    tocdo=tocdo+5;
    if(tocdo==55)tocdo=50;
    
    /////////////////////////////////
    GIAM0=GIAM1;GIAM1=GIAM;
    if((GIAM0==1)&&(GIAM1==0))
    tocdo=tocdo-5;
    if(tocdo==-5)tocdo=0;
    }
    
    void main(void)
    {
    TMOD = 0X02;
    IE = 0X82;
    TH0=TL0=-50; // tao tan so 0.05 ms
    TR0 = 1;
    PWM=0;
    while(1)
    {
    phimnhan();
    }
    }
    giúp mình xem liêuh code trên có ra xung 20khz ko? . mình đang thắc mắc là con vđk nó mất time làm các lệnh khác nên liệu xung tạo ra có đúng tần số mình mong muốn ko/.?Mình cám ơn
    Nguyễn Huy Biên - 01649 802 694
    gmail :

  • #2
    nếu dùng module pwm thì gần như ko sai số, phải nói là rất chình xác, vì pwm ngta đã trừ số lần trễ rồi
    TamPhieuLuuKy@yahoo.com
    092 2838 712 --->>

    Comment


    • #3
      ok. thanks bác.
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #4
        Nguyên văn bởi bienhou Xem bài viết
        Code:
        #include <REGX51.H>
        sbit    PWM = P2^3;
        sbit    TANG = P1^2;
        sbit    GIAM = P1^5;
        unsigned char dem=0,tocdo=25;
        
        bit TANG1=1,TANG0=1,GIAM0=1,GIAM1=1;
        
        void timer0(void) interrupt 1
        {
        TR0 = 0;
        TF0 = 0;
        dem++;
        if(dem > 100)
        dem = 0;
        if(dem<tocdo)
        PWM = 1;
        else
        PWM = 0;
        TR0 = 1;
        }
        
        void phimnhan()
        {
        //////////////////////////
        TANG0=TANG1;TANG1=TANG;
        if((TANG0==1)&&(TANG1==0))
        tocdo=tocdo+5;
        if(tocdo==55)tocdo=50;
        
        /////////////////////////////////
        GIAM0=GIAM1;GIAM1=GIAM;
        if((GIAM0==1)&&(GIAM1==0))
        tocdo=tocdo-5;
        if(tocdo==-5)tocdo=0;
        }
        
        void main(void)
        {
        TMOD = 0X02;
        IE = 0X82;
        TH0=TL0=-50; // tao tan so 0.05 ms
        TR0 = 1;
        PWM=0;
        while(1)
        {
        phimnhan();
        }
        }
        giúp mình xem liêuh code trên có ra xung 20khz ko? . mình đang thắc mắc là con vđk nó mất time làm các lệnh khác nên liệu xung tạo ra có đúng tần số mình mong muốn ko/.?Mình cám ơn
        cái chương trình kia của bác làm gì được 20k ,bác cài đặt TH=-50 ; vậy cứ 50us thì dem+1, vậy đêm=100 thì bác có 5000us =5ms ,vậy là cái xung của bác chỉ đc có 1/0.005 = 200hz .hehe đấy là ko tính thời gian thực hiện lệnh if(...) lệnh này nó cũng chiếm khoảng tầm tầm 5ms rồi .cái lệnh if của keil c nó thực hiện quá lâu.

        Comment

        Về tác giả

        Collapse

        bienhou Tìm hiểu thêm về bienhou

        Bài viết mới nhất

        Collapse

        Đang tải...
        X