
COUNTER:DS 1

RECEIVED BIT 00h              ;this is the bit that confirms the receival of 10 bytes
VALID_TAG BIT 01h             ;this is the bit that confirms the receival of a valid tag
BYTE: DS 10                   ;in this variable i will store the values of the incoming bytes
BYTES: DB 30h,34h,31h,35h,44h,38h,41h,31h,46h,31h   ;Is this correct???
                                                     ;this is a valid tag ID

AJMP START
        
START:  MOV TMOD,#20h
        MOV SCON,#50h
        MOV TH1,#0F4h
        MOV TL1,#0F4h
        SETB TR1

        MOV COUNTER,#01h    ;init counter
        CLR RECEIVED
        CLR VALID_TAG
        SETB P2.0                ;the LED must be in off state

FIRST_BYTE:     JB TI,TRANS      ;if transmission is over jump to trans
                MOV A,SBUF
                CJNE A,#0Ah,LAST_BYTE   ;check first byte
                MOV COUNTER,#01h
                AJMP RECEV

LAST_BYTE:      CJNE A,#0Dh,SEC_BYTE     ;check 12-th byte
                 MOV COUNTER,#01h
                AJMP RECEV

SEC_BYTE:       MOV R1,COUNTER            ;second byte
                CJNE R1,#01h,TRD_BYTE
                MOV BYTE,A
                AJMP INC

TRD_BYTE:       CJNE R1,#02h,FRTH_BYTE    ;third byte
                MOV BYTE+1,A
                AJMP INC

FRTH_BYTE:      CJNE R1,#03h,FIFTH_BYTE   ;fourth byte    
                MOV BYTE+2,A
                AJMP INC

FIFTH_BYTE:     CJNE R1,#04h,SIXTH_BYTE     ;fifth byte
                MOV BYTE+3,A
                AJMP INC

SIXTH_BYTE:       CJNE R1,#05h,SEVENTH_BYTE  ;sixth byte
                MOV BYTE+4,A
                AJMP INC

SEVENTH_BYTE:       CJNE R1,#06h,EIGHT_BYTE   ;seventh byte
                MOV BYTE+5,A
                AJMP INC

EIGHT_BYTE:       CJNE R1,#07h,NINTH_BYTE     ;eight byte  
                MOV BYTE+6,A
                AJMP INC

NINTH_BYTE:       CJNE R1,#08h,TENTH_BYTE     ;ninth byte
                MOV BYTE+7,A
                AJMP INC

TENTH_BYTE:       CJNE R1,#09h,ELEVENTH_BYTE  ;tenth byte
                MOV BYTE+8,A
                AJMP INC

ELEVENTH_BYTE:       CJNE R1,#0Ah,INC         ;eleventh
                MOV BYTE+9,A
                SETB RECEIVED
                AJMP INC       

INC:    INC COUNTER

RECEV:  CLR RI
        RET

TRANS:  CLR TI
        RET

CHECK:  JB RECEIVED,COMPARE         ;if we received a 10 bytes tag ID jump to compare
        RET

COMPARE:        MOV A,BYTES       ;compare the content of what we received with what we have in memory
                CJNE A,BYTE,FGG    ;the comparisson is done at a byte-by-byte level
                MOV A,BYTES+1
                CJNE A,BYTE+1,FGG
                MOV A,BYTES+2
                CJNE A,BYTE+2,FGG
                MOV A,BYTES+3
                CJNE A,BYTE+3,FGG
                MOV A,BYTES+4
                CJNE A,BYTE+4,FGG
                MOV A,BYTES+5
                CJNE A,BYTE+5,FGG
                MOV A,BYTES+6
                CJNE A,BYTE+6,FGG
                MOV A,BYTES+7
                CJNE A,BYTE+7,FGG
                MOV A,BYTES+8
                CJNE A,BYTE+8,FGG
                MOV A,BYTES+9
                CJNE A,BYTE+9,FGG
                SETB VALID_TAG

FGG:    RET

LED_CHECK:      JB VALID_TAG,GLOW_LED   ;if tag ID is a valid tag then make a LED glow
                RET

GLOW_LED:       CLR P2.0
                SJMP GLOW_LED

END
