#include P18F458.inc RAM_ADDR EQU 40H COUNTREG EQU 0x20 CNTVAL EQU 4 CNTVAL1 EQU 5 ORG 0 CALL COPY_DATA CALL CAL_CHKSUM CALL TEST_CHKSUM BRA $ COPY_DATA MOVLW low(MYBYTE) MOVWF TBLPTRL MOVLW hi(MYBYTE) MOVWF TBLPTRH MOVLW upper(MYBYTE) MOVWF TBLPRTRU LFSR 0,RAM_ADDR C1 TBLRD*+ MOVF TABLAT,W BZ EXIT MOVWF POSTINC0 BRA C1 EXIT RETURN CAL_CHKSUM MOVLW CNTVAL MOVWF COUNTREG LFSR 0,RAM_ADDR CLRF WREG C2 ADDWF POSTINC0,W DECF COUNTREG,F BNZ C2 XORLW 0xFF ADDLW 1 MOVWF POSTINC0 RETURN TEST_CHKSUM MOVLW CNTVAL1 MOVWF COUNTREG CLRF TRISB LFSR 0,RAM_ADDR CLRF WREG C3 ADDWF POSTINC0,W DECF COUNTREG,F BNZ C3 XORLW 0x0 BZ G_1 MOVLW 'B' MOVWF PORTB RETURN G_1 MOVLW 'G' MOVWF PORTB RETURN ORG 0x500 MYBYTE DB 0x25, 0x62, 0x3F, 0x52, 0x00 END