1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Assembly

Discussão em 'Programação' iniciada por anthead, 19 de Junho de 2008. (Respostas: 0; Visualizações: 1639)

  1. anthead

    anthead Power Member

    Ta me a dar erro nas linhas que tiverem uma seta! Nao sei prq!?
    Trata se da programacao de um LCD 16x2 para que neste aparece Hello World!!!

    Código:
    ORG 0
    ;Nome das linhas de dados e controle
    
    DB0        EQU        P1.0
    DB1        EQU        P1.1
    DB2        EQU        P1.2
    DB3        EQU        P1.3
    DB4        EQU        P1.4    
    DB5        EQU        P1.5
    DB6        EQU        P1.6
    DB7        EQU        P1.7
    ENAB    EQU        P3.7
    RS        EQU        P3.6        
    RW        EQU        P3.5
    ->DATA    EQU        P1
    
    ;**************************************************
    ;Programa Principal                                  *
    ;Exemplo: Escrever HELLo WORLD n LCD, sendo a      *
    ;primeira palavra no início da primeira linha e a *
    ;segunda palavra a partir da posição 10 da segunda*
    ;linha do LCD.                                      *
    ;**************************************************
    
    LCALL INIT_LCD
    LCALL CLEAR_LCD
    MOV A,#'H'
    LCALL WRITE_TEXT
    MOV A,#'E'
    LCALL WRITE_TEXT
    MOV A,#'L'
    LCALL WRITE_TEXT
    MOV A,#'L'
    LCALL WRITE_TEXT
    MOV A,#'O'
    LCALL WRITE_TEXT
    MOV A,#4AH            ;posicionar o cursor
    LCALL POS_LCD
    MOV A,#'W'
    LCALL WRITE_TEXT
    MOV A,#'O'
    LCALL WRITE_TEXT
    MOV A,#'R'
    LCALL WRITE_TEXT
    MOV A,#'L'
    LCALL WRITE_TEXT
    MOV A,#'D'
    LCALL WRITE_TEXT
    SJMP $
    
    ;**************************************************
    ;Sub-rotina de Inicialização do controlador do LCD*
    ;**************************************************
    
    INIT_LCD:
                CLR        RW            ;Inicia ciclo de escrita no LCD
                SETB    ENAB        ;Habilita o LCD
                CLR        RS            ;Modo Instucção
                 ->MOV        DATA,#38h    ;Display de 2 linhas, Modo 8 Bits
                CLR        ENAB        ;Desabilita o LCD
                LCALL    WAIT_LCD    ;Aguarda o LCD executar o comando
    ;*****************************************************************
                SETB     ENAB
                CLR        RS
                 ->MOV        DATA,#0Eh    ;Liga o LCD e o cursor
                CLR        ENAB
                LCALL    WAIT_LCD
    ;*****************************************************************
                SETB    ENAB
                CLR        RS
                 ->MOV        DATA,#06h    ;LCD em recepção e cursor move para        
                                    ;a direita a cada caracter
                CLR        ENAB
                LCALL    WAIT_LCD
                RET
                
    ;*************************************
    ;Sub-rotina para limpar a tela do LCD*            
    ;*************************************
    
    CLEAR_LCD:    
                CLR        RW
                SETB    ENAB
                CLR        RS
                 ->MOV        DATA,#01h
                CLR        ENAB
                LCALL    WAIT_LCD
                RET
    
    ;**********************************************
    ;Sub-rotina para posicionar o cursor do LCD      *
    ;A posição deve estar armazenada no Acumulador*
    ;**********************************************
    
    POS_LCD:
                CLR        RW
                SETB    ENAB
                CLR        RS
                ADD        A,#80H
                 ->MOV        DATA,A
                CLR        ENAB
                LCALL    WAIT_LCD
                RET
                
    ;*********************************************
    ;Sub-rotina para escrever um caractere no LCD*
    ;O Caracter em ASCII deve estar no Acumulador*
    ;*********************************************
    
    WRITE_TEXT:
                    CLR        RW
                    SETB    ENAB
                    SETB    RS            ;Modo Dados
                            ->MOV        DATA,A
                    CLR        ENAB
                    LCALL    WAIT_LCD
                    RET                     
                    
    ;************************************************
    ;Sub-rotina que espera o LCD executar um comando*
    ;************************************************
    
    WAIT_LCD:
                SETB RW                ;Inicia o ciclo de leitura no LCD
                SETB ENAB            ;Habilita o LCD
                CLR RS                ;Modo Instrucção    
                 ->MOV DATA,#0FFh        ;Garante P1 como entrada
                JB DB7,$            ;Se o bit DB7 estiver em alto,
                                    ;o LCD está ocupado
                CLR ENAB            ;Desabilita o LCD
                CLR RW                ;Finaliza o ciclo de leitura no LCD
                RET
    Alguem me pode ajudar?

    cumprimentos,
     
    Última edição: 26 de Junho de 2008

Partilhar esta Página