bonsoir ,
j'ai réalisé un programme a base d'un 16f877A a l’intérêt d'afficher les 6 bit de commande d'une telecommande (SamSat ) au portD
j'ai utilisé l'interruption externe RB0 pour décoder la tram. lorsque j'appuis sur une des touches je reçoit un code en sortie du portD mais il est pas précise car a chaque appuis sur la même touche il me donne un code différent .
je me suis bloqué....
Code:unsigned char x ; unsigned int ir; unsigned char cmd; unsigned char adrs; bit fin_recep; /********************************************************/ void init (){ // // /*********CONFIG_RB0/INT sur front descend***********/ // INTCON = 0xD0 ; //active GIE , PEIE , RBIE d0 // OPTION_REG = 0 ; // // /***********************************************/ /*********CONFIG_LES PORTS****************************/ // TRISB = 0x0F ; // TRISC = 0x00 ; // TRISA = 0x00 ; TRISD = 0x00 ; // PORTC = 0 ; // } // /**********************************************/ void detection() { INTCON=0x00; INTCON.INTF=0; ir=0; RB7_bit=0; delay_us(440); // 1/4 bit de start for(x=1;x<14;x++){ if (RB0_bit==0){ ir>>=1 ; ir |= 0x8000; //ajouté un 1 Si RB0 = 0 (bit tram = 1) } if (RB0_bit==1){ ir>>=1 ; } delay_us(1700); // atteindre le 1/4 du 2ème bit //delay_ms(500); }} void interrupt() { detection(); fin_recep=1 ; INTCON.INTF=0; } void main() { init() ; PORTD=0; while(1){ if(fin_recep==1){ ir>>=10; cmd = ir ; //recupéré les 6 bits de cmd //adrs = ir & 0x03E0; fin_recep=0; PORTD=cmd ; delay_ms(1000); } RB7_bit=1; INTCON = 0xD0 ;//d0 }}
-----