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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
11/19/07 19:06
Read: times


 
#147209 - 4 bit LCD trouble
hi guys

I've designed some software for a 4 bit HD44870 compatible LCD

The pinout is like this:

RS: P2.3
EN: P2.0
RW: GND

D0-D3: tied to GND via a 10k resistor
D4: P2.4
D5: P2.5
D6: P2.6
D7: P2.7

The code is this:

; X-tal @ 12 MHz
#include 8051.H
DATA	.equ	0A0H		;P2

RS	.equ	0A3H		;P2.3
EN	.equ	0A0H		;P2.0

         .org 0000H

Main	acall	INIT_LCD		; initialise
run	MOV	A,	#'H'
	ACALL	WRITE_TEXT
	MOV	A,	#'E'
	ACALL	WRITE_TEXT
	MOV	A,	#'L'
	ACALL	WRITE_TEXT
	MOV	A,	#'L'
	ACALL	WRITE_TEXT
	MOV	A,	#'O'
	ACALL	WRITE_TEXT

	MOV	A,	#'W'
	ACALL	WRITE_TEXT
	MOV	A,	#'O'
	ACALL	WRITE_TEXT
	MOV	A,	#'R'
	ACALL	WRITE_TEXT
	MOV	A,	#'L'
	ACALL	WRITE_TEXT
	MOV	A,	#'D'
	ACALL	WRITE_TEXT
	sjmp	$


Delay50us			;1+1+R7*2+2 MC =1+1+23*2+2 = 50 MC = 50 us
	MOV	R7,	#023	;1 MC	
	NOP			;1 MC
	DJNZ	R7,	$	;R7*2 MC
	RET			;2 MC


INIT_LCD
;-------15 ms Startup Delay---------------
	MOV	R5,	#0150
INIT1	ACALL	Delay50us
	ACALL	Delay50us
	DJNZ	R5,	INIT1

;-------FUnction Set 8bit-----------------
	CLR	RS
	MOV	DATA,	#030h	; set to 8 bit interface, only D4-D7 connected
	SETB	EN
	NOP
	CLR	EN

;-------4.1 ms Delay-----------	
	MOV	R5,	#082
INIT2	ACALL	Delay50us
	DJNZ	R5,	INIT2

;-------FUnction Set 8bit-----------------
	CLR	RS
	MOV	DATA,	#030h	; set to 8 bit interface, only D4-D7 connected
	SETB	EN
	NOP
	CLR	EN

;-------100us Delay------------
	ACALL	Delay50us
	ACALL	Delay50us

;-------FUnction Set 8bit-----------------
	CLR	RS
	MOV	DATA,	#030h	; set to 8 bit interface, only D4-D7 connected
	SETB	EN
	NOP
	CLR	EN
	ACALL	Delay50us

;-------FUnction Set 4bit-----------------
	CLR	RS
	MOV	DATA,	#020h	; set to 4 bit interface, only D4-D7 connected
	SETB	EN
	NOP
	CLR	EN
	ACALL	Delay50us

;-------Normal settings-------------------
	MOV	A,	#028h	; function set: 4bits, 2 lines, 5x8 dots	
	ACALL	WRITE_CMD
	MOV	A,	#0Eh	; display on/off control: Display on, cursor on, blinking off
	ACALL	WRITE_CMD
	MOV	A,	#06h	; entry mode set: increcement	
	ACALL	WRITE_CMD
	MOV	A,	#01h	; clear display
	ACALL	WRITE_CMD
	RET






WRITE_CMD
	PUSH  	ACC           	;Save A for low nibble
	MOV	B,	DATA	;					DDDDCCCC
	ORL   	B,	#0F0h	;bits 7..4 <- 1, clear msn		xxxxCCCC
	ORL   	A,	#00Fh	;Don't affect bits 0-3, clear lsn 	7654xxxx
	ANL   	DATA,	A	;High nibble to display			7654CCCC
	CLR	RS
	SETB  	EN 
	NOP
	CLR   	EN 
	POP   	ACC		;Prepare to send			DDDDCCCC
	SWAP	A		;					32107654
	MOV	B,	DATA	;					DDDDCCCC
	ORL   	B,	#0F0h	;bits 7..4 <- 1, clear msn		xxxxCCCC
	ORL   	A,	#00Fh	;Don't affect bits 0-3, clear lsn 	3210xxxx
	ANL   	DATA,	A	;High nibble to display			3210CCCC
	CLR	RS
	SETB  	EN 
	NOP
	CLR   	EN 
	ACALL	Delay50us
	RET

WRITE_TEXT
	PUSH  	ACC           	;Save A for low nibble
	MOV	B,	DATA	;					DDDDCCCC
	ORL   	B,	#0F0h	;bits 7..4 <- 1, clear msn		xxxxCCCC
	ORL   	A,	#00Fh	;Don't affect bits 0-3, clear lsn 	7654xxxx
	ANL   	DATA,	A	;High nibble to display			7654CCCC
	SETB	RS
	SETB  	EN 
	NOP
	CLR   	EN 
	POP   	ACC		;Prepare to send			DDDDCCCC
	SWAP	A		;					32107654
	MOV	B,	DATA	;					DDDDCCCC
	ORL   	B,	#0F0h	;bits 7..4 <- 1, clear msn		xxxxCCCC
	ORL   	A,	#00Fh	;Don't affect bits 0-3, clear lsn 	3210xxxx
	ANL   	DATA,	A	;High nibble to display			3210CCCC
	SETB	RS
	SETB  	EN 
	NOP
	CLR   	EN 
	ACALL	Delay50us
	CPL	P3.3
	RET

	.end


I don't know where I screwed up. The display doesn't do a thing. I have tested for endless loops and there are none.
Can you help me find the error? (and perhaps tell me what I did wrong)

Regards
jeroen

List of 16 messages in thread
TopicAuthorDate
4 bit LCD trouble            01/01/70 00:00      
   Possible Error            01/01/70 00:00      
      DATA is port EN is pin            01/01/70 00:00      
   Initialization            01/01/70 00:00      
      I think I did initialize correct            01/01/70 00:00      
   Logical operations            01/01/70 00:00      
   Oops, should have been ANL BA            01/01/70 00:00      
      Clobbering your data            01/01/70 00:00      
   topic gone??            01/01/70 00:00      
      code library            01/01/70 00:00      
   Try LCD Tutorial in tutorials section            01/01/70 00:00      
      Tutorial uses 2 ports            01/01/70 00:00      
         previous comments...            01/01/70 00:00      
            All tested an nailed the problem            01/01/70 00:00      
               yes, timing            01/01/70 00:00      
   Some code shortening:            01/01/70 00:00      

Back to Subject List