Jump to content

Emonk

Members
  • Posts

    0
  • Joined

  • Last visited

Posts posted by Emonk

  1. 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'
    
    
    

×
×
  • Create New...