Que tal, soy nuevo en el foro. Desde hace tiempo he programado pics, pero solo o principalmente el 16f84a, en ensamblador, nada de C, sin embargo estoy queriendo empezar a usar el 18f4550 y evidentemente es bastante mas complejo y completo que el 16f84a.
El problema que les traigo es el siguiente: Deseo hacer un programa de prueba para encender y apagar los bits del PORTE, esto lo he conseguido de la siguiente manera:
.
.
.
ciclo
clrf PORTE
call Retardo_1s ;
RETARDO DE UN SEGUNDO POR BUCLES DE CICLOS DE PROGRAMA setf PORTE
call Retardo_1s ;
RETARDO DE UN SEGUNDO POR BUCLES DE CICLOS DE PROGRAMA goto ciclo
END
sin embargo estoy "caminando a tientas" con este pic y quiero ver que funcione bit por bit, asi que lo hice de esta manera:
.
.
.
ciclo
bcf PORTE,0
bcf PORTE,1
bcf PORTE,2
call Retardo_1s
bsf PORTE,0
bsf PORTE,1
bsf PORTE,2
call Retardo_1s
goto ciclo
END
Pero de esta manera NO FUNCIONA, solo parpadea el bit PORTE,0 pero los otros no parpadean, solo parpadean si volteo el led y lo conecto de Vcc al PORTE,1 o PORTE,2 (en lugar del pin a tierra que es lo comun), eso quiere decir segun yo que el PORTE si esta mandando el pulso BAJO pero no el pulso alto, tal vez sea de colector abierto... yo supongo que talvez tenga que ver con resistencias pull-up pero no encuentro en el datasheet algo que me diga como habilitarlas o deshabilitarlas (si las tiene internamente el PORTE).
Hice la prueba y le conecte resistencias pull-up externas y los led si parpadean pero el pic empieza a hacer feo pues el pulso alto programado para durar 1 seg dura a veces 2seg
y a veces un seg.
MI NO ENTENDER NI MAIZ...
Este problema no pasa con el PORTB que es el unico que si se porta bien con migo
.
Lo mismo me pasaba con un 16f917 pero ya no le segui para empezar con el 18f4550 el cual hace lo mismo
Bueno espero su respuesta amigos, seguro estoy haciendo algo muy muy mal pero no se que es, por cierto, les dejo el programa completo(la mayor parte la obtuve de estos utiles foros):
;**********************************************
;Programa de Prueba para el 18f4550, usa un XT de 4Mhz pero ejecuta las
;instrucciones a 48MHz
;---------------------------------------------------------------
LIST P=18F4550 ;directive to define processor
#include <P18F4550.INC> ;processor specific variable definitions
CONFIG FOSC = XTPLL_XT, PLLDIV = 1,CPUDIV = OSC1_PLL2,USBDIV = 2,PWRT = ON,BOR = ON, VREGEN = OFF
CONFIG WDT = OFF ,WDTPS = 1,MCLRE = ON,PBADEN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
CBLOCK 0x30
ENDC
org 0
goto inicionumero1
inicionumero1
clrf TRISA ; configuar el port como salida ¡que bueno!, no hay que estar cambiando de bancos
clrf TRISB ; el resto -> salida
clrf TRISC
clrf TRISD
clrf TRISE
;------------------------------------------------------
; ahora viene la deshabilitación de modulos (pheriperals)
;**********************************************
clrf ADCON0 ; desactiva el CAD
movlw 0x0F
movwf ADCON1 ; todas digitales
bcf INTCON,GIE ; desactiva interrupciones
movlw 0x07
movwf CMCON ;desactiva el modulo comparador
clrf SPPCON ; desactiva el modulo Streaming Parallel Port (SPP)
clrf SSPCON1 ; desactiva el modulo MSSP,SSPEN
bcf UCON,USBEN ; desactiva el modulo USB
bsf INTCON2,RBPU ; desactiva las resistencias de amarre en PORTB
;===================================
; Empieza el PROGRAMA (basicamente lo unico que hice yo)
;--------------------------------------------------------------
enclava
bsf PORTB,7
BSF PORTE,0
BSF PORTE,1
BSF PORTE,2
call Retardo_1s
BCF PORTE,0
BCF PORTE,1
BCF PORTE,2
BCF PORTB,7
call Retardo_1s
goto enclava
include<RETARDOS_18F4550_48MHz.INC> ;Libreria de retardos para un 18f4550
END
SALUDOS CORDIALES