Bonsoir,
J'ai fait une fonction pour facilement gérer les I/O des PIC. Dans le bout de code, je fait clignoter une diode du port D et E. Mais seul la diode du port E clignote... Celle du port D reste à zéro, même si je la force à "1" en remplacant "o_tor_run(&led_run,pwm_run.s) ;" par "o_tor_run(&led_run,1);"
Il se passe la même chose sur les ports A,B et C..
Mais ce que je ne comprend pas, c'est que je fait exactement la même chose pour tout les ports dans mon code.. Je ne comprend pas d’où peut venir le soucis... =( Je ne voit pas d'exception pour les ports A, B, C et D. Il existe des registre particuliers ?
Les registre de configuration sont dans la fonction ecu_init()
ecu.c
Code:#include "ecu.h" // INIT de l'objet "ecu" void ecu_init(void) { // CONFIG1H #pragma config OSC = HSPLL #pragma config OSCS = OFF //CONFIG2L #pragma config PWRT = OFF #pragma config BOR = ON #pragma config BORV = 25 //CONFIG2H #pragma config WDT = OFF #pragma config WDTPS = 128 // CONFIG4L #pragma config STVR = ON #pragma config LVP = OFF // CONFIG5L #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF // CONFIG5H #pragma config CPB = OFF #pragma config CPD = OFF // CONFIG6L #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF // CONFIG6H #pragma config WRTC = OFF #pragma config WRTB = OFF #pragma config WRTD = OFF // CONFIG7L #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF // CONFIG7H #pragma config EBTRB = OFF ADCON1 = 0x00000110; }tor.hCode:#include <xc.h> #include "tor.h" struct o_clock clock; struct o_tor led_run, led2; void main(){ ecu_init(); o_clock_init(&clock,10000000,1000); o_tor_init(&led_run,4,0); o_tor_init(&led2,5,0); while(1){ o_clock_run(&clock); o_tor_run(&led_run,pwm_run.s); o_tor_run(&led2,pwm_run.s); } }
tor.cCode:#ifndef TOR_H #define TOR_H #include <xc.h> struct o_tor { unsigned char p, b; }; void o_tor_init(struct o_tor *o, unsigned char _p, unsigned char _b); void o_tor_run(struct o_tor *o, unsigned char _s); #endif TOR_H
Code:#include "tor.h" #ifndef MASK #define MASK unsigned char maskF0[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; unsigned char maskF1[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; #endif MASK // INIT de l'object "o_tor" void o_tor_init(struct o_tor *o, unsigned char _p, unsigned char _b) { o->p = _p; o->b = _b; if(o->p == 1) { TRISA = TRISA & maskF0[o->b]; LATA = LATA & maskF0[o->b]; } if(o->p == 2) { TRISB = TRISB & maskF0[o->b]; LATB = LATB & maskF0[o->b]; } if(o->p == 3) { TRISC = TRISC & maskF0[o->b]; LATC = LATC & maskF0[o->b]; } if(o->p == 4) { TRISD = TRISD & maskF0[o->b]; LATD = LATD & maskF0[o->b]; } if(o->p == 5) { TRISE = TRISE & maskF0[o->b]; LATE = LATE & maskF0[o->b]; } } // RUN de l'objet "o_tor" void o_tor_run(struct o_tor *o, unsigned char _s) { if(o->p == 1) { if(_s == 1) LATA = LATA | maskF1[o->b]; LATA = LATA & maskF0[o->b]; } if(o->p == 2) { if(_s == 1) LATB = LATB | maskF1[o->b]; LATB = LATB & maskF0[o->b]; } if(o->p == 3) { if(_s == 1) LATC = LATC | maskF1[o->b]; LATC = LATC & maskF0[o->b]; } if(o->p == 4) { if(_s == 1) LATD = LATD | maskF1[o->b]; LATD = LATD & maskF0[o->b]; } if(o->p == 5) { if(_s == 1) LATE = LATE | maskF1[o->b]; LATE = LATE & maskF0[o->b]; } }
-----