Bonjour à tous,
J'ai utilisé un programme qui m'a été envoyé avec la platine EASYPIC7. J'utilise le compilateur mikroC. Je lancé le programme sur ma platine; il fonctionne très bien.
Mon problème c'est ce que je ne comprend une partie du programme.
voici l'ensemble du programme:
Est ce que quelqu'un pourrait m'expliquer si il a compris ce que fait ma fonction interruption (Ligne par Ligne), surtout le shifter et le portd_index
Merci d'avance!!!!!!!!!!!!!!!!!
unsigned short shifter, portd_index;
unsigned int digit, number;
unsigned short portd_array[4];
//-------------- Returns mask for common cathode 7-seg. display
unsigned short mask(unsigned short num) {
switch (num) {
case 0 : return 0x3F;
case 1 : return 0x06;
case 2 : return 0x5B;
case 3 : return 0x4F;
case 4 : return 0x66;
case 5 : return 0x6D;
case 6 : return 0x7D;
case 7 : return 0x07;
case 8 : return 0x7F;
case 9 : return 0x6F;
} //case end
}
void interrupt() {
LATA = 0; // Turn off all 7seg displays
LATD = portd_array[portd_index]; // bring appropriate value to PORTD
LATA = shifter; // turn on appropriate 7seg. display
// move shifter to next digit
shifter <<= 1;
if (shifter > 8u)
shifter = 1;
// increment portd_index
portd_index++ ;
if (portd_index > 3u)
portd_index = 0; // turn on 1st, turn off 2nd 7seg.
TMR0L = 0; // reset TIMER0 value
TMR0IF_bit = 0; // Clear TMR0IF
}
void main() {
ANSELA = 0; // Configure PORTA pins as digital
ANSELD = 0; // Configure PORTD pins as digital
TRISA = 0; // Configure PORTA as output
LATA = 0; // Clear PORTA
TRISD = 0; // Configure PORTD as output
LATD = 0; // Clear PORTD
T0CON = 0xC4; // Set TMR0 in 8bit mode, assign prescaler to TMR0
TMR0L = 0; // clear TMROL
digit = 0;
portd_index = 0;
shifter = 1;
number = 1234; // Initial number value
GIE_bit = 1;
TMR0IE_bit = 1;
do {
digit = number / 1000u ; // extract thousands digit
portd_array[3] = mask(digit); // and store it to PORTD array
digit = (number / 100u) % 10u; // extract hundreds digit
portd_array[2] = mask(digit); // and store it to PORTD array
digit = (number / 10u) % 10u; // extract tens digit
portd_array[1] = mask(digit); // and store it to PORTD array
digit = number % 10u; // extract ones digit
portd_array[0] = mask(digit); // and store it to PORTD array
Delay_ms(1000); // one second delay
number++ ; // increment number
if (number > 9999u) //ancienne valuer
number = 0;
} while(1); // endless loop
}
-----