Bonjour à tous !
J'ai un petit problème d'utilisation du portB de mon PIC18F2550.
J'ai configuré le portB en mode digital output et j'essaye de mettre toutes les pin à 1, mais la pin RB5 ne veux pas s'allumer ...
J'ai changé de µC pour voir s'il n'y avait pas de défauts dans celui que j'avais... même problème.
J'ai donc essayé d'incrémenter le portB à chaque interruption du timer0 et là, déjà les pin RB6 et RB7 sont toujours activés et quand la pin RB5 doit s'activer, les pin RB0 à RB4 repassent à 0 et c'est reparti pour un tour ...
Savez vous pourquoi ça fait ça ?? Ai-je oublier de configurer un registre ???
Une autre petite question : à quoi sert le registre LATB ?? Je n'ai pas réussi à le comprendre avec le datasheet
Voila mon code (pour compilo C18):
Code:#include <p18f2550.h> void timer_overflow(void); #pragma code it=0x8 void IT_timer_overflow(void) { _asm goto timer_overflow _endasm } #pragma code #pragma interrupt timer_overflow void timer_overflow(void) { if(INTCONbits.TMR0IF) { INTCONbits.TMR0IF = 0; PORTB += 1; } } void init_interruptions() { INTCONbits.GIEH = 1; // Active ou désactive les interruptions INTCONbits.GIEL = 0; INTCONbits.TMR0IE = 1; INTCONbits.INT0IE = 0; INTCONbits.RBIE = 0; INTCONbits.TMR0IF = 0; INTCONbits.INT0IF = 0; INTCONbits.RBIF = 0; } void init_timer0() { T0CONbits.TMR0ON = 1; // 0 : Disable Timer 0 | 1 : Enable Timer0 T0CONbits.T08BIT = 0; // 0 : 16 bits counter | 1 : 8 bits counter T0CONbits.T0CS = 0; // 0 : Transition on TOCLK pin | 1 : Internal instruction cycle clock (CLKO) T0CONbits.T0SE = 0; // 0 : Increment on low-to-high transition on T0CKL pin | 1 : Increment on high-to-low transition on T0CLK pin T0CONbits.PSA = 0; // 0 : Prescaler is enable | 1 : Prescaler is dinable T0CONbits.T0PS2 = 0; // 000 : Prescale value 1/2 T0CONbits.T0PS1 = 1; // 100 : Prescale value 1/32 T0CONbits.T0PS0 = 1; // 111 : Prescale value 1/256 } void init_portB() { INTCON2bits.RBPU = 1; INTCON2bits.RBIP = 0; TRISB = 0b00000000; LATB = 0b00000000; PORTB = 0b11111111; } void main(void) { init_portB(); init_timer0(); init_interruptions(); while(1) { } }
-----