Program for initialize two row lcd, Assembly Language

init_lcd                        ;(this initialises a 2 row lcd)

    bcf     TRISA,0             ;PORTA bit 0 as an output (lcd RS pin)
    bcf     TRISA,1             ;PORTA bit 1 as an output (lcd R/W pin)
    bcf     TRISA,2             ;PORTA bit 2 as an output (lcd E pin)

    
    bcf     lcd_rs
    bcf     lcd_rw
    bcf     lcd_en
    movlw   b'00110000'         ;Instruction - function set. First of 3
    call    lcd_write
    call    Delay5              ;wait MORE THAN 4.1mS


    movlw   b'00110000'         ;Instruction - function set. Second of 3
    call    lcd_write
    movlw   .33                 ;wait MORE THAN 100uS [(33 x 3) +1 +1 + (1 x 2)] - measured 102uS on scope
    movwf   counta              ;1 cycle
    decfsz  counta              ;1 cycle until true then a 2 cycle
    goto    $-2                 ;2 cycle instruction

    movlw   b'00110000'         ;Instruction - function set. Third of 3
    call    lcd_write

    movlw   b'00111000'         ;8 bit data / 2 line display / 5x8 character font
    call    lcd_write
    call    busy

    movlw   b'00001111'         ;instruction bit / display on / cursor position on / blinking cursor on
    call    lcd_write
    call    busy

    movlw   b'00000001'
    call    lcd_write
    call    busy

    movlw   b'00000110'         ;increment cursor position by 1 / don't shift display
    call    lcd_write
    call    busy

    return  ;return from initialization routine

lcd_write

    movwf   lcd_data            ;data to port
    bsf     lcd_en              ;sets LCD enable pin high
    bcf     lcd_en              ;data is latched into lcd on high to low transition of E

    return

busy

    bsf     TRISC,7             ;was output when sending init data, now input to read busy flag
    bsf     lcd_rw              ;set high to read data from lcd
    bsf     lcd_en              ;enable
    btfsc   lcd_busy            ;is the busy flag low?
    goto    $-2                 ;no, go back and keep checking until it is
    bcf     lcd_en              ;busy flag now clear
    bcf     lcd_rw              ;set lcd back to write mode
    bcf     TRISC,7             ;port bit as an output again

    return
Delay30
        movlw   .30             ;delay 30mS
        goto    d0
Delay5
        movlw   .5              ;delay 5ms
d0      movwf   count1
d1      movlw   0xC7
        movwf   counta
        movlw   0x01
        movwf   countb
Delay_0
        decfsz  counta
        goto    $+6
        decfsz  countb
        goto    Delay_0
        decfsz  count1
        goto    d1

        retlw   .0              ;return from the delay routine

Posted Date: 3/5/2013 4:26:44 AM | Location : United States







Related Discussions:- Program for initialize two row lcd, Assignment Help, Ask Question on Program for initialize two row lcd, Get Answer, Expert's Help, Program for initialize two row lcd Discussions

Write discussion on Program for initialize two row lcd
Your posts are moderated
Related Questions
Ask 2. Exchange higher byte of AX and higher byte of BX registers by using memory location 0160 in between the transfer. Then stores AX and BX registers onto memory location 0174 o

AND: Logical AND: This instruction bit by bit ANDs the source operand that might be an immediate, or a memory location or register to the destination operand that might be a memor

Hold Response Sequence The HOLD pin is examined at leading edge of each clock pulse. If it is received active line by the processor before T4 of the earlier cycle/during the T1

EVOLUTION OF MICROPROCESSOR : The digital circuits and systems may be broken into two part: 1) Sequential Circuit and 2) Combinational Circuits     Norm

Display control 8279  provides  a  16  byte  display  memory  and  refresh  logic.  Every address in the display memory corresponds to a display unit with address zero represen

64-bit integer calculator, which processes using 16-bits at a time (reg/mem16 operands)

Using the following table as a guide, write a program that asks the user to enter an integer test score between 0 and 100. The program should display the appropriate letter grade.

Write an Lc-3 assembly language program to read in a sequence of single-digit positive integers from the keyboard(one integer per line) until the sentinel value of 0 is reached and

Write a M68000 assembly language subroutine MULSUM that takes an array named A containing n bytes of positive numbers, and fills two arrays, array B containing n

give the explaination of timing diagram minimum mode memory write cycle