/*
Funzione che invia sul BUS un comando generico.
*/
void FunzioneInvioComando() {
byte MessaggioTx[10] = {
InizioTrasmissione,IDmittente,IDdestinatario,Comando,Puntatore,ValoreMSB,ValoreLSB,ControlloIntegritaR,ControlloIntegritaC,FineTrasmissione };
Serial.print (MessaggioTx[0], BYTE);
Serial.print (MessaggioTx[1], BYTE);
Serial.print (MessaggioTx[2], BYTE);
Serial.print (MessaggioTx[3], BYTE);
Serial.print (MessaggioTx[4], BYTE);
Serial.print (MessaggioTx[5], BYTE);
Serial.print (MessaggioTx[6], BYTE);
Serial.print (MessaggioTx[7], BYTE);
Serial.print (MessaggioTx[8], BYTE);
Serial.print (MessaggioTx[9], BYTE);
}
/*Funzione per calcolare i 2 Byte di controllo integrità.
Incolonnando i Byte del messaggio ottengo una matrice 8x8.
Facendo le XOR delle righe e delle colonne ottengo i 2 byte di verifica
ES:
(Le frecce indicano l'ordine di lettura dei due byte generati dalla funzione, dal bit più significativo al bit meno significativo)
1 1 1 1 0 0 0 0 0 ^
0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 1 1 |
0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 0 0 0 |
1 1 1 1 0 0 0 1 1 |
0 0 0 0 0 0 0 0
- - - - - - - >
ControlloIntegritaR = 10000100
ControlloIntegritaC = 00000000
*/
void FunzioneCalcoloChk () {
bitMessaggio[0]=bitRead(InizioTrasmissione, 0);
bitMessaggio[1]=bitRead(InizioTrasmissione, 1);
bitMessaggio[2]=bitRead(InizioTrasmissione, 2);
bitMessaggio[3]=bitRead(InizioTrasmissione, 3);
bitMessaggio[4]=bitRead(InizioTrasmissione, 4);
bitMessaggio[5]=bitRead(InizioTrasmissione, 5);
bitMessaggio[6]=bitRead(InizioTrasmissione, 6);
bitMessaggio[7]=bitRead(InizioTrasmissione, 7);
bitMessaggio[8]=bitRead(IDmittente, 0);
bitMessaggio[9]=bitRead(IDmittente, 1);
bitMessaggio[10]=bitRead(IDmittente, 2);
bitMessaggio[11]=bitRead(IDmittente, 3);
bitMessaggio[12]=bitRead(IDmittente, 4);
bitMessaggio[13]=bitRead(IDmittente, 5);
bitMessaggio[14]=bitRead(IDmittente, 6);
bitMessaggio[15]=bitRead(IDmittente, 7);
bitMessaggio[16]=bitRead(IDdestinatario, 0);
bitMessaggio[17]=bitRead(IDdestinatario, 1);
bitMessaggio[18]=bitRead(IDdestinatario, 2);
bitMessaggio[19]=bitRead(IDdestinatario, 3);
bitMessaggio[20]=bitRead(IDdestinatario, 4);
bitMessaggio[21]=bitRead(IDdestinatario, 5);
bitMessaggio[22]=bitRead(IDdestinatario, 6);
bitMessaggio[23]=bitRead(IDdestinatario, 7);
bitMessaggio[24]=bitRead(Comando, 0);
bitMessaggio[25]=bitRead(Comando, 1);
bitMessaggio[26]=bitRead(Comando, 2);
bitMessaggio[27]=bitRead(Comando, 3);
bitMessaggio[28]=bitRead(Comando, 4);
bitMessaggio[29]=bitRead(Comando, 5);
bitMessaggio[30]=bitRead(Comando, 6);
bitMessaggio[31]=bitRead(Comando, 7);
bitMessaggio[32]=bitRead(Puntatore, 0);
bitMessaggio[33]=bitRead(Puntatore, 1);
bitMessaggio[34]=bitRead(Puntatore, 2);
bitMessaggio[35]=bitRead(Puntatore, 3);
bitMessaggio[36]=bitRead(Puntatore, 4);
bitMessaggio[37]=bitRead(Puntatore, 5);
bitMessaggio[38]=bitRead(Puntatore, 6);
bitMessaggio[39]=bitRead(Puntatore, 7);
bitMessaggio[40]=bitRead(ValoreMSB, 0);
bitMessaggio[41]=bitRead(ValoreMSB, 1);
bitMessaggio[42]=bitRead(ValoreMSB, 2);
bitMessaggio[43]=bitRead(ValoreMSB, 3);
bitMessaggio[44]=bitRead(ValoreMSB, 4);
bitMessaggio[45]=bitRead(ValoreMSB, 5);
bitMessaggio[46]=bitRead(ValoreMSB, 6);
bitMessaggio[47]=bitRead(ValoreMSB, 7);
bitMessaggio[48]=bitRead(ValoreLSB, 0);
bitMessaggio[49]=bitRead(ValoreLSB, 1);
bitMessaggio[50]=bitRead(ValoreLSB, 2);
bitMessaggio[51]=bitRead(ValoreLSB, 3);
bitMessaggio[52]=bitRead(ValoreLSB, 4);
bitMessaggio[53]=bitRead(ValoreLSB, 5);
bitMessaggio[54]=bitRead(ValoreLSB, 6);
bitMessaggio[55]=bitRead(ValoreLSB, 7);
bitMessaggio[56]=bitRead(FineTrasmissione, 0);
bitMessaggio[57]=bitRead(FineTrasmissione, 1);
bitMessaggio[58]=bitRead(FineTrasmissione, 2);
bitMessaggio[59]=bitRead(FineTrasmissione, 3);
bitMessaggio[60]=bitRead(FineTrasmissione, 4);
bitMessaggio[61]=bitRead(FineTrasmissione, 5);
bitMessaggio[62]=bitRead(FineTrasmissione, 6);
bitMessaggio[63]=bitRead(FineTrasmissione, 7);
bitWrite(ControlloIntegritaR, 0, bitMessaggio[0] ^ bitMessaggio[1] ^ bitMessaggio[2] ^ bitMessaggio[3] ^ bitMessaggio[4] ^ bitMessaggio[5] ^ bitMessaggio[6] ^ bitMessaggio[7]);
bitWrite(ControlloIntegritaR, 1, bitMessaggio[8] ^ bitMessaggio[9] ^ bitMessaggio[10] ^ bitMessaggio[11] ^ bitMessaggio[12] ^ bitMessaggio[13] ^ bitMessaggio[14] ^ bitMessaggio[15]);
bitWrite(ControlloIntegritaR, 2, bitMessaggio[16] ^ bitMessaggio[17] ^ bitMessaggio[18] ^ bitMessaggio[19] ^ bitMessaggio[20] ^ bitMessaggio[21] ^ bitMessaggio[22] ^ bitMessaggio[23]);
bitWrite(ControlloIntegritaR, 3, bitMessaggio[24] ^ bitMessaggio[25] ^ bitMessaggio[26] ^ bitMessaggio[27] ^ bitMessaggio[28] ^ bitMessaggio[29] ^ bitMessaggio[30] ^ bitMessaggio[31]);
bitWrite(ControlloIntegritaR, 4, bitMessaggio[32] ^ bitMessaggio[33] ^ bitMessaggio[34] ^ bitMessaggio[35] ^ bitMessaggio[36] ^ bitMessaggio[37] ^ bitMessaggio[38] ^ bitMessaggio[39]);
bitWrite(ControlloIntegritaR, 5, bitMessaggio[40] ^ bitMessaggio[41] ^ bitMessaggio[42] ^ bitMessaggio[43] ^ bitMessaggio[44] ^ bitMessaggio[45] ^ bitMessaggio[46] ^ bitMessaggio[47]);
bitWrite(ControlloIntegritaR, 6, bitMessaggio[48] ^ bitMessaggio[49] ^ bitMessaggio[50] ^ bitMessaggio[51] ^ bitMessaggio[52] ^ bitMessaggio[53] ^ bitMessaggio[54] ^ bitMessaggio[55]);
bitWrite(ControlloIntegritaR, 7, bitMessaggio[56] ^ bitMessaggio[57] ^ bitMessaggio[58] ^ bitMessaggio[59] ^ bitMessaggio[60] ^ bitMessaggio[61] ^ bitMessaggio[62] ^ bitMessaggio[63]);
bitWrite(ControlloIntegritaC, 0, bitMessaggio[0] ^ bitMessaggio[8] ^ bitMessaggio[16] ^ bitMessaggio[24] ^ bitMessaggio[32] ^ bitMessaggio[40] ^ bitMessaggio[48] ^ bitMessaggio[56]);
bitWrite(ControlloIntegritaC, 1, bitMessaggio[1] ^ bitMessaggio[9] ^ bitMessaggio[17] ^ bitMessaggio[25] ^ bitMessaggio[33] ^ bitMessaggio[41] ^ bitMessaggio[49] ^ bitMessaggio[57]);
bitWrite(ControlloIntegritaC, 2, bitMessaggio[2] ^ bitMessaggio[10] ^ bitMessaggio[18] ^ bitMessaggio[26] ^ bitMessaggio[34] ^ bitMessaggio[42] ^ bitMessaggio[50] ^ bitMessaggio[58]);
bitWrite(ControlloIntegritaC, 3, bitMessaggio[3] ^ bitMessaggio[11] ^ bitMessaggio[19] ^ bitMessaggio[27] ^ bitMessaggio[35] ^ bitMessaggio[43] ^ bitMessaggio[51] ^ bitMessaggio[59]);
bitWrite(ControlloIntegritaC, 4, bitMessaggio[4] ^ bitMessaggio[12] ^ bitMessaggio[20] ^ bitMessaggio[28] ^ bitMessaggio[36] ^ bitMessaggio[44] ^ bitMessaggio[52] ^ bitMessaggio[60]);
bitWrite(ControlloIntegritaC, 5, bitMessaggio[5] ^ bitMessaggio[13] ^ bitMessaggio[21] ^ bitMessaggio[29] ^ bitMessaggio[37] ^ bitMessaggio[45] ^ bitMessaggio[53] ^ bitMessaggio[61]);
bitWrite(ControlloIntegritaC, 6, bitMessaggio[6] ^ bitMessaggio[14] ^ bitMessaggio[22] ^ bitMessaggio[30] ^ bitMessaggio[38] ^ bitMessaggio[46] ^ bitMessaggio[54] ^ bitMessaggio[62]);
bitWrite(ControlloIntegritaC, 7, bitMessaggio[7] ^ bitMessaggio[15] ^ bitMessaggio[23] ^ bitMessaggio[31] ^ bitMessaggio[39] ^ bitMessaggio[47] ^ bitMessaggio[55] ^ bitMessaggio[63]);
}
void FunzioneSvuotaMessaggioRx(){
messaggioRx[0]=0;
messaggioRx[1]=0;
messaggioRx[2]=0;
messaggioRx[3]=0;
messaggioRx[4]=0;
messaggioRx[5]=0;
messaggioRx[6]=0;
messaggioRx[7]=0;
}
void settaUscita (int nuscita){
statoUscita[nuscita]=HIGH;
}
void resettaUscita (int nuscita){
statoUscita[nuscita]=LOW;
}
void invertiUscita (int nuscita){
statoUscita[nuscita]=!statoUscita[nuscita];
}