; 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