I try to interface with 16x2 LCD using 74HC595 shift register from Texas Instruments. I uploaded the following code :
I tried this code using proteus simulation. but the LCD didn't write anything. I observed that the data sent in print command is wrong.' A' ASCII code is 0x41. but It's sent as 0x62 and RS bit is enabled. What should I do?
circuit:

EA is connected to 5V. Reset connected to RC circuit in which R = 10k and C = 10uF. XTAL 1 & 2 are connected to 24Mhz crystal
LCD with 74HC595:
;AT89C51
;24MHz
;SHIFT REGISTER PINS
CLK BIT P1.0
STR BIT P1.1
SERIAL BIT P1.2
;ISRs
ORG 00H ;RESET ROUTINE
LJMP START
ORG 1BH ;TIMER 1 ROUTINE FOR SHIFT REGISTER CLOCK
CPL CLK
RETI
START: MOV P1, #00H
MOV SP, #25H
MOV TMOD, #21H ;MODE 1 FOR TIMER 0, MODE 2 FOR TIMER 1
MOV TH1, #0FFH ;ONE MACHINE CYCLE DELAY (MC = 500 nS)
SETB TR1
MOV IE, #88H
MOV R1, #32H ;50 MS DELAY BEFORE OPERATING
ACALL DELAY_MS
MOV R0, #32H ;SENDING 30H TO THE D4-D7 INPUTS OF LCD AND SET THE ENABLE BIT
ACALL SHIFT_OUT
ACALL DELAY_MS ;1 MS DELAY
MOV R0, #30H ;CLEAR ENABLE BIT AND SEND 30H TO DIGITAL INPUTS
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R1, #05H ;5 MS DELAY
ACALL DELAY_MS
MOV R0, #32H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R0, #30H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R1, #82H ;130 US DELAY
ACALL DELAY_US
MOV R0, #32H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R0, #30H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R1, #82H
ACALL DELAY_US
MOV R0, #22H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R0, #20H
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV R1, #82H
ACALL DELAY_US
MOV R4, #28H ;4-BIT, 2 LINES MODE OF LCD INITIALIZATION
ACALL CMD
MOV R1, #82H ;50 MICROSECONDS DELAY
ACALL DELAY_US
MOV R4, #08H ;DISPLAY OFF, CURSOR OFF
ACALL CMD
MOV R1, #32H ;50 MICROSECONDS DELAY
ACALL DELAY_US
MOV R4, #01H ;CLEAR LCD
ACALL CMD
MOV R1, #02H ;2 MS DELAY
ACALL DELAY_MS
MOV R4, #06H ;ENTRY MODE
ACALL CMD
MOV R1, #32H ;50 MICROSECONDS DELAY
ACALL DELAY_US
MOV R4, #0EH ;DISPLAY ON, CURSOR ON
ACALL CMD
MOV R1, #32H ;50 US DELAY
ACALL DELAY_US
MOV R4, #80H ;HOME CURSOR
ACALL CMD
MOV R1, #02H ;2 MS DELAY
ACALL DELAY_MS
MOV R1, #14H ;20 MS DELAY
ACALL DELAY_MS
MOV R4, #'A'
ACALL PRNT
HERE: SJMP HERE
SHIFT_OUT: MOV R3, #08H ;8 TIMES TO SEND ALL THE BYTE
MOV A, R0
DATA_LOOP: RLC A ;TRANSFER THE VALUE OF EACH BIT TO CARRY BIT FROM LEFT TO RIGHT
MOV SERIAL, C ;THE VALUE OF DS EQUALS THE VALUE OF CARRY BIT
DJNZ R3, DATA_LOOP ;REPEATING 8 TIMES
SETB STR
MOV R1, #01H ;SET LATCH BIT FOR 1 uS
ACALL DELAY_US
CLR STR
MOV R1, #01H ;CLEAR LATCH BIT FOR 1 us
ACALL DELAY_US
RET
CMD:
;SENDING THE UPPER NIBBLE
MOV A, R4
ANL A, #0F0H ;GET THE VALUE OF UPPER NIBBLE
MOV R5, A ;COPY THIS VALUE TO THE FIFTH REGISTER
ADD A, #02H ;SET ENABLE BIN ON AND CLEAR RS BIN
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV A, R5 ;CLEAR ENABLE PIN
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
;SENDING THE LOWER NIBBLE
MOV A, R4
ANL A, #0FH ;GET THE VALUE OF LOWER NIBBLE
SWAP A
MOV R5, A
ADD A, #02H
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV A, R5
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
RET
PRNT:
;SENDING THE UPPER NIBBLE
MOV A, R4
ANL A, #0F0H
MOV R5, A
ADD A, #03H ;SET ENABLE AND RS BITS
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV A, R5
ADD A, #01H ;CLEAR ENABLE BIT AND SET RS BIT
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
;SENDING THE LOWER NIBBLE
MOV A, R4
ANL A, #0FH
SWAP A
MOV R5, A
ADD A, #03H
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
MOV A, R5
ADD A, #01H
MOV R0, A
ACALL SHIFT_OUT
ACALL DELAY_MS
RET
DELAY_MS:
MOV TH0, #0F8H
MOV TL0, #30H
SETB TR0
LOOP: JNB TF0, LOOP
CLR TR0
CLR TF0
DJNZ R1, DELAY_MS
RET
DELAY_US: MOV TH0, #0FFH
MOV TL0, #0FEH
SETB TR0
LOOP1: JNB TF0, LOOP1
CLR TR0
CLR TF0
DJNZ R1, DELAY_US
RET
DELAY_SEC: MOV R2, #28H
DDDD: MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0
LOOP2: JNB TF0, LOOP2
CLR TR0
CLR TF0
DJNZ R2, DDDD
DJNZ R1, DELAY_SEC
RET
END
circuit:

EA is connected to 5V. Reset connected to RC circuit in which R = 10k and C = 10uF. XTAL 1 & 2 are connected to 24Mhz crystal