TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: marquitosro20 en 15 de Marzo de 2010, 17:53:46
-
Hola, mi nombre es Marcos y soy de la ciudad de La Plata, Argentina y soy tecnico electronico recibido hace 9 y lo unico que programe es el MC14500b de motorola y el 6800 y ahora estoy querindo incurcionar en el 16f84 mas especificamente la parte de puertos osea leer por ejemplo RB2 y escribir RA3 asi de simple leer y escribir nada mas porque no logro entender lo de PORTa PORTb TRISa TRISb. desde ya espero me respondan y poder seguir adelante.
Muchas Gracias.-
-
Hola marquitosro20:
Antes de nada bienvenido al foro.
Para empezar a aprender de pics, te diria que lo primero que tienes que realizar es leer mucho. Bajate algun manual en español de ello de google que hay muchos.
Por lo que indicas vas a empezar con ASM. Creo que es lo mejor para empezar y conocer un poco del interior de los mismos, antes de pasar a otro lenguaje de programacion mas cercano al humano como C, basic,.........
si utilzas el buscador del foro puedes encontrar ejemplos muy basicos, te aconsejo que intentes comprenderlos y despues preguntes las dudas. Hay ejemplos como "empezar en ASM desde 0"; "ejemplos basicos con pic16f628",................. Todos ellos muy basicos.
Para empezar con lo preguntas del port, TRis,..... puedes cojerte el datshhet dl micro elgido para empezar y alli encontraras una circuito de descripcion de como funcionan los pines como entrada, como salida,...... Es electronica pura y dura, pero sencillota.
Baste de decirte que TRIS son registros que configuran el(os) pin(es) como van a funcionar como entrada, salida, analogico,........
PORTx son ya los registros del propio puerto. Por ejemplo para llere el puerto A seria:
-movlw 11111111
- movwf TRiSA 1 (configura el puerto A como entrada)
-movf portA, W (lee el puerto A y deja el resultado en W)
Ya nos diras tus avances
Fermin
-
Gracias capo tengo el libro microcontrolador pic 16f84 y hay cosas que ya las tengo mas o menos entendidas, se me complica lo que te decia anteriormente, leer un pin especifico y no todo el puerto, a mi me interesa el dato de una pata del micro, pero voy a ver como resulevo
-
Saludos marquitosro20!!!
Pues esto es lo que se me ocurrio segun entiendo, es lo que necesitas, pongo en un adjunto el codigo fuente, ejecutable y simulacion (PROTEUS 7.6), espero te sea de utilidad. Te explico:
En este programa se verifica el estado del bit RB1 del PIC16F84A, donde se ha colocado un push button NA, si este button es presionado se activa el bit RB0 encendiendo un LED-GREEN colocado con su respectiva resistencia de 330 Ohms.
Respecto a la teoria detras de todo esto, creo que deberias seguir el consejo de Fer_TACA.
Checa el codigo y comenta... bye!!!
title "PIC16F84A, bitest.asm"
list p=16f84a, f=inhx8m
#include <p16f84a.inc>
__config _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
STATUS equ 0x03
PORTB equ 0x06
org 0x00
goto inicio
org 0x04
goto rsi
org 0x05
inicio: bsf STATUS,RP0
movlw 0xFE
movwf PORTB
bcf STATUS,RP0
main: btfss PORTB,1
goto bitset
bitclr: bcf PORTB,0
goto main
bitset: bsf PORTB,0
goto main
rsi: retfie
end
-
Con las instrucciones:
BTfss= compruebas si un pin esta a 1 y si se cumple saltas a 2 posiciones despues de donde colocaste el BTFSS
btfsc= compruebas si un pin esta a 0 y si se cumple saltas a 2 posiciones despues de donde colocaste el BTFSC
Con estas 2 instrucciones puedes comprobar el estado de cualquier pin de cualquier puerto.
fermin
-
me estoy poniendo mal, ya con miras de abandonar, me levo bien con todo lo que es la programacion del pic, pero no entiendo la configuracion de los puertos como la programa, porque todo los tutoriales que miro lo hacen diferente, y no saco una conclucion ni de chiste, sera posible que me den un mini instructivo como para nene de 2 años, porque se me queman las neuronas.
-
Traquilo, mira tratare de ponerlo lo mas simple...
bsf STATUS,RP0 ; ---> con esta linea entras a la seccion de configurar registros (banco 1).
movlw 0xFE ; ---> donde colocas un 'cero' haces una salida, donde pones un 'uno' haces una entrada.
movwf PORTB ; ---> en este caso coloco el bit 0 del puerto B como una salida (RB0) el resto como entrada.
bcf STATUS,RP0 ; ---> con esta linea regreso al banco 0, que es la seccion donde puedes usar los registros segun
; ---> hayas configurado entradas o salidas.
main: bsf PORTB,0 ; ---> Poner a uno el bit RB0.
call delay ; ---> Se demora por un tiempo especificado en la subrutina 'delay'.
bcf PORTB,0 ; ---> Poner a cero el bit RB0.
call delay ; ---> La misma demora. Tenemos un oscilador con periodo 2*delay o frecuencia 1/(2*delay).
goto main
Simplemente se hizo lo siguiente:
PORTB = EEEE EEES = 1111 1110 = 0xFE
Al escribir sobre el puerto B estando en el banco 1, estaras configurando los pines del puerto como entradas o salidas. Si recuerdas esto sera mas sencillo:
0 = Output
1 = Input
Espero te sea de utilidad... saludos!!!
-
0 = Output
1 = Input
Espero te sea de utilidad... saludos!!!
Si mal no recuerdo en un datasheet de microchip me parecío leer 0utput (el primer caracter es un "cero") e 1nput (el primer caracter es un "uno"). Como una forma para que podamos recordar muy fácilmente que con un 0 se configura como salida al puerto y con un 1 se configura como entrada.