please dont rip this site

SX IO expansion with 3 io pins and 74HC595 serial shift register

by Ken Mathis

Ken Mathis of ASC shares this code:

;FILE NAME: 4 byte shift out short ver.
;date:8/28/03
;Programmer:Ken Mathis
;Purpose of this program is to expand the number of SX28 output
;ports using a 74HC595 serial shift register. Using 3 output pins of the
;SX will add 29 additional output ports. These additional output ports are
;used for non-critical timing applications, such as controlling an LED matrix
;or 4 seven segment displays.
;data is shifted out of the SX into the 74HC595's
;rc ports used to control the shift register and send data out to the 595's
;pin 13 of '595 (Output Enable\) hard wired to ground
;pin 10 of '595 (Master Reset\) hard wired to +5 via 10k ohms
;pin 9 (Q7') of the most significant '595 is connected to the next lower '595
;pin 14 (data input) and each sucessive pin 9 connects to the next lower 
;'595 pin 14 (data input). The Q7' output of the most significant '595 is the
;input to the next lower '595
;sx connections to most significant'595: rc.7 (data) >>> '595 pin14
;rc.5 (latch) >>> '595 pin12 - (all 595's)
;rc.4 (clock) >>> '595 pin11 - (all 595's)
;---------------------------
;4 byte data is loaded into temporary registers temp1 and the following 3 
;addresses (temp1+1, temp1+2, temp1+3) -- MOST SIGNIFICANT BYTE is temp1+3
;data is shifted out Least Significant Byte first. The 595's present each byte
;with the least significant bit on Q7 and the most significant bit on Q0
;---------------------------
;DELAY ROUTINE generated by using the Delay Code Generator, courtesy of
;NICKOLAI GOLOVCHENKO
ifdef __SASM
	DEVICE	SX28L, STACKX, OPTIONX
	IRC_CAL	IRC_FAST
	FREQ	50_000_000
else
	DEVICE	SX28AC, OPTIONX
endif
DEVICE	TURBO, OSCHS2, WATCHDOG
RESET	START
;place variables here
org	$08
temp1	ds	4	;used to hold 4 bytes to shift out
temp2	ds	1	;used to count down 8 bits
temp3	ds	1	;used to count down 4 bytes
d1	ds	1	;used in delay routine
d2	ds	1	;ditto
d3	ds	1	;ditto
data	=	rc.7	;assign data to rc.7
clock	=	rc.4	;assign clock to rc.4
latch	=	rc.5	;assign latch to rc.5
;any calls should be placed on first page between org $000 and org $100
org	$000
;-----5 uS delay (courtesy of Nickolai Golovchenko)
del_5uS
	mov	w, #$3d
	mov	d1, w
del_5uS_0
	decsz	d1
	jmp	del_5uS_0
	nop
	nop
	ret
;-----clock pulse generation to shift data out of SX
shift_out
	call	del_5uS		;5 uS set-up time
	setb	clock		;make clock (rc.4) high
	call	del_5uS		;5 uS hold time
	clrb	clock		;make clock low
	ret			;return
;-----move bit to shift out into carry
rotate
	rr	ind	;move into carry lsb of file register pointed to by
			;current value if fsr
	jc	high	;if carry is high jump to "high" and make data (rc.7) high
	clrb	data	;if carry is low make data (rc.7) low
	jmp	out	;skip over next line
high	
	setb	data	;make data (rc.7) high
out
	ret		;return
org	$100
Start
;port initialization
	mov	!ra,#$0		;ra outputs	mov	!rb,#$FF
	mov	!rb,#$01	;rb inputs
	mov	!rc,#$00	;rc outputs

again
	clrb	clock		;make clock pin low
	clrb	data		;make data pin low
	clrb	latch		;make latch pin low

;-----These lines of code used to verify operation of program by
;loading known values into the 4 bytes that will be shifted out of
;the SX28 into the four (4) 74HC595's. Change values as needed to
;test program
mov	w,#$93
mov	temp1,w
mov	w,#$11
mov	temp1+1,w
mov	w,#$44
mov	temp1+2,w
mov	w,#$7e
mov	temp1+3,w
;-----End of test section

;prepare fsr to load fsr with the register that will hold the 
;lease significant byte. EXAMPLE, the least significant byte will be in
;register $08, therefore fsr must start at $08 

	mov	w,#$08		
	mov	fsr,w		;load fsr with register $08
	mov	temp2,w		;load 8 bit countdown with $08
	mov	temp3,w		;load 4 byte countdown with $08 (will be changed
				;to 4 later
	clc			;ensure carry is zero
	rr	temp3		;change value from $08 to $04
	call	rotate		;move ls bit into carry and set data to reflect
				;carry was high or low (done inside rotate sub-routine)
	call	shift_out	;generate clock pulses to shift data out
	decsz	temp2		;decrement 8 bit countdown until zero
	jmp	$-3		;go up three lines to "call rotate"
	inc	fsr		;increment fsr so ind now refers to the next highest byte
	mov	w,#$08		
	mov	temp2,w		;reload 8 but countdown
	clc			;clear carry flag (if not cleared 4 byte countdown may
				;not work correctly if carry was set from last shiftout)
	decsz	temp3		;decrement 4 byte countdown
	jmp	$-9		;go up 9 lines to "call rotate"
	call	del_5uS		;wait 5 uS
	setb	latch		;move data from '595 internal registers to ouput registers
	call	del_5uS		;5 uS hold time
	clrb	latch		;make latch low
	nop			;
	jmp	again		;do it again - or continue with the rest of the "real program"
END				;end of the program
+
file: /Techref/scenix/lib/io/shiftreg-km.htm, 5KB, , updated: 2004/6/17 17:40, local time: 2024/12/3 21:23,
TOP NEW HELP FIND: 
18.97.14.82:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://www.massmind.org/techref/scenix/lib/io/shiftreg-km.htm"> SX IO expansion with 3 io pins and 74HC595 serial&nbsp;shift register</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to www.massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .