#include #include #define F_CPU 16000000u #include "util/delay.h" #define data_bus PORTC #define set_data_bus_output (DDRC = 0xff) #define set_data_bus_input (DDRC = 0x00, PORTC = 0x00) #define WE_high (sbi(PORTD, 3)) #define WE_low (cbi(PORTD, 3)) #define OE_high (sbi(PORTD, 4)) #define OE_low (cbi(PORTD, 4)) #define CE_high (sbi(PORTD, 5)) #define CE_low (cbi(PORTD, 5)) #define DS1_high (sbi(PORTD, 0)) #define DS1_low (cbi(PORTD, 0)) #define STCP1_high (sbi(PORTD, 1)) #define STCP1_low (cbi(PORTD, 1)) #define SHCP1_high (sbi(PORTD, 2)) #define SHCP1_low (cbi(PORTD, 2)) #define DS2_high (sbi(PORTD, 6)) #define DS2_low (cbi(PORTD, 6)) #define STCP2_high (sbi(PORTD, 7)) #define STCP2_low (cbi(PORTD, 7)) #define SHCP2_high (sbi(PORTA, 7)) #define SHCP2_low (cbi(PORTA, 7)) void initialise_74HC595() { sbi(DDRD, 0); sbi(DDRD, 1); sbi(DDRD, 2); } void write_74HC595(uint8_t data) { STCP1_low; for(uint8_t i = 0; i < 8; i++) { if(data & 0b10000000) { DS1_high; } else { DS1_low; } SHCP1_high; SHCP1_low; data = data<<1; } STCP1_high; } void initialise_74HC595_2() { sbi(DDRD, 6); sbi(DDRD, 7); sbi(DDRA, 7); } void write_74HC595_2(uint8_t data) { STCP2_low; for(uint8_t i = 0; i < 8; i++) { if(data & 0b10000000) { DS2_high; } else { DS2_low; } SHCP2_high; SHCP2_low; data = data<<1; } STCP2_high; } void write_AS6C4008(uint8_t data, uint8_t address) { OE_low; WE_high; CE_high; write_74HC595(0b00000000); write_74HC595(0b00000000); write_74HC595(address); set_data_bus_output; data_bus = data; CE_low; WE_low; WE_high; CE_high; } uint8_t read_AS6C4008(uint8_t address) { set_data_bus_input; WE_high; CE_high; OE_high; write_74HC595(0b00000000); write_74HC595(0b00000000); write_74HC595(address); CE_low; OE_low; return(PINC); CE_high; OE_high; } void initialise() { initialise_74HC595(); initialise_74HC595_2(); } int main(void) { initialise(); write_AS6C4008(0b00110011, 0b00000000); write_AS6C4008(0b11001100, 0b00000001); write_74HC595_2(read_AS6C4008(0b00000000)); _delay_ms(5000); write_74HC595_2(read_AS6C4008(0b00000001)); _delay_ms(5000); write_74HC595_2(0b00110011); _delay_ms(5000); write_74HC595_2(0b11001100); }