CODE: /*===========================================*/ /*------radio freq id programming------------*/ /*------PH:89C51RD+,08/07/08-----------------*/ /*===========================================*/ LCD_DPort EQU P0 LCD_Rs EQU P1.5 LCD_Rw EQU P1.6 LCD_En EQU P1.7 DELAY1 DATA 30h DELAY2 DATA 31h DELAY3 DATA 32h FDispRFID Bit 01h /*-------------------------------------*/ org 00h ljmp Power_on org 23h ljmp serial_ISR /*-------------------------------------*/ org 100h Power_on: mov R0,#00h clr A LclearNxtRAM: mov @R0,a inc R0 cjne R0,#0FFh,LclearNxtRAM mov R0,#00h mov P2,#00h acall LCD_Init mov TMOD,#20h mov TH1,#0FDh mov TL1,#0FDh mov SCON,#50h mov IE,#90h setb TR1 acall welcomedata mov R0,#70h mov R2,#4 mov R3,#00h setb EA mov P2,#00h /*-------------------------------------*/ MainLoop: jb FDispRFID,RFIDLoop jmp MainLoop /*-------------------------------------*/ RFIDLoop: Ljmp RFIDDATA /*-------------------------------------*/ RFIDDATA: clr FDispRFID mov R0,#70h mov R2,#4 mov dptr,#CARDNUM0 call Compare cjne R3,#01h,Check_BWD call delay1sec acall welcomedata mov P2,#0AAh call delay1sec mov R0,#70h mov R2,#4 mov R3,#00h jmp MainLoop Check_BWD: mov dptr,#CARDNUM1 call Compare cjne R3,#01h,Check_LFT mov P2,#55h call delay1sec acall welcomedata mov R0,#70h mov R2,#4 mov R3,#00h jmp MainLoop Check_LFT: mov dptr,#CARDNUM2 call Compare cjne R3,#01h,Check_RT mov P2,#88h call delay1sec acall welcomedata mov R0,#70h mov R2,#4 mov R3,#00h jmp MainLoop Check_RT: mov dptr,#CARDNUM3 call Compare cjne R3,#01h,Check_ST mov P2,#22h call delay1sec acall welcomedata mov R0,#70h mov R2,#4 mov R3,#00h jmp MainLoop Check_ST: mov dptr,#CARDNUM4 call Compare cjne R3,#01h,EXIT mov P2,#00h call delay1sec acall welcomedata mov R0,#70h mov R2,#4 mov R3,#00h jmp MainLoop EXIT: jmp MainLoop CARDNUM0: DB "stat" CARDNUM1: DB "back" CARDNUM2: DB "left" CARDNUM3: DB "righ" CARDNUM4: DB "stop" /*-------------------------------------*/ Compare: Card1_ChK: clr a movc a,@a+dptr mov b,a mov a,@R0 cjne a,b,Next_ChK inc R0 inc dptr djnz R2,Card1_ChK inc R3 ret Next_ChK: mov R0,#70h mov R2,#4 ret /*-------------------------------------*/ serial_ISR: push Acc push DPH push DPL jb RI,RX_Service jb TI,TX_Service pop DPL pop DPH pop Acc reti RX_Service: clr RI mov a,sbuf mov @R0,a call delay20ms call delay20ms call delay20ms call delay20ms inc R0 djnz R2,End_isr setb FDispRFID ljmp End_isr TX_Service: clr TI ljmp End_isr End_isr: pop DPL pop DPH pop Acc reti /****************************************/ /*-----welcome data programming---------*/ /****************************************/ welcomedata: call lcdclear call displine1 mov dptr,#mydata call DISPDATA call displine2 mov dptr,#mydata0 call DISPDATA ret mydata : DB" VOICE CONTROLLED",0 mydata0: DB"ROBOT USING ANDRIOD",0 /********************************************/ /*---LCD initialization program------------*/ /******************************************/ LCD_Init: mov a,#30h call LCD_CMND_OUT mov a,#38h call LCD_CMND_OUT mov a,#06h call LCD_CMND_OUT mov a,#01h call LCD_CMND_OUT mov a,#0ch call LCD_CMND_OUT RET /*******************************************/ /*-------lcd command programming-----------*/ /*******************************************/ LCD_CMND_OUT: call lcd_busy mov LCD_DPort,a clr LCD_Rs clr LCD_Rw setb LCD_En nop nop clr LCD_En RET /****************************************/ /*-------lcd data programming-----------*/ /****************************************/ LCD_DATA_OUT: call lcd_busy mov LCD_DPort,a setb LCD_Rs clr LCD_Rw setb LCD_En nop clr LCD_En RET /****************************************/ /*----------busy check programming------*/ /****************************************/ lcd_busy: mov LCD_DPort,#0ffh CLR LCD_Rs SETB LCD_Rw AGAIN1: CLR LCD_EN NOP NOP SETB LCD_EN JB p0.7,AGAIN1 RET /***************************************/ /*-----Display the string&send---------*/ /***************************************/ DISPDATA: Next_Char: clr a movc a,@a+dptr jz End_Str mov Sbuf,a call delay20ms call LCD_DATA_OUT inc dptr jmp Next_char End_Str: RET /*-------------------------------------*/ DISP_ENTER: mov a,#0Dh mov SBUF,a call delay20ms mov a,#0Ah mov SBUF,a call delay20ms ret /***************************************/ /*---------display routine-------------*/ /***************************************/ lcdclear: mov a,#01h call LCD_CMND_OUT ret displine1: mov a,#80h call LCD_CMND_OUT ret displine2: mov a,#0c0h call LCD_CMND_OUT ret displine3: mov a,#94h call LCD_CMND_OUT ret displine3A: mov a,#9dh call LCD_CMND_OUT ret displine4: mov a,#0d4h call LCD_CMND_OUT ret displine4A: mov a,#0ddh call LCD_CMND_OUT ret /******************************************/ /*-------Delay routine-------------------*/ /****************************************/ delay1sec: mov DELAY1,#10 wait2: mov DELAY2,#200 wait1: mov DELAY3,#250 wait: djnz DELAY3,wait djnz DELAY2,wait1 djnz DELAY1,wait2 ret delay500ms: mov DELAY1,#5 wait22: mov DELAY2,#183 wait12: mov DELAY3,#250 wait0: djnz DELAY3,wait0 djnz DELAY2,wait12 djnz DELAY1,wait22 ret delay20ms: mov DELAY2,#40 wait31: mov DELAY3,#250 wait3: djnz DELAY3,wait3 djnz DELAY2,wait31 ret delay: mov DELAY1,#255 same: djnz DELAY1,same ret end