out DDRB,tmp1
; g, rck, sck -> low / scl -> high
- cbi PORTB,(1<<0)|(1<<1)|(1<<2)
- sbi PORTB,(1<<3)
+ ldi tmp1,0x07
+ out PORTB,tmp1
+ sbi PORTB,3
; port d 6 -> output
- ldi tmp1,(1<<6)
- out DDRD,tmp1
+ sbi DDRD,6
; ser -> low
- cbi PORTD,(1<<6)
+ cbi PORTD,6
ret
+SET_HC595:
+
+ ; storage clock -> low
+ cbi PORTD,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