#include <p18f2520.h>
#include <portb.h>
#include <spi.h>
#include <sw_spi.h>
#include <delays.h>
#include <timers.h>
#include <math.h>
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#pragma config MCLRE = ON
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici
#define POWERUP 0x20
#define SETPLAY 0xE0
#define PLAY 0xF0
#define SETREC 0xA0
#define REC 0xB0
#define STOP 0x30
#define POWERDOWN 0x10
#define ZERO 0x00
#define SPI_CS LATAbits.LATA5
#define LED LATAbits.LATA4
#define BUTTON PORTBbits.RB5
#define RITCOM Delay1KTCYx(1);
#define SPI_SDO LATCbits.LATC5
#define SPI_SDI PORTCbits.RC4
#define SPI_SCK LATCbits.LATC3
//variabili comuni ad uso contatori
unsigned int i,j,y;
char k;
char a[16],b[16];
// Prototipo di funzione
void High_Int_Event (void);
void Send_POWERUP (void);
void Send_SETPLAY (void);
void Send_PLAY (void);
void Send_SETREC (void);
void Send_REC (void);
void Send_STOP (void);
void Send_POWERDOWN (void);
void Send_ZERO (void);
void Read_INT (void);
void high_interrupt (void){
// Salto per la gestione dell'interrupt
_asm GOTO High_Int_Event _endasm
}
#pragma code
#pragma interrupt High_Int_Event
// Funzione per la gestione dell'interruzione
void High_Int_Event (void){
// Controllo che l'interrupt sia stato generato da PORTB
if (INTCONbits.RBIF == 1 ){
}
if(BUTTON==0){
Delay10KTCYx(10);
//creazione opzione PLAY-REC
for (i=0; i<60000&&BUTTON==0; i++){
}
if(i<60000){
//invio del comando di POWERUP
Send_POWERUP();
Delay1KTCYx(25);
//invio del comando di SETPLAY
Send_SETPLAY();
Delay10TCYx(1);
//invio del comando di PLAY
Send_PLAY();
//attesa dell'segnale di fine riproduzione
while (PORTBbits.RB0!=0){
LED=1;
Delay10KTCYx(1);
LED=0;
Delay1KTCYx(100);
}
//invio del comando di STOP
Send_STOP();
Delay1KTCYx(50);
//avvio della ricezione dei dati EOM ed indirizzo
Delay1KTCYx(1);
}else{
//LED ON
LED=1;
//invio del comando di POWERUP
Send_POWERUP();
Delay1KTCYx(25);
//invio del comando di POWERUP
Send_POWERUP();
Delay1KTCYx(50);
//invio del comando di SETREC
Send_SETREC();
Delay10TCYx(1);
//invio del comando di REC
Send_REC();
Delay1KTCYx(1);
//attesa rilascio del pulsante per finire la registrazione
while (BUTTON==0){
}
//invio del comando di STOP
Send_STOP();
Delay1KTCYx(50);
//avvio della ricezione dei dati EOM ed indirizzo
//LED OFF
LED=0;
Delay1KTCYx(1);
}
}
// Resetto il flag d'interrupt per permettere nuove interruzioni
INTCONbits.RBIF = 0;
}
void main (void){
//Inizializzazione dei pin
TRISA = 0b11001111;
LATAbits.LATA4 = 0;
LATAbits.LATA5 = 0;
TRISB = 0xFF;
TRISC = 0b11010111;
//Abilita/Disabilita i resistori di pull-up sulla PORTB
DisablePullups();
//Abilito le interruzioni su PORTB
INTCONbits.RBIE = 1;
//Abilito l'interrupt globale
INTCONbits.GIE = 1;
//Abilito l'interrupt periferiche
INTCONbits.PEIE = 1;
Delay100TCYx(1);
j=1000;
SPI_CS=1;
//Ciclo infinito
while(1){
// Send_SETREC();
// LED=1;
// Delay1KTCYx(1);
// LED=0;
// Delay1KTCYx(1);
}
}
void Send_POWERUP (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=1;
}
void Send_SETPLAY (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_PLAY (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_SETREC (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_REC (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_STOP (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_POWERDOWN (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=1;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}
void Send_ZERO (){
SPI_CS=0;
//bit 0
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 1
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 2
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 3
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 4
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 5
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 6
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 7
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 8
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 9
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 10
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 11
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 12
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 13
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 14
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
//bit 15
SPI_SCK=1;
SPI_SDO=0;
RITCOM;
SPI_SCK=0;
RITCOM;
SPI_CS=0;
}