ُلام
من میخوام SPI نرم افزاری راه اندازی کنم
طبق سرچی که زدم دو تا رجیستر هستند که یکی کلاک میزنه که میشه مستر و دومی کلاک دریافت میکنه و دیتا داخل هم شیفت میدند اینجوری

حالا من کد زدم از مستر به اسلیو دیتا درست میره
ولی از اسلیو به مستر دیتا چرت پرت میاد
مشکل من کجاست
برای اسلیو از SPI سخت افزاری استفاده کردم ولی برای مستر نوشتم
اینم کد مستر
این هم کد و فایل پروتئوس
من میخوام SPI نرم افزاری راه اندازی کنم
طبق سرچی که زدم دو تا رجیستر هستند که یکی کلاک میزنه که میشه مستر و دومی کلاک دریافت میکنه و دیتا داخل هم شیفت میدند اینجوری

حالا من کد زدم از مستر به اسلیو دیتا درست میره
ولی از اسلیو به مستر دیتا چرت پرت میاد
مشکل من کجاست
برای اسلیو از SPI سخت افزاری استفاده کردم ولی برای مستر نوشتم
اینم کد مستر
#include <mega8.h>
#include <delay.h>
// SPI functions
//#include <spi.h>
#define SS_PIN PORTB.2
#define MOSI_PIN PORTB.3
#define MISO_PIN PINB.4
#define SCK_PIN PORTB.5
// Declare your global variables here
char j,SEND_BYTE,RECEVE_BYTE;
void main(void)
{
PORTB=0x00;
DDRB=0x2C;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
DDRC=0XFF;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 250.000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
//SPCR=0x50;
//SPSR=0x00;
PORTD=0XFF;
DDRC=0XFF;
while (1)
{
SS_PIN=1;
SEND_BYTE=PIND;
PORTC=RECEVE_BYTE;
RECEVE_BYTE=0xff;
SS_PIN=0;
for(j=0 ; j<8 ; j++){
MOSI_PIN=SEND_BYTE & 0b10000000;
SEND_BYTE<<=1;
SCK_PIN=0,delay_ms(1),SCK_PIN=1,delay_ms(1);
RECEVE_BYTE=RECEVE_BYTE>>1;
if(MISO_PIN==1)RECEVE_BYTE = RECEVE_BYTE | 0b10000000;
RECEVE_BYTE>>=1;
}
};
}
این هم کد و فایل پروتئوس
دیدگاه