Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/30/07 15:38
Modified:
  08/30/07 15:42

Read: times


 
#143757 - Formatted and some comments
Responding to: ???'s previous message
Below I formatted your code, for tips on how to do this refer to:
http://www.8052.com/users/jonled/noob.pdf

I added some comments in lower case, somethings are not clear to me and have ??. Knowing the oscillator speed might help. Do you have a simulator? If not here's one to try:
http://www.vaultbbs.com/pinnacle/p52v1130.exe

It appears that the LCD initialization is incomplete.

Jon

;LCD PROGRAM TO DISPLAY "TANKTRACKS..."

RS	EQU	P2.5
EN	EQU 	P1.2
LCD	EQU	P0

	ORG	0
	LJMP	MAIN
	ORG	0023H
	LJMP	SRL_ISR
	ORG	0030H
MAIN:
	SETB	P1.0		; MAKE THEM AS INPUT PINS
	SETB	P1.1		;
	MOV	IE,0H		; DISABLE INTERRUPTS
	ACALL	INIT_LCD	; INIT LCD
	MOV	A,#54H		; DISPLAY "TANKTRACKS"
	ACALL	DISP_CHAR
	MOV	A,#41H		;A
	ACALL	DISP_CHAR
	MOV	A,#4EH		;N
	ACALL	DISP_CHAR
	MOV	A,#4BH		;K
	ACALL	DISP_CHAR
	MOV	A,#54H		;T
	ACALL	DISP_CHAR
	MOV	A,#52H		;R
	ACALL	DISP_CHAR
	MOV	A,#41H		;A
	ACALL	DISP_CHAR
	MOV	A,#43H		;C
	ACALL	DISP_CHAR
	MOV	A,#4BH		;K
	ACALL	DISP_CHAR
	MOV	A,#53H		;S
	ACALL	DISP_CHAR
	;
	MOV	R3,#1FH		; 31
AGAIN:	ACALL	DELAY_CHAR	; call a delay loop
	DJNZ	R3,AGAIN
	;
	MOV	A,P1		; READING MODE INFO
	ANL	A,#03H		; STORING ONLY P1.0 AND P1.1
	MOV	R1,A		; MODE INFO IN R1
	ACALL	SETSRL		; SET SERIAL PORT
	MOV	DPTR,#0000H	; PTR FOR STORING/ READING GPS DATA IN NVRAM
	ACALL	SHOW_STATUS
	MOV	IE,#90H		; ENABLE SERIAL INTERRRUPT
	LJMP	WAIT
	;
INIT_LCD:			; initialize LCD
	MOV	A, #38H
	ACALL	LCDCMD
	MOV	A,#02H
	ACALL	LCDCMD
	MOV	A,#0FH
	ACALL	LCDCMD
	MOV	A,#81H
	ACALL	LCDCMD
	MOV	A,#01H
	ACALL	LCDCMD
	RET
	;
LCDCMD:				; send a command to LCD
	MOV	LCD,A
	CLR	RS
	SETB	EN
	ACALL	DELAY_INIT
	CLR	EN
	RET
	;
DELAY_INIT:			; a delay loop
	MOV	R7,#0FFH
LOOP:	MOV	R0,01H          ; < - should be R0,#01H ??
DELAY:	DJNZ	R0,DELAY
	DJNZ	R7,LOOP
	RET
	;
DELAY_CHAR:			; a delay loop
	MOV	R7,#0FFH
LOOP1:	MOV	R0,09H          ; < - should be R0,#09H ??
DELAY1:	DJNZ	R0,DELAY1
	DJNZ	R7,LOOP1
	RET
	;
DISP_CHAR:			; send a character to LCD
	SETB	RS
	MOV	LCD,A
	SETB	EN
	ACALL	DELAY_CHAR
	CLR	EN
	ACALL	DELAY_CHAR
	RET
	;
SETSRL: MOV	TMOD,#20H	; TIMER 1 , AUTO RELOAD MODE
	MOV	SCON,#50H	; 8N1
	MOV	TH1,#0FDH	; 9600 BAUDS
	MOV	A,PCON		; DOUBLE THE BAUD RATE
	SETB	ACC.7
	MOV	PCON,A
	SETB	TR1		; START TIMER T1
	RET
	;
SHOW_STATUS:
	MOV	A,#01H		; clear display
	ACALL	LCDCMD
	MOV	A,#82H		; return home ?
	ACALL	LCDCMD
	MOV	A,#4DH		; M
	ACALL	DISP_CHAR
	MOV	A,#4FH		; O
	ACALL	DISP_CHAR
	MOV	A,#44H		; D
	ACALL	DISP_CHAR
	MOV	A,#45H		; E
	ACALL	DISP_CHAR
	RET
SRL_ISR:
	MOV	A,#0C8H
	ACALL	LCDCMD
	MOV	A,#1AH		; what character is this ? substitution?
	ACALL	DISP_CHAR
	MOV	A,R1		; R1 has mode info P1.0 & P1.1
	JB	ACC.1,MODE3OR4
	JB	ACC.0,MODE1
	SJMP	MODE2
MODE3OR4:
	JB	ACC.0,MODE3
	SJMP	MODE4
MODE1:	MOV	A,#24H
	ACALL	DISP_CHAR
	JB	TI,TRANS1
	MOV	A,SBUF
	MOV	R2,A		; STORE RECD BYTE IN R2 TEMPORARILY
	MOV	A,82H		; DPTR DPH TO ACC
	CLR C			; CLEAR CARRY
	SUBB	A,#0FFH
	JNC	NOTFULL
	CLR	C
	MOV	A,83H
	SUBB	A,#1FH
	JC	NOTFULL
	SJMP	FULL
NOTFULL:
	MOV	A,R2		; GET RECD BYTE BACK FROM R2
	MOVX	@DPTR,A
	INC	DPTR
	CLR	RI
	RETI
	;
FULL:	MOV	IE,80H		; NVRAM FULL SO DISABLE SERIAL INTERRUPT
	RETI
	;
TRANS1: CLR	TI
	RETI
	;
MODE2:	NOP
MODE3:	NOP
MODE4:	NOP
WAIT:	MOV	A,#01H
	ACALL	DISP_CHAR       ; < - LCDCMD ??
	MOV	A,#0C1H         ; ??
	ACALL	LCDCMD
	SJMP	WAIT
	END


List of 5 messages in thread
TopicAuthorDate
help me in debugging asm code            01/01/70 00:00      
   too tough to read            01/01/70 00:00      
   Formatted and some comments            01/01/70 00:00      
      LCD and Serial Port Initialization            01/01/70 00:00      
         it\\\'s still very badly written            01/01/70 00:00      

Back to Subject List