Search 8052.com...


User (Email)

Password

Remember Logon

Forgot password?
Create Account


8052.com Online Store
Back to 8052.com Main Page



























8051 I/O EXPANSION EXAMPLES

The following source code and schematic show how to expand the 8051 I/O using common shift register chips.

; -----------------------------------------------------------------------
; I/O EXPANSION ROUTINES FOR 8051 FAMILY MICROCONTROLLERS
; WRITTEN BY GARY PEEK
; -----------------------------------------------------------------------

; USE THE READINIT AND WRITEINIT ROUTINES DURING INITIALIZATION

; USE THE READ8 AND WRITE8 ROUTINES WHEN USING ONLY ONE CHIP (8 BITS)
; USE THE READ16 AND WRITE16 ROUTINES WHEN USING TWO CHIPS (16 BITS)

				;SAMPLE PORT BIT EQUATES

CLOCK		BIT	P1.7	;MICROCONTROLLER OUTPUT
STROBE		BIT	P1.6	;MICROCONTROLLER OUTPUT
DATAOUT		BIT	P1.5	;MICROCONTROLLER OUTPUT

LOADSHIFT	BIT	P1.4	;MICROCONTROLLER OUTPUT
DATAIN		BIT	P1.3	;MICROCONTROLLER INPUT


; 4094 SHIFT REGISTER OUTPUT ROUTINES

WRITEINIT:			;PINS USED FOR OUTPUT SHIFT REGISTER
	CLR	CLOCK		;INITIALIZE LOW FOR A HIGH GOING CLOCK
	CLR	STROBE		;INITIALIZE LOW FOR A HIGH GOING LATCH
	RET			;DATAOUT DOES NOT NEED TO BE INITIALIZED

				;ENTER WITH OUTPUT BYTE IN ACCUMULATOR
WRITE8:	MOV	B,#8		;NUMBER OF BITS TO DO
WR8L:	RLC	A		;ROTATE BIT 7 INTO CARRY
	MOV	DATAOUT,C	;PUT CARRY INTO OUTPUT BIT
	SETB	CLOCK		;CLOCK DATA THROUGH CHIP
	CLR	CLOCK
	DJNZ	B,WR8L		;LOOP UNTIL ALL BITS DONE
	SETB	STROBE		;LATCH DATA INTO OUTPUT REGISTER
	CLR	STROBE
	RET

				;ENTER WITH HIGH BYTE IN REGISTER B
				;ENTER WITH LOW BYTE IN ACCUMULATOR
WRITE16:PUSH	ACC		;SAVE LOW BYTE FOR NOW
	MOV	A,B		;PUT HIGH BYTE IN ACC, SHIFT IT FIRST
	CALL	CLKOUT		;CLOCK BITS THROUGH THE CHIPS
	POP	ACC		;RESTORE THE LOW BYTE
	CALL	CLKOUT		;CLOCK BITS THROUGH THE CHIPS
	RET

CLKOUT:	MOV	B,#8		;NUMBER OF BITS TO DO
CLKOL:	RLC	A		;ROTATE BIT 7 INTO CARRY
	MOV	DOUT,C		;PUT CARRY INTO OUTPUT BIT
	SETB	CLOCK		;CLOCK DATA THROUGH CHIP
	CLR	CLOCK
	DJNZ	B,CLKOL		;LOOP UNTIL ALL BITS ARE DONE
	SETB	STROBE		;LATCH DATA INTO OUTPUT REGISTER
	CLR	STROBE
	RET




; 74165 SHIFT REGISTER INPUT ROUTINES

READINIT:			;PINS USED FOR INPUT SHIFT REGISTER
	CLR	CLOCK		;INITIALIZE LOW FOR A HIGH GOING CLOCK
	CLR	LOADSHIFT	;INITIALIZE LOW FOR NORMAL "LOAD" FUNCTION
	SETB	DATAIN		;INITIALIZE HIGH SO IT CAN BE AN INPUT
	RET

READ8:	MOV	B,#8		;DO 8 BITS
	SETB	LOADSHIFT	;SET CHIP TO BEGIN SHIFTING DATA OUT
RD8L:	SETB	CLOCK		;CLOCK DATA TO THE OUTPUT PIN
	CLR	CLOCK
	MOV	C,DATAIN	;PUT INPUT BIT INTO CARY
	RRC	A		;ROTATE CARRY INTO BIT 7
	DJNZ	B,RD8L		;LOOP UNTIL ALL BITS ARE DONE
	CLR	LOADSHIFT	;SET CHIP TO LOAD DATA AGAIN
	RET			;EXIT WITH INPUT BYTE IN ACCUMULATOR


READ16:	SETB	LOADSHIFT	;SET CHIPS TO BEGIN SHIFTING DATA OUT
	CALL	CLKIN		;CLOCK BITS THROUGH CHIPS
	PUSH	ACC		;SAVE LOW BYTE JUST READ FOR NOW
	CALL	CLKIN		;CLOCK BITS THROUGH CHIPS
	MOV	B,A		;STORE HIGH BYTE
	POP	ACC		;RESTORE LOW BYTE
	CLR	LOADSHIFT	;SET CHIP TO LOAD DATA AGAIN
	RET			;EXIT WITH HIGH BYTE IN REGISTER B
				;EXIT WITH LOW BYTE IN ACCUMULATOR

CLKIN:	MOV	B,#8		;DO 8 BITS
CLKIL:	SETB	CLOCK		;CLOCK DATA TO THE OUTPUT PIN
	CLR	CLOCK
	MOV	C,DATAIN	;PUT INPUT BIT INTO CARY
	RRC	A		;ROTATE CARRY INTO BIT 7
	DJNZ	B,CLKIL		;LOOP UNTIL ALL BITS ARE DONE
	RET			;EXIT WITH BYTE IN ACCUMULATOR




(C) Copyright 1997 - 2008 by Vault Information Services LLC. All Rights Reserved.
Information provided "as-is" without warranty. Please see details.
Contact us for usage and copy permission.