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