| ??? 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
|



