??? 09/01/07 18:45 Read: times |
#143856 - Another Mode Added ,19200 problem solved Responding to: ???'s previous message |
Hello All . I was getting garble earlier, maybe due to some code error. the code below works fine both for 4800 and 19200 bauds. The crystal used is 11.0592Mhz.
I am writing the GPS data into NVRAM in MODE_0 and getting it back on serial port in MODE_3. The code has been further refined and shortened by using only one display routine. RS EQU P2.5 EN EQU P1.2 LCD EQU P0 ORG 0 LJMP MAIN ORG 0030H MAIN: ACALL CHK_MODE ACALL INIT_LCD; INITIALISE LCD MOV DPTR,#TITLE; Display Title ACALL DISP_ROUTINE LJMP DISP_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 ONLY P1.0 AND P1.1 MOV R1,A; MODE INFO IN R1 RET INIT_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 NITIALISING MOV R7,#0FFH LOOP_DELAY_INIT:MOV R0,#0FFH JUMPHERE_DELAY_INIT:DJNZ R0,JUMPHERE_DELAY_INIT DJNZ R7,LOOP_DELAY_INIT RET DISP_CHAR: 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,#0FFH JUMPHERE_DELAY_CHAR:DJNZ R0,JUMPHERE_DELAY_CHAR DJNZ R7,LOOP_DELAY_CHAR RET DISP_ROUTINE:ACALL CLR_LCD NEXT_CHAR_DISP_ROUTINE:CLR A MOVC A,@A+DPTR JZ EXIT_DISP_ROUTINE ; IF NULL THEN EXIT ELSE CONTINUE DISPLAY ACALL DISP_CHAR INC DPTR SJMP NEXT_CHAR_DISP_ROUTINE EXIT_DISP_ROUTINE: RET DISP_MODE: ACALL CLR_LCD MOV DPTR,#MODE ; DISPLAY "MODE" ACALL DISP_ROUTINE MOV A,#30H ORL A,R1 ACALL DISP_CHAR CJNE R1,#0H,CHK_MODE1 ; If R1<>0 then goto LAST LJMP MODE_0 ; if R1=0 then jump to MODE_0 CHK_MODE1: CJNE R1,#1H,CHK_MODE2 ; If R1<>0 then goto LAST LJMP MODE_1 ; if R1=0 then jump to MODE_0 CHK_MODE2: CJNE R1,#2H,CHK_MODE3 ; If R1<>0 then goto LAST LJMP MODE_2 ; if R1=0 then jump to MODE_0 CHK_MODE3: CJNE R1,#3H,INVALID_MODE ; If R1<>0 then goto LAST LJMP MODE_3 ; if R1=0 then jump to MODE_0 INVALID_MODE:LJMP LAST DELAY:MOV R7,A ; USING R7,R0 LOOP_DELAY:MOV R0,#0FFH JUMPHERE_DELAY:DJNZ R0,JUMPHERE_DELAY DJNZ R7,LOOP_DELAY RET CLR_LCD:MOV A,#01H ; CLEARING LCD ACALL LCDCMD MOV A,#80H ACALL LCDCMD RET SET_SRL_MODE_0:MOV TMOD,#20H ; TIMER 1 , AUTO RELOAD MODE MOV SCON,#50H ; 8N1 MOV TH1,#0FDH; 4800 BAUDS MOV A,PCON ; DOUBLE THE BAUD RATE SETB ACC.7 MOV PCON,A ; BAUD SET 19200 SETB TR1 ; START TIMER T1 RET MODE_0:MOV IE,#0H ; DISABLE INTERRUPTS MOV DPTR,#ACQUIRING ACALL DISP_ROUTINE ACALL SET_SRL_MODE_0 MOV A, #0FFH 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 JC WAIT_HERE CLR C MOV A,83H ; DPTR HIGHER BYTE (DPH) TO ACC SUBB A,#1FH JNC FULL WAIT_HERE:JNB RI,WAIT_HERE; WAIT FOR CHAR TO COME IN MOV A,SBUF ; GET RECD BYTE MOVX @DPTR,A INC DPTR CLR RI SJMP CHK_NVRAM FULL:MOV DPTR,#NVRAMFULL ACALL DISP_ROUTINE LJMP LAST MODE_1:NOP ; to be programmed LJMP LAST MODE_2:NOP ; to be programmed LJMP LAST MODE_3:MOV IE,#0H ; Disable Interrupts MOV TMOD,#20H ; Setting BAUD rate MOV TH1,#0FDH ; 9600 Bauds MOV A, PCON SETB ACC.7 MOV PCON,A MOV SCON,#50H SETB TR1 MOV DPTR,#UPLOADING ACALL DISP_ROUTINE MOV DPTR, #0000H CHK_NVRAM_3:; 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 JC SEND_NEXT_BYTE CLR C MOV A,83H ; DPTR HIGHER BYTE (DPH) TO ACC SUBB A,#1FH JNC OVER SEND_NEXT_BYTE: MOVX A,@DPTR MOV SBUF,A WAIT:JNB TI,WAIT; WAIT FOR CHAR TO TRANSMIT INC DPTR CLR TI SJMP CHK_NVRAM_3 OVER:MOV DPTR,#UPLOADOVER ACALL DISP_ROUTINE LJMP LAST TITLE: DB "PROJECT-GPSH",0 MODE: DB "MODE",0 ACQUIRING: DB "ACQUIRING GPS",0 NVRAMFULL:DB "NVRAM IS FULL",0 UPLOADING: DB " UPLOADING DATA",0 UPLOADOVER: DB " UPLOAD OVER",0 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 |