This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Help needed for LCD programming in asm

Hi all.. Im quite new to 8051. Im doing a project that requires me to display value of a peak voltage on a LCD.

Anyway, Im stuck in testing the LCD. I have connected the LCD(Powertip PC 0802-A), otherwise known as 214-3288, to my 8051 development kit. The kit that im using is C8051F206-TB. I connected databus 0-7 to port 3 and RS to P2.4, R/W to P2.5, and EN to P2.6

I also have gone online to source for programs to display "Hello World" on the LCD. I have found a few in C or asm, but i have learnt the basic of assembly language, so i don't really understand C language.

Below is a program i found in 8052.com


$include (c8051f200.inc)

CSEG AT 0000H
LJMP MAIN
CSEG AT 0100H

MAIN:LCALL CONFIG
     LCALL INIT_LCD
     LCALL CLEAR_LCD
     LCALL HELLO

CONFIG:MOV PRT0MX, #000H ; PRT0MX: Initial Reset Value
       MOV PRT1MX, #000H ; PRT1MX: Initial Reset Value
       MOV PRT2MX, #000H ; PRT2MX: Initial Reset Value
       MOV P2MODE, #0FFH ; Input Configuration for P2
       MOV PRT3CF, #0FFH ; Output configuration for P3

INIT_LCD:       CLR P2.4
         MOV P3,#38H
        SETB P2.6
        CLR P2.6
        LCALL WAIT_LCD
        CLR P2.4
        MOV P3,#0EH
        SETB P2.6
        CLR P2.6
        LCALL WAIT_LCD
        CLR P2.4
        MOV P3,#06H
        SETB P2.6
        CLR P2.6
        LCALL WAIT_LCD
        RET

HELLO:  LCALL INIT_LCD
        LCALL CLEAR_LCD
        MOV A,#48H
        LCALL WRITE_TEXT
        MOV A,#45H
        LCALL WRITE_TEXT
        MOV A,#4CH
        LCALL WRITE_TEXT
        MOV A,#4CH
        LCALL WRITE_TEXT
        MOV A,#4FH
        LCALL WRITE_TEXT
        CLR P2.4
        MOV P3,#0CAH
        SETB P2.6
        CLR P2.6
        LCALL WRITE_TEXT
        MOV A,#57H
        LCALL WRITE_TEXT
        MOV A,#4FH
        LCALL WRITE_TEXT
        MOV A,#52H
        LCALL WRITE_TEXT
        MOV A,#4CH
        LCALL WRITE_TEXT
        MOV A,#44H
        LCALL WRITE_TEXT

WAIT_LCD:       CLR P2.6 ;Start LCD command
        CLR P2.4 ;It's a command
        SETB P2.5 ;It's a read command
        MOV P3,#0FFH ;Set all pins to FF initially
        SETB P2.6 ;Clock out command to LCD
        MOV A,P3 ;Read the return value
        JB ACC.7,WAIT_LCD
        CLR P2.6 ;Finish the command
        CLR P2.5 ;Turn off RW for future commands
        RET


CLEAR_LCD:CLR P2.4
        MOV P3,#01H
        SETB P2.6
        CLR P2.6
        LCALL WAIT_LCD
        RET

WRITE_TEXT:SETB P2.4
          MOV P3,A
          SETB P2.6
          CLR P2.6
          LCALL WAIT_LCD
          RET



           END

Parents
  • You meant i have to calculate the clock cycles for each routine and make sure that they have enuff delay?

    Not quite. You will have to determine the timing of those signals. Calculating is only one of many ways of determining it, and hardly ever the best one to choose.

    The best method would be to use an oscilloscope or logic analyzer on the actual hardware. If you really can't get your hands on a 'scope, the next best thing is the logic analyzer built into the uVision simulator debugger. Using that, you can generate almost exactly the same kind of diagram as you'll find in the datasheet(s) of devices you're trying to control. That can make things a whole lot easier to check.

Reply
  • You meant i have to calculate the clock cycles for each routine and make sure that they have enuff delay?

    Not quite. You will have to determine the timing of those signals. Calculating is only one of many ways of determining it, and hardly ever the best one to choose.

    The best method would be to use an oscilloscope or logic analyzer on the actual hardware. If you really can't get your hands on a 'scope, the next best thing is the logic analyzer built into the uVision simulator debugger. Using that, you can generate almost exactly the same kind of diagram as you'll find in the datasheet(s) of devices you're trying to control. That can make things a whole lot easier to check.

Children
No data