| ??? 08/30/07 19:44 Read: times |
#143769 - Assembler Directive DB |
THIS IS MY FIRST EVER POST ON THIS FORUM. So if i am not adhering to certain norms, kindly pardon. I will know them soon.
I am using the code to Display on the 16x2 LCD. When using code to send data byte individually to the LCD the Display works. Since there were several Titles to be displayed i used "DB" to define the title string. Running the code with this does not display anything but just '0' which i gave in the code without using DB. So i assumed that DB is not working.As direct data commands to the LCD is working so it means LCD is initialised properly. I am using KEIL to complie this .asm file. it is showing no errors. 1. Does KEIL understand DB assembler directive. 2. Can you please suggest other assembler. The code is appended below:
-----------------------------------------------------------------
RS EQU P2.5; RS pin of LCD
EN EQU P1.2 ;Enable pin of LCD
LCD EQU P0 ; Port 0 as data port
TITLE: DB "PROJECT-GPSH",0
MODE: DB "MODE",0
ACQUIRING: DB "ACQUIRING GPS",0
NVRAMFULL:DB "NVRAM IS FULL",0
;---------------------------
ORG 0
LJMP MAIN
MAIN:
ACALL CHK_MODE ; check the mode using Pin 1.0 and 1.1
ACALL INIT_LCD; Initialise
ACALL DISP_TITLE; Dispaly Title
ACALL DISP_MODE; Display "MODE"
SJMP GOTO_MODE; jump to mode
;----------------------------------------
CHK_MODE:SETB P1.0; Make them as input pins // USING R1
SETB P1.1;
MOV A,P1; Reading Mode info
ANL A,#03H; Storing P1.1 and P1.0 only
MOV R1,A; Mode info in R1
RET
;---------------------------------------------
INIT_LCD: ; Initialising LCD
MOV A, #38H
ACALL LCDCMD
MOV A,#02H
ACALL LCDCMD
MOV A,#0FH
ACALL LCDCMD
MOV A,#80H
ACALL LCDCMD
MOV A,#01H
ACALL LCDCMD
RET
;-------------------------------------------
LCDCMD: ; Command Word to LCD
MOV LCD,A
CLR RS
SETB EN
ACALL DELAY_INIT
CLR EN
RET
;----------------------------------------------
DELAY_INIT: ; Delay in initialising
MOV R7,#0FFH
LOOP_DELAY_INIT:MOV R0,09H
JUMPHERE_DELAY_INIT:DJNZ R0,JUMPHERE_DELAY_INIT
DJNZ R7,LOOP_DELAY_INIT
RET
;---------------------------------------
DISP_CHAR: ; Display Character on LCD
SETB RS
MOV LCD,A
SETB EN
ACALL DELAY_CHAR
CLR EN
ACALL DELAY_CHAR
RET
;------------------------------------------
DELAY_CHAR: ;Delay Using R7,R0
MOV R7,#0FFH
LOOP_DELAY_CHAR:MOV R0,01H
JUMPHERE_DELAY_CHAR:DJNZ R0,JUMPHERE_DELAY_CHAR
DJNZ R7,LOOP_DELAY_CHAR
RET
;-----------------------------------
DISP_TITLE:ACALL CLR_LCD
MOV DPTR,#TITLE ; Display "Project-GPSH"
NEXT_CHAR_DISP_TITLE:CLR A
MOVC A,@A+DPTR
JZ EXIT_DISP_TITLE ; IF Null then exit
ACALL DISP_CHAR
INC DPTR
SJMP NEXT_CHAR_DISP_TITLE
EXIT_DISP_TITLE:
RET
;-----------------------------------------
DISP_MODE: ACALL CLR_LCD
MOV DPTR,#MODE ; Display "MODE"
NEXT_CHAR_DISP_MODE:CLR A
MOVC A,@A+DPTR
JZ EXIT_DISP_MODE ; If Null the exit
ACALL DISP_CHAR
INC DPTR
SJMP NEXT_CHAR_DISP_MODE
EXIT_DISP_MODE:MOV A,#30H ; Display Mode Noumber 0/1/2/3
ORL A,R1
ACALL DISP_CHAR
RET
;---------------------------------
GOTO_MODE:MOV A,R1 ; Checking Mode and jumping to subprogram
JB ACC.1,MODE2OR3 ; 00= mode 0
JB ACC.0,MODE0 ; 01= mode1
LJMP MODE_1 ; 10= mode 2
MODE2OR3: JB ACC.0,MODE2 ; 11= mode 3
LJMP MODE_3
MODE0:LJMP MODE_0
MODE2:LJMP MODE_2
;-----------------------------------
DELAY:MOV R7,A ; USING R7,R0
LOOP_DELAY:MOV R0,#0FFH
JUMPHERE_DELAY:DJNZ R0,JUMPHERE_DELAY
DJNZ R7,LOOP_DELAY
RET
;-----------------------------------------------
DISP_NVRAM_FULL: ACALL CLR_LCD
MOV DPTR,#NVRAMFULL ; Daisplay "NVRAM FULL"
NEXT_CHAR_DISP_NVRAM_FULL:CLR A
MOVC A,@A+DPTR
JZ EXIT_DISP_NVRAM_FULL ; If Null then Exit
ACALL DISP_CHAR
INC DPTR
SJMP NEXT_CHAR_DISP_NVRAM_FULL
EXIT_DISP_NVRAM_FULL:
RET
;---------------------------------------
DISP_ACQUIRING:ACALL CLR_LCD
MOV DPTR,#ACQUIRING ; Display "ACQUIRING GPS"
NEXT_CHAR_DISP_ACQUIRING:CLR A
MOVC A,@A+DPTR
JZ EXIT_DISP_ACQUIRING ; If Null then Exit
ACALL DISP_CHAR
INC DPTR
SJMP NEXT_CHAR_DISP_ACQUIRING
EXIT_DISP_ACQUIRING:
RET
;-------------------------------------------
CLR_LCD:MOV A,#01H ; Clearing LCD
ACALL LCDCMD
MOV A,#80H ; Cursor at start of line 1
ACALL LCDCMD
RET
;--------------------------
SET_SRL_MODE_0:MOV TMOD,#20H ; TIMER 1 , AUTO RELOAD MODE
MOV SCON,#50H ; 8N1
MOV TH1,#0FDH; 9600 BAUDS
MOV A,PCON ; Double the Baud
SETB ACC.7
MOV PCON,A ; BAUD Set at19200
SETB TR1 ; Start Timer T1
RET
;---------------------------------------------
MODE_0:
MOV IE,#0H ; Disable Interrupts
ACALL DISP_ACQUIRING
ACALL SET_SRL_MODE_0
MOV A, #0FH
ACALL DELAY
MOV DPTR,#0000H
CHK_NVRAM:; Check if 8Kx8 NVRAM full. Address 0000H TO 1FFFH
MOV A,82H; DPTR Lower byte (DPL) To ACC
CLR C; Clear Carry
SUBB A,#0FFH ; compare Lower byte with FF
JC WAIT_HERE
CLR C
MOV A,83H ; DPTR higher Byte (DPH) To ACC
SUBB A,#1FH ; Compare higher byte with 1F
JNC FULL ; If = or > the jump to full
WAIT_HERE:JNB RI,WAIT_HERE; Wait for character to come in MOV A,SBUF ; Get Received Byte in ACC
MOVX @DPTR,A; Store in external RAM
INC DPTR; Incrdement pointer
SJMP CHK_NVRAM; check RAM status
FULL:ACALL DISP_NVRAM_FULL ; Display RAM is Full
LJMP LAST
MODE_1:NOP ; To be programmed
MODE_2:NOP ; To be programmed
MODE_3:NOP ; To be programmed
LAST:NOP
END
|
| Topic | Author | Date |
| Assembler Directive DB | 01/01/70 00:00 | |
| Hmmm... Looks suspiciously like... | 01/01/70 00:00 | |
| see the list file | 01/01/70 00:00 | |
| movbe the db's to the end | 01/01/70 00:00 | |
| Formatted again | 01/01/70 00:00 | |
| highlight | 01/01/70 00:00 | |
| What do you mean? | 01/01/70 00:00 | |
| Keil DB syntax | 01/01/70 00:00 | |
| I think i found the problem | 01/01/70 00:00 | |
| you don't need to do that... | 01/01/70 00:00 | |
| You are Right | 01/01/70 00:00 | |
| Another Bug found | 01/01/70 00:00 | |
| What is the crystal frequency? | 01/01/70 00:00 | |
| I doubt it | 01/01/70 00:00 | |
| Another Mode Added ,19200 problem solved | 01/01/70 00:00 | |
| how do you mean this? | 01/01/70 00:00 | |
| Couldnt get your query | 01/01/70 00:00 | |
| END is not an instruction | 01/01/70 00:00 | |
| END is not an instruction!!! | 01/01/70 00:00 | |
| Got the point ; query about program loop | 01/01/70 00:00 | |
| How microcontroller programs end (or don't) | 01/01/70 00:00 | |
| Alternative to infinite loop | 01/01/70 00:00 | |
| what is an infinite loop? | 01/01/70 00:00 | |
That must be the reason... | 01/01/70 00:00 |



