1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| /*
*/
#include <p18f4520.h> //ATTENTION penser a adapter la ref du uC
#pragma config OSC = INTIO67, FCMEN = OFF, PWRT = OFF, MCLRE = ON
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config WDT = OFF, DEBUG=ON
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define TRISA_Init 0b00111111 //LEDS (RA6 et RA7 configure en output )
#define TRISB_Init 0b11111110 //RB0 configure en output
#define TRISC_Init 0b00111111 //Toutes les pins configurees en input par mesure de securite
#define LED_PRESENCE LATA = 0b10000000 //allume une LED : RA7 allumee et RA6 eteinte
#define LED_ABSENCE LATA = 0b01000000 //allume une LED : RA6 allumee et RA7 eteinte
#define Compteur_Pulses_TX_Init 20 //configure le nombre de pulses du compteur
int Compteur_Pulses_TX; //declaration de notre compteur de pulses emis
int Compteur_Pulses_RX; //declaration de notre compteur pulses recus
int Compteur_MS_TIMEOUT; //declaration de notre compteur nombre de cycles complets ///////////////////////////////////////////////////////////////////////////
void main(void)
{ OSCCON = 0b01110000; //configuration du registre de controle de l oscillateur
while (!(OSCCONbits.IOFS) ) //quand le bit IOFS (i/o frequency stable)est a 0
Nop()
OSCTUNE = 0b01000000; //configuration du registre de reglage de l oscillateur :oscillateur interne
while (!(OSCCONbits.IOFS) ) //quand le bit IOFS (i/o frequency stable)est a 0
Nop() //,PLL active, frequence calibree en usine,
//Config des PORT
TRISA = TRISA_Init; // initialisation de portA
TRISB = TRISB_Init; // initialisation de portB
TRISC = TRISC_Init; // initialisation de portC
//config des timer 0 et 1
//Timer0
T0CON = 0b11000000; //Timer0 enable sur 16bits
INTCON = 0; //initialisation du registre interuption 0
INTCON2 = 0b01000000; //initialisation du registre interuption 2
TMR0L = 0b1010; //
//TMR0H = 0; //
//
//
T1CON = 0b10000001; // enable en 16 bits
INTCON = 0; //initialisation du registre interuption 0
INTCON2 = 0b100100; //initialisation du registre interuption 2
// TMR1L = 0b11111111;//0b11011011; //(40 000 000/4)=x; (10cm/34300=y)c'est le temps pour parcourir 10 cm a la vitesse de la lumiere
// TMR1H = 0b11111111;//0b11111110; //x*y =292 cycles, nous somme sur 16 bits donc 292 = la duree
//du timer
///////////////////////////////////////////////////////////////////////////////////////
TMR1H = 0;//initialise le timerH 1
TMR1L = 0;//initialise le timerL 1
while(1)
{ ///////////////////////////////////////////////////////////////////////////////////
Compteur_Pulses_TX = Compteur_Pulses_TX_Init; //initialisation du compteur de pulses emis
TRISB = TRISB_Init; // initialisation de portB
// debut de l emission de pulses I0IO.....
while (Compteur_Pulses_TX)
{
LATB = 0b00000001; //creation d un pulse I
LATB = 0; //creation d un pulse 0
// Nop(); //creer de courts delais afin d affiner le signal carre
Compteur_Pulses_TX = Compteur_Pulses_TX -1; //compte a rebour 20->0 dans l exemple
}
// passage en entree
TRISB = 0xFF; // toutes les pins a 1, donc en entree
//init du TimeOut
//Timer0
T0CON = 0b11000000; //Timer0 enable sur 16bits
TMR0L = 0; //Timer0 low
INTCONbits.TMR0IF = 0; //overflow flag bit a 0
INTCONbits.INT0IF = 0; //external interrupt flag bit a 0
Compteur_MS_TIMEOUT = 500; //500ms
Compteur_Pulses_RX = Compteur_Pulses_TX_Init; // init du cptr de pulses recues à 20, pour decrementer a chaque pulses reçues
/*while (Compteur_Pulses_TX)
{
INTCONbits.TMR0IF == 1;//quand le flag passe a 1
TMR0L = TMR0L +1; //tu incremente le timer 0
}*/ }
} |
Partager