Sei sulla pagina 1di 6

To read and write in to the internal EEPROM memory of PIC16F877A using an assembly

language

Task-1
Write a code to Increment a counter with a switch on port B1 and show output on port D.
(The port D data is saved in internal EEPROM location 01 and read whenever the device is
switched on)

Code:

EEDAT EQU 10CH


EEADR EQU 10DH
EECON1 EQU 18CH
EECON2 EQU 18DH
EEPGD EQU 07
WR EQU 01
WREN EQU 02
RD EQU 00
COUNT EQU 20H
PORTB EQU 06H
PORTD EQU 08H
TRISB EQU 86H
TRISD EQU 88H

LIST P=16F877A
ORG 0
GOTO START

__CONFIG H'3F72'

;CONFIGURATION SECTION

START
BANKSEL TRISD

MOVLW B'00000000'
MOVWF TRISD

MOVLW B'00000011'
MOVWF TRISB

BANKSEL PORTD

CLRF PORTB
CLRF PORTD
BEGIN
CLRF COUNT
CALL EE_RD

MOVWF PORTD
MOVWF COUNT
X BTFSS PORTB,1
GOTO X
INCF COUNT
CALL EE_WR
MOVF COUNT,0
MOVWF PORTD

Y BTFSC PORTB,1
GOTO Y
GOTO X
EE_RD
BANKSEL EEADR
MOVLW .1
MOVWF EEADR
BANKSEL EECON1
BCF EECON1,07
BSF EECON1,0 ;Read enable
BANKSEL EEDAT
MOVF EEDAT,W
BANKSEL PORTD
RETURN
EE_WR
BANKSEL EEADR
MOVLW .1
MOVWF EEADR
BANKSEL COUNT
MOVF COUNT,0
BANKSEL EEDAT
MOVWF EEDAT
BANKSEL EECON1
BCF EECON1,7
BSF EECON1,2 ;Write enable
BANKSEL EECON2
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BANKSEL EECON1
BSF EECON1,01
WAIT
BTFSC EECON1,01
GOTO WAIT
BCF EECON1,2 ;Disable writing further
BANKSEL PORTD
RETURN
END

Task-2

Modify and implement the code in task_1 to add a control SW2 such that the counter/port D may
be reset to zero when desired.

Code:

PORTB EQU 6
PORTD EQU 8
TRISB EQU 86H
TRISD EQU 88H
INTCON EQU 0BH
EEDAT EQU 10CH
EEADR EQU 10DH
EECON1 EQU 18CH
EECON2 EQU 18DH
EEPGD EQU 07
WR EQU 01
WREN EQU 02
COUNT EQU 20H

LIST P=16F877A
ORG 0
GOTO START
ORG 0x04
GOTO ISR
__CONFIG H'3F72'

ISR
CLRF COUNT
CALL WRITE
MOVF COUNT,W
MOVWF PORTD
BCF INTCON,1
RETFIE

START
BANKSEL TRISB
movlw B'10010000'
movwf INTCON

movlw B'11111111'
movwf TRISB
movlw B'00000000'
movwf TRISD

BANKSEL PORTB

CLRF PORTB
CLRF PORTD

BEGIN
CLRF COUNT
CALL READ
MOVWF PORTD
MOVWF COUNT
X BTFSS PORTB,1
GOTO X
INCF COUNT
CALL WRITE
MOVF COUNT,W
MOVWF PORTD
Y BTFSC PORTB,1
GOTO Y
GOTO X
READ
BANKSEL EEADR
MOVLW .01
MOVWF EEADR
BANKSEL EECON1
BCF EECON1,7
BSF EECON1,0
BANKSEL EEDAT
MOVF EEDAT,W
BANKSEL PORTD
RETURN

WRITE
BANKSEL EEADR
MOVLW .01
MOVWF EEADR
BANKSEL COUNT
BTFSC PORTB,0
CLRF COUNT
MOVF COUNT,0
MOVF COUNT,W
BANKSEL EEDAT
MOVWF EEDAT
BANKSEL EECON1
BCF EECON1,7
BSF EECON1,2
BANKSEL EECON2
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,01
WAIT
BTFSC EECON1,01
GOTO WAIT
BCF EECON1,2
BANKSEL PORTD
RETURN

END

Potrebbero piacerti anche