ANSELven PIC16f887 hexadecimal

Buenas, soy nuevo en el foro, y necesito de su ayuda, he empezado a programar este pic 16f887, empezando con un programa tan sencillo que suena ridiculo, pero, no he podido hacerlo arrancar, el chiste es que, con un push botton, encienda un LED, estoy empezando a programar "unicamente" en codigo hexadecimal, y no he encontrado la forma de "decirle" al programa que todas las E/S del PORTA, sean digitales.

les dejo el codigo que he realizado para que lo chequen y me digan si algo esta mal , tambien tengo entendido que el "MCLR" (patita 1) debe ir a HD (5 vdd) lo he puesto asi, y a la hora de cargar el programa al pic, es que no funciona, y creo, que es por que no he definido el

ANSEL = ANSELH = 0;

ahora, ese codigo.. "Como lo pongo en hexadecimal en mi programa ???????"


list p=16f887 ; definiendo el microcontrolador

main

bsf 0x03,5
bcf 0x03,6
bsf 0x85,0
bcf 0x85,7
bcf 0x03,5
regreso
btfss 0x05,0
goto poner0
bsf 0x05,7
goto regreso

poner0
bcf 0x05,7
goto regreso
END
 
Hola:
Estas obligado a programar en hexadecimal??, supongo que usas el MPLAB donde hay un par de formas para usar directamente los registros del PIC y lo más facil es incluir el archivo de cabecera del mismo con un #include <P16F887.inc> además no se te olvide de configurar el MPLAB para el pic que uses desde "Select Device"...

Sugiero que siempre veas la hoja de datos del PIC que uses... hasta hay ejemplos. Revisa la página 40 del registro ANSEL, pag 46 están todos los registros asociados al PORTA y en la pag 24 están los registros incluidos la dirección.

Sobre la pata del MCLR tiene doble función que se configura en los FUSES del PIC... en fin dale una leída al datasheet ya que este PIC tiene varias cosas a tomar en cuenta.

Un saludo.
 
Hola:

Gracias por responder, por principios de cuentas, si es obligatorio programar en hexadeciamal, se que puede llegar a ser mas dificil, pero, me gustaria aprender desde este codigo.

Acerca dal Datasheet, le he estado dando una hojeada, y he logrado entender lo del "Oscilador interno" , y el "MCLR", asi como también la configuración del "ANSEL" que era mi problema para poder determinar si una salida es "digital/analogica".

El Oscilador interno, ya entendi como configurarlo, el MCRL lo deje conectado internamente a "VDD", todo esto desde el MPLAB, en "Configure/Configuration bits" , puesto que si incluyo el "#include <P16F887.inc>", tengo entendido que es un archivo con la configuración de este pic, y para mi es mas facil configurarlo desde MPLAB, donde nada mas clikeas sobre la opcion como el "watchdog" y todo eso y cambias la configuración.

Problema, este es mi primer programa, es mi primera ves que ocupo este pic, y si fueras tan amable, ayudame a revisar el codigo que logré realizar, cambiando de bancos, configurando el oscilador, configurando las E/S.

Te dejo mis preguntas principales:

-Esta bien realizado el cuerpo del programa?
-Para cada opción como "configurar TRISA" , "OSCCON" hay que determinar en que banco estan aunque esten en el mismo banco ?
-si quiero que al apretar un boton se encienda un LED, la frecuencia del oscilador puede hacer que no vea que prenda el LED??
-que frecuencia me recomiendas para esta aplicación ?

De antemano muchas gracias.. y te dejo el nuevo codigo


List P=16F887

BSF 0x03,5 ;RP0 I
BCF 0x03,6 ;RP1 0
;Se selecciona Banco 1
BSF 0x85,2 ;PORTA 2 I
BCF 0x85,3 ;PORTA 3 O
BSF 0x8F,6 ;IRCF2 I
BCF 0x8F,5 ;IRCF1 O
BSF 0x8F,4 ;IRCF0 I
;Se selecciona la frecuancia del oscilador
BCF 0x8F,3 ;bit de lectura reloj interno
BSF 0x8F,2 ;HFINTOSC estable en I
BSF 0x8F,0 ;el oscilador interno se ocupa como reloj
BSF 0x03,5 ;RP0 I
BSF 0x03,6 ;RP1 I
;Se selecciona el banco 3
BCF 0x188,2 ;Se determina el PORTA 2 como digital
BCF 0x188,3 ;Se determina el PORTA 3 como digital

regreso
BTFSS 0x05,2 ;condicion si PORTA 2 = 0 - PORTA3 en I
GOTO poner0
BCF 0x05,3 ;Activa el PORTA 3
GOTO regreso

poner0
BSF 0x05,3 ;Desactiva el PORTA 3
GOTO regreso
END
 
Última edición:
UP! .

Con la novedad que le he estado dando vueltas en mi cabeza al problema que tenia, he estado leyendo varios codigos en este foro, y tambien tome muxo en cuenta lo que me dijiste, el unico problema que tenia es que... me quedaba en el banco 3 del ANSEL, y no regresaba al banco 0 para iniciar el programa, tan solo antes de empesar a ocupar los puertos, cambie al banco 0 y todo funcionó perfectamente!!...

Ahora a empezar con algo mas dificil, quiero crear una compuerta AND de tres entradas y dos salidas,
Espero puedan ayudarme como lo hicieron con este problema!..

Muchas gracias a ByAxel por cus consejos!
 
Atrás
Arriba