| ??? 04/30/11 10:18 Read: times  | 
#182122 - PLEASE SEE THIS AND HELP !! Responding to: ???'s previous message  | 
I wrote this code below. This has not comments yet. Is trying to give a message on dot matrix and in lcd screen. This, I manage to do it, but it runs consecutive and I can;t find what is the the bad thing which prevent the program to stop. Please see the code.
 	ORG	000H
	CLR	P1.7
START:
	MOV	DPTR,#INFO
	MOV	R0,#70
NEXTC:
	MOV	R3,#7
REPEAT:
	MOV	R2,#10000000B	;COLUMN
	MOV	R1,#0
NEXT:
	MOV	A,R1		;DATA POINTER
	MOVC	A,@A+DPTR
	MOV	P2,A
	MOV	A,R2
	MOV	P0,A
	CALL	DELAY
	RR	A
	MOV	R2,A
	MOV	P0,#00H		;TURN OFF LED
	INC	R1
	CJNE	R1,#8,NEXT
	DJNZ	R3,REPEAT
	INC	DPTR
	DJNZ	R0,NEXTC
	CALL	MINIMA
	JMP	FIN
MINIMA:
	CALL	LCD_INIT
	CALL	MESSAGE
	RET
LCD_INIT:	
	MOV	A,#38h           	;8-bit data bus, 5x8 character font
        CALL	LCD_COMMAND 
	MOV	A,#0Eh			;turn LCD on, turn cursor on
        CALL	LCD_COMMAND 
	MOV	A,#06h			;turn on cursor auto-advance
	CALL	LCD_COMMAND 
	MOV	A, #01H
	LCALL	LCD_COMMAND
	RET
MESSAGE:
	MOV 	A,#'V'
        CALL 	WRITE_LCD_TEXT		;sent letter "V" to the LCD
        MOV 	A,#'A'
        CALL 	WRITE_LCD_TEXT		;sent letter "A" to the LCD
        MOV 	A,#'G'
        CALL 	WRITE_LCD_TEXT		;sent letter "G" to the LCD
        MOV 	A,#'.'
	CALL	WRITE_LCD_TEXT		;sent letter "." to the LCD
	MOV	A,#84h           	
        CALL	LCD_COMMAND             
	MOV 	A,#'T'
        CALL	WRITE_LCD_TEXT		;sent letter "T" to the LCD
        MOV 	A,#'R'
        CALL	WRITE_LCD_TEXT		;sent letter "R" to the LCD
        MOV 	A,#'I'
        CALL	WRITE_LCD_TEXT		;sent letter "I" to the LCD
        MOV 	A,#'A'
        CALL	WRITE_LCD_TEXT		;sent letter "A" to the LCD
        MOV 	A,#'N'
        CALL	WRITE_LCD_TEXT		;sent letter "N" to the LCD
        MOV 	A,#'T'
        CALL 	WRITE_LCD_TEXT		;sent letter "T" to the LCD
        MOV 	A,#'A'
        CALL	WRITE_LCD_TEXT		;sent letter "A" to the LCD
        MOV 	A,#'F'
        CALL	WRITE_LCD_TEXT		;sent letter "F" to the LCD
        MOV 	A,#'I'
        CALL 	WRITE_LCD_TEXT		;sent letter "I" to the LCD
        MOV 	A,#'L'
        CALL 	WRITE_LCD_TEXT		;sent letter "L" to the LCD
        MOV 	A,#'O'
        CALL	WRITE_LCD_TEXT		;sent letter "O" to the LCD
        MOV 	A,#'U'
        CALL	WRITE_LCD_TEXT		;sent letter "U" to the LCD
	MOV 	A,#' '
        CALL	WRITE_LCD_TEXT		;sent SPACE to the LCD
	MOV 	A,#'3'
        CALL	WRITE_LCD_TEXT		;sent 3 to the LCD
	MOV 	A,#'4'
        CALL	WRITE_LCD_TEXT		;sent 4 to the LCD
	MOV 	A,#'7'
        CALL	WRITE_LCD_TEXT		;sent 7 to the LCD
	MOV	A,#C1h           	
        CALL	LCD_COMMAND             ;change line
	MOV 	A,#'F'
        CALL    WRITE_LCD_TEXT		;sent letter "F" to the LCD
        MOV 	A,#'I'
        CALL    WRITE_LCD_TEXT		;sent letter "I" to the LCD
        MOV 	A,#'N'
        CALL    WRITE_LCD_TEXT		;sent letter "N" to the LCD
        MOV 	A,#'G'
        CALL    WRITE_LCD_TEXT		;sent letter "G" to the LCD
        MOV 	A,#'E'
        CALL    WRITE_LCD_TEXT		;sent letter "E" to the LCD
        MOV 	A,#'R'
        CALL    WRITE_LCD_TEXT		;sent letter "R" to the LCD
        MOV 	A,#'P'
        CALL    WRITE_LCD_TEXT		;sent letter "P" to the LCD
        MOV 	A,#'R'
        CALL    WRITE_LCD_TEXT		;sent letter "R" to the LCD
        MOV 	A,#'I'
        CALL    WRITE_LCD_TEXT		;sent letter "I" to the LCD
        MOV 	A,#'N'
        CALL    WRITE_LCD_TEXT		;sent letter "N" to the LCD
        MOV 	A,#'T'
        CALL    WRITE_LCD_TEXT		;sent letter "T" to the LCD
        MOV 	A,#' '
        CALL	WRITE_LCD_TEXT		;sent SPACE to the LCD
	MOV 	A,#'S'
        CALL	WRITE_LCD_TEXT		;sent letter "S" to the LCD
	MOV 	A,#'E'
        CALL	WRITE_LCD_TEXT		;sent letter "E" to the LCD
	MOV 	A,#'N'
        CALL	WRITE_LCD_TEXT		;sent letter "N" to the LCD
	MOV 	A,#'S'
        CALL	WRITE_LCD_TEXT		;sent letter "S" to the LCD
	MOV 	A,#'O'
        CALL	WRITE_LCD_TEXT		;sent letter "O" to the LCD
	MOV 	A,#'R'
        CALL	WRITE_LCD_TEXT		;sent letter "R" to the LCD
	RET
;==============================================================
LCD_COMMAND:
	CLR	P1.5			;RS low to indicate a command
	CLR	P1.6			;RW low to indicate write
	MOV	P0,A			;write command in ACC to data port
	SETB	P1.7
	NOP
	NOP	
	CLR	P1.7                    ;LATCH data onto LCD
	LCALL	WAIT_LCD
	RET 
;==============================================================
WRITE_LCD_TEXT:
	SETB	P1.5                    ;Data we are sending is a command so RS=0
	CLR	P1.6                    ;we are writing to LCD so RW=0
	MOV	P0,A
	SETB	P1.7
	NOP				;wait 4 cycles to give LCD time to process
	NOP
	CLR	P1.7                    ;LATCH data onto LCD
	LCALL	WAIT_LCD
	RET
;=============================================================
WAIT_LCD:
	CLR	P1.5
	SETB	P1.6
	SETB	P1.7
	MOV	P0,#0FFH
	MOV	A,P0
	JB	ACC.7,WAIT_LCD
	CLR	P1.7
	CLR	P1.6
	RET
;==============================================
; DELAY 1mS
;==============================================
DELAY:
	MOV	R6,#2
DL1:
	MOV	R7,#249
	DJNZ	R7,$
	DJNZ	R6,DL1
	RET
;==============================================
INFO:
	DB	00H,00H,00H,00H,00H
	DB	FEH,90H,90H,90H,80H		;F
	DB	00H,82H,FEH,82H,00H		;I
	DB	FEH,40H,30H,40H,FEH		;M
	DB	00H,00H,00H,00H,00H
	DB	E4H,A2H,A2H,A2H,9CH		;5
	DB	00H,42H,FEH,02H,00H		;1
	DB	00H,42H,FEH,02H,00H		;1
	DB	7CH,8AH,92H,A2H,7CH		;0
	DB	00H,00H,00H,00H,00H
	DB	F8H,04H,02H,04H,F8H		;V
	DB	00H,42H,FEH,02H,00H		;1
	DB	7CH,8AH,92H,A2H,7CH		;0
	DB	84H,82H,A2H,D2H,8CH		;3
	DB	00H,00H,00H,00H,00H
	DB	00H,00H,00H,00H,00H
;=================================================	
FIN:
	END
 
 | 



