#include <16F877.h> #use delay(clock=16000000) #fuses XT, NOPUT, NOPROTECT, BROWNOUT,LVP, NOCPD, NOWRT,NOWDT #use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors) //cle du tableau int n_tab = 0; int i=0; //data en ram int tab[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //indique debut de trame int start=0; //indique etat haut int up=0; //indique le nombre de data atteint int full=0; //nombre de passage en timer0 int nb_timer=0; #int_EXT void EXT_isr(void){ // //debut de trame sur front montant start=1; disable_interrupts(INT_EXT); up=1; n_tab=0; nb_timer=0; full=0; set_timer0(230); } #int_TIMER0 void TIMER0_isr() { set_timer0(230); nb_timer++; } void main() { set_tris_b(0x01); port_b_pullups(TRUE);//resistance tirage à 5v ext_int_edge(0,L_TO_H);// interruption sur front montant enable_interrupts(INT_EXT);//valide interruption externe setup_timer_0(RTCC_INTERNAL); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0);//active timer0 while(true) { if ((full==1) || (n_tab == 20)){ //decharger data sur rs232 disable_interrupts(INT_EXT);//desactive ext i=0; //tab[1]=65534; for (i=0; i<21 ;i++){ printf("-%u",tab[i]); tab[i]=0; delay_ms(20); } //printf("\n\r end"); printf("end"); full=0; start=0; up=0; n_tab=0; delay_ms(5000);//attendre 5secondes enable_interrupts(INT_EXT); } else//full = 0 { //enregistrement data if(!input(PIN_B0) && up ==1)//front descendant { tab[n_tab]=nb_timer; up=0; nb_timer=0; n_tab++; } else if(input(PIN_B0) && up ==0) //front montant { tab[n_tab]=nb_timer ; up=1; nb_timer=0; n_tab++; } } }//while }//main