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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
//*******************************************************************************
// liaison SPI
//
// rôle : écrire dans une mémoire EEPROM extérieure au PIC par la liaison SPI
//*******************************************************************************
#include <p18f452.h>
#include <stdio.h>
#include <spi.h>
#include <delays.h>
#define SPI_CS PORTAbits.RA5
void Delay10KTCYx( unsigned char unit);
void main (void)
{
char E,x;
char Nmsb;
char Nlsb;
char T;
E = (PORTB&0x1F);
T = 0;
DDRAbits.RA5=0;
PORTAbits.RA5=1;
DDRCbits.RC3=0;
PORTCbits.RC3=0;
DDRCbits.RC5=0;
PORTCbits.RC5=0;
DDRBbits.RB0=1;
DDRBbits.RB1=1;
DDRBbits.RB2=1;
DDRBbits.RB3=1;
DDRBbits.RB4=1;
DDRBbits.RB5=1;
DDRBbits.RB6=1;
DDRBbits.RB7=1;
while(1)
{
switch (E)
{
case 0x00: // Normal 4mA
Nmsb=0x01;
Nlsb=0x91;
T=0;
break;
case 0x01: // défault materiel 2mA
Nmsb=0x00;
Nlsb=0xC9;
T=0;
break;
case 0x02: // défault capteur UV ou IR 2,6mA
Nmsb=0x01;
Nlsb=0x05;
T=0;
break;
case 0x04: // Inhibition 3,4mA
Nmsb=0x01;
Nlsb=0x55;
T=0;
break;
case 0x08: // IR² 8mA
Nmsb=0x03;
Nlsb=0x22;
T=0;
break;
case 0x10: // UV 12mA
Nmsb=0x04;
Nlsb=0xB0;
T=0;
break;
case 0x18: // UV+IR² 16mA préalarme
if (T==0)
{ Nmsb=0x06;
Nlsb=0x40;
T=1;
}
if (T==1) { Nmsb=0x07;
Nlsb=0xDA;
}
}
OpenSPI(SPI_FOSC_64, MODE_00, SMPMID);
SPI_CS = 0; //Sélection du CNA
WriteSPI(Nmsb); //envoie donnée poids fort
while(!PIR1bits.SSPIF);
PIR1bits.SSPIF=0;
WriteSPI(Nlsb); //envoie donnée poids faible
while(!PIR1bits.SSPIF);
PIR1bits.SSPIF=0;
SPI_CS = 1;
CloseSPI();
if (T=1) {Delay10KTCYx(170);
}
}
} |
Partager