27
Microcontroller programming for IVRS system ASM:- ;*******************************************LCD ************************************************* ******************************* ; IST LINE HOME ADDRESS ;80H 81H _ _ 8F ; 2ND LINE HOME ADDRESS ;C0H C1H _ _ CF cblock 0x20 READBACK COUNTER LCD_CMD LCD_DATA LCD_READBACK PRCOUNTER REVDATA COUNT TEMP H_BYTE M_BYTE L_BYTE R0 R1 R2 RSDATA RSDATA1 RSDATA2 RSDATA3 RSDATA4 BYTE_COUNT

Microcontroller programming for IVRS system PIC microcontroller

Embed Size (px)

Citation preview

Page 1: Microcontroller programming for  IVRS system PIC microcontroller

Microcontroller programming for IVRS system

ASM:-

;*******************************************LCD ********************************************************************************; IST LINE HOME ADDRESS ;80H 81H _ _ 8F; 2ND LINE HOME ADDRESS ;C0H C1H _ _ CF

cblock 0x20READBACKCOUNTERLCD_CMDLCD_DATALCD_READBACKPRCOUNTERREVDATACOUNTTEMPH_BYTEM_BYTEL_BYTER0 R1 R2 RSDATARSDATA1RSDATA2RSDATA3RSDATA4BYTE_COUNTDTMFDTMFPDTMFDFLAG0NO_COUNTRING_COUNT

endcBAUD_CONSTANT EQU D'103'; BAUDRATE= 9600;****************************************************PINS DECLARATION****************************************************************#DEFINE EN PORTA,0 ; FOR LCD#DEFINE RW PORTA,1 ; FOR LCD#DEFINE RS PORTA,2 ; FOR LCD#DEFINE DT_DIS FLAG0,0 ;

Page 2: Microcontroller programming for  IVRS system PIC microcontroller

#DEFINE RING PORTA,5 ;#DEFINE HOOK PORTA,3 ;

;****************************************INTRUPT ROUTINE REGISTERS**************************************************************TEMPW EQU H'7B'TEMPSTATUS EQU H'7C'TEMPPCLATH EQU H'7D';****************************************RAM CLEANING ROUTINE REGISTERS*******************************************************************COUNT_REG1 EQU H'7E'TMP_COUNT EQU H'7F';************************************************************************************************************************************

ERRORLEVEL-302BANK0 MACRO ;macro to select data RAM bank 0

BCF STATUS,RP0BCF STATUS,RP1ENDM

BANK1 MACRO ;macro to select data RAM bank 1

BSF STATUS,RP0BCF STATUS,RP1ENDM

BANK2 MACRO ;macro to select data RAM bank 2

BCF STATUS,RP0BSF STATUS,RP1ENDM

BANK3 MACRO ;macro to select data RAM bank 3

BSF STATUS,RP0BSF STATUS,RP1ENDM

include "P16F877.inc" org 0

GOTO INITIALIZE org 4 GOTO INTERRUPT

ASCII ANDLW B'00001111' ADDWF PCL,F RETLW H'30';0 RETLW H'31';1 RETLW H'32';2

Page 3: Microcontroller programming for  IVRS system PIC microcontroller

RETLW H'33';3 RETLW H'34';4 RETLW H'35';5 RETLW H'36';6 RETLW H'37';7 RETLW H'38';8 RETLW H'39';9 RETLW H'41';A RETLW H'42';B RETLW H'43';C RETLW H'44';D RETLW H'45';E RETLW H'46';F

;***********************************************I SR****************************************************************************

INTERRUPTMOVWF TEMPW ; TRANSFER DATA OF W TO

TEMPWSWAPF STATUS, W ; SWAP AND TRANSFER DATA OF

STATUS TO WCLRF STATUS ; CLEAR STATUSMOVWF TEMPSTATUS ; TRANSFER DATA OF W TO

TEMPSTATUSMOVF PCLATH, W ; TRANSFER DATA OF PCLATH TO WMOVWF TEMPPCLATH ; TRANSFER DATA OF W TO

TEMPPCLATHCLRF PCLATH ; CLEAR PCLATHCLRWDT ;CLEAR WATCH DOG

TIMERBTFSC RCSTA,FERRGOTO FERR_ERRBTFSC RCSTA,OERRGOTO OVER_ERRBTFSC PIR1,RCIF ;CHECK WHETHER

INTERRUPT GENERATED BY THE TIMER1 IF NO THEN SKIPGOTO RX_INTERRUPT ;GOTO TIMER1 INTERRUPT

PROCESSING

DATA_RETURNMOVF TEMPPCLATH, W ; TRANSFER DATA OF

TEMPPCLATH TO WMOVWF PCLATH ; TRANSFER DATA

OF W TO PCLATHSWAPF TEMPSTATUS, W ; TRANSFER DATA OF

TEMPSTATUS TO WMOVWF STATUS ; TRANSFER DATA

OF W TO STATUSMOVF TEMPW, W ; TRANSFER DATA OF

TEMPW TO WRETFIE ; RETURN FROM

INTERRUPT

Page 4: Microcontroller programming for  IVRS system PIC microcontroller

FERR_ERRMOVFW RCREGCLRWBCF RCSTA,FERRGOTO RESET_BYTE_COUNT

OVER_ERRBCF RCSTA,CRENMOVFW RCREGCLRWCALL DELAY255BSF RCSTA,CRENGOTO RESET_BYTE_COUNT

RX_INTERRUPTBCF PIR1,RCIFMOVFW RCREGMOVWF RSDATAMOVFW BYTE_COUNTXORLW H'01'BTFSC STATUS,ZGOTO CHECK_B1MOVFW BYTE_COUNTXORLW H'02'BTFSC STATUS,ZGOTO STORE_1BMOVFW BYTE_COUNTXORLW H'03'BTFSC STATUS,ZGOTO STORE_2BMOVFW BYTE_COUNTXORLW H'04'BTFSC STATUS,ZGOTO STORE_3BGOTO RESET_BYTE_COUNT

CHECK_B1MOVFW RSDATAXORLW "{"BTFSS STATUS,ZGOTO RESET_BYTE_COUNT

INC_BYTE_COUNTINCF BYTE_COUNT,FGOTO DATA_RETURN

RESET_BYTE_COUNTMOVLW H'01'MOVWF BYTE_COUNTGOTO DATA_RETURN

STORE_1BMOVFW RSDATAMOVWF RSDATA1GOTO INC_BYTE_COUNT

Page 5: Microcontroller programming for  IVRS system PIC microcontroller

STORE_2BMOVFW RSDATAMOVWF RSDATA2GOTO INC_BYTE_COUNT

STORE_3BMOVFW RSDATAXORLW "}"BTFSC STATUS,ZGOTO RS232RECIVEGOTO RESET_BYTE_COUNT

RS232RECIVEMOVFW RSDATA1XORLW "B"BTFSS STATUS,ZGOTO RESET_BYTE_COUNTMOVFW RSDATA2XORLW "R"BTFSS STATUS,ZGOTO RESET_BYTE_COUNTGOTO INITIALIZEGOTO RESET_BYTE_COUNT

;*********************************************************PROGRAM STARTS*************************************************************INITIALIZE

CALL CHECK_RAM1 CALL PORT_INTITIALIZE

CALL RS232_INITIALIZATIONCALL LCD_INITIALIZATIONCALL FETCHMOVFW DTMFMOVWF DTMFPBCF HOOKMOVLW H'0F'MOVWF RING_COUNTCALL SCREEN

STARTBCF HOOK

HOUBTFSS RINGGOTO $-1CLRWCALL PR_DELAYCLRWCALL PR_DELAYCLRWCALL PR_DELAYCLRWCALL PR_DELAYCLRWCALL PR_DELAY

Page 6: Microcontroller programming for  IVRS system PIC microcontroller

DECFSZ RING_COUNT,FGOTO HOUMOVLW H'0F'MOVWF RING_COUNT

MOVLW "{"CALL TX_COM

MOVLW "C"CALL TX_COM

MOVLW "O"CALL TX_COM

MOVLW "}"CALL TX_COM

BSF HOOKSTART1

CALL DISPLAYCALL FETCHCALL DISPLAY_DTMFGOTO START1

;*****************************************************************************************************************************************************************

;MAIN DISPLAY;*****************************************************************************************************************************************************************

SCREENMOVLW H'01' ;cursor HOME POSTION

positonMOVWF LCD_CMDCALL CMD_WRITEMOVLW H'80' ;cursor HOME POSTION

positonMOVWF LCD_CMDCALL CMD_WRITEMOVLW "O"MOVWF LCD_DATACALL DATA_WRITEMOVLW "R"MOVWF LCD_DATACALL DATA_WRITEMOVLW "I"MOVWF LCD_DATACALL DATA_WRITEMOVLW "E"MOVWF LCD_DATA

Page 7: Microcontroller programming for  IVRS system PIC microcontroller

CALL DATA_WRITEMOVLW "N"MOVWF LCD_DATACALL DATA_WRITEMOVLW "T"MOVWF LCD_DATACALL DATA_WRITEMOVLW "A"MOVWF LCD_DATACALL DATA_WRITEMOVLW "L"MOVWF LCD_DATACALL DATA_WRITEMOVLW "."MOVWF LCD_DATACALL DATA_WRITEMOVLW " "MOVWF LCD_DATACALL DATA_WRITEMOVLW "B"MOVWF LCD_DATACALL DATA_WRITEMOVLW "P"MOVWF LCD_DATACALL DATA_WRITEMOVLW "L"MOVWF LCD_DATACALL DATA_WRITEMOVLW "."MOVWF LCD_DATACALL DATA_WRITERETURN

;*****************************************************************************************************************************************************************

;COMING DISPLAY;*****************************************************************************************************************************************************************

DISPLAYBTFSC DT_DISRETURNBSF DT_DISMOVLW H'01' ;cursor HOME POSTION

positonMOVWF LCD_CMDCALL CMD_WRITEMOVLW H'80' ;cursor HOME POSTION

positonMOVWF LCD_CMD

Page 8: Microcontroller programming for  IVRS system PIC microcontroller

CALL CMD_WRITEMOVLW "I"MOVWF LCD_DATACALL DATA_WRITEMOVLW "N"MOVWF LCD_DATACALL DATA_WRITEMOVLW "C"MOVWF LCD_DATACALL DATA_WRITEMOVLW "O"MOVWF LCD_DATACALL DATA_WRITEMOVLW "M"MOVWF LCD_DATACALL DATA_WRITEMOVLW "I"MOVWF LCD_DATACALL DATA_WRITEMOVLW "N"MOVWF LCD_DATACALL DATA_WRITEMOVLW "G"MOVWF LCD_DATACALL DATA_WRITEMOVLW "."MOVWF LCD_DATACALL DATA_WRITEMOVLW " "MOVWF LCD_DATACALL DATA_WRITEMOVLW "N"MOVWF LCD_DATACALL DATA_WRITEMOVLW "o"MOVWF LCD_DATACALL DATA_WRITEMOVLW "s"MOVWF LCD_DATACALL DATA_WRITEMOVLW "."MOVWF LCD_DATACALL DATA_WRITEMOVLW H'C0' ;cursor HOME POSTION

positonMOVWF LCD_CMDCALL CMD_WRITERETURN

;*****************************************************************************************************************************************************************

Page 9: Microcontroller programming for  IVRS system PIC microcontroller

;FETCHDTMF DISPLAY

;*****************************************************************************************************************************************************************FETCH

BTFSC PORTC,1RETURNBTFSC PORTC,4BSF DTMF,0BTFSS PORTC,4BCF DTMF,0BTFSC PORTC,5BSF DTMF,1BTFSS PORTC,5BCF DTMF,1BTFSC PORTC,3BSF DTMF,2BTFSS PORTC,3BCF DTMF,2BTFSC PORTC,2BSF DTMF,3BTFSS PORTC,2BCF DTMF,3RETURN

;*****************************************************************************************************************************************************************

;DTMF DISPLAY;*****************************************************************************************************************************************************************DISPLAY_DTMF

MOVFW DTMFXORWF DTMFP,WBTFSC STATUS,ZRETURNMOVFW DTMFMOVWF DTMFPANDLW H'0F'CALL ASCIIMOVWF LCD_DATACALL DATA_WRITEINCF NO_COUNT,FMOVLW H'0F'SUBWF NO_COUNT,WBTFSC STATUS,CBCF DT_DISMOVLW H'0F'SUBWF NO_COUNT,WBTFSC STATUS,CCLRF NO_COUNT

Page 10: Microcontroller programming for  IVRS system PIC microcontroller

MOVLW "{"CALL TX_COMMOVLW "0"CALL TX_COMMOVFW DTMFANDLW H'0F'CALL ASCIICALL TX_COMMOVLW "}"CALL TX_COMRETURN

;*****************************************************************************************************************************************************************

;MAIN LCD DATA_READ ROUTINE;*****************************************************************************************************************************************************************; TAKE THE ADDRESS IN LCD_CMD GIVE U A DATAA IN

LCD_READBACKDATA_READ

CALL CMD_WRITECALL READYCALL READBACK_LCDRETURN

;*****************************************************************************************************************************************************************

;MAIN LCD CMD_WRITE SEND ROUTINE;*****************************************************************************************************************************************************************

; TAKE COMMAND IN LCD_CMDCMD_WRITE

CALL READYCALL CMDWRTRETURN

;*****************************************************************************************************************************************************************

;MAIN LCD DATA SEND ROUTINE;*****************************************************************************************************************************************************************; TAKE COMMAND IN LCD_DATADATA_WRITE

CALL READYCALL DATAWRTRETURN

;;*****************************************************************************************************************************************************************

;LCD DATA SEND ROUTINE

Page 11: Microcontroller programming for  IVRS system PIC microcontroller

;*****************************************************************************************************************************************************************DATAWRT

BSF RS ;RS PULL TO HIGHBCF RW ;RW PULL TO HIGHBTFSC LCD_DATA,0BSF REVDATA,7BTFSS LCD_DATA,0BCF REVDATA,7BTFSC LCD_DATA,1BSF REVDATA,6BTFSS LCD_DATA,1BCF REVDATA,6BTFSC LCD_DATA,2BSF REVDATA,5BTFSS LCD_DATA,2BCF REVDATA,5BTFSC LCD_DATA,3BSF REVDATA,4BTFSS LCD_DATA,3BCF REVDATA,4BTFSC LCD_DATA,4BSF REVDATA,3BTFSS LCD_DATA,4BCF REVDATA,3BTFSC LCD_DATA,5BSF REVDATA,2BTFSS LCD_DATA,5BCF REVDATA,2BTFSC LCD_DATA,6BSF REVDATA,1BTFSS LCD_DATA,6BCF REVDATA,1BTFSC LCD_DATA,7BSF REVDATA,0BTFSS LCD_DATA,7BCF REVDATA,0MOVFW REVDATA ;LCD COMMAND TRANFER TO W MOVWF PORTB ;LCD DATA COMMAND TO LCD PINS BSF EN ;EN THE TRANSFERNOP NOPBCF ENNOP NOPRETLW H'00'

;;*****************************************************************************************************************************************************************

;LCD COMMAND SEND ROUTINE

Page 12: Microcontroller programming for  IVRS system PIC microcontroller

;*****************************************************************************************************************************************************************CMDWRT

BCF RS ;RS PULL TO LOWBCF RW ;RW PULL TO LOWBTFSC LCD_CMD,0BSF REVDATA,7BTFSS LCD_CMD,0BCF REVDATA,7BTFSC LCD_CMD,1BSF REVDATA,6BTFSS LCD_CMD,1BCF REVDATA,6BTFSC LCD_CMD,2BSF REVDATA,5BTFSS LCD_CMD,2BCF REVDATA,5BTFSC LCD_CMD,3BSF REVDATA,4BTFSS LCD_CMD,3BCF REVDATA,4BTFSC LCD_CMD,4BSF REVDATA,3BTFSS LCD_CMD,4BCF REVDATA,3BTFSC LCD_CMD,5BSF REVDATA,2BTFSS LCD_CMD,5BCF REVDATA,2BTFSC LCD_CMD,6BSF REVDATA,1BTFSS LCD_CMD,6BCF REVDATA,1BTFSC LCD_CMD,7BSF REVDATA,0BTFSS LCD_CMD,7BCF REVDATA,0MOVFW REVDATA ;LCD COMMAND TRANFER TO W MOVWF PORTB ;LCD DATA COMMAND TO LCD PINS BSF EN ;EN THE TRANSFERNOP NOP BCF ENNOP NOPRETLW H'00'

;;*****************************************************************************************************************************************************************

;DATAREAD FRM LCD ROUTINE

Page 13: Microcontroller programming for  IVRS system PIC microcontroller

;*****************************************************************************************************************************************************************READBACK_LCD

BSF RSBSF RWBANK1

MOVLW H'FF'MOVWF TRISB ; MAKE ALL PINS INPUT TO RECIVE DATABANK0BSF ENNOP NOP BTFSC PORTB,0BSF REVDATA,7BTFSS PORTB,0BCF REVDATA,7BTFSC PORTB,1BSF REVDATA,6BTFSS PORTB,1BCF REVDATA,6BTFSC PORTB,2BSF REVDATA,5BTFSS PORTB,2BCF REVDATA,5BTFSC PORTB,3BSF REVDATA,4BTFSS PORTB,3BCF REVDATA,4BTFSC PORTB,4BSF REVDATA,3BTFSS PORTB,4BCF REVDATA,3BTFSC PORTB,5BSF REVDATA,2BTFSS PORTB,5BCF REVDATA,2BTFSC PORTB,6BSF REVDATA,1BTFSS PORTB,6BCF REVDATA,1BTFSC PORTB,7BSF REVDATA,0BTFSS PORTB,7BCF REVDATA,0MOVFW REVDATA ;LCD COMMAND TRANFER TO W MOVWF LCD_READBACKBCF ENNOP NOPBANK1

CLRF TRISB ; MAKE ALL PINS OUTPUT

Page 14: Microcontroller programming for  IVRS system PIC microcontroller

BANK0RETLW H'00'

;;*****************************************************************************************************************************************************************

;LCD BUSY CHECK ROUTINE;*****************************************************************************************************************************************************************READY

BCF PORTB,0BANK1BSF TRISB,0BANK0BCF RS ;FOR READING LCDBSF RW ;FOR READING LCDBCF ENNOP NOP BSF ENNOP NOPBTFSC PORTB,0GOTO READYBANK1BCF TRISB,0BANK0BCF RWRETURN

;;*****************************************************************************************************************************************************************

;BINARY TO BCD CONVERION;*****************************************************************************************************************************************************************B2_BCD

BCF STATUS,0 ; clear the carry bitMOVLW .24MOVWF COUNTCLRF R0CLRF R1CLRF R2

LOOP16 RLF L_BYTE, FRLF M_BYTE , FRLF H_BYTE , FRLF R2, FRLF R1, FRLF R0, FDECFSZ COUNT, FGOTO ADJDEC RETLW 0

Page 15: Microcontroller programming for  IVRS system PIC microcontroller

ADJDEC MOVLW R2MOVWF FSRCALL ADJBCDMOVLW R1MOVWF FSRCALL ADJBCDMOVLW R0MOVWF FSRCALL ADJBCDGOTO LOOP16

ADJBCD MOVLW 3ADDWF 0,WMOVWF TEMPBTFSC TEMP,3 ; test if result > 7MOVWF 0MOVLW 30ADDWF 0,WMOVWF TEMPBTFSC TEMP,7 ; test if result > 7MOVWF 0 ; save as MSDRETLW 0

;;*****************************************************************************************************************************************************************

;LCD INTIALIZATION;*****************************************************************************************************************************************************************LCD_INITIALIZATION

CALL PR_DELAY ;30 MSEC START DELAY FOR LCD TO RISE POWER

CALL PR_DELAY ;30 MSEC START DELAY FOR LCD TO RISE POWER

MOVLW H'3B' ;FUNCTION SET[0,0,0,1(FOR LCD REQ.),1(DL, DATA LENGTH 8),1(N SET 2 LINES),1(F -FONT 5X10 DOTS,X,X)

MOVWF LCD_CMD ; NO READY HAS BEEN CHECKED

CALL CMDWRTCALL DELAY255MOVLW H'0C' ;LCD

SETTING(0,0,0,0,1(ALWAYS),1(D,TO INCREMENT ADDRESS AUTO),1(C-ON THE CURSOR),1(BTO BLINK THE CURSOR))

MOVWF LCD_CMDCALL CMD_WRITEMOVLW H'01' ;LCD

SETTING(0,0,0,0,1(ALWAYS),1(D,TO INCREMENT ADDRESS AUTO),1(C-ON THE CURSOR),1(BTO BLINK THE CURSOR))

MOVWF LCD_CMDCALL CMD_WRITE

Page 16: Microcontroller programming for  IVRS system PIC microcontroller

MOVLW H'80' ;cursor HOME POSTION positon

MOVWF LCD_CMDCALL CMD_WRITERETURN

;*******************************************COMPUTER TRANSMITTING ROUTINE************************************************************TX_COM

MOVWF TXREGBANK1BTFSS TXSTA,TRMTGOTO $-1BANK0CALL DELAY255RETURN

;;*****************************************************************************************************************************************************************

;PORTINTIALIZATION ROUTINE

;*****************************************************************************************************************************************************************PORT_INTITIALIZE

BANK1 MOVLW B'11110000'

MOVWF TRISA CLRF TRISB

MOVLW B'10111111' ;C6 TX IS O/P AND ALL ARE INPUTMOVWF TRISC ;TRANSFER TO PORTC

DIRECTION REGISTERMOVLW B'00000111'MOVWF ADCON1BANK0

CLRF PORTA CLRF PORTB

CLRF PORTC MOVLW B'11000000' ; TRANSFER THE DATA FOR

ENABLEING GENERAL AND PERIPHERAL INTERPPT TO WMOVWF INTCON ; TRANSFER THE DATA FOR

ENABLEING GENERAL AND PERIPHERAL INTERPPT TO INTERRUPT CONTROL REGISTER

RETURN;;*****************************************************************************************************************************************************************

;RS232 INTIALIZE ROUTINE;*****************************************************************************************************************************************************************RS232_INITIALIZATION

CLRF STATUS ; SELECT BANK0MOVLW BAUD_CONSTANT ;9600BSF STATUS,RP0 ; SELECT BANK1

Page 17: Microcontroller programming for  IVRS system PIC microcontroller

MOVWF SPBRGMOVLW B'10100100'

;CSRC=1,TX9=0,TXEN=1,SYNC=0(ASYS),UM=0,BRG=1(HIGH SPEED),TRMT=0,TX9D=0

MOVWF TXSTABSF PIE1,RCIE ;RECIVE INTRUPT

ENABLECLRF STATUS ; SELECT BANK0MOVLW B'10010000'

;SPEN=1,RX9=0,SREN=0,CREN=1,ADDEN=0,FERR=0,OERR=0,RX9D=0MOVWF RCSTAMOVLW B'11000000' ; TRANSFER THE DATA FOR

ENABLEING GENERAL AND PERIPHERAL INTERPPT TO WMOVWF INTCON ; TRANSFER THE

DATA FOR ENABLEING GENERAL AND PERIPHERAL INTERPPT TO INTERRUPT CONTROL REGISTER

RETURN;;*****************************************************************************************************************************************************************

;PROGRAMABLE DELAY ROUTINE;*****************************************************************************************************************************************************************PR_DELAY

MOVWF PRCOUNTEROO1

CALL DELAY255DECFSZ PRCOUNTER,FGOTO OO1RETURN

;;*****************************************************************************************************************************************************************

;255 CYCLE DELAY ROUTINE;*****************************************************************************************************************************************************************DELAY255

DECFSZ COUNTER,FGOTO DELAY255RETURN

;;*****************************************************************************************************************************************************************

;RAM CLEANING ROUNTINE;*****************************************************************************************************************************************************************CHECK_RAM1

MOVLW D'20' ;THIS IS FOR INITIAL POWER UP DELAY

MOVWF COUNT_REG1 ;TRANSFER TO COUNT_REG1 REGISTER

Page 18: Microcontroller programming for  IVRS system PIC microcontroller

CHECK_RAM2

CALL CHECK_RAM ;CALL SUBROUTINE FOR CHECKING THE RAM

CLRWDT ;CLEAR WATCHDOG TIMER

DECFSZ COUNT_REG1,F ;DECREASE COUNT_REG1 AND AND CHECK IF ZERO THEN SKIP

GOTO CHECK_RAM2 ;GOTO CHECK_RAM2 LABELRETURN

CHECK_RAMCLRF STATUS ;GOTO BANK0MOVLW H'50' ;THIS IS FOR RAM

REGISTER COUNT TO BE CLEAREDMOVWF TMP_COUNT ;TRANSFER TO

TMP_COUNT REGISTERMOVLW H'70' ;THIS IS START RAM

REGISTER MOVWF FSR ;TRANSFER

TO FSR REGISTER FOR INDIRECT ADDRESSINGMOVLW H'FF' ;MAKE ALL BITS OF

THE REGISTER UNDER CONSIDERATION TO 1STEP1

MOVWF INDF ;TRANSFER TO FSR REGISTER DIRECTED REGISTER

DECF FSR,F ;DECREASE FSR FOR FOR NEXT REGISTER TO GO

DECFSZ TMP_COUNT,F ;DECREASE TMP_COUNT AND CHECH WHETHER ALL

REGISTERED AS DESIRED MADE "FF"GOTO STEP1 ;IF NOT GOTO 3 STEPS UPMOVLW H'50' ;THIS IS FOR RAM

REGISTER COUNT TO BE CLEAREDMOVWF TMP_COUNT ;TRANSFER TO

TMP_COUNT REGISTERMOVLW H'70' ;THIS IS START RAM

REGISTER MOVWF FSR ;TRANSFER

TO FSR REGISTER FOR INDIRECT

ADDRESSINGSTEP2

MOVLW H'FF' ;FEED ALL BITS OF W 1

Page 19: Microcontroller programming for  IVRS system PIC microcontroller

XORWF INDF,F ;XOR WITH THE INDIRECTLY ADDRESSED REGISTER

BTFSS STATUS,Z ;SKIP IF ALL BITS IN W ARE ZERO

GOTO CHECK_RAM ;ELSE GOTO CHECK_RAM LABEL

DECF FSR,F ;DECREASE FSR FOR FOR NEXT REGISTER TO GO

DECFSZ TMP_COUNT,F ;DECREASE TMP_COUNT AND CHECH WHETHER ALL REGISTERED AS DESIRED MADE "00"

GOTO STEP2 ;IF NOT GOTO 5 STEPS UPRETURN ;RETURN

FROM THE SUB ROUTINE END