You are on page 1of 2

F:\latest 877a\eeprom-table001\eeprom-table_rd.

asm
;------------------------------------------------------------------; READ FROM WRITTEN/PROGRAMMED EEPROM MEMORY AND SHOW STATUS IN PORTD
; PROGRAMMAR- SYED TASWAR MAHBUB
; CLOCK- 20MHZ
;------------------------------------------------------------------PROCESSOR
INCLUDE
__CONFIG

PIC16F877A
"P16F877A.INC"
H'3F71'

TITLE : "EEPROM PROGRAMMED MEMORY READ AND SHOW IT IN PORTD"


;--------------------------------------------------------------------;POSITION OF THE FOLLOWING GPRS IN MEMORY MAP ARE MENTIONED IN INCLUDE
;FILE CITED ABOBE AND HENCE NOT REQUIRED TO MENTION HERE. BUT GIVEN
;HERE TO SHOW THE POSITIONS IN DIFFERENT DATA BANKS FOR NEW PROGRAMMARS.
;---------------------------------------------------------------------STATUS
EQU
0X03
PORTD
EQU
0X08
INTCON
EQU
0X0B
TRISD
EQU
0X88
;IN BANK1, SO BANK CHANGING REQUIRED
EEDATA
EQU
0X10C ;IN BANK2, SO BANK CHANGING REQUIRED
EEADR
EQU
0X10D ;IN BANK2, SO BANK CHANGING REQUIRED
EECON1
EQU
0X18C ;IN BANK3, SO BANK CHANGING REQUIRED
EECON2
EQU
0X18D ;IN BANK3, SO BANK CHANGING REQUIRED
;----------------------------------------------------------------------CBLOCK
0X20
D1,D2,D3,INDEX,LOCATION
ENDC
ORG
GOTO

0X00
INIT

;-----------------DELAY SUB-ROUTINE------------------------------------DELAY

;500 MILLISEC DELAY WITH 20 MHZ CLOCK


MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

0X16
D1
0X74
D2
0X06
D3

DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETLW

D1,F
$+2
D2,F
$+2
D3,F
DELAY_0
0X00

DELAY_0

;--------- EEPROM PROGRAMMED/WRITTEN MEMORY READ SEQUENCE SUB-ROUTINE -------EEPROM_READ


MOVF
BANKSEL
MOVWF
BANKSEL
BCF
BSF
BANKSEL
MOVF
BANKSEL
RETURN

LOCATION,W
EEADR
EEADR
EECON1
EECON1,7
EECON1,0
EEDATA
EEDATA,W
PORTD

;MOVING TO BANK2
;SENDING EEADR VALUE TO LOCATION GPR
;MOVING TO BANK3
;DISABLE EEPGD BIT- TO ACCESS EEPROM DATA MEMORY
;ENABLE WREN BIT
;MOVING TO BANK2
;MOVING EEDATA VALUE TO W REGISTER
;MOVING TO BANK0
;RETURN FROM READ SUB-ROUTINE

;--------------- MAIN PROGRAM STARTS HERE ---------------------------------------1

F:\latest 877a\eeprom-table001\eeprom-table_rd.asm
INIT
BANKSEL TRISD
CLRF
TRISD
BANKSEL PORTD
KHELA

CLRF
MOVLW
MOVWF
MOVLW
MOVWF
GOTO

PORTD
0X08
INDEX
0X00
LOCATION
START

;MOVING TO BANK1
;MAKING PORTD ALL BITS OUTPUT
;FALLING BACK TO BANK0

;SENDING 0X08 VALUE TO INDEX


;SENDING 0 VALUE TO LOCATION TO USE EEADR 0 BYTE MEMORY

;----------------8 LEDS IN PORTD LIGHTED FROM LSB TO MSB -------------------START


CLRF
CALL
MOVWF
CALL
CLRF
INCF
DECFSZ
GOTO
GOTO

PORTD
EEPROM_READ
PORTD
DELAY
PORTD
LOCATION,F
INDEX,F
START
START_1

;CALLING EEPROM READ SUB_ROUTINE


;SENDING EEPROM 0 BYTE VALUE TO PORTD
;CALLING DELAY SUBROUTINE
;CLEARING PORTD
;INCREMENTING LOCATION VALUE TO USE NO.1 BYTE OF EEADR
;DECREMENTIN VALUE BY 1 FROM GPR INDEX TOTAL VALUE
;CONTINUE THE PROG TILL MSB LED IS LIGHTED

;-------------- 8LEDS IN PORTD LIGHTED FROM MSB TO LSB ----------------------START_1


CLRF
CALL
MOVLW
MOVWF
MOVLW
MOVWF
GOTO

PORTD
DELAY
0X08
INDEX
0X07
LOCATION
START2

;SETTING INDEX VALUE 0X08

;SETTING EEADR VALUE 0X07

START2
CLRF
PORTD
CALL
EEPROM_READ
MOVWF
PORTD
;SHOWING EEADR VALUE AT 0X07 IN PORTD
CALL
DELAY
DECF
LOCATION,F
;DECREMENTING EEADR VALUE
DECFSZ INDEX,F
GOTO
START2
;REPEAT THE SEQUENCE
CLRF
PORTD
CALL
DELAY
GOTO
KHELA
;AGAIN START LIGHTING FROM THE LSB LED
;----------------------------------------------------------------------------------ORG
0X2100
DE
0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
;---------------------------------------------------------------END
;---------------------------------------------------------------NOTE:
PIC16F877A IS HAVING 256 BYTES OF DATA EEPROM.SO,ITS MEMORY RANGE IS
FROM B'00000000' TO B'11111111' OR IN HEX 0X00 TO 0XFF.
0X2100 IS THE EEPROM RESET VECTOR.
DE MEANS THE BYTE VALUE OF EEADR, STARTING FROM 0 MEMORY LOCATION
HERE 8 BYTES ARE USED FROM EEPROM MEMORY LOCATION-0X00 TO 0X07
VALUE B'00000001'OR IN HEX 0X01 VALUE IS PLACED IN 0 EEPROM DATA MEMORY.
VLUE B'00000010'OR IN HEX 0X02 VALUE IS PLACED IN 01 EEPROM DATA MEMORY.
IN THIS WAY B'10000000'OR IN HEX 0X80 IS PLACED IN 07 EEPROM DATA MEMORY.
AFTER ASSEMBLER DIRECTIVE,END, THE ASSEMBLER WILL NOT SEE OR ASSEMBLE ANYTHING. SO,ANY IMPORTANT DATA
OR USEFUL NOTE CAN BE WITTEN DOWN FOR EASY UNDERSTANDING THE PROGRAM.

You might also like