Autor Tema: Consulta sobre ASM dentro de PBasic y LCD,  (Leído 1634 veces)

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

Desconectado kamisama

  • PIC16
  • ***
  • Mensajes: 151
Consulta sobre ASM dentro de PBasic y LCD,
« en: 26 de Julio de 2008, 22:18:58 »
Hola buenas noches, gente.

Hace muchisimo que no entraba por abandono temporal del hobby.

Bueno, he realizado un proyecto en el cual un Pic (16f627) se comunicaba con un LCD para presentar datos, estaba basado en un boton para seleccionar lo que se queria ver y las diferentes rutinas asociadas y habilitadas con una bandera cada una.

Como el resultante en PB rapidamente se volvio ENORME para la capacidad del PIC, y aun depurando hasta donde se podia; me vi obligado y tentado a usar ASEMBLER dentro del programa.

Naturalmente la primera version no funciono, asi que hice un programa diferente para poder probar en forma aislada y utilizar la menor cantidad de recursos o variables en la parte asembler.

La parte ASM solo lee desde el puerto Rx (USART) del pic... y funciona bastante bien.

PEROOOOOO... cuando lo uno con el otro programa... deja de funcionar TODO.
Rehabilitando los puertos como salidas o entradas (teniendo en cuenta que no modifique mas que la pata que necesitaba y no estaba asociada al funcionamiento del LCD ni nada) logre que siga trabajando PERO EL LCD NO FUNCIONA MAS

Perdi todo este santo sabado en decular esa rutina pero no doy con la tecla. Hice varios proyectos paralelos con el PB hasta que descubri que el problema es SOLO CON EL LCD, apenas lo activa el PB con un print... use o no las patas NO FUNCIONA MAS EL MODULO USART (EN ASM) y el Display no se actualiza por mas que envie CLS, print o lo que sea.

Adjunto el codigo ASM de la pavada que hice... Si alguien sabe y/o ya paso por este desgarrador evento, agradecere la respuesta....

Saludos cordiales.

MOROCO:
REM PRINT 2,2, "HOLA"
ASM
ASM_AUX EQU 111
ASM_AUY EQU 112   
; ----------------------------------------------------------------------
; INITIALIZE PORTS
        bsf 0X03,5              ; RAM PAGE 1   
        bsf 0x86,1              ;TRISB - Habilitar como entrada PORTB,1
        movwf 0X86   
; ----------------------------------------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
        movlw 0x19              ; 0x19=9600
        movwf SPBRG
        movlw b'00100100'       ; Baud Rate Generator Hardware
        movwf TXSTA             ; enable Async(2) Transmission(5)
        bcf 0X03,5          ; RAM PAGE 0
        movlw b'10010000'       ; enable Port(7) ContinuosReceive(4)
        movwf RCSTA
; ----------------------------------------------------------------------
        movf RCREG,W            ; flush receive buffer * 3?
; ----------------------------------------------------------------------
;------------------------------------------------------------------------
P_GETPASS
        CLRF ASM_AUX
        MOVF RCREG,W         
        XORLW  a'K'       
        btfsS 0X03, 2         ;Si la comparacion da 0 (ok) saltar Flag[Z]=1       
        GOTO p_endpass
p_get2  btfss PIR1,RCIF
        goto p_get2
        MOVF RCREG,W
        XORLW  a'S'
        btfsS 0X03, 2         ;Si es igual a S quedara en 1 UNO
        GOTO p_endpass
        movlw 0xff
        movwf ASM_AUX           ;Pwd correcto "KS"
p_endpass
;------------------------------------------------------------------------
        BTFSS ASM_AUX,3         ;Saltar si es 1       
        GoTO P_EXITASM          ;Fin, no se valido el PWD
;------------------------------------------------------------------------       
P_SAVEROM
        MOVLW A'$'
        movwf TXREG             ; send data in W   
        bsf 0X03,5          ; RAM PAGE 1
P_save2 btfss TXSTA,TRMT        ; (1) transmission is complete if hi
        goto P_save2
        bcf 0X03,5              ; RAM PAGE 0               
CargarDatos
        MOVLW 0X0A              ;(Pos10)
        Movwf ASM_AUX
        BSF 0X03,5              ;Banco 1
        MOVWF 0X1b              ;9B         
P_EPROCESS  BcF 0X03,5          ;Banco 0
            cALL MICROCHIP_HWSERIN
            BSF 0X03,5          ;Banco 1
            MOVWF 0X1A          ;9Ah EEDATA
            Call MICROCHIP_ROMSAVE
        DECFSZ 0x1b ,1
        GOTO P_EPROCESS       
;------------------------------------------------------------------------
        GOTO P_EXITASM
; ----------------------------------------------------------------------       
MICROCHIP_ROMSAVE       ;REQ EEADR EEDATA    (9Bh, 9Ah)
    BCF INTCON, GIE     ;Inhabilitar interrupciones
    BSF 0x9C, 2         ;BSF EECON1, WREN
    BTFSC INTCON, GIE   ;Esperar a que el Pic Responda
    GOTO $-2
    MOVLW 0X55
    MOVWF 0x9D          ;EECON2
    MOVLW 0XAA
    MOVWF 0x9D          ;EECON2
    BSF 0x9C,1          ;EECON1,WR   
    NOP
    BTFSC 0X9C, 1       ; WR- Espera a que termine la escritura
    GOTO  $-2
    BSF INTCON,GIE   
    RETURN              ;Seleccion de banco anulada, pero tiene que estar
; ----------------------------------------------------------------------
MICROCHIP_HWSERIN
    NOP
    NOP
    btfss PIR1,RCIF
    goto $-3
        MOVF RCREG,W
    RETURN
; ----------------------------------------------------------------------
MICROCHIP_DELAY
    MOVLW 0XFF
    MOVWF ASM_AUY   
    NOP
    NOP
    DECFSZ ASM_AUY ,1
    GOTO $-3
    RETURN
; ----------------------------------------------------------------------   
P_EXITASM
    ;BSF INTCON, GIE         
    bsf 0X03,5              ; RAM PAGE 1     
    MOVLW 0XFF 
    MOVWF 0X06               ; 86 TRISB TODO ENTRADAS
BCF 0X03,5
ENDASM
CLS
PRINT AT 1,1, "OK"
GOTO MOROCO