; THIS CODE IS WRITTEN BY " MUBASHAR YASIN " (ELECTRICAL ENGINEER) ; ISLAMABAD,PAKISTAN, CELL# (+92)0301-8557978 ,mubasharpk09@yahoo.com ; please visit--> www.geocities.com/kool_projects ;---------------------------------------------------------------------------- ;THIS PROGRAM IMPLEMENTS A CYCLIC BUFFER ON THE SERIAL PORT(RECEIVED DATA) ;MEMORY POINTERS ARE STORED IN THE REGISTERS R0&R1(STARTING ADDRESS IS 20H) ;BUFFER LENGTH IS 20H TO 30H LOCATION ;BUFFER SIZE CAN BE VARIED ACCORDING TO YOUR REQUIREMENT AND SIZE OF RAM ;---------------------------------------------------------------------------- START EQU 20H ORG 0000H LJMP MAIN ORG 0023H LJMP SERIAL_ISR ;;;;;;;;;;;;;;;; SERIAL_INIT: ;;;;;;;;;;;;;;;; MOV SCON,#52H ;8-BIT UART,REN MOV TMOD,#20H ;8-BIT AUTO RELOAD MODE MOV TH1,#-3 ;9600 BPS AUTO RELOAD VALUE SETB EA ;GLOBAL INTERRUPT ENABLE SETB ES ;SERIAL INTERRUPT ENABLE SETB PS ;HIGH PRIORITY FOR SERIAL INTERRUPTS SETB TR1 ;START TIMER RET ;;;;;;;;;;;;;;;; SERIAL_ISR: ;;;;;;;;;;;;;;;; PUSH ACC JNB RI,TMT CLR RI MOV A,SBUF LCALL WRITE_BUF LJMP EXIT1 TMT: CLR TI EXIT1: POP ACC RETI ;;;;;;;;;;;;;;;; WRITE_BUF: ;;;;;;;;;;;;;;;; CJNE R0,#31H,NEXT1 ;CHECK FOR BUFFER RECYCLE MOV R0,#20H ;CYCLE AGAIN NEXT1: MOV @R0,A INC R0 RET ;;;;;;;;;;;;;;;; SERIAL_READ: ;;;;;;;;;;;;;;;; MOV A,R0 MOV B,R1 CJNE A,B,NEXT2 ;COMPARE R0 & R1 LJMP EXIT2 ;NOTHING TO READ(BUFFER EMPTY) NEXT2: CJNE R1,#31H,NEXT3 MOV R1,#20H ;JUMP TO START (RECYCLE) NEXT3: MOV A,@R1 INC R1 LCALL DELAY LCALL SERIAL_OUT ;BOUNCE BACK EXIT2: RET ;;;;;;;;;;;;;;;; SERIAL_OUT: ;;;;;;;;;;;;;;;; MOV SBUF,A RET ;;;;;;;;;;;;;;;; DELAY: ;;;;;;;;;;;;;;;; MOV R3,#250 RPT: NOP NOP DJNZ R3,RPT RET ;;;;;;;;;;;;;;;; MAIN: ;;;;;;;;;;;;;;;; MOV R0,#START ; 'WRITE' POINTER MOV R1,#START ; 'READ' POINTER LCALL SERIAL_INIT AGAIN: LCALL SERIAL_READ LJMP AGAIN END