sais pas...4lman78 a écrit : Ok lol c'est un programme qui fait quoi?

Si, c'est pour programmer un PIC... il calcule vitesse et accélération à partir d'un signal odométrique
Mais ca c'est des couches basses, c'est pas moi qui ait fait

void main(void)
{
// ces trois lignes sont nécessaires aux deux compteurs
// Interrupt Priority feature enableing
RCONbits.IPEN = 1; // Interrupt Priority Feature is enabled
//// INTCON : Interrupt Control Register
INTCONbits.GIEH = 1; // Enables all high priority interrupts
INTCONbits.GIEL = 1; // Enables all low priority peripheral interrupts
// ***
// Init Timer0 <==> Horloge
// ***
// // On règle le fonctionnement du Timer 0
// // Ici, timer sur 16 bits (0x0000 à 0xFFFF)
// // Prescaler à 1:8, soit
// // Tcy = 4/48MHz = 0,083333 µs
// // Timer = 8 * Tcy = 0.66666 µs ==> donc une incrémentation ttes les 0.666666 µs
// // 16 bits donc 65535 valeurs
// // Si on compte sur la pleine échelle de 0 à 65535, on mettra 65535 * 0.666666 = 43.69 ms avant de déclencher l'interruption. ==> trop pour 20 ms
// // On va donc faire interrompre le Timer toutes les 0,020s et on comptera 50 interruptions avant d'avoir notre seconde.
// //
// // Timer 0 sur 16 bits.
// // On charge sa valeur de début de comptage dans TMROH et TMROL
// // On veut 20000 µs avant interruption. Soit 30000 Tcy
// // On charge donc le Timer à 65535 - 30000 = 35535 soit 0x8ACF
// // Cette valeur est ensuite recalée par rapport au temps réel
// TIMER0 Control Register
T0CONbits.T08BIT=0; // Timer0 is configured as 16-bit timer/counter
T0CONbits.T0CS=0; // Internal instruction cycle clock (CLKO)
// T0CONbits.T0SE=0; // Increment on low-to-high transition on TOCK1 pin
T0CONbits.PSA=0; // Timer Prescaler is assigned. Timer0 clock input comes from prescaler output
T0CONbits.T0PS2=0; //1:8 //0//1//1//1//1; //1:16 // 1:32 // 1:64 // 1:128 // 1:256 prescale value
T0CONbits.T0PS1=1; //1:8 //1//0//0//1//1; //1:16 // 1:32 // 1:64 // 1:128 // 1:256 prescale value
T0CONbits.T0PS0=0; //1:8 //1//0//1//0//1; //1:16 // 1:32 // 1:64 // 1:128 // 1:256 prescale value
// TIMER0 Interrupt Control Register 1
INTCONbits.TMR0IF=0; // = 1 if TMR0 has overflowed, else = 0
INTCONbits.TMR0IE=1; // Enables the TMR0 overflow interrupt
INTCONbits.INT0IE=0; // Disables the INT0 external interrupt on port RB0
INTCONbits.RBIE=0; // Disables the RB4:7 port change interrupt
// INTCONbits.INT0IF = 1 if The INT0 external interrupt occurred (must be cleared in software), else = 0
// /!\ INT0 est toujours en HAUTE priorité /!\
// TIMER0 Interrupt Control Register 2
INTCON2bits.TMR0IP = 1; // Place l'interruption TMR0 en haute priorité
// INTCON2bits.INTEDG1=1; // Interrupt on rising edge sur port RB1
//// TIMER0 Interrupt Control Register 3
//
// INTCON3bits.INT2IE=0; // Disables INT2 external interrupt on port RB2
// INTCON3bits.INT1IE=0; // Disables INT1 external interrupt on port RB1
// INTCON3bits.INT1IP=0; // Place l'interruption sur port RB1 en basse priorité
// Initialisation du TIMER0
TMR0H = 0x8B; //interruption toutes les 100 µs 0xFFA6 //interruption toutes les 20 µs 0xFFE1 //interruption toutes les 2 ms 0xF448
TMR0L = 0x85; //interruption toutes les 200 µs 0xFED4(FED9) //interruption toutes les 20 ms 0x8AD0|8B85
// TIMER0 Control Register - - - Lancement du Timer0
T0CONbits.TMR0ON = 1; // Enables Timer0
//-------------------------------------------------------------------------------------------------------------------------------------------------
// ***
// Init Timer1
// ***
// PIR1 : PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 1
PIR1bits.TMR1IF = 0; // TMR1 Interrupt Flag bit
PIR1bits.CCP1IF = 0; // CCP1 Interrupt Flag bit
// PIE1 : PERIPHERAL INTERRUPT ENABLE REGISTER 1
PIE1bits.TMR1IE = 1; // Timer1 Interrupt Enable bit
PIE1bits.CCP1IE = 1; // CCP1 Interrupt Enable bit
// IPR1 : PERIPHERAL INTERRUPT PRIORITY REGISTER 1
IPR1bits.TMR1IP = 0; // TMR1 Overflow Interrupt Priority bit(0 = low priority)
IPR1bits.CCP1IP = 0; // CCP1 Overflow Interrupt Priority bit(1 = high priority)
// PIR2 : PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 2
// PIR2bits.TMR3IF = 0; // TMR3 Interrupt Flag bit
// PIR2bits.CCP2IF = 0; // CCP2 Interrupt Flag bit
// PIE2 : PERIPHERAL INTERRUPT ENABLE REGISTER 2
PIE2bits.CCP2IE = 0; // CCP2 Interrupt Enable bit
PIE2bits.TMR3IE = 0; // TMR3 Interrupt Enable bit
// TRISC
TRISCbits.TRISC2 = 1; // RC2/CCP1 pin is set as an input
// T1CON : TIMER1 Control Register
T1CONbits.RD16 = 0; //Enables register read/write of Timer1 in two 8-bit operations
T1CONbits.T1RUN = 0; //Device clock is derived from another source (not from Timer1 oscillator)
T1CONbits.T1CKPS1 = 1; //Prescaler value = 1:8
T1CONbits.T1CKPS0 = 1; //Prescaler value = 1:8
T1CONbits.T1OSCEN = 0; //Timer1 oscillator is shut off
T1CONbits.TMR1CS = 0; //Internal clock (Fosc / 4)
// T3CON : TIMER3 Control Register
T3CONbits.T3CCP2 = 0; // Timer1 is the capture clock source for both CCP modules
T3CONbits.T3CCP1 = 0;
// T3CONbits.TMR3ON = 0;
// CCPxCON: STANDARD CCP CONTROL REGISTER
CCP1CONbits.CCP1M3 = 0; // 0101 Capture mode for CCP1 module every rising edge
CCP1CONbits.CCP1M2 = 1; // 0100 Capture mode for CCP1 module every falling edge
CCP1CONbits.CCP1M1 = 0; // 0110 Capture mode, every 4th rising edge
CCP1CONbits.CCP1M0 = 1; // 0111 Capture mode, every 16th rising edge
TMR1H = 0x00;
TMR1L = 0x00;
T1CONbits.TMR1ON = 1; //Start Timer1
//--------------------------------------------------------------------------//
//** Initialisation du système ********************************************//
InitializeSystem();
//** Traitement des tâches lièes à l'usb (requête, in/out...) **************//
//** Traitement des tâches utilisateurs ************************************//
while(1)
{
// if(TMR1_overflow < 5)
// {
while(TOR_pin == 0){USBTasks();} // pour pouvoir connecter le VB
USBTasks(); // USB Tasks. Voir main.c
ProcessIO(); // Voir user.c
//mLED_Orange_Off();
//mLED_Rouge_On();
// }
// if(TMR1_overflow >= 5)
// {
// while(TOR_pin == 0){USBTasks();} // pour pouvoir connecter le VB
// USBTasks();
// Arret();
//mLED_Orange_On();
//mLED_Rouge_Off();
// }
} //end while
} //end main
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités