We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
hi in my recent project i'm doing bit banging SPI in AT89S52. i am using a self modified library and its not working properly. i cant remember the original page where i found the code, though it was for the PIC's.
The data is sending correctly The problem is i am receiving same data which i am sending. take a look at the code.
#ifndef buffer #define buffer buf unsigned char bdata buffer; sbit Dbit0=buffer^0; sbit Dbit1=buffer^1; sbit Dbit2=buffer^2; sbit Dbit3=buffer^3; sbit Dbit4=buffer^4; sbit Dbit5=buffer^5; sbit Dbit6=buffer^6; sbit Dbit7=buffer^7; #endif // CONSTANTS ---------------------------------------------- #define CPOL 0 // Set CPOL to 1 or 0 #define CPHA 0 // Set CPHA to 1 or 0 // MACROS ------------------------------------------------- #if CPHA #define SCK_POST #if CPOL #define SCK_INIT 1 #define SCK_PRE SCK=0 #define SCK_MID SCK=1 #else #define SCK_INIT 0 #define SCK_PRE SCK=1 #define SCK_MID SCK=0 #endif #else #define SCK_PRE #if CPOL #define SCK_INIT 1 #define SCK_MID SCK=0 #define SCK_POST SCK=1 #else #define SCK_INIT 0 #define SCK_MID SCK=1 #define SCK_POST SCK=0 #endif #endif void SPI_begin() { MOSI=1; MISO=1; SCK=SCK_INIT; } unsigned char SPI_rw(unsigned char Data) { buffer=Data; SCK_PRE; MOSI = Dbit7; SCK_MID; Dbit7 = MISO; SCK_POST; // bit 7 SCK_PRE; MOSI = Dbit6; SCK_MID; Dbit6 = MISO; SCK_POST; // bit 6 SCK_PRE; MOSI = Dbit5; SCK_MID; Dbit5 = MISO; SCK_POST; // bit 5 SCK_PRE; MOSI = Dbit4; SCK_MID; Dbit4 = MISO; SCK_POST; // bit 4 SCK_PRE; MOSI = Dbit3; SCK_MID; Dbit3 = MISO; SCK_POST; // bit 3 SCK_PRE; MOSI = Dbit2; SCK_MID; Dbit2 = MISO; SCK_POST; // bit 2 SCK_PRE; MOSI = Dbit1; SCK_MID; Dbit1 = MISO; SCK_POST; // bit 1 SCK_PRE; MOSI = Dbit0; SCK_MID; Dbit0 = MISO; SCK_POST; // bit 0 return buffer; }
Please note: if i remove the Dbit'x' = MISO; and replae with Pbit'x' = MISO; other variable (pbit will be second bdata variable same as above) then it works. But logically using same buffer should work as i am only updating the bits.
My question is why the above code is not working?? all other methods are working correctly. why not this. what am i missing?????
and please don't tell me to use other methods. i have plenty of methods. i just want to know whats wrong in my code?
Thank you.
your welcome
plz donate me sum bitcoins if u really want 2 show apreciation