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.
![]() |
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