#include <p18cxxx.h>
#include <stdio.h>
#include <delays.h>
#pragma config WDT = OFF, LVP = OFF, OSC = HS
/***********************************
Prototypes
***********************************/
char GetByte(void);
/***********************************
Defines
***********************************/
#define CS PORTAbits.RA0
#define SCL PORTAbits.RA1
#define SDI PORTAbits.RA2
/***********************************
Main
***********************************/
void main(void){
char CMD,x=0; //ComManD
int y = 0;
ADCON1 = 0x0F;
TRISB = 0x00;
TRISA = 0xFF;
LATB = 0;
while(1){
while(CS == 1); //Wait until user selects the pic to continue
LATBbits.LATB1 = 1;
CMD = GetByte();
switch(CMD){
case 0x30:
LATBbits.LATB0 = 1;
break;
case 0xFF:
LATB = 0xFF; //ERROR
break;
}
while(CS == 0); //Wait until user deselects the pic to continue
LATBbits.LATB1 = 1;
}
}
/***********************************
GetByte
***********************************/
char GetByte(void){
char x, tmp = 0;
for(x=0;x<8;x++){ //loop 8 times to get COMMAND
tmp=tmp<<1; //shift over 1
while(SCL == 0) //wait until CLOCK is HIGH to get bit (Serial CLock)
if(CS == 1) return 0xFF; //If user sets high CS pin aka error break!
while(SCL == 1) //wait until CLOCK is LOW to get continue loop
if(CS == 1) return 0xFF; //If user sets high CS pin aka error break!
if(SDI) //if SDI pin is high (Serial Data In)
tmp|=1; //add a 1 if its high if not just shift (automatically a 0)
}
return tmp; //return our data
}