; port functions PORT_INIT: ; port b 0-3 -> output ldi tmp1,0x0f out DDRB,tmp1 ; disable hc595 outputs sbi PORTB,0 ; rck -> low cbi PORTB,1 ; clear hc595 registers cbi PORTB,3 ; rck -> high (store shift register data) sbi PORTB,1 ; enable outputs cbi PORTB,0 ; port d 6 -> output sbi DDRD,6 ; ser -> low cbi PORTD,6 ; port d 2 -> output (debug clk!) sbi DDRD,2 ; port d 3 -> output (debug vertical!) sbi DDRD,3 ; release hc595 register clear sbi PORTB,3 ret SET_HC595: ; storage clock -> low cbi PORTB,1 ; source driver ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,7 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,6 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,5 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,4 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,3 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,2 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,1 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_source,0 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; sink driver ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,7 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,6 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,5 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,4 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,3 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,2 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,1 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; clock -> low cbi PORTB,2 ; set ser line cbi PORTD,6 sbrc hc595_sink,0 sbi PORTD,6 ; clock -> high sbi PORTB,2 ; store to storage register sbi PORTB,1 ret