em đang viết thử SPI cho 2 con atmega128 ( em đang làm đề tài với con này và cần đến SPI của nó). nhưng mắc lỗi không mô phỏng được trên proteus. ace nào sửa hộ e với. em mắc 2 hôm nay mà không sửa được. 
master:
slave:
ở dưới em có đính kèm theo toàn bộ project.

master:
Code:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SS 4
#define SCK 1
#define MOSI 2
#define MISO 3
// khai bao 2 macro set bit va clear bit
#define sbi(port,bit) port = (1<<bit)
#define cbi(port,bit) port =~(1<<bit)
char xau1[]="nguyentuanqs";
void SPI_Trans(char Data)
{
while (bit_is_clear(SPSR,SPIF))
{};
SPDR = Data;
}
void Transmit_SPI(char* S_Data)
{
for (int i=0;i<=strlen(S_Data);i++)
SPI_Trans(S_Data[i]);
}
int main()
{
SPI_DDR |= (1<<SCK)|(1<<MOSI); // dat SCK va MOSI lam cong ra
SPI_PORT |= (1<<MISO); // dat MISO lam cong vao.
cbi(PORTB,SS);
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPHA);
_delay_ms(100);
Transmit_SPI(xau1);
return 0;
}
Code:
//slave
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include "myLCD.h"
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SS 0
#define SCK 1
#define MOSI 2
#define MISO 3
// khai bao bien toan cuc
char SPI_Data;
int stt;
int main()
{
SPI_DDR |= (1<<MISO);
SPI_PORT |= (1<<SS)|(1<<MOSI);
SPCR |= (1<<SPIE)|(1<<SPE)|(1<<CPHA);
sei();
init_LCD();
clr_LCD();
while(1)
{
};
return 0;
}
ISR(SIG_SPI)
{
SPI_Data = SPDR;
putChar_LCD(SPI_Data);
}


Comment