hassan ali
Member level 2
first sorry for my English language ,,,,,,,
i have already connect my circuit which consists of (LCD,8051,25C040)
and i get the code from a web site but i can't understand all of subroutines such as(out_com , ackpol ) please i need help yo understand this code and this is the code .
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000
ljmp main ; START OF THE PROGRAM
ORG 0100
CS BIT P1.2 ; CHIP SELECT
MCSI BIT P1.0 ; SERIAL INPUT
MCSO BIT P1.3 ; SERIAL OUTPUT
SCK BIT P1.1 ; SERIAL SHIFT CLOCK
WREN_CMD EQU 06 ; WRITE ENABLE
WRITE_CMD EQU 02 ; WRITE DATA TO EEPROM
READ_CMD EQU 03 ; READ EEPROM DATA
WRDI_CMD EQU 04 ; WRITE DISABLE
RDSR_CMD EQU 05 ; READ STATUS REGISTER COMMAND
MAX_NUM_POLL EQU 50H ; NUMBER OF TIMES TO POLL EEPROM
ADDR0_TEST EQU 2DH ; MEMORY LOCATIONS USED BY THE PROGRAM
ADDR1_TEST EQU 41H
IDLE_STATE EQU 000FH ; INITIAL STATE OF THE CONTROL PORT( x1111 )
STACK_TOP EQU 060H ; STACK TOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
MOV A,#100
mov SP,#stack_top
clr EA ; DISABLE INTERRUPTS
mov P1,#IDLE_STATE ; RESET CONTROL SIGNALS TO EEPROM
mov DPTR,#ADDR0_TEST ; GET BYTE ADDRESS TO WRITE TO
lcall wrbyt ; WRITE (A) TO THE MEMORY (DP)
mov DPTR,#ADDR1_TEST ; GET BYTE ADDRESS
lcall rdbyt ; READ THE BYTE VALUE
LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TO WRITW BYTE IN EPPROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wrbyt:
acall EE_wren ; SEND WRITE ENABLE COMMAND
clr cs ; CS ENABLED
acall EE_write_cmd ; ISSUE WRITE COMMAND
mov A,DPL
acall outbyt ; SEND THE ADDRESS
mov A,R1
acall outbyt ; SEND DATA
setb cs ; CS DISABLED
ret
EE_wren:
clr cs ; ACTIVATE CS
mov A,#WREN_CMD ; WRITE ENABLE COMMAND
lcall outbyt ; OUTPUT THE COMMAND
setb cs ; DEACTIVATE CS
ret
outbyt:
mov R0,#08 ; bit counter
outbyt1:
clr sck ; force clock low
rlc A
mov MCSO,C
setb sck ; take clock line hi
djnz r0,outbyt1
setb MCSO
ret
EE_write_cmd:
mov A,#WRITE_CMD ; SEND WRITE COMMAND TO THE EEPROM
ajmp out_cmd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ BYTE FROM EPPROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rdbyt:
clr cs ; CS ENABLED
acall EE_read_cmd ; ISSUE READ COMMAND
mov A,DPL
acall outbyt ; SEND THE ADDRESS
mov R0,#08 ; BIT COUNTER
rdbyt1:
clr sck ; FORCE CLOCK LOW
setb sck ; TAKE CLOCK LINE HI
mov C,MCSI
rlc A
djnz R0,rdbyt1
setb cs ; CS DISABLED
ret
EE_read_cmd:
mov A,#READ_CMD ; SEND READ COMMAND TO THE EEPROM
out_cmd: ; \/ \/
mov B,DPH ; GET BYTE ADDRESS
mov C,B.0
mov ACC.3,C
ajmp outbyt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTIALLIZATION FOR LCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD:
EN equ P2.0
RS equ P2.1
RW equ P2.2
mov A,#38H ; Setting Up the LCD
lcall command
mov A,#0EH ; Display On
Lcall command
mov A,#06H ; Entry Mode
Lcall command
mov A,#82H
Lcall command
MOV A,R4
MOV B,#10
DIV AB
MOV R7,B
MOV B,#10
DIV AB
MOV R6,B
MOV R5,A
MOV A,R5
ORL A,#30H
ACALL DATW
ACALL DELAY1
MOV A,R6
ORL A,#30H
ACALL DATW
ACALL DELAY1
MOV A,R7
ORL A,#30H
ACALL DATW
ACALL DELAY1
RET
command:
clr RW
clr RS
setB EN
MOV P3,A
lcall delay1
clr EN
RET
datw:
SETB RS
clr RW
SETB EN
MOV P3,A
lcall delay1
clr EN
RET
delay1:
mov r2,#255
loop1: mov r3,#120
loop2: djnz r3,loop2
djnz r2,loop1
RET
END
---------- Post added at 01:16 ---------- Previous post was at 01:09 ----------
and this is the circuit image
i have already connect my circuit which consists of (LCD,8051,25C040)
and i get the code from a web site but i can't understand all of subroutines such as(out_com , ackpol ) please i need help yo understand this code and this is the code .
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000
ljmp main ; START OF THE PROGRAM
ORG 0100
CS BIT P1.2 ; CHIP SELECT
MCSI BIT P1.0 ; SERIAL INPUT
MCSO BIT P1.3 ; SERIAL OUTPUT
SCK BIT P1.1 ; SERIAL SHIFT CLOCK
WREN_CMD EQU 06 ; WRITE ENABLE
WRITE_CMD EQU 02 ; WRITE DATA TO EEPROM
READ_CMD EQU 03 ; READ EEPROM DATA
WRDI_CMD EQU 04 ; WRITE DISABLE
RDSR_CMD EQU 05 ; READ STATUS REGISTER COMMAND
MAX_NUM_POLL EQU 50H ; NUMBER OF TIMES TO POLL EEPROM
ADDR0_TEST EQU 2DH ; MEMORY LOCATIONS USED BY THE PROGRAM
ADDR1_TEST EQU 41H
IDLE_STATE EQU 000FH ; INITIAL STATE OF THE CONTROL PORT( x1111 )
STACK_TOP EQU 060H ; STACK TOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
MOV A,#100
mov SP,#stack_top
clr EA ; DISABLE INTERRUPTS
mov P1,#IDLE_STATE ; RESET CONTROL SIGNALS TO EEPROM
mov DPTR,#ADDR0_TEST ; GET BYTE ADDRESS TO WRITE TO
lcall wrbyt ; WRITE (A) TO THE MEMORY (DP)
mov DPTR,#ADDR1_TEST ; GET BYTE ADDRESS
lcall rdbyt ; READ THE BYTE VALUE
LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TO WRITW BYTE IN EPPROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wrbyt:
acall EE_wren ; SEND WRITE ENABLE COMMAND
clr cs ; CS ENABLED
acall EE_write_cmd ; ISSUE WRITE COMMAND
mov A,DPL
acall outbyt ; SEND THE ADDRESS
mov A,R1
acall outbyt ; SEND DATA
setb cs ; CS DISABLED
ret
EE_wren:
clr cs ; ACTIVATE CS
mov A,#WREN_CMD ; WRITE ENABLE COMMAND
lcall outbyt ; OUTPUT THE COMMAND
setb cs ; DEACTIVATE CS
ret
outbyt:
mov R0,#08 ; bit counter
outbyt1:
clr sck ; force clock low
rlc A
mov MCSO,C
setb sck ; take clock line hi
djnz r0,outbyt1
setb MCSO
ret
EE_write_cmd:
mov A,#WRITE_CMD ; SEND WRITE COMMAND TO THE EEPROM
ajmp out_cmd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ BYTE FROM EPPROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rdbyt:
clr cs ; CS ENABLED
acall EE_read_cmd ; ISSUE READ COMMAND
mov A,DPL
acall outbyt ; SEND THE ADDRESS
mov R0,#08 ; BIT COUNTER
rdbyt1:
clr sck ; FORCE CLOCK LOW
setb sck ; TAKE CLOCK LINE HI
mov C,MCSI
rlc A
djnz R0,rdbyt1
setb cs ; CS DISABLED
ret
EE_read_cmd:
mov A,#READ_CMD ; SEND READ COMMAND TO THE EEPROM
out_cmd: ; \/ \/
mov B,DPH ; GET BYTE ADDRESS
mov C,B.0
mov ACC.3,C
ajmp outbyt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTIALLIZATION FOR LCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD:
EN equ P2.0
RS equ P2.1
RW equ P2.2
mov A,#38H ; Setting Up the LCD
lcall command
mov A,#0EH ; Display On
Lcall command
mov A,#06H ; Entry Mode
Lcall command
mov A,#82H
Lcall command
MOV A,R4
MOV B,#10
DIV AB
MOV R7,B
MOV B,#10
DIV AB
MOV R6,B
MOV R5,A
MOV A,R5
ORL A,#30H
ACALL DATW
ACALL DELAY1
MOV A,R6
ORL A,#30H
ACALL DATW
ACALL DELAY1
MOV A,R7
ORL A,#30H
ACALL DATW
ACALL DELAY1
RET
command:
clr RW
clr RS
setB EN
MOV P3,A
lcall delay1
clr EN
RET
datw:
SETB RS
clr RW
SETB EN
MOV P3,A
lcall delay1
clr EN
RET
delay1:
mov r2,#255
loop1: mov r3,#120
loop2: djnz r3,loop2
djnz r2,loop1
RET
END
---------- Post added at 01:16 ---------- Previous post was at 01:09 ----------
and this is the circuit image