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
#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