HOME


En MicrAM Technologies estamos realizando desarrollos en electrónica para empresas. Si te considerás un verdadero profesional de la electrónica, mandanos tu curriculum vitae a andres@moraldo.com.ar para tener la oportunidad de trabajar en equipos de desarrollo del más alto nivel.


www.andres.moraldo.com.ar
Curso de Microcontroladores Pic
(By Andrés Moraldo)
Nivel Inicial - Avanzado
Argentina



Empezando con el programa


Primero debemos tomar algunas clases generales acerca del código.

¿Que es el código? El código será la lista de ordenes que seguirá el micro. En el pondremos todos los pasos que efectuará el mismo. El PIC es microcontrolador, capaz de seguir nuestras indicaciones. Otros componentes, son fijos, tales como compuertas, memorias, etc. Los microcontroladores son integrados capaces de seguir una secuencia programada. Esto quiere decir que se programa. ¿Como lo programamos? Nuestra Pc será la interfase Hombre-Microcontrolador. Todos los microcontroladores poseen una memoria de programa, en la cual contendrá todos los pasos a seguir. El código como en cualquier lista se empezará a leer la primera línea, luego la segunda y así sucesivamente, salvo que se especifique lo contrario.

El código se escribirá en la ventana en blanco que aparece para en el MPlab.

Ahora pasaremos a conocer las partes del programa.

En la siguiente sección pondremos en vista un código fuente de parte de un programa, no vale la pena copiarlo y ejecutarlo ya que su fin es solo de mostrar las partes de los programas.
Echemos un vistazo al siguiente código:

LIST p=16F84 Listado del PIC que se utilizará
status equ 03h
portb equ 06h
trisb equ 86h
rp0 equ 5
rbie equ 3
rbif equ 0
intcon equ 0bh
loop equ 0dh
loop2 equ 0eh
loop3 equ 0fh
loop4 equ 10h
w equ 00h
Encabezado o header, son las equivalencias
goto inicio
Código
dormir
  bcf intcon,rbif
  bsf intcon,rbie
 SLEEP
 bcf intcon,rbie
  bcf intcon,rbif
 return

retardo100mS
  movlw d'100'
  movwf loop2
  finretardo1
  nop
  nop
  nop
  nop
  nop
  call retardo1mS
  movlw d'100'
  decfsz loop2
  goto finretardo1
  return
Funciones (Ya es parte del código)
;******************************************
;* Principal *
;******************************************
Rems: No es parte del código son anotaciones nuestras. El compilador las pasará de largo

inicio
 bsf status,rp0 
 bsf trisb,2
 bcf status,rp0


reinicia

 call dormir
 bsf portb,2
 call retardo100mS
 bcf portb,2
 goto reinicia
 
Programa principal (Código)
 end Sentencia de Fin del programa

No explicaremos instantáneamente todas las partes del programa pero me parece un buen momento para explicar las header, ya que estas las tendremos que tener en claro desde el principio.

En el código cuando aparecía:

status equ 03h
portb equ 06h
trisb equ 86h
rp0 equ 5

Lo que queríamos decirle al programa es que cada vez que escribamos la palabra status, cuando compile el programa lo cambie por lo que le sigue a equ. Es decir que Status equivaldrá a 03h. Es decir que cada vez que queremos escribir 03 hexadecimal en el código, sera lo mismo poner status. Depende de donde pondramos la palabra status, esta correspondera a un numero o correspondera a la direccion 03 de memoria Veamos los siguientes ejemplos para redondear el tema.

bsf 03h,3
bsf 03h,status
bsf status, 3

(sintaxis: Bsf xxx,b)

Para los que no conocen las instrucciones del asembler, BSF pone un 1 en el bit b del registro de direccion xxx (si deseas ver mas acerca de esta instruccion, visita la lista de instrucciones )
Volviendo, en los tres ejemplos se realiza lo mismo. En la primera, el código es confuso, en el segundo tambien pues ese status no significa mucho que lleve el valor 3 pero aqui se ve que se usa como constate. en la tercera linea el codigo toma color pues se pone un 1 en el bit 3 del registro ubicado en la direccion status (03h).
Por otro lado debemos tener en cuenta que pueden existir varias header con el mismo valor pero no pueden existir una header con dos valores.
Volveremos a las partes del programa luego.

¿Como se programa?.

Debemos ser prolijos al programar. En un primer momento solo nos debe preocupar que es lo que queremos hacer. Organizarnos en papel y lapiz marcando las partes importantes del codigo ayudara mucho. Es conveniente el uso de rems pues estos nos ayudarán en todo momento. Estos no ocupan memoria en el pic pues no se escriben en él. El uso adecuado de los nombres de funciones como así también el de las equivalencias nos ayudarán muchísimo, pues tendremos bien etiquetados todas las partes del código según el uso que les demos . Escribir un código fuente es muy fácil, escribir el primer código fuente es muy difícil.

Planeemos un proyecto simple con el 16F84

Que tal si queremos simplemente encender un led ubicado en la pata uno del integrado (Ra2).
Bien siempre en todo programa de PIC hecho en el MPlab deberá llevar las siguientes dos líneas:

LIST p=16F84
End

Ok. La primera línea le esta indicando al Mplab que listado de Microcontrolador se utilizará. Como utilizaremos el Pic 16F84 el listado deberá ser el mismo.

La segunda línea le dirá donde termina el programa.
En el medio de estas dos irá todo el código.
Para encender el led nos basta solo con cuatro líneas más de código:

LIST p=16F84

bsf 3,5
bcf 85,2
bcf 3,5
bsf 5,2
end

Ja los pesque sin entender nada.

Es fácil. La primera y ultima línea ya la hemos analizado. La segunda y la quinta son muy parecidas y la tercera y cuarta también.

Veamos que significa las sentencias bcf y bsf

Bcf: Bit Clear Flag

Bsf: Bit Set Flag.

Esto quiere decir que pondrá una bandera (Flag) o no en algún Bit. Vemos que cada línea de bxf contiene además dos números. Estos serán el primero para el registro y el segundo para el numero de bit.

Es decir que la segunda línea pondrá un uno (una bandera) en el bit cinco del registro tres.

De la misma manera en la tercer línea de código tendremos que pondrá en cero el bit dos del registro ochenta y cinco.

Bueno pero que significado tienen los registros 3 y 85 antes nombrados. Son los registros de "estado" y "Tris A"

Es decir que este programa lo que hace es acceder primero al registro de estado y modificar la paginación de este (Rp0 es el bit 5 del registro status), de este modo podremos acceder a la segunda columna de registros. Recordemos que el registro Tris a esta en el banco uno de los bancos de registro. Luego de eso, modificamos la entrada-salida Ra2 (Bit 2 del registro tris), colocando a esta como salida de datos. Ahora debemos volver al banco cero para poder acceder al registro PortA. Entonces modificamos la paginación del registro status volviendo el bit 5 (Rp0) a cero. Ahora si estamos preparados para escribir directamente en el puerto.

Recuerden que por defecto el PIC tendrá a todas la entradas-salidas (tanto los puertos Ra y Rb), colocadas como entrada de datos, por eso es que las debemos setear antes de usar (Si uno intenta escribir una entrada el MPlab no genera ningún error, simplemente no hace nada).

Esto si lo compilamos y lo simulamos, funciona, pero que pasa si venimos dentro de unos días y vemos el código nuevamente. Nos resultará difícil recordar que 03 equivale a status y que 85 equivale a Tris A.

Para ello ordenemos un poco el código y llamemos a las cosas por su nombre:

LIST p=16F84

Status equ 03h
Rp0 equ 5
TrisA equ 85h
PortA equ 05h

bsf Status,Rp0
bcf TrisA,2
bcf Status,Rp0
bsf PortA ,2
end

No es verdad que esta mejor. Y que tal si les ponemos algunas anotaciones nuestras. Estas llevarán al principio el punto y coma, entonces de esta manera, el compilador no tomará en cuenta el resto de la línea:

LIST p=16F84

*         Header         *

Status equ 03h
Rp0 equ 5
TrisA equ 85h
PortA equ 05h

*         Programa Principal         *

bsf Status,Rp0
bcf TrisA,2
bcf Status,Rp0
bsf PortA ,2

end                                    ;Este es el fin

Fíjense como se estiro nuestro programa.

En esta parte hemos explicado las sentencias "bsf", "bcf", y parte de algunos registros como el "TrisA", "PortA" y "Status".

Si queres, Aqui tenes todas las instrucciones del ascembler de pic bien explicadas.

Que les parece si lo simulamos para ver que es lo que pasaría en el PIC.

Para ello pasaremos a la siguiente parte.

Compilando y simulando el programa


Si deseas podes escribirme y dejarme un mensaje, tu duda o bien tu proyecto para que todos lo conozcamos


Como colaborar

Atención profesionales y aficionados a la electrónica!

En andres.moraldo.com.ar estamos buscando nuevos autores para nuestros artículos. Si creés que tenés buenos conocimientos de electrónica de los que los demás puedan aprender, no te pierdas esta oportunidad de colaborar con la comunidad de aficionados y profesionales en Internet, y de hacerte conocer en la misma.

Si te interesa la propuesta, envíanos un mail a andres@moraldo.com.ar y contanos sobre qué temas te gustaría escribir, y pronto recibirás un mail nuestro contándote qué podemos hacer para que puedas volcar tus conocimientos en un artículo, y publicarlo en este sitio lo más pronto posible. Puedes encontrar mas informacion en esta página.

En este momento la comunidad de electrónicos en Internet es prácticamente nula, ayudános a hacer de este sitio el punto de encuentro internacional de los amantes del transistor. Esperamos sus mails!

Andres Moraldo
andres@moraldo.com.ar
www.andres.moraldo.com.ar