Autor Tema: Hola Necesito ayuda con un programa  (Leído 1431 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Alex-p

  • PIC10
  • *
  • Mensajes: 2
Hola Necesito ayuda con un programa
« en: 11 de Marzo de 2006, 21:29:00 »
Helado  Hola, soy nuevo en esto de programar en PICs y necesito poner un mensaje en una LCD, trate de hacer un programa que enviara un texto y no me salio el codigo y quisiera preguntarles como quedaria el codigo para desplegar en una pantalla LCD lo siguiente:

     1er Renglon: LCD
      2do Renglon: Encendido

      El PIC que estoy ocupando es el PIC16F876, la LCD es de 16x2 y el programa que estoy ocupando es el MPlab. Y mi intento de programa es el sig

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Programa: envio de datos a la pantalla LCD

      processor 16F876

      #include   "P16F876.inc"         
      INCLUDE   <P16f876.inc>   
      __CONFIG _XT_OSC&_WDT_OFF&_PWRTE_ON&_BODEN_OFF&_LVP_OFF&_CPD_OFF&_WRT_ENABLE_OFF&_DEBUG_OFF&_CP_OFF

Digito   equ   0x21
PDel0   equ   0x22
PDel1   equ   0x23

      org    0x00      
      goto    INICIO

         

      org    0x05

INICIO   CALL    CONFIG
   CALL   LCD_INICIO   

   CLRF    Digito
   CLRF    PORTB   
   MOVLW   0X01
   CALL   LCD_REG
   MOVLW   0X3C   
   CALL   LCD_REG
   MOVLW   0X0C
   CALL   LCD_REG
   MOVLW   0x80
   CALL   LCD_REG
REPETIR   MOVF    Digito,w      
   CALL    DATO_1  
   IORLW   0              
   BTFSC   STATUS,2        
   MOVLW   0xC0
   CALL   LCD_REG
   MOVF    Digito,w
   CALL   DATO_2  
   BTFSC   STATUS,2        ;Es el ultimo?            
   GOTO TRABARSE         ;Si              
   CALL LCD_DATOS       ;Visualiza caracter        
   INCF    Digito,f        ;Incrementa numero de Digito
   GOTO REPETIR         ;Vuelve a escribir
TRABARSE   nop
   goto TRABARSE      ;Buclee infinito (el programa se cicla)






NO_MOLESTES   BSF   PORTA,1         ;Pone el LCD en modo lectura
   BSF     STATUS,RP0      ;Selecciona el Banco 1
   MOVLW   0xFF  
   MOVWF   TRISB           ;Puerto B actua de entrada
    BCF     STATUS,RP0      ;Selecciona el Banco 0
   BSF     PORTA,2         ;Activa el LCD (Señal E)
   NOP          
L_BUSY  BTFSC   PORTB,7         ;Chequea el bit BUSY
        GOTO    L_BUSY          ;Est  a "1" (Ocupado)
        BCF     PORTA,2         ;Desactiva el LCD (Se¤al E)
        BSF     STATUS,RP0      ;Selecciona el Banco 1
        CLRF    TRISB           ;Puerta B actua como salida
        BCF     STATUS,RP0      ;Selecciona el Banco 0
   BCF     PORTA,1         ;Pone el LCD en modo escritura
   RETURN        

LCD_REG   BCF     PORTA,0         ;Desactiva RS (Modo instruccion)
   MOVWF   PORTB           ;Saca el codigo de instruccion
   CALL    NO_MOLESTES        ;Espera a que se libere el LCD
   CALL    LCD_E           ;Genera pulso en señal E
   RETURN

LCD_E   BSF     PORTA,2         ;Activa señal E
   NOP   
   NOP
   NOP                     ;Espera 1uS
   BCF     PORTA,2         ;Desactiva señal E
   RETURN        




LCD_INICIO  movlw     .21       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .142      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.



LCD_DATOS   BCF     PORTA,0            ;Desactiva RS (Modo instrucci¢n)
        MOVWF   PORTB              ;Valor ASCII a sacar por RB
        CALL    NO_MOLESTES        ;Espera a que se libere el LCD
      BSF     PORTA,0            ;Activa RS (Modo dato)  
      GOTO    LCD_E           ;Genera pulso en señal E
      RETURN


DATO_1   ADDWF   PCL,1                  
   RETLW   "L"            
   RETLW   "C"
   RETLW   "D"          
   RETLW   " "          
   RETLW   " "          
   RETLW   " "          
   RETLW   " "          
   RETLW   " "          
   RETLW   " "          
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW    0x00
   return    

DATO_2   ADDWF   PCL,1
   RETLW   "E"            
   RETLW   "N"
   RETLW   "C"          
   RETLW   "E"          
   RETLW   "N"          
   RETLW   "D"          
   RETLW   "I"          
   RETLW   "D"          
   RETLW   "O"          
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW   " "
   RETLW    0x00  
   return

;:::::::::::::::::::::::


CONFIG   BSF STATUS,5   ;Pasamos a posicionar en el bank 1
   BCF STATUS,6    
   MOVLW 0x06
   MOVWF ADCON1
   MOVLW 0xFF   ;Cargamos el valor a w
   MOVWF TRISA   ;El puerto A  funciona como entrada
   CLRF TRISC   ;Se configura PORTC como salida.
   CLRF TRISB   ;El puerto B nos sirve de salida      
   BCF STATUS,5   ;Se regresa al bank 0 de memoria
   RETURN
   



   END

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Hola Necesito ayuda con un programa
« Respuesta #1 en: 11 de Marzo de 2006, 23:22:00 »
Hola Usuario_Registrado, te a faltado decirnos a que frecuencia trabaja el PIC.

Un saludo.

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Alex-p

  • PIC10
  • *
  • Mensajes: 2
RE: Hola Necesito ayuda con un programa
« Respuesta #2 en: 12 de Marzo de 2006, 16:30:00 »
El cristal es de 4 MHz


 

anything