Microcontrolador 8051 - Conversor AD

  • Descrição:
  • Este experimento efetua a leitura da tensão contida na entrada do módulo conversor analógico digital PR-AD8 e mostra no LCD por meio do módulo PR-LCD-1602.
    Ao variarmos o Trimpot do módulo PR-AD8 veremos o valor sendo atualizado no LCD.
    O Módulo AD é de 8 Bits, de modo que quando houver 0 Volts na entrada do AD veremos no LCD o numero 0, quando tivermos 5 Volts na entrada do AD veremos no LCD o numero 255.

    Módulos utilizados:
    • CPU-8051-USB
    • PR-LCD-1602
    • PR-AD8
    Procedimento:
    1. Grave o programa do experimento na CPU-8051-USB.
    2. Conecte o CN1 do módulo PR-LCD-1602 no port P0 da CPU-8051-USB
    3. Conecte o CN1 do módulo PR-AD8 no port P3 da CPU-8051-USB
    4. No módulo PR-AD8 selecione o trimpot através da chave de seleção
      Trimpot
      Obs: Trimpot Selecionado= Chave levantada/Led verde aceso
    5. Já com tudo alimentado, pressione e solte o botão RST no módulo PR-AD8
      Trimpot
    6. Pressione e solte o botão Reset da CPU-8051-USB
    7. Aguarde as mensagens iniciais no LCD e então ao variar o trimpot com uma chave de fenda, verá o valor ser atualizado no LCD. leitura ad
    Conexões do experimento:
    imagem conexoes
    Código Utilizado(Disponível em C ou Assembly):
    									//################################################################################################
    //# EMPRESA:            ========== CONTROL CHIP ENGENHARIA ========                              #
    //# SITE:               http://www.controlchip.com.br                                            #
    //#==============================================================================================#
    //# PROGRAMADOR:        Israel Cortez                                                            #
    //# DATA DO SOFTWARE:   20/05/2009                                                               #
    //# VERSÃO ATUAL:       VR3.2                                                                    #
    //#==============================================================================================#
    //# Hardware Necessário: CPU-8051-USB / PR-LCD-1602 / PR-AD8.                                    #
    //#==============================================================================================#
    //# Descrição:   Este programa exibe no LCD o valor lido do Conversor Digital Analógico.         #
    //#==============================================================================================#
    //========== INCLUDES ==========
    #include "8051.H"                //Flags do 8051
    //----------   ----------
    #include              //TRATAMENTO DE STRINGS
    //========== PROTITIPOS ==========
    void INICIALIZA_LCD(void);
    void LCD_CLEAR(void);
    void LCD_POSIC_LINHA1(char);
    void LCD_POSIC_LINHA2(char);
    void LCD_WRITE(char[16]);
    void LCD_WAIT(unsigned char);
    void LCD_WAIT_RAPIDO(void);
    void BITS4(unsigned char);
    void TIMER(unsigned char);
    void QUEBRA_NUMEROS(unsigned char);
    void WRITE_NUMERO(unsigned char);
    void WRITE_CARAC(unsigned char);
    //--------------------------------------------
    //========== VARIAVEIS DE USO GERAL ==========
    //--------------------------------------------
    //=====  BYTE AUXILIAR P/ ACESSO BIT A BIT =====                         
    data unsigned char at 0x2F BYTE_BIT_BIT=0;
    //=====  BITS =====
    bit at 0x78 BYTE_BIT_BIT_0=0;   //BIT 0     2F.0
    bit at 0x79 BYTE_BIT_BIT_1=0;   //BIT 1     2F.1
    bit at 0x7A BYTE_BIT_BIT_2=0;   //BIT 2     2F.2
    bit at 0x7B BYTE_BIT_BIT_3=0;   //BIT 3     2F.3
    bit at 0x7C BYTE_BIT_BIT_4=0;   //BIT 4     2F.4
    bit at 0x7D BYTE_BIT_BIT_5=0;   //BIT 5     2F.5
    bit at 0x7E BYTE_BIT_BIT_6=0;   //BIT 6     2F.6
    bit at 0x7F BYTE_BIT_BIT_7=0;   //BIT 7     2F.7
    //--- Quebra numeros ---
    unsigned char DIGITO1;
    unsigned char DG1_AUX;
    unsigned char CENTENA;
    unsigned char DG2_AUX;
    unsigned char DIGITO2;
    unsigned char DG3_AUX;
    unsigned char DIGITO3;
    //-----------------------------------------------------------
    //======== DECLARAÇÃO DAS VIAS ENTRE uC E Lcd (I/Os) ========
    //-----------------------------------------------------------
    #define RS P0_0
    #define RW P0_1
    #define EN P0_2
    #define DB4 P0_4
    #define DB5 P0_5
    #define DB6 P0_6
    #define DB7 P0_7
    //#############################################################
    //-------------------------------------------------------------
    //=========================== MAIN ============================
    //-------------------------------------------------------------
    //#############################################################
    void main (void)
    {
        TIMER(2);
        INICIALIZA_LCD();                   //Inicializa o modo do display
        LCD_CLEAR();                        //Limpa display e posiciona o cursor na linha 0 posic 0
        //--- Mensagem 1 ---
        LCD_POSIC_LINHA1(0);
        LCD_WRITE("PROGRAMA EXEMPLO");
        LCD_POSIC_LINHA2(0);
        LCD_WRITE(" MODULO  PR-AD8 ");
        TIMER(50);
        //--- Mensagem 2 ---
        LCD_POSIC_LINHA1(0);
        LCD_WRITE(" -- CONEXOES -- ");
        LCD_POSIC_LINHA2(0);
        LCD_WRITE(" PR-AD8 ->  P3  ");     
        TIMER(50);
        //--- Mensagem 2 ---*/
        LCD_CLEAR();
        LCD_POSIC_LINHA1(0);
        LCD_WRITE("Leitura AD:     ");        
        //----- Loop infinito -----
        while (1)        
        {                
            LCD_POSIC_LINHA1(12);
            WRITE_NUMERO(P3);     
        }
    }
    
    //#############################################################
    //-------------------------------------------------------------
    //======================= SUB ROTINAS =========================
    //-------------------------------------------------------------
    //#############################################################
    
    //======================================================================
    //================== EXECUTA INICIALIZAÇÃO DO LCD ======================
    //======================================================================
    void INICIALIZA_LCD(void)
    {
        RS=0;
        RW=0;
        EN=0;
        EN=1;
        DB4=0;
        DB5=1;
        DB6=0;
        DB7=0;
        EN=0;
        LCD_WAIT(100);       
        //Prepara o LCD para trabalhar com 4 bits e 2 linhas
        RS=0;    
        BITS4(0x28);
        //----- Envia segundo Byte -----
        BITS4(0x0C);
        //----- Envia terceiro Byte -----
        BITS4(0x06);
        //----- Limpa display -----
        LCD_CLEAR();
        //----- Posiciona cursor -----
        LCD_POSIC_LINHA1(0);
    }
    //------------------------------------------------
    //----- QUEBRA NUMERO (Desmembra os digitos) -----
    //------------------------------------------------
    void QUEBRA_NUMEROS(unsigned char NUMERO)
    {
            DG1_AUX=(NUMERO/100);
            //----- Pega segundo digito -----
            CENTENA=DG1_AUX*100;
            DG2_AUX=NUMERO-CENTENA;
            DG2_AUX=(DG2_AUX/10);
            //----- Pega terceiro digito -----      
            DG3_AUX=CENTENA+DG2_AUX*10;
            DG3_AUX=(NUMERO-DG3_AUX);
            //--- Converte os numeros em ASCLL ---
            DIGITO1=DG1_AUX+48;
            DIGITO2=DG2_AUX+48;        
            DIGITO3=DG3_AUX+48;                        
    }
    //======================================================================
    //================== ESCREVE NUMEROS DE 3 DIGITOS ======================
    //======================================================================
    void WRITE_NUMERO(unsigned char NUMEROS)
    {
        QUEBRA_NUMEROS(NUMEROS);
        WRITE_CARAC(DIGITO1);
        WRITE_CARAC(DIGITO2);
        WRITE_CARAC(DIGITO3);                    
    }
    //============================================================
    //================== ESCREVE CARACTERES ======================
    //============================================================
    void WRITE_CARAC(unsigned char CARACTER)
    {
            EN=1;
            RS=1;
            BITS4(CARACTER);
            EN=0;    
    }
    //======================================================================
    //============================ WAIT LCD ================================
    //======================================================================
    void LCD_WAIT(unsigned char tempo)
    {
        unsigned char conta1=0;
        unsigned char conta2=0;
        unsigned char conta3=0;   
        while(conta1<=tempo)
        {
            conta1++;
            conta2=0;
            while(conta2<=5)
            {
                conta2++;
                conta3=0;
                while(conta3<=25)
                {
                conta3++;
                }
            }   
        }   
    }
    //======================================================================
    //========================= WAIT LCD RAPIDO ============================
    //======================================================================
    void LCD_WAIT_RAPIDO(void)
    {   
    
        unsigned char conta2=0;
        unsigned char conta3=0;
            conta2=0;
            while(conta2<=2)
            {
                conta2++;
                conta3=0;
                while(conta3<=2)
                {
                conta3++;
                }
            }           
    }
    //======================================================================
    //========================== ENVIA NIBBLE ==============================
    //======================================================================
    void BITS4(unsigned char DADO)
    {
        EN=1;
        BYTE_BIT_BIT=DADO;
        DB4=BYTE_BIT_BIT_4;
        DB5=BYTE_BIT_BIT_5;
        DB6=BYTE_BIT_BIT_6;
        DB7=BYTE_BIT_BIT_7; 
        EN=0;
        EN=1;
        BYTE_BIT_BIT=DADO;   
        DB4=BYTE_BIT_BIT_0;
        DB5=BYTE_BIT_BIT_1;
        DB6=BYTE_BIT_BIT_2;
        DB7=BYTE_BIT_BIT_3; 
        EN=0;
        LCD_WAIT_RAPIDO();
        
    }
    //======================================================================
    //============================ CLEAR LCD ===============================
    //======================================================================
    void LCD_CLEAR(void)
    {
        EN=1;
        RS=0;
        BITS4(1);
        EN=0;
        LCD_WAIT(6);
    }
    //======================================================================
    //============================ POSIC LCD ===============================
    //======================================================================
    void LCD_POSIC_LINHA1(char POSIC)
    {   
        RW=0;
        EN=1;
        RS=0;
        BITS4(POSIC + 0x80);
        EN=0;   
        LCD_WAIT(6);
    }
    void LCD_POSIC_LINHA2(char POSIC)
    {   
        RW=0;
        EN=1;
        RS=0;
        BITS4(POSIC + 0xC0);
        EN=0;   
        LCD_WAIT(6);
    }
    
    
    //======================================================================
    //=========================== WRITE TEXT ===============================
    //======================================================================
    void LCD_WRITE(char TEXTO[16])
    {
        int SIZE_LCD;
        int PTR_LCD=0;
        SIZE_LCD=strlen(TEXTO);
        while(SIZE_LCD>=1)
        {
            SIZE_LCD--;
            WRITE_CARAC(TEXTO[PTR_LCD]);
            PTR_LCD++;
        }
    }
    //----------------------------------------------------------------
    //========================= TEMPORIZADOR =========================
    //----------------------------------------------------------------
    void TIMER(unsigned char TEMPO)
    {
        unsigned char CONTA1=0;
        unsigned char CONTA2=0;
        unsigned char CONTA3=0;   
        while(CONTA1<=TEMPO)
        {
            CONTA1++;
            CONTA2=0;
            while(CONTA2<=10)
            {
                CONTA2++;
                CONTA3=0;
                while(CONTA3<=250)
                {
                CONTA3++;
                }
            }   
        }   
    }
    									
    								
    									;################################################################################################
    ;# EMPRESA:            ========== CONTROL CHIP ENGENHARIA ========                              #
    ;# SITE:               http://www.controlchip.com.br                                            #
    ;#==============================================================================================#
    ;# PROGRAMADOR:        Israel Cortez                                                            #
    ;# DATA DO SOFTWARE:   20/05/2009                                                               #
    ;# VERSÃO ATUAL:       VR3.2                                                                    #
    ;#==============================================================================================#
    ;# Hardware Necessário: CPU-8051-USB / PR-LCD-1602 / PR-AD8.                                    #
    ;#==============================================================================================#
    ;# Descrição:   Este programa exibe no LCD o valor lido do Conversor Digital Analógico.         #
    ;#==============================================================================================#
    ;=========================== CONSTANTES ==========================
    DADO_LCD        EQU  0030H
    NUMERO          EQU  0031H
    DIGIT_1         EQU  0032H
    DIGIT_2         EQU  0033H
    DIGIT_3         EQU  0034H
    AUX_DIGIT_2     EQU  0035H
    ;=========================== TELAS LCD ===========================                  
    MENSAGEM1          EQU     1000
    MENSAGEM2          EQU     1020
    MENSAGEM3          EQU     1040
    MENSAGEM4          EQU     1060
    MENSAGEM5          EQU     1080
    ;---------------------------
    ;------- PINAGEM LCD -------
    ;---------------------------
    RS          EQU     P0.0
    RW          EQU     P0.1
    EN          EQU     P0.2
    PIN4        EQU     P0.4
    PIN5        EQU     P0.5
    PIN6        EQU     P0.6
    PIN7        EQU     P0.7                                     
    ;######################################################################################################
    ;------------------------------------------------------------------------------------------------------
    ;====================================== PROGRAMA PRINCIPAL ============================================
    ;------------------------------------------------------------------------------------------------------
    ;######################################################################################################
    ORG   0000H
    INICIO:
    ;===============================================
    ;================= INICIALIZA LCD ==============
    ;===============================================
    CALL  INICIALIZ_LCD
    CALL  CLEAR_LCD
    MOV   A,#10D
    CALL  TIMER_6ms     
    
    ;===============================================
    ;=============== ESCREVE TELAS =================
    ;===============================================
    CALL ESCREVE_MENSAGENS
    ;======================================================
    ;=== LE CONVERSOR AD E ESCREVE NO LCD CONTINUAMENTE ===
    ;======================================================
    MOSTRA_AD:  MOV A,#12           ;Posiciona cursor LCD na coluna 12 da linha 1
                LCALL POS_LIN1      ;Posiciona cursor do LCD na linha 1
                MOV A,P3            ;Le o port P3 (Onde esta conectado o módulo PR-AD8)
                CALL ESCREVE_NUMERO ;Escreve o numero no LCD contido em A
    LJMP MOSTRA_AD
    
    
    
    
    
    
    
    
    
    
    ;#####################################################################################################
    ;-----------------------------------------------------------------------------------------------------
    ;============================================ SUB ROTINAS ============================================
    ;-----------------------------------------------------------------------------------------------------
    ;#####################################################################################################
    
    ESCREVE_MENSAGENS:
    ;------------------
    ;===== TELA 1 =====
    ;------------------
    ;--- Linha 1 ---
    MOV A,#0
    LCALL POS_LIN1
    MOV   DPTR,#MENSAGEM1
    LCALL WRITESTRING
    ;--- Linha 2 ---
    MOV A,#0
    LCALL POS_LIN2
    MOV   DPTR,#MENSAGEM2
    LCALL WRITESTRING
    MOV   A,#255
    CALL  TIMER_6ms
    ;------------------
    ;===== TELA 2 =====
    ;------------------
    CALL  CLEAR_LCD
    ;--- Linha 1 ---
    MOV A,#0
    LCALL POS_LIN1
    MOV   DPTR,#MENSAGEM3
    LCALL WRITESTRING
    ;--- Linha 2 ---
    MOV A,#0
    LCALL POS_LIN2
    MOV   DPTR,#MENSAGEM4
    LCALL WRITESTRING
    MOV   A,#255
    CALL  TIMER_6ms
    ;------------------
    ;===== TELA 3 =====
    ;------------------
    CALL  CLEAR_LCD
    ;--- Texto 3 ---
    MOV A,#0
    LCALL POS_LIN1
    MOV   DPTR,#MENSAGEM5
    LCALL WRITESTRING
    RET
    
    ;=================================================================
    ;======================== TEMPORIZADOR 1 =========================
    ;=================================================================
    ;timer ajustado para aproximadamente 6 mili segundos
    TIMER_6ms:          MOV  R0,A
                        CJNE R0,#0,INICIO_TIMER_6ms
                        MOV  R0,#1D
    INICIO_TIMER_6ms:   MOV  R1,#200D
                        MOV  R2,#3D
    REPETE_TEMPO:       NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                        DJNZ R1,REPETE_TEMPO
                        MOV  R1,#200D
                        DJNZ R2,REPETE_TEMPO
                        DJNZ R0,INICIO_TIMER_6ms
                        RET
    ;=================================================================
    ;======================== INICIALIZ LCD ==========================
    ;=================================================================
    INICIALIZ_LCD:      CLR  RS
                        CLR  RW
                        CLR  EN
                        SETB EN
                        CLR  PIN4
                        SETB PIN5
                        CLR  PIN6
                        CLR  PIN7
                        CLR  EN
                        MOV  A,#8D
                        CALL TIMER_6ms
    ;Prepara o LCD para trabalhar com 4 bits e 2 linhas
                        CLR  RS
                        MOV  DADO_LCD,#28h
                        CALL ENVIA_NIBBLE
                        MOV  A,#1D
                        CALL TIMER_6ms
    ;----- Envia segundo Byte -----
                        CLR  RS
                        MOV  DADO_LCD,#0Ch      ;Cursor Desabilitado
    ;                    MOV  DADO_LCD,#0Ch     ;Cursor Habilitado
                        CALL ENVIA_NIBBLE
                        MOV  A,#1D
                        CALL TIMER_6ms
    ;----- Envia terceiro Byte -----
                        CLR  RS
                        MOV  DADO_LCD,#06h
                        CALL ENVIA_NIBBLE
                        MOV  A,#1D
                        CALL TIMER_6ms
                        RET
    ;=================================================================
    ;=============== ENVIA NIBBLE (LCD EM MODO 4 BITS) ===============
    ;=================================================================
    ;---- ENVIA 1 NIBBLE ----
    ENVIA_NIBBLE:       SETB EN
                        CLR  PIN4
                        CLR  PIN5
                        CLR  PIN6
                        CLR  PIN7
                        MOV  ACC,DADO_LCD
                        JNB  ACC.4,PIN5_1
                        SETB PIN4
    PIN5_1:             JNB  ACC.5,PIN6_1
                        SETB PIN5
    PIN6_1:             JNB  ACC.6,PIN7_1
                        SETB PIN6
    PIN7_1:             JNB  ACC.7,FIM_NIBLE
                        SETB PIN7
    FIM_NIBLE:          CLR  EN
    ;--------- ENVIA 2 NIBBLE ---------
                        SETB  EN
                        CLR   PIN4
                        CLR   PIN5
                        CLR   PIN6
                        CLR   PIN7
                        MOV   ACC,DADO_LCD
                        JNB   ACC.0,PIN5_2
                        SETB  PIN4
    PIN5_2:             JNB   ACC.1,PIN6_2
                        SETB  PIN5
    PIN6_2:             JNB   ACC.2,PIN7_2
                        SETB  PIN6
    PIN7_2:             JNB   ACC.3,FIM_NIBLE2
                        SETB  PIN7
    FIM_NIBLE2:         CLR   EN
                        CALL  WAIT_LCD
                        RET
    ;=================================================================
    ;========================= WAIT LCD  =============================
    ;=================================================================
    ;ajustado para aproximadamente mili segundo
    WAIT_LCD:           MOV   R7,#50D
                        MOV   R6,#4D
    LOOP:               NOP
                        DJNZ  R7,LOOP
                        MOV   R7,#50D
                        DJNZ  R6,LOOP
                        RET
    ;=================================================================
    ;=========================== CLEAR LCD ===========================
    ;=================================================================
    CLEAR_LCD:          CLR   RS
                        MOV   DADO_LCD,#01h
                        CALL  ENVIA_NIBBLE
                        CALL  WAIT_LCD
                        RET
    
    ;=================================================================
    ;========================= WRITE CARAC ===========================
    ;=================================================================
    WRITE_CARAC:        SETB  RS
                        MOV   DADO_LCD,A
                        LCALL ENVIA_NIBBLE
                        CLR   RS
                        RET
    ;=================================================================
    ;========================== WRITE TEXT ===========================
    ;=================================================================
    WRITESTRING:        MOV   A,#0D
                        MOVC  A,@A+DPTR
                        CJNE  A,#'$',WRITE_NEXT
                        SJMP  FINIS_STRING
    
    WRITE_NEXT:         SETB  RS
                        MOV   DADO_LCD,A
                        LCALL ENVIA_NIBBLE
                        CLR   RS
                        INC   DPTR
                        SJMP  WRITESTRING
    
    FINIS_STRING:       CLR   RS
                        RET
    ;=================================================================
    ;=========================== POSIC LCD============================
    ;=================================================================
    POS_LIN1:           CLR  RW
                        CLR  RS
                        ADD  A,#80H
                        MOV  DADO_LCD,A
                        CALL ENVIA_NIBBLE
                        RET
    ;=================================================================
    ;========================= POSIC LCD 2 ===========================
    ;=================================================================
    POS_LIN2:           CLR  RW
                        CLR  RS
                        ADD  A,#192
                        MOV  DADO_LCD,A
                        CALL ENVIA_NIBBLE
                        RET
                        
                        
    ;=================================================================
    ;===================== MENSAGENS PARA O LCD ======================
    ;=================================================================
    
    ;=================================================================
    ;========================= WRITE TEXT 2 ==========================
    ;=================================================================
    ENVIA_NIBBLE2:      SETB EN
                        SETB PIN4
                        SETB PIN5
                        CLR  PIN6
                        CLR  PIN7
                        CLR  EN
    ;--------- ENVIA 2 NIBBLE ---------
                        SETB  EN
                        CLR   PIN4
                        CLR   PIN5
                        CLR   PIN6
                        CLR   PIN7
                        MOV   ACC,DADO_LCD                 
                        JNB   ACC.0,PIN5_22
                        SETB  PIN4
    
    PIN5_22:            JNB   ACC.1,PIN6_22
                        SETB  PIN5
    
    PIN6_22:            JNB   ACC.2,PIN7_22
                        SETB  PIN6
    
    PIN7_22:            JNB   ACC.3,FIM_NIBLE22
                        SETB  PIN7
    
    FIM_NIBLE22:        CLR   EN
                        CALL  WAIT_LCD
                        RET                                                                                
    ;=================================================================
    ;======================= QUEBRA NUMEROS ==========================
    ;=================================================================
    ;-------------------------------------
    ;--- CAPTURA DIGITOS SEPARADAMENTE ---
    ;-------------------------------------
    QUEBRA_NUMEROS:
    MOV NUMERO,A                         ;Reserva o conteudo de A
    ;----- Digito 1 -----
    MOV B,#100
    DIV AB
    MOV DIGIT_1,A
    ;----- Digito 2 -----
    MOV A,DIGIT_1
    MOV B,#10
    MUL AB
    MOV AUX_DIGIT_2,A
    MOV A,NUMERO
    MOV B,#10
    DIV AB
    MOV B,R0                ;Guarda o conteudo de R0
    MOV R0,AUX_DIGIT_2      
    SUBB A,R0
    MOV R0,B                ;Volta com o conteudo de R0
    MOV DIGIT_2,A
    ;----- Digito 3 -----
    MOV B,#10
    MOV A,NUMERO
    DIV AB
    MOV B,#10
    MUL AB
    MOV B,R0                ;Guarda o conteudo de R0
    MOV R0,A
    MOV A,NUMERO
    SUBB A,R0
    MOV R0,B                ;Volta com o conteudo de R0
    MOV DIGIT_3,A
    RET
    ;=================================================================
    ;============== ESCREVE NUMERO NO LCD (3 DIGITOS) ================
    ;=================================================================
    ESCREVE_NUMERO:
    CALL QUEBRA_NUMEROS
    ;--------------------------------------------------
    ;--- ESCREVE OS DIGITOS DO NUMERO SEPARADAMENTE ---
    ;--------------------------------------------------
    ;----- Digito 1 -----
    MOV A,DIGIT_1
    LCALL CONV_NUM_ASCLL
    CALL WRITE_CARAC
    
    ;----- Digito 2 -----
    MOV A,DIGIT_2
    LCALL CONV_NUM_ASCLL
    CALL WRITE_CARAC
    ;----- Digito 3 -----
    MOV A,DIGIT_3
    LCALL CONV_NUM_ASCLL
    CALL WRITE_CARAC
    RET
    ;=================================================================
    ;============ CONVERTE NUMEROS NO ASCLL EQUIVALENTE ==============
    ;=================================================================
    CONV_NUM_ASCLL:
    CJNE A,#9,ANALIS_8
    MOV A,#'9'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_8:
    CJNE A,#8,ANALIS_7
    MOV A,#'8'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_7:
    CJNE A,#7,ANALIS_6
    MOV A,#'7'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_6:
    CJNE A,#6,ANALIS_5
    MOV A,#'6'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_5:
    CJNE A,#5,ANALIS_4
    MOV A,#'5'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_4:
    CJNE A,#4,ANALIS_3
    MOV A,#'4'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_3:
    CJNE A,#3,ANALIS_2
    MOV A,#'3'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_2:
    CJNE A,#2,ANALIS_1
    MOV A,#'2'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_1:
    CJNE A,#1,ANALIS_0
    MOV A,#'1'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    ANALIS_0:
    CJNE A,#0,DEFAULT
    MOV A,#'0'           ;codigo ASCLL
    JMP FIM_NUMEROS
    ;-----------------
    DEFAULT:
    MOV A,#'E'
    
    FIM_NUMEROS:
    RET
    
    ;==========================================================
    ;============ TEXTOS A SEREM ESCRITOS NO LCD ==============
    ;==========================================================
    org MENSAGEM1
    DB 'PROGRAMA EXEMPLO$'
    org MENSAGEM2
    DB ' MODULO  PR-AD8 $'
    org MENSAGEM3
    DB ' -- CONEXOES -- $'
    org MENSAGEM4
    DB ' PR-AD8 ->  P3  $'
    org MENSAGEM5
    DB 'Leitura AD:     $'
    END
    									
    								

    VENHA TRABALHAR COM A GENTE