??? 05/26/09 06:16 Read: times |
#165587 - Loops Something like this Responding to: ???'s previous message |
Dear Popa,
Note: This is not the only way. Also this may not be perfect. But it should give you some idea. ;considor following ;I am storing received bytes at RAM address 0x40 onwards pointed by R0 ;bit 00h indicates reception is going on Valid_ID: DB 30h,34h,31h,35h,44h,38h,41h,31h,46h,31h ;Is this correct??? ;this is a valid tag ID RX_ID: ds 10 ;ONLY IF I DONT HAVE COMPLETE COMMAND OVER CODE AJMP START START: MOV TMOD,#20h MOV SCON,#50h MOV TH1,#0F4h ;UART is configured for desired BAUD MOV TL1,#0F4h MOV SP, #60h ;Initialise Stack Pointer SETB TR1 ;Run T1 for BAUDRATE Generation ;If I have total command over program I will do something like this MOV R0,#40h ;init counter ;If I dont have total command then I will do something like this MOV R0,#RX_ID SETB P2.0 ;the LED must be in off state WAIT_RX: JNB RI, WAIT_RX MOV A, SBUF MOV R2, A CLR RI CJNE A,#0Dh,READ_NXT ACALL COMPARE SJMP WAIT_RX READ_NXT: CJNE A, #0Ah, START_RX SETB 00h SJMP WAIT_RX START_RX: JNB 00h, WAIT_RX CJNE R0, #4Ah, NO_SAVE ;or CJNE R0, #RX_ID + 0Ah, NO_SAVE MOV @R0, A NO_SAVE: INC R0 SJMP WAIT_RX COMPARE: CJNE R0, #4Ah,NO_MATCH ;or CJNE R0, #RX_ID + 0Ah, NO_MATCH ;if total bytes received in not 10 then mismatch MOV R2,#00h MOV R0,#40h ;or MOV R0,#RX_ID MOV DPTR,#Valid_ID CMP_NXT: MOV A,R2 MOVC A,@A+DPTR CJNE A,@R0,NO_MATCH INC R0 INC R2 CJNE R2,#0Ah,CMP_NXT CLR P2.0 ;GLOW LED NO_MATCH: CLR 00h RET END Regards, Mahesh |