a ơi .a giúp e tìm lỗi code đếm encode với.
mục đích của e là đếm cả 2 cạnh xung của cả 2 kênh a và b . nghĩa là với encode 200 lỗ/1vong thì e phải đếm được 800.nhưng e chỉ đếm được có 200.code này e cắt mất đoạn hiển thị ra led. a xem đoạn đếm encode e với nhé.e cảm ơn a nhiều
Code:
#include <16F877A.h>
#device *=16
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
//================================================== ============================
#byte portc=0x07
#byte portd=0x08
#bit rc3=0x07.3
#bit rc4=0x07.4
#bit rc5=0x07.5
#bit rd0=0x08.0
#bit rd1=0x08.1
#define srclk rc3
#define rclk rc4
#define ser rc5
//================================================== ============================
//================================================== ============================
const unsigned int8 smg[]={0x0a,0xfa,0x8c,0xa8,0x78,0x29,0x09,0xba,0x08,0x2 8,0x00,};
// 0 1 2 3 4 5 6 7 8 9 all
const unsigned int8 smg_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,};
const unsigned int8 smg_text[]={0xbf,0xfe,0xfb,0xef,0xdf,0x7f,0xfd,0xf7,};
unsigned int8 c;
unsigned int8 d;
signed int32 a1,a11,b1,num1,num11;
signed int8 i,a;
//================================================== ============================
//================================================== ============================
void senddata_74595(unsigned int8 SendData);
void hienthi(signed int32 so);
//================================================== ============================
#int_RB
void RB_isr(void)
{
a1=input(pin_b4);
b1=input(pin_b5);
if(a11==1&&a1==0)
{
if(b1==1) num1++ ;
else num1-- ;
}
a11=a1;
if(num1>=0) {
num11=num1;
}
if(num1<0) {
num11=0-num1;
}
}
#int_EXT
void EXT_isr(void)
{
}
#int_RDA
void RDA_isr(void)
{
}
#int_TIMER0
void TIMER0_isr(void)
{
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RB);
enable_interrupts(INT_EXT);
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_tris_C(0x00);
set_tris_D(0x00);
set_tris_B(0xff);
portd=0xFF;
rclk=0;
delay_ms(100);
rclk=0;
senddata_74595(0x00);
senddata_74595(0x00);
rclk=1;
a1=1;a11=1;b1=0;num1=0;num11=0;
i=0;
while(1)
{
hienthi(num11);
}
// TODO: USER CODE!!
}