Pour ceux qui programment en C avec XC8, utilisez-vous une bibliothèque pour vous faciliter la vie avec le SPI ?
Et si oui laquelle ?
Merci et bon dimanche
Modérateur : Jérémy
Code : Tout sélectionner
*
Software SPI library functions
*/
#ifndef softwareSPI_h
#define softwareSPI_h
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 8000000
/*#define SCK RC3
#define MOSI RC5
#define MISO RC4*/
#define SCK RA0
#define MOSI RA1
#define MISO RA2
unsigned char writeSPIByte(unsigned char transmit);
int writeSPIWord(unsigned short int setting);
int writeSPI24bits(unsigned short long setting);
int readSPIWord();
unsigned char readSPIByte();
#endif
Code : Tout sélectionner
/*
Software SPI library functions - currently only works in mode 1 used for 25AA** EEPROM
*/
#include <xc.h>
#include "softwareSPI.h"
unsigned char writeSPIByte(unsigned char transmit){
unsigned char received = 0;
unsigned char bits = 8;
unsigned char tmpbit = 0;
SCK = 0;
//make the transmission
unsigned char mask = 0x80; //Initialize to write and read bit 7
unsigned char ret = 0; //Initialize read byte with 0
do{
//Clock out current bit onto SPI Out line
if (transmit & mask)
MOSI = 1;
else
MOSI = 0;
SCK = 1; //Set SPI Clock line
if (MISO)
ret |= mask; //Read current bit fromSPI In line
__delay_us(1); //Ensure minimum delay of 500nS between SPI Clock high and SPI Clock Low
SCK = 0; //Set SPI Clock line
mask = mask >> 1; //Shift mask so that next bit is written and read from SPI lines
__delay_us(1); //Ensure minimum delay of 1000ns between bits
}while (mask != 0);
return ret;
}
int writeSPIWord(unsigned short int setting)
{
int data;
unsigned char b1, b2;
b1 = writeSPIByte(setting >> 8);
b2 = writeSPIByte(setting);
data = b1 << 8 | b2;
__delay_us(50);
return data;
}
int writeSPI24bits(unsigned short long setting)
{
unsigned short long data;
unsigned char b1, b2, b3;
b1 = writeSPIByte(setting >> (unsigned short long)16);
b2 = writeSPIByte(setting >> 8);
b3 = writeSPIByte(setting);
data = (unsigned short long)b1 << (unsigned short long)16 | b2 << 8 | b3;
__delay_us(50);
return data;
}
int readSPIWord(){
int data;
unsigned char b1, b2;
b1 = writeSPIByte(0x00);
b2 = writeSPIByte(0x00);
data = b1 << 8 | b2;
return data;
}
unsigned char readSPIByte(){
unsigned char data;
data = writeSPIByte(0x00);
return data;
}
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités
Forum de Partage et d'Entraide pour micro-contrôleur PIC, Fantas-Pic a été créé dans l'optique de réunir les débutants, les passionnés et les experts en programmation sur micro-contrôleur PIC.
Nous vous souhaitons une agréable visite, en espérant vous apporter toute l'aide que vous êtes venus chercher.
Veuillez vous inscrire ou vous connecter afin d’avoir accès à l’ensemble des fonctions du forum.