Em tính truyền dữ liệu từ Atmega32 vào ENC28J60 bằng giao thức SPI nhưng em code cho Atmega32 thế này thì nó không chạy.
Ah còn ENC28J60 có phải vi điều khiển không ạ? Sao trong Proteus không có dòng nạp code cho nó ạ? Em muốn điều khiển nó nhận dữ liệu SPI rồi truyền ra Ethernet thì phải code vào đâu ạ?
Xin các anh xem giúp rồi chỉ bảo cho em. Tks!
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#define sbit(port,bit) (port) |= (1<<(bit))
#define cbit(port,bit) (port) &= ~(1<<(bit))
#define spi_port PORTB
#define spi_ddr DDRB
#define MOSI 5
#define MISO 6
#define SS 4
#define SCK 7
void master_setup(void)
{
spi_ddr |= (1<<MOSI)|(1<<SCK)|(1<<SS);
spi_port |= (1<<MISO)|(1<<SS);
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<SPR1)|( 1<<SPR0);
}
void trans(unsigned char data)
{
cbit(spi_port,SS);
SPDR = data;
while(!SPIF);
sbit(spi_port,SS);
}
int main(void)
{
master_setup();
_delay_ms(100);
while(1);
{
trans(9);
_delay_ms(100);
}
return 0;
}
Đây là mạch của em:
Comment