я уже в курсе вашего умения программировать7seg писал(а):Мне просто пришлось только написать алгоритм
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
я уже в курсе вашего умения программировать7seg писал(а):Мне просто пришлось только написать алгоритм

я вас предупреждал[uquote="ARV",url="/forum/viewtopic.php?p=3214309#p3214309"]Сразу предупреждаю: протеус некорректно моделирует поведение регистров 74HC597, которые я рекомендовал вам для опроса дискретных входов - протеус не поддерживает корректно их каскадирование. один в протеусе нормально себя показывает, а цепочка из двух и более ведет себя, как один - первый. просто имейте ввиду.[/uquote]7seg писал(а):В протеусе почему то не захотел симулироватся 597 регистр


Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SPI_MISO PB4
#define SPI_MOSI PB3
#define SPI_SCK PB5
#define SPI_SS PB2
struct UnionBits
{
unsigned DO0: 1;
unsigned DO1: 1;
unsigned DO2: 1;
unsigned DO3: 1;
unsigned DO4: 1;
unsigned DO5: 1;
unsigned DO6: 1;
unsigned DO7: 1;
};
union Byte {
uint8_t ByteRegister;
struct UnionBits Register;
};
union Byte OneOUT;
union Byte TwoOUT;
union Byte ThreeOUT;
union Byte OneIN;
union Byte TwoIN;
union Byte ThreeIN;
union Byte FourIN;
union Byte FifthIN;
void StartInitIO()
{
OneOUT.ByteRegister=0x00;
TwoOUT.ByteRegister=0x00;
ThreeOUT.ByteRegister=0x00;
OneIN.ByteRegister=0x00;
TwoIN.ByteRegister=0x00;
ThreeIN.ByteRegister=0x00;
FourIN.ByteRegister=0x00;
FifthIN.ByteRegister=0x00;
}
/*инициализация SPI модуля в режиме master*/
void SPI_Init(void)
{
/*настройка портов ввода-вывода
все выводы, кроме MISO выходы*/
SPI_DDR |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
SPI_PORT |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO);
/*разрешение spi,старший бит вперед,мастер, режим 0*/
SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(1<<SPR0);
SPSR = (0<<SPI2X);
}
uint8_t SPI_UpdataByte(uint8_t data)
{
uint8_t report;
SPDR = data;
while(!(SPSR & (1<<SPIF)));
report = SPDR;
return report;
}
void SpiOutRegister()
{
SPI_PORT &= ~(1<<SPI_SS);
OneIN.ByteRegister=SPI_UpdataByte(0);
TwoIN.ByteRegister=SPI_UpdataByte(0);
ThreeIN.ByteRegister=SPI_UpdataByte(ThreeOUT.ByteRegister);
FourIN.ByteRegister=SPI_UpdataByte(TwoOUT.ByteRegister);
FifthIN.ByteRegister=SPI_UpdataByte(OneOUT.ByteRegister);
SPI_PORT |= (1<<SPI_SS);
}
int main(void)
{
SPI_Init();
StartInitIO();
_delay_us(100);
while(1)
{
SpiOutRegister();
OneOUT.ByteRegister=OneIN.ByteRegister;
TwoOUT.ByteRegister=TwoIN.ByteRegister;
ThreeOUT.ByteRegister=ThreeIN.ByteRegister;
OneOUT.Register.DO3
}
return 0;
}