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