TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Pablolbap en 21 de Septiembre de 2014, 15:36:13
-
He Practicado con el PIC16F84A, pero quiero pasarme al PIC16F88 por sus mejores prestaciones,
pero no puedo ni encender un led. Necesito ayuda, ¿cuál es el error?
list p=16f88
include <p16f88.inc>
__CONFIG _LVP_OFF & _WDT_OFF & _XT_OSC
org 0x00
org 0x5
Inicio:
clrf INTCON
bcf STATUS,RP1
bsf STATUS,RP0
movlw b'00000001'
movwf TRISB
clrf ANSEL
clrf TRISA
bcf STATUS,RP0
clrf PORTB
Boton:
btfsc PORTB,0
goto Boton
btfss PORTB,1
goto On
bcf PORTB,1
goto Boton
On:
bsf PORTB,1
goto Boton
end
-
Está configurado el registro ADCON1 ????
-
Cuando haces :
bcf STATUS,RP1
bsf STATUS,RP0
Te cambias al banco 1 de la ram, verdad???
Luego regresas al banco 0???
-
Gracias DominusDRR por las respuestas. Creo que me quedaré un rato más con el PIC16F84A, obligadamente hasta que logre entender la forma de configurar los fusibles por lo menos.
Saludos a todos. :?
-
Sé que esa no es la configuración completa, pero si pongo:
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
no me acepta el caracter ',' (coma). Estoy trabajando con MPLAB y la simulación es en Proteus.
:(
-
Un error que veo es que no regresas al banco 0 de la ram para utilizar los puertos. Eso también hay en el PIC16F84A.
¿Si sabes que haces en lo siguiente?
bcf STATUS,RP1
bsf STATUS,RP0
-
En el F84 es sencillo: si quiero ir al Banco 1, pongo en 1 el bit RP0 del Reg. STATUS y cuando termino de configurar, regreso al Banco 0 poniendo a 0 dicho bit del Reg. STATUS.
En el F88 se me complica porque de los pocos ejemplos que he visto no me queda claro ni sé cuántos bancos hay. Me pasa por no haberle dado la importancia que merece al conocimiento de los registros y ponerme a querer hacer programitas postergando dicho conocimiento, pensando que ya estando más familiarizado lo entendería mejor. Quizás entienda un poco más porque la verdad al principio, aun siendo más sencillo el F84, yo copiaba la configuración sin saber de qué se trataba.
Nuevamente gracias, DominusDRR. Saludos :) :) :)
P.D: De nuevo, si pongo la configuración completa el MPLAB no me compila y da 3 errores:
2 de ellos se refieren a que la coma es ilegal (illegal caracter)
y el otro dice que estoy sobreescribiendo en una dirección, quizás porque aparecen dos veces __CONFIG
-
En el F84 es sencillo: si quiero ir al Banco 1, pongo en 1 el bit RP0 del Reg. STATUS y cuando termino de configurar, regreso al Banco 0 poniendo a 0 dicho bit del Reg. STATUS.
En el F88 se me complica porque de los pocos ejemplos que he visto no me queda claro ni sé cuántos bancos hay. Me pasa por no haberle dado la importancia que merece al conocimiento de los registros y ponerme a querer hacer programitas postergando dicho conocimiento, pensando que ya estando más familiarizado lo entendería mejor. Quizás entienda un poco más porque la verdad al principio, aun siendo más sencillo el F84, yo copiaba la configuración sin saber de qué se trataba.
Nuevamente gracias, DominusDRR. Saludos :) :) :)
P.D: De nuevo, si pongo la configuración completa el MPLAB no me compila y da 3 errores:
2 de ellos se refieren a que la coma es ilegal (illegal caracter)
y el otro dice que estoy sobreescribiendo en una dirección, quizás porque aparecen dos veces __CONFIG
Creo que deberías leer las hojas de datos (data sheet) para que comprendas mejor a tu microcontrolador
-
Es lo que debo hacer, gracias de nuevo.
Cuando lo resuelva lo voy a mostrar para que sirva a otros que empiezan con ésto, porque parece que aquí es donde reside la verdadera dificultad de migrar de un PIC a otro. Y quien ya pasó por la experiencia hasta quizás ya olvidó lo relativamente difícil que fue, pero para alguien que comienza ( o para alguien como yo) estas cosas resultan difíciles de entender y estamos en esto endulzados por el F84 que es más sencillo y existe mucha información y ejemplos.
DominusDRR, se agradece mucho la ayuda. Lástima que no pude contestar tus repreguntas a fin de que yo lograra entender el porqué no funciona el programita. Saludos cordiales a todos.
-
Tienes que ver en que banco están tus registros (PORTA, TRISA, etc)
Cuando ahces esto:
bcf STATUS,RP1
bsf STATUS,RP0
Te cambias al banco 1, donde está TRISA, y ahi permaneces.
Escribir o leer algo en PORTA es equivalente a leer o escribir algo en TRISA.
Si haces esto:
bcf STATUS,RP1
bcf STATUS,RP0
Regresas al banco 0, donde está PORTA.
Antes de escribir o leer algo de un registro, debes saber en que banco estás y en que banco está tu registro.
-
Ya me funciona en el simulador de MPLAB y en Proteus.
Además de lo que me dijo DominusDRR a quien agradezco mucho, tenía un error garrafal:
No había declarado el F88 en el simulador de MPLAB y por defecto estaba el F84. Por lo que no me aceptaba la configuración de fusibles del F88.
En Proteus no me funcionaba porque no le había puesto CBLOCK 0x20
ENDC
Tambien me permite usar la librería de RETARDOS.INC que está para el F84 y un reloj de 4Mhz.
Me quedó así definitivamente:
A propósito, ¿cómo se puede separar la línea de CONFIG1 para que no quede tan larga? Gracias.
list p=16f88
include <p16f88.inc>
__CONFIG _CONFIG1,_CP_OFF&_CCP1_RB0&_DEBUG_OFF&_WRT_PROTECT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_ON&_MCLR_OFF&_PWRTE_OFF&_WDT_OFF&_XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CBLOCK 0x20
ENDC
#define Pulso PORTB,0
#define Led PORTB,1
org 0x00
org 0x5
Inicio:
clrf INTCON
bcf STATUS,RP1
bsf STATUS,RP0
movlw b'00000001'
movwf TRISB
bcf STATUS,RP1
bcf STATUS,RP0
clrf ANSEL
clrf PORTB
Boton:
btfsc Pulso
goto Boton
call Retardo_10ms
btfss Pulso
goto Boton
btfss Led
goto On
bcf Led
goto Boton
On:
bsf Led
goto Boton
include <RETARDOS.INC>
end