??? 08/30/07 20:39 Modified: 08/30/07 21:01 Read: times |
#143776 - Formatted again Responding to: ???'s previous message |
A little easier to read, but still suffers from the same problems as before.
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 ;<- may need to be 'PROJECT-GPSH',0 MODE: DB "MODE",0 ACQUIRING: DB "ACQUIRING GPS",0 NVRAMFULL: DB "NVRAM IS FULL",0 ;--------------------------- ORG 0 LJMP MAIN ORG 40H ;<- Leave room for interrupt vectors 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 ;<- should be 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 ;<- should be 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 at 19200 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 |