Jump to content

Recommended Posts

Posted (edited)

I use the code in the attachment, and it's my idea it will give me on my LCDisplay the letters "Camil" (and yes, that is my name)

All the first subroutines i just copied form http://home.iae.nl/users/pouweha/lcd/lcd2.shtml - it has to work.

From label start i did make anything myself.

I'm sure i did connect the LCD and the PIC right, and i am sure the contrast is OK.

I just think i don't understand how to use the subroutines.

What happens is the following: the backlight does work, but there isn't any character.

What's the problem - how do I solve it?

And: I'm dutch, and my english isn't very well - could you please try to make your sentences easy?? :smile:

Thanks for your help!

here does the program stay too:

;**********************************************************************

;                                                                     *

;    Filename:	    LCDisplay test.asm                                *

;    Date:          17/7/2010                                         *

;    File Version:  v1.0                                              *

;                                                                     *

;    Author:        Camil Staps                                       *

;    Company:       none                                              *

;                                                                     * 

;                                                                     *

;**********************************************************************

;                                                                     *

;    Files Required: P16F84A.INC                                      *

;                                                                     *

;**********************************************************************

;                                                                     *

;    Notes:                                                           *

;                                                                     *

;**********************************************************************



	list      p=16F84A            ; list directive to define processor

	#include <p16F84A.inc>        ; processor specific variable definitions


	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


;**********************************************************************

		ORG     0000h             ; processor reset vector

  		GOTO    start		      ; go to beginning of program

		ORG     0004h             ; interrupt vector location

		GOTO	start


;**********************************************************************

lcdinit		

			LCD_DATA		EQU		06h		;	PORTB

			LCD_DATA_TRIS	EQU		86h		;	TRISB

			LCD_CTRL		EQU		05h		;	PORTA

			LCD_TEMP		EQU		0x020	

			DELAY			EQU		0x023

			X_DELAY			EQU		0x024

			;	PORTA Control Bits

			LCD_E			EQU		02h		;	Enable

			LCD_RW			EQU		01h		;	Read/Write

			LCD_RS			EQU		00h		;	Register Select

			CLRF	LCD_CTRL		;	all RA on 0

			MOVLW	0x01E

			CALL	X_DELAY500

			MOVLW	0x038

			CALL	lcdputcmd

			MOVLW	0x000

			CALL	lcddmode		;	disp.off, curs.off, noblink

			CALL	lcdclear

			MOVLW	0x004

			CALL	lcddmode		;	disp.on, curs.off

			MOVLW	0x002

			CALL	lcdemode		;	auto-inc (shift-cursor)

			RETURN


;**********************************************************************

;Busy Flag

lcdbusy		BSF		03h,05h				;	bank 1

			MOVLW	0x0FF

			MOVWF	LCD_DATA_TRIS		;	PORTB input

			BCF		83h,05h				;	bank 0

			BCF		LCD_CTRL,LCD_RS		;	LCD Command Mode

			BSF		LCD_CTRL,LCD_RW		;	Setup busy flag

			BSF		LCD_CTRL,LCD_E		;	LCD Enable hoog

			MOVF	LCD_DATA,0

			BCF		LCD_CTRL,LCD_E		;	LCD Enable low

			ANDLW	0x080				;	check busy flag, high=busy

			BTFSS	03h,02h				;	Zero Flag

			GOTO	lcdbusy				;	still busy...

lcdnotbusy	BCF		LCD_CTRL,LCD_RW		

			BSF		03h,05h

			CLRF	LCD_DATA_TRIS		;	PORTB output

			BCF		83h,05h

			RETURN


;Clear Display

lcdclear	MOVLW	0x001

			CALL	lcdputcmd

			RETURN


;Cursor Home

lcdhome		MOVLW	0x002

			CALL	lcdputcmd

			RETURN


;Entry Mode

lcdemode	ANDLW	0x003

			IORLW	0x004

			CALL	lcdputcmd

			RETURN


;Display Mode

lcddmode	ANDLW	0x007

			IORLW	0x008

			CALL	lcdputcmd

			RETURN


;Set Character generator RAM address

lcdscga		ANDLW	0x03F

			IORLW	0x040

			CALL	lcdputcmd

			RETURN


;Set Display data RAM address

lcdsdda		IORLW	0x080

			CALL	lcdputcmd

			RETURN


;Get address counter contents

lcdgaddr	BSF		03h,05h

			MOVLW	0x0FF				;	PORTB input

			MOVWF	LCD_DATA_TRIS

			BCF		83h,05h

			BCF		LCD_CTRL,LCD_RS		;	command mode

			BSF		LCD_CTRL,LCD_RW		;	setup busy flag

			BSF		LCD_CTRL,LCD_E		;	Enable high

			MOVF	LCD_DATA,0			;	data to W register

			BCF		LCD_CTRL,LCD_E		;	Enable low

			ANDLW	0x07F

			BCF		LCD_CTRL,LCD_RW

			BSF		03h,05h

			CLRF	LCD_DATA_TRIS		;	PORTB output

			BCF		83h,05h

			RETURN


;Write Character

lcdputchar	MOVWF	LCD_TEMP			;	char is in W

			CALL	lcdbusy

			BCF		LCD_CTRL,LCD_RW		;	Read mode

			BSF		LCD_CTRL,LCD_RS		;	Data mode

			BSF		LCD_CTRL,LCD_E		;	Enable high

			MOVF	LCD_TEMP,0			;	char back to W

			MOVWF	LCD_DATA			;	data to LCD

			BCF		LCD_CTRL,LCD_E		;	Enable low

			RETURN


;Write Command

lcdputcmd	MOVWF	LCD_TEMP			;	Command is in W

			CALL	lcdbusy

			BCF		LCD_CTRL,LCD_RW		;	Read mode

			BCF		LCD_CTRL,LCD_RS		;	Command mode

			BSF		LCD_CTRL,LCD_E		;	Enable high

			MOVF	LCD_TEMP,0			;	char back to W

			MOVWF	LCD_DATA			;	command to LCD

			BCF		LCD_CTRL,LCD_E		;	Enable low

			RETURN


DELAY500	MOVLW	D'165'

			MOVWF	DELAY

DELAY500_LOOP

			DECFSZ	DELAY,1

			GOTO	DELAY500_LOOP

			RETURN


X_DELAY500	MOVWF	X_DELAY

X_DELAY500_LOOP

			CALL	DELAY500

			DECFSZ	X_DELAY,1

			GOTO	X_DELAY500_LOOP

			RETURN


;Here does my program start

start		CALL	lcdinit

			MOVLW	b'01000011'		;	C

			CALL	lcdputchar

			MOVLW	b'01100001'		;	a

			CALL	lcdputchar

			MOVLW	b'01101101'		;	m

			CALL	lcdputchar

			MOVLW	b'01101001'		;	i

			CALL	lcdputchar

			MOVLW	b'01101100'		;	l

			CALL	lcdputchar


loop		GOTO	loop









		END                     ; directive 'end of program'


Edited by Emonk

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...