CODE
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define SPI_PORTX PORTB
#define SPI_DDRX DDRB
#define SPI_MISO 4
#define SPI_MOSI 3
#define SPI_SCK 5
#define SPI_SS 2
void SPI_Init(void)
{
SPI_DDRX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
SPI_PORTX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO);
SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0);
SPSR = (1<<SPI2X);
}
int main(void)
{
SPI_Init();
DDRD=0xFF;
DDRB=0xFF;
while(1)
{
unsigned char T=0;
while(T<=254)
{
T++;
unsigned char byte1;
unsigned char b = (T/10)<<4;
unsigned char c = T%10;
byte1 = b+c;
PORTD = byte1;
SPDR = byte1;
while(!(SPSR & (1<<SPIF)));
SPI_PORTX |= (1<<SPI_SS);
_delay_ms(1500);
}
}
}
#include <avr/io.h>
#include <util/delay.h>
#define SPI_PORTX PORTB
#define SPI_DDRX DDRB
#define SPI_MISO 4
#define SPI_MOSI 3
#define SPI_SCK 5
#define SPI_SS 2
void SPI_Init(void)
{
SPI_DDRX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
SPI_PORTX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO);
SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0);
SPSR = (1<<SPI2X);
}
int main(void)
{
SPI_Init();
DDRD=0xFF;
DDRB=0xFF;
while(1)
{
unsigned char T=0;
while(T<=254)
{
T++;
unsigned char byte1;
unsigned char b = (T/10)<<4;
unsigned char c = T%10;
byte1 = b+c;
PORTD = byte1;
SPDR = byte1;
while(!(SPSR & (1<<SPIF)));
SPI_PORTX |= (1<<SPI_SS);
_delay_ms(1500);
}
}
}
Прошивка не работает в протеусе и на реальном прошитом контроллере.
IDE: Atmel Studio;
Программатор: Usbasp 2.0.
Схема прилагается.
Нажмите для просмотра прикрепленного файла