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