Thông báo

Collapse
No announcement yet.

Đọc encoder đầu ra là hai xung vuông!

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

  • Đọc encoder đầu ra là hai xung vuông!

    Các bác cho em hỏi chut: em đang làm đọc encoder với đầu ra là hai xung vuông trễ 90 độ, em dùng timer quét trạng thái của chân chip sao mà nó chạy sai, không ổn định: đây là code của em:#include <main.h>
    #include <def.h>
    int1 kt;
    int1 kt1;
    int1 kt2;
    int1 RA_old=1;
    int1 RA_oldd=1;
    int16 data=0;
    int k1 ,k2 ,k3, k4;
    int led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f};
    // chuyen doi data
    void chuyen_data( int16 data1)
    { int16 data_re;
    k1=data1/1000;
    data_re=data1%1000;
    k2=data_re/100;
    data_re=data_re%100;
    k3=data_re/10;
    k4=data_re%10;
    }
    // xuat ket qua ra 4 led 7 thanh
    void xuat_led()
    { chuyen_data(data);
    // xuat don vi;
    RC2=1;
    PORTD=~led[k4];
    delay_ms(5);
    RC2=0;
    RC3=1;
    PORTD=~led[k3];
    delay_ms(5);
    RC3=0;
    RC4=1;
    PORTD=~led[k2];
    delay_ms(5);
    RC4=0;
    RC5=1;
    PORTD=~led[k1];
    delay_ms(5);
    RC5=0;
    }
    #INT_TIMER0
    void xung2()
    { set_timer0(150);
    kt=RA1^RA_old;
    kt2=RA2^RA_oldd;
    if( kt==1)
    {kt1=RA2^RA_old;
    if(kt1==0) data++;
    else data--;
    }
    if( kt2==1)
    {kt1=RA1^RA_oldd;
    if(kt1==1) data++;
    else data--;
    }
    RA_old=RA1;
    RA_oldd=RA2;
    }
    void main()
    { TRISC=0x00;
    TRISD=0x00;
    TRISA=0XFF;
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_TIMER0);
    SETUP_TIMER_0(T0_INTERNAL|T0_DIV_1);
    set_timer0(100);
    while(1)
    {xuat_led();
    }



    }
    Thanks các bác nhiều

Về tác giả

Collapse

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

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

Collapse

Đang tải...
X