SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
Capítulo V. Programación en PIC. Los primeros pasos




                                       Capítulo V




Programación en PIC
Los primeros pasos


• Encender y apagar un LED
• Secuenciador con cuatro LED's
• Leer los pulsadores y encender el LED correspondiente
• Programa avanzado utilizando el entrenador K-061




Curso Básico de Microcontroladores PIC •                                                   63
Capítulo V. Programación en PIC. Los primeros pasos




64                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos

    Como la práctica hace al maestro, veremos que con la realización de ejemplos
prácticos se pueden despejar muchas dudas. Los ejercicios se basan en el entrenador
PIC K-061 de CEKIT, cuyo diagrama esquemático se encuentra al final del capítulo
II “Conozca el PIC16C84”. Aunque lo más conveniente es tener el entrenador, usted
puede ensamblar los circuitos equivalentes en un protoboard.

Ejercicio 1: Encender y apagar un LED
    Este es el ejercicio básico por excelencia y ayuda a todas las personas a perder el
miedo al manejo del microcontrolador. Si se observa el diagrama del entrenador, los
ocho pines del puerto B han sido dispuestos como salidas con el objeto de controlar
LED’s, necesitando sólo una resistencia en serie con éste para limitar la corriente. El
integrado ULN2803 se encarga de aislar el circuito y de entregar una buena cantidad
de corriente, suficiente para proporcionar iluminación adecuada al LED.

   Para encender el primer LED, tiene que colocarse un estado lógico alto en el pin
6 del microcontrolador , mientras que un estado bajo hará que éste se apague; esto se
debe al transistor interno del ULN2803 que invierte la señal. La función del micro-
controlador será entonces sencilla: alternar estados lógicos altos y bajos en su pin
RB0 con un retardo tal, que nos permita visualizar el efecto. Para una mejor com-
prensión del proceso se muestra en la figura 1 el diagrama de flujo respectivo, el
mismo que nos sirve para la realización del programa.


                                            EMPEZAR




                                           Encabezado

                                           Inicialización




                                           Encender LED




                                       Rutina de retardo




                                           Apagar LED




                                       Rutina de retardo




                 Figura 1. Diagrama de flujo del primer ejercicio.

Curso Básico de Microcontroladores PIC •                                                             65
Capítulo V. Programación en PIC. Los primeros pasos

     ;===================================================================
     Este programa prende y apaga un LED
     list      p=16c84         ;se utiliza el PIC16C84
     ;--------------------------------------------------------------
      ptob     equ 06          ;el puerto b está en la dirección 06 de la
                               ;memoria RAM
     reg1      equ      0b     ;aquí se asignan nombres para reemplazar los
                               ;registros
     reg2      equ      0c                                                                  Encabezado
     reg3      equ      0d
     valor1    equ      30     ;aquí se asignan nombres a los valores
     valor2    equ      40     ;constantes
     valor3    equ      50
     ;————————————————————————————————————————————————————————————

     reset      org        0       ;el vector de reset es la dirección 00
                goto       inicio ;se envía al inicio del programa
                org        7       ;empieza el programa en la posición de
                                   ;memoria 7                                               Iniciación
     inicio     movlw      00      ;se carga el registro W con el valor 00
                tris       ptob    ;se programan los pines del puerto B como
                                   ;salidas
     otra       movlw      01      ;se carga el registro W con el valor 01
                movwf      ptob    ;se pasa ese valor al puerto B para encender             Encender LED
                                   ;el LED que se encuentra conectado al pin RB0
                call       retardo ;se mantiene el LED encendido por un momento             Llamar retardo
                movlw      00      ;se carga el registro W con el valor 00
                movwf      ptob    ;se carga el registro puerto B con cero para             Apagar LED
                                   ;apagar el LED
                call       retardo ;se mantiene el LED apagado por un momento               Llamar retardo
                goto       otra    ;se continúa el programa en otra, es decir que
                                   ;se queda ejecutando la misma acción                     Volver a encender
                                   ;esta rutina genera un tiempo de espera                       el LED
     retardo    movlw      valor1 ;se carga el registro W con el número valor1,
                                   ;es decir con 30
                movwf      reg1    ;se traslada ese número al registro reg1
     tres       movlw      valor2 ;se carga el registro W con el número valor2,
                                   ;es decir con 40
                movwf      reg2    ;se traslada ese número al registro reg2
     dos        movlw      valor3 ;se carga el registro W con el número valor3,
                                   ;es decir con 50                                         Rutina de
                movwf      reg3    ;se traslada ese número al registro reg3                  retardo
     uno        decfsz     reg3    ;se decrementa el registro reg3 y si el valor
                                   ;es cero se salta a la
                goto       uno     ;instrucción siguiente, si no es cero se
                                   ;continúa decrementando
              decfsz       reg2    ;igual que el anterior
              goto         dos
              decfsz       reg1    ;igual que el anterior
              goto         tres
              retlw        0
              end                                                                           Final del
     ;====================================================================                  programa

           Figura 2. Programa que enciende y apaga un LED (ejer1.asm)

    Consideremos este primer programa; en él se pueden observar una serie de lí-
neas de cabecera, antes de la etiqueta inicio. Ellas, como ya lo habíamos menciona-
do, son una herramienta que nos proporciona el ensamblador para asignar nombres

66                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos

lógicos, fácilmente memorizables, a algunas posiciones de memoria, bits, puertos y
registros para utilizar éstos en el cuerpo principal del programa; el ensamblador se
encarga de remplazar estos nombres por los valores numéricos correspondientes,
formando así el programa en código objeto.

    Con lo anterior, la dirección 06 corresponde al puerto B, al cual hemos llamado
ptob, de más fácil recordación que un número. De igual manera tres posiciones
auxiliares de memoria: la 0B, 0C y 0D, que contendrán valores a decrementar para
establecer una rutina de retardo, las hemos llamado reg1, reg2 y reg3. También se
han utilizado tres cantidades a las cuales les hemos asignado nombres, con el objeto
de facilitar el manejo ya que, al momento de ensamblar el programa, podemos rem-
plazarlos rápidamente si ellos no eran los adecuados.Veamos ahora algunos bloques
de instrucciones más detalladamente:

Inicio. La primera instrucción carga el registro W con 0 para configurar, con la
segunda instrucción (tris), el puerto B como salidas. Se debe recordar que un
cero, en el registro de trabajo W, configura el pin respectivo como salida, mien-
tras que un uno lo hace como entrada. Esta instrucción se da, por lo regular una
sola vez por puerto.

Otra. Aquí se carga el registro de trabajo W con uno, con el objeto de sacar esta-
dos lógicos altos por el pin RB0 del puerto B, siendo este estado el encargado de
encender el LED. Después de configurado el puerto, éste puede ser tratado como
cualquier otro registro, admitiendo transferencia de datos hacia (escribir sobre el
puerto) y desde (leer el puerto) el registro de trabajo W. También se pueden reali-
zar operaciones lógicas, de rotación, etc. La tercera línea hace un llamado a una
rutina de retardo, la cual se explicará más adelante, retornando al programa prin-
cipal tan pronto ésta es ejecutada.

    La parte que sigue carga el registro de trabajo W con el literal cero, el cual se
sacará por el puerto B, con el objeto de apagar el LED. De nuevo se hace un llamado
a la rutina de retardo, para visualizar el efecto; después de la ejecución de la rutina,
el control del programa salta a la dirección dada por la etiqueta otra para continuar
realizando la primera parte del mismo.

                          RETARDO movlw VALOR1
                                  movwf REG1
                          TRES    movlw VALOR2
                                  movwf REG2
                                                                 C
                          DOS     movlw VALOR3
                                  movwf REG3              B
                          UNO     decfsz REG3
                                  goto UNO          A
                                  decfsz REG2
                                  goto DOS
                                  decfsz REG1
                                  goto TRES
                                  retlw 10


                               Figura 3. Rutina de retardo

Curso Básico de Microcontroladores PIC •                                                    67
Capítulo V. Programación en PIC. Los primeros pasos

Retardo. En la figura 3 se muestra la rutina de retardo mencionada anterior-
mente. Debido a la gran velocidad con la cual se ejecutan las instrucciones en
el microcontrolador (un millón por segundo, con un reloj de 4 MHz), es nece-
sario efectuar, con mucha frecuencia, retardos que nos permitan observar al-
gunos fenómenos lentos, tales como el encendido de LEDs, lámparas, relés,
etc. Tales retardos se logran cargando, con un determinado valor, posiciones
auxiliares de memoria RAM o registros, decrementándolos posteriormente y
consultando el momento en el cual llegan a cero; dependiendo del resultado de
la consulta, el programa puede dirigirse a dos sitios diferentes, como puede
observarse en el diagrama de flujo de la figura 4. En ella se han resaltado tres
pequeños bloques, que corresponden a una sola instrucción en la familia del
microcontrolador PIC: decfsz. Esta instrucción decrementa un registro y con-
sulta si el contenido de éste ha llegado a cero; si es así, omite la siguiente
instrucción; si no lo es, la ejecuta. Esto permite implementar bifurcaciones de
acuerdo al cumplimiento de una condición.

                                            EMPEZAR



                                      Cargar REG1 con valor 1

                                          TRES

                                      Cargar REG2 con valor 2

                                           DOS

                                      Cargar REG3 con valor 3

                                           UNO

                                           DEC REG3



                                                                No
                                           es REG3 = 0
                                                ?
                                                  Si


                                           DEC REG2



                                                                No
                                           es REG2 = 0
                                                ?
                                                  Si


                                            DEC REG1




                                                                No
                                           es REG1 = 0
                                                ?
                                                  Si


                                            TERMINAR




                Figura 4. Diagrama de flujo de la rutina de retardo

68                                                Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos

    Para conocer el tiempo que se tarda toda la rutina, podemos hacer algunos cálcu-
los, siempre expresando las cantidades en términos de los ciclos de instrucción y
para ello debemos saber cuanto tarda cada una de ellas. Afortunadamente, todas las
instrucciones de los microcontroladores PIC se ejecutan en un ciclo, excepto cuan-
do se realiza un salto, en cuyo caso la instrucción utiliza dos ciclos.

    Con lo anterior, debemos empezar por la rutina más interna, marcada con la letra
A en la figura 3. Mientras que no se cumpla la condición, la instrucción decfsz reg3
consume 1 ciclo y la instrucción goto se ejecuta en dos ciclos; esta rutina interna
gasta entonces tres ciclos, ejecutándose un número de veces que está dado por el
valor contenido en el registro valor3, en este caso el valor hexadecimal 50 (observe
la definición de éste en la cabecera y recuerde que por defecto se asumen cantidades
hexadecimales). El número total de ciclos consumidos por esta rutina será entonces
el producto:

    Número ciclos A         = 3 x valor3
                            = 3 x 80 (el decimal de 50Hex)
                            = 240 ciclos de instrucción

    Haciendo un análisis similar, la subrutina B (que abarca la subrutina A) tendrá
245 (1 + 1 + 240 + 1 + 2) ciclos. Aquí el total de ciclos consumidos depende del
registro valor2 y ella se tardará:

    Número ciclos B         = 245 x valor2
                            = 245 x 64 (el decimal de 40Hex)
                            = 15860 ciclos de instrucción

    De igual manera, podemos considerar que para la subrutina C (que abarca tanto
la A como la B) se tienen un número de ciclos de 15865 (15860 + 5); considerando
que el número total de ciclos depende del registro valor1, se tiene:

    Número ciclos C         = 15865 x valor1
                            = 15865 x 48 (el decimal de 30Hex)
                            = 761520 ciclos de instrucción

    Podemos emplear una expresión algebráica para lo anterior, resultando más fácil
realizar los cálculos:

    Total Ciclos = ((valor3*3 + 5)*valor2 + 5)*valor1

    En este caso, la constante 5 corresponde al número de ciclos que están utilizando
las instrucciones adicionales en las rutinas B y C, mientras que valor1, valor2 y
valor3 corresponden a las constantes tomadas de la cabecera del programa. Si quie-
re conocer el tiempo empleado por esta rutina, debe saber que un ciclo de instruc-
ción corresponde a cuatro ciclos del reloj oscilador; si la frecuencia del oscilador es
de 4 MHz, la frecuencia del reloj de instrucciones será entonces de 1 MHz, en cuyo

Curso Básico de Microcontroladores PIC •                                                    69
Capítulo V. Programación en PIC. Los primeros pasos

caso el ciclo de instrucción es de 1 microsegundo. Para el ejemplo anterior, se ten-
dría entonces que la rutina de retardo se tardaría un poco más de 765520 µs, más que
suficientes para visualizar el encendido y apagado de un LED.

   Cuando se requiere gran precisión en el cumplimiento de rutinas de tiempo, se
acude a un oscilador a cristal para el oscilador del microcontrolador. Cuando la
precisión no es una preocupación, se puede acudir a una sencilla red RC, para pro-
porcionar la frecuencia del oscilador. En este último caso, la frecuencia de oscila-
ción dependerá de las tolerancias de la resistencia y del condensador, al igual que la
temperatura y el nivel de voltaje de la alimentación. En caso de implementar una red
RC, el fabricante sugiere para la resistencia valores comprendidos entre 5 K y 100 k,
y para el condensador un valor mínimo de 20 pF.

End. Aunque ésta no es propiamente una instrucción, sí es necesaria para el ensam-
blador; si éste no la encuentra, emite un mensaje de error.

    Así, estaría descrito todo el programa. Después de escribirlo en el editor de tex-
tos deberá ensamblarlo, con lo cual se genera el código objeto propio del microcon-
trolador. Si no ha cometido errores de sintaxis, estará listo para fijar este código en
el microcontrolador por medio del sistema de desarrollo; para éste último paso debe
asegurarse que los fusibles posean la siguiente configuración:

     Osc                    XT
     Watchdog               OFF
     CP                     OFF
     Power-Up-Timer         ON

Ejercicio 2: Secuenciador con cuatro LED’s
    Este ejercicio, con un número mayor o menor de LEDs, es de gran utilidad para
desarrollar habilidades en el campo de la programación. Nuevamente basamos el
ejercicio en el entrenador PIC K-061, cuyo diagrama se encuentra al final del capí-
tulo II “Conozca el PIC16C84”.

    Se trata de encender cuatro LEDs de manera consecutiva, sin que permanezcan
encendidos dos de ellos simultáneamente. Si se observa el diagrama del entrenador,
los ocho pines del puerto B han sido dispuestos como salidas, con el objeto de contro-
lar LED’s, necesitando sólo una resistencia en serie con éste para limitar la corriente.
El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena canti-
dad de corriente, suficiente para proporcionar iluminación adecuada a los LED's.

    En la figura 5 se tiene el diagrama de flujo correspondiente para la imple-
mentación del programa. El diagrama muestra que este es un proceso que, des-
pués de iniciado, no tiene una terminación; cada vez que se termina la secuencia
se vuelve a iniciar, a menos que apliquemos un reset al dispositivo o apaguemos
la fuente de alimentación.

70                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos

                                               EMPEZAR




                                             Rotación = 01




                                           Sacar por el puerto




                                            Rutina de retardo




                                           Rotar a la izquierda




                                               Fin de la        No
                                               Rotación
                                                   ?


                                                     Si




                     Figura 5. Diagrama de flujo del ejercicio 2

   Para el programa son válidas las anotaciones hechas al anterior, salvo el hecho
que se está utilizando una posición adicional de memoria RAM para almacenar un
valor que corresponde al estado de la rotación presente en el puerto; ésta es la posi-
ción de memoria 0A, a la cual hemos llamado rota que pretende, también, ser de
más fácil recordación y manejo que el número hexadecimal 0A.

    En esta oportunidad, la parte que conviene resaltar es la rotación a la izquierda
del registro rota, para ser sacado por el puerto B; si después de la rotación, el
quinto bit aún no es uno, quiere decir que la rotación todavía no ha llegado a su
fin, puesto que el ejercicio se hace sólo con cuatro LED’s. La instrucción que
consulta la condición es btfss rota,4; si ella se cumple (el bit es uno), el programa
omite la instrucción goto hol y ejecuta la instrucción goto otra, empezando de
nuevo la secuencia; si no se cumple la condición (este bit es cero), el programa
ejecuta la instrucción goto hol, procediendo a sacar el dato rotado por el puerto B.
La rutina de retardo es la misma del ejemplo anterior; por lo tanto el tratamiento
hecho a los registros y valores es idéntico.

   Al momento de fijar este programa en el microcontrolador, como en el caso
anterior, se deben tener los fusibles configurados de la siguiente manera:

    Osc                     XT
    Watchdog                OFF
    CP                      OFF
    Power-Up-Timer          ON

Curso Básico de Microcontroladores PIC •                                                             71
Capítulo V. Programación en PIC. Los primeros pasos

  ;==============================================================
  ;Este programa maneja una secuencia de cuatro LED's

  list     p=16c84          ;se utiliza el PIC16C84
  ;———————————————————————————————------------------------------

  ptob        equ          06         ;el puerto b ésta en la dirección 06 de la
                                      ;memoria RAM
  rota        equ          0a         ;aquí se asignan nombres para reemplazar los
                                      ;registros
  reg1     equ      0b
  reg2     equ      0c
  reg3     equ      0d
  valor1   equ      30      ;aquí se asignan nombres a los valores
  valor2   equ      40      ;constantes
  valor3   equ      10
  ;———————————————————————————————-------------------------------------

  reset       org          0       ;el vector de reset es la dirección 00 de la
                                   ;memoria de programa
              goto         inicio ;se envía al inicio del programa
              org          7       ;empieza el programa en la posición de
                                   ;memoria 7
  inicio      movlw        00      ;se carga el registro W con el valor 00
              tris         ptob    ;se programan los pines del puerto B como
                                   ;salidas
  otra        movlw        01      ;se carga el registro W con el valor 01
              movwf        rota    ;se dispone el dato para la rotación
  hol         movf         rota,0 ;mueve el contenido del registro rota al
                                   ;registro W
              movwf        ptob    ;enciende el LED correspondiente
              call         retardo ;se mantiene el LED encendido por un momento
              rlf          rota    ;desplaza el contenido del registro un bit
                                   ;a la izquierda
              btfss        rota,4 ;probar si el quinto bit se activa
              goto         hol     ;si no ha llegado al quinto bit se enciende
                                   ;el LED que sigue
              goto         otra    ;si ya se encendió el último LED se inicia
                                   ;nuevamente la secuencia
                                   ;esta rutina genera un tiempo de espera
  retardo     movlw        valor1 ;se carga el registro W con el número valor1,
                                   ;es decir con 30
              movwf        reg1    ;se traslada ese número al registro reg1
  tres        movlw        valor2 ;se carga el registro W con el número valor2,
                                   ;es decir con 40
              movwf        reg2    ;se traslada ese número al registro reg2
  dos         movlw        valor3 ;se carga el registro W con el número valor3,
                                   ;es decir con 50
              movwf        reg3    ;se traslada ese número al registro reg3
  uno         decfsz       reg3    ;se decrementa el registro reg3 y si el valor
                                   ;es cero se salta a la
              goto         uno     ;instrucción siguiente, si no es cero se
                                   ;continua decrementando
           decfsz          reg2    ;igual que el anterior
           goto            dos
           decfsz          reg1    ;igual que el anterior
           goto            tres
           retlw           0
           end
  ;=============================================================

          Figura 6. Programa secuenciador con 4 LED’s (ejer2.asm)

72                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos

Ejercicio 3: Leer los pulsadores y encender
el LED correspondiente
   Los ejercicios anteriores sólo han utilizado uno de los puertos como salida, no apro-
vechando las posibilidades de lectura de estos. Este ejercicio pretende entonces iniciar-
nos en la lectura de los puertos y tomar decisiones con respecto al valor obtenido de ella.

    En el diagrama esquemático del entrenador K-061 se puede observar que hay
dos pulsadores conectados al puerto A del microcontrolador, cada vez que se oprima
uno de estos se debe encender el LED correspondiente del puerto B. Las teclas de
lectura están conectadas a fuente, a través de resistencias de 4.7K, así cuando ningu-
na de ellas esté presionada, la lectura del puerto A será 03. En la figura 8 se tiene el
diagrama de flujo correspondiente a este proceso, el cual servirá de base para la
realización del programa respectivo.


                                             EMPEZAR




                                           Leer pulsadores




                                      Escribir último dato




                     Figura 7. Diagrama de flujo del ejercicio 3

    Para este tercer programa también son válidas algunas de las anotaciones
hechas al primero, salvo que al registro 02 o contador de programa se le ha dado
el nombre de pc; a un registro auxiliar para almacenar el último estado registra-
do de los pulsadores se le ha denominado leido (posición de memoria RAM 0A).
Al fijar este programa en el microcontrolador, hemos utilizado la siguiente con-
figuración de fusibles:

    Osc                     XT
    Watchdog                OFF
    CP                      OFF
    Power-Up-Timer          ON


    No hacemos ninguna anotación al programa, ya que consideramos que con los
dos anteriores se tienen bases para éste, además de los comentarios realizados al
final de cada instrucción.

Curso Básico de Microcontroladores PIC •                                                         73
Capítulo V. Programación en PIC. Los primeros pasos


 ;=====================================================================
 ;Este programa lee dos pulsadores y enciende dos LED's, según el que se oprima
 ;se encenderá el LED correspondiente

 list    p=16c84           ;se utiliza el PIC16C84
 ;————————————————————————————————————————————————————————————---------

 pc         equ         02 ;dirección del contador de programa
 ptoa       equ         05 ;el puerto a está en la dirección 05 de la
                           ;memoria RAM
 ptob    equ      06       ;el puerto b está en la dirección 06 de la
                           ;memoria RAM
 leido   equ      0a       ;aquí se asignan nombres para reemplazar los
                           ;registros
 ;————————————————————————————————————————————————————————————-------
 reset   org      0        ;el vector de reset es la dirección 00 de la
                           ;memoria de programa
         goto     inicio   ;se envía al inicio del programa
         org      7        ;empieza el programa en la posición de
                           ;memoria 7
 inicio movlw     0f       ;se carga el registro W con el valor 0f
         tris     ptoa     ;se programan los pines del puerto A como
                           ;entradas
         movlw    00       ;se carga el registro W con el valor 00
         tris     ptob     ;se programan los pines del puerto B como
                           ;salidas
         movlw    00       ;se carga el registro W con el valor 00
         movwf    leido    ;se dispone el dato en alto para encender los
                           ;LED's
 hol     movf     leido,0 ;mueve el contenido del registro leido al
                           ;registro W
         movwf    ptob     ;enciende el LED correspondiente
         movf     ptoa,0   ;lee el puerto A y guarda el dato en el
                           ;registro W
         xorlw    03       ;invierte el dato que leyó
         andlw    03       ;deja solamente los dos bits de interés
         addwf    pc       ;el valor que se leyó se suma al contador de
                           ;programa
         goto     hol      ;si no oprimen tecla, regresa a leer
         nop               ;no hace nada
         nop
         movwf    leido    ;carga valor que leyó en el registro leido
         goto     hol      ;actualiza el dato de salida en el puerto B y
                           ;vuelve a leer
         end
 ;=============================================================

        Figura 8. Programa lector de teclas del ejercicio 3 (ejer3.asm)

Programa avanzado utilizando el entrenador K-061
   Este ejercicio es una pequeña muestra de las posibilidades que se tienen
cuando se usa un microcontrolador PIC; además utiliza los recursos que brin-
da el entrenador K-061. Este ejemplo es un poco avanzado, pero se da para
animar al lector a seguir adelante y a estudiarlo para comprender cada una de
sus partes. Si el lector lo prefiere lo puede dejar para practicar al final del
nivel básico.

74                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos


  ;================================================================
  ;Este programa realiza una secuencia luminosa en los LED's, al llegar al
  ;último se emite un sonido. Además, cuando se oprime una tecla se cambia
  ;el sentido de giro de la secuencia

  list        p=16c84

  ;-------------------------------------------------------------------

  ;las que vienen a continuación son una serie de equivalencias, las
  ;cuales toma el ensamblador y las reemplaza por el número asociado, en
  ;aquellos sitios en los cuales se hace referencia


  carry       equ        0             ;estas hacen referencia a posiciones de bits
  cero        equ        2             ;
  bandera     equ        6             ;
  rtcc        equ        1             ;registros que se utilizan en el programa
  pc          equ        2             ;
  sta         equ        3             ;
  port_a      equ        5             ;
  port_b      equ        6             ;
  rota        equ        18h           ;
  cuenta      equ        19h           ;
  tiempo      equ        1ah           ;
  reg1        equ        1bh           ;
  reg2        equ        1ch           ;
  reg3        equ        1dh

  ;-------------------------------------------------------------------


  inicio      bcf        sta, bandera       ;limpiar bandera desplazamiento
              movlw      0                  ;cargar a w con cero
              tris       port_b             ;puerto b como salidas
              movlw      3                  ;cargar a w con 3
              tris       port_a             ;dos líneas bajas como entradas
              movlw      0feh               ;disponer dato para la rotación
              movwf      rota               ;cargar en registro 18
              movlw      1                  ;dato del led encendido
              movwf      tiempo             ;carga en registro 1a

  ceros       movlw      2                  ;cargar a w con número dos
              movwf      reg3               ;y luego al registro 1d

  uno         movf       port_a,w           ;leer puerto a
              andlw      3                  ;elimina la parte alta
              xorlw      3                  ;invierte el dato
              addwf      pc                 ;se suma al pc para salto
              goto       dos_a              ;si no hubo tecla
              goto       siete_a            ;si tecla derecha
              goto       siete_b            ;si tecla izquierda
              goto       siete_c            ;si las dos teclas

  dos_a       decfsz     reg1               ;decrementa     registro y salta si cero
              goto       uno                ;si no cero     lee de nuevo teclado
  dos_b       decfsz     reg2               ;decrementa     registro y salta si cero
              goto       uno                ;si no cero     lee de nuevo teclado
  dos_c       decfsz     reg3               ;decrementa     registro y salta si cero
              goto       uno                ;si no cero     lee de nuevo teclado



Curso Básico de Microcontroladores PIC •                                                     75
Capítulo V. Programación en PIC. Los primeros pasos




  dos_d       bsf        sta,carry    ;activa o coloca carry en 1
              btfsc      sta, bandera ;salta si bandera está desactivada
              goto       cuatro       ;si activada bifurca a cuatro

  tres        rlf        rota              ;rota a la izquierda registro de leds
              btfss      sta,carry         ;salta si carry está en 1
              goto       tres_b            ;si es cero -limite rotación- va a tres_b
  tres_a      incf       tiempo            ;incrementa registro del led encendido
              goto       seis              ;bifurca a para sacar dato

  tres_b      rlf        rota              ;rota una vez más registro de leds
              movlw      1                 ;carga a w con 1
              movwf      tiempo            ;para indicar primer led encendido
              call       pito              ;señal sonora por límite rotación
              goto       seis              ;bifurca para sacar dato

  cuatro   rrf           rota              ;rota a la derecha registro de leds
           btfss         sta,carry         ;salta si carry está en uno
           goto          cuatro_b          ;si cero -límite rotación- va a cuatro_b
  cuatro_a decf          tiempo            ;decrementa registro led encendido
            goto         seis              ;bifurca para sacar dato

  cuatro_b rrf           rota              ;rota una vez más registro de leds
            movlw        8                 ;carga a w con 8
            movwf        tiempo            ;para indicar último led encendido
  cinco     call         pito              ;señal sonora por límite rotación
            goto         seis              ;bifurca para sacar dato

  seis         movf      rota,w            ;carga a w con dato led a encenderse
               movwf     port_b            ;escribe dato en el puerto b
               goto      ceros             ;reinicia para ir por siguiente dato

  siete_a     bsf        sta,bandera       ;activa bandera -rotación derecha-
               goto      dos_a             ;bifurca a leer el teclado

  siete_b     bcf        sta,bandera       ;desactiva bandera -rotación izquierda-
               goto      dos_a             ;bifurca a leer el teclado

  siete_c     movf       tiempo,w          ;carga valor led encendido en w
               rlf       tiempo            ;multiplica por dos (valor x 2)
               rlf       tiempo            ;multiplica por dos (valor x 4)
               rlf       tiempo            ;multiplica por dos (valor x 8)
               addwf     tiempo            ;se suma una vez más (valor x 9)
               addwf     tiempo            ;se suma una vez más (valor x 10)

  ocho        comf       tiempo,w          ;se invierte el dato y se carga en w
               movwf     port_b            ;se saca tiempo faltante en los leds
               clrf      cuenta            ;se limpia registro
               call      base              ;se llama base de un segundo
               decfsz    tiempo            ;decrementa el tiempo y salta si cero
               goto      ocho              ;si no cero vuelve a mostrar tiempo
               movlw     0ffh              ;carga a w con b’11111111'
               movwf     port_b            ;para apagar todos los leds
  nueve       call       pito              ;se llama a señal sonora
               movlw     4                 ;b’0100' carga a w con 4
               movwf     port_a            ;para activar el relé
               sleep                       ;ir al modo de reposo




76                                               Curso Básico de Microcontroladores PIC •
Capítulo V. Programación en PIC. Los primeros pasos


  pito        movlw      8                 ;b’1000' cargar a w
              movwf      port_a            ;para activar el pito
              movlw      d’110'            ;cargar con el decimal 110
              movwf      cuenta            ;para que el pito
              call       base              ;dure 1 segundo/(125-110)

              clrf       port_a            ;dejar el puerto en b’0000'
               retlw     3                 ;regresar de la interrupción

  base        clrf       rtcc              ;dejar en cero el rtcc
               movlw     5                 ;cargar a w con b'101', para cargar el
              option                       ;rtcc interno con una preescala de 64

  bas         movf       rtcc,w            ;leer el rtcc
              xorlw      d’125'            ;comparar con el decimal 125
              btfss      sta,cero          ;si es igual salta
              goto       bas               ;si no igual, vuelve a leer
              incf       cuenta            ;incrementa la cuenta
              movf       cuenta,w          ;carga a w con valor de cuenta
              xorlw      d’125'            ;comparar con el decimal 125
              btfss      sta,cero          ;si es igual salta
              goto       base              ;si no igual, vuelve a configurar cuenta
              retlw      4                 ;al terminar regresa

              end

  ;————————————————————————————————————————————————————------------
  ;        Fusibles de programación

  ;        Osc                XT
  ;        Watchdog           OFF
  ;        CP                 OFF
  ;        Power-Up-Timer     ON
  ;=====================================================================
  ;===========================================================



                       Figura 9. Programa avanzado utilizando
                         el entrenador K-061(avanzado.asm)

    Los ejercicios descritos en este capítulo se encuentran en el disquete que acom-
paña al curso, tanto el listado con extensión .asm, como el archivo ensamblado con
extensión .hex. El lector puede, como ejercicio, utilizarlos para comprobar su fun-
cionamiento y, después, hacerles los cambios que desee para modificar los tiempos
de retardo, los pines de salida, etc., con el fin de profundizar en su estudio.




Curso Básico de Microcontroladores PIC •                                                       77
Capítulo V. Programación en PIC. Los primeros pasos




78                                               Curso Básico de Microcontroladores PIC •

Más contenido relacionado

La actualidad más candente

Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupcionesLuis Zurita
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4Luis Zurita
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
 
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CLuis Zurita
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionLuis Zurita
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Hamiltonn Casallas
 
Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4Luis Zurita
 
Juego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87xJuego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87xConstructora Kaizen
 
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Anllel Cardenas Yllanes
 
Curso Micro Tema 5
Curso Micro Tema 5Curso Micro Tema 5
Curso Micro Tema 5Luis Zurita
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Hamiltonn Casallas
 
Taller de microcontroladores i
Taller de microcontroladores iTaller de microcontroladores i
Taller de microcontroladores iRuderocker Billy
 
Curso de microcontroladores capitulo 10
Curso de microcontroladores capitulo 10Curso de microcontroladores capitulo 10
Curso de microcontroladores capitulo 10Hamiltonn Casallas
 
Organizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoOrganizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoHarold Torres
 
practica digitales victor navea
practica digitales victor naveapractica digitales victor navea
practica digitales victor naveavictornavea
 
Dudas printf()
Dudas printf()Dudas printf()
Dudas printf()bad_666
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Hamiltonn Casallas
 

La actualidad más candente (20)

Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupciones
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4
 
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
 
Power
PowerPower
Power
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E Interrupcion
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09
 
Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4
 
Juego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87xJuego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87x
 
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
 
Curso Micro Tema 5
Curso Micro Tema 5Curso Micro Tema 5
Curso Micro Tema 5
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07
 
Taller de microcontroladores i
Taller de microcontroladores iTaller de microcontroladores i
Taller de microcontroladores i
 
Curso de microcontroladores capitulo 10
Curso de microcontroladores capitulo 10Curso de microcontroladores capitulo 10
Curso de microcontroladores capitulo 10
 
Atmel
AtmelAtmel
Atmel
 
Organizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoOrganizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamiento
 
practica digitales victor navea
practica digitales victor naveapractica digitales victor navea
practica digitales victor navea
 
Dudas printf()
Dudas printf()Dudas printf()
Dudas printf()
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
 

Similar a Picprimerospasos

Programación del microcontrolador
Programación del microcontroladorProgramación del microcontrolador
Programación del microcontroladorJuan Gamboa P
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosmarco calderon layme
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersmarco calderon layme
 
Entradas salidas digitales 2015
Entradas salidas digitales 2015Entradas salidas digitales 2015
Entradas salidas digitales 2015David Narváez
 
Ejercicio pic assembler
Ejercicio pic assemblerEjercicio pic assembler
Ejercicio pic assemblerAlexis Rivera
 
Curso MPLAB pic 3 empezando con el programa 9p
Curso MPLAB pic 3 empezando con el programa  9pCurso MPLAB pic 3 empezando con el programa  9p
Curso MPLAB pic 3 empezando con el programa 9pRuderocker Billy
 
Laboratorio de Microcomputadoras - Práctica 04
 Laboratorio de Microcomputadoras - Práctica 04 Laboratorio de Microcomputadoras - Práctica 04
Laboratorio de Microcomputadoras - Práctica 04Cristian Ortiz Gómez
 
Laboratorio de Microcomputadoras - Práctica 05
 Laboratorio de Microcomputadoras - Práctica 05 Laboratorio de Microcomputadoras - Práctica 05
Laboratorio de Microcomputadoras - Práctica 05Cristian Ortiz Gómez
 
2. entradas salidas digitales
2. entradas salidas digitales2. entradas salidas digitales
2. entradas salidas digitalesDavid Narváez
 
U4 control-logico-y-controladores-logicos-programables
U4 control-logico-y-controladores-logicos-programablesU4 control-logico-y-controladores-logicos-programables
U4 control-logico-y-controladores-logicos-programableskarincoarite1234
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorDaniel Pardo
 
Introducpic2
Introducpic2Introducpic2
Introducpic2conalep
 
Introducpic
IntroducpicIntroducpic
Introducpicconalep
 
Laboratorio de Microcomputadoras - Práctica 03
 Laboratorio de Microcomputadoras - Práctica 03 Laboratorio de Microcomputadoras - Práctica 03
Laboratorio de Microcomputadoras - Práctica 03Cristian Ortiz Gómez
 

Similar a Picprimerospasos (20)

Proye84
Proye84Proye84
Proye84
 
Programación del microcontrolador
Programación del microcontroladorProgramación del microcontrolador
Programación del microcontrolador
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltos
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timers
 
Entradas salidas digitales 2015
Entradas salidas digitales 2015Entradas salidas digitales 2015
Entradas salidas digitales 2015
 
Tutorial ii proyectos en basic proton
Tutorial ii   proyectos en basic protonTutorial ii   proyectos en basic proton
Tutorial ii proyectos en basic proton
 
Microcontrolador 1 prender y apagar un led
Microcontrolador 1 prender y apagar un ledMicrocontrolador 1 prender y apagar un led
Microcontrolador 1 prender y apagar un led
 
Ejercicio pic assembler
Ejercicio pic assemblerEjercicio pic assembler
Ejercicio pic assembler
 
Curso MPLAB pic 3 empezando con el programa 9p
Curso MPLAB pic 3 empezando con el programa  9pCurso MPLAB pic 3 empezando con el programa  9p
Curso MPLAB pic 3 empezando con el programa 9p
 
Laboratorio de Microcomputadoras - Práctica 04
 Laboratorio de Microcomputadoras - Práctica 04 Laboratorio de Microcomputadoras - Práctica 04
Laboratorio de Microcomputadoras - Práctica 04
 
Laboratorio de Microcomputadoras - Práctica 05
 Laboratorio de Microcomputadoras - Práctica 05 Laboratorio de Microcomputadoras - Práctica 05
Laboratorio de Microcomputadoras - Práctica 05
 
Tarea final
Tarea finalTarea final
Tarea final
 
2. entradas salidas digitales
2. entradas salidas digitales2. entradas salidas digitales
2. entradas salidas digitales
 
U4 control-logico-y-controladores-logicos-programables
U4 control-logico-y-controladores-logicos-programablesU4 control-logico-y-controladores-logicos-programables
U4 control-logico-y-controladores-logicos-programables
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
 
Adc fpga
Adc fpgaAdc fpga
Adc fpga
 
Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
Laboratorio de Microcomputadoras - Práctica 03
 Laboratorio de Microcomputadoras - Práctica 03 Laboratorio de Microcomputadoras - Práctica 03
Laboratorio de Microcomputadoras - Práctica 03
 
Resumen
ResumenResumen
Resumen
 

Más de MicroPart

Instrucciones pic16 f84
Instrucciones pic16 f84Instrucciones pic16 f84
Instrucciones pic16 f84MicroPart
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84AMicroPart
 
Tutorial MPLAB
Tutorial MPLABTutorial MPLAB
Tutorial MPLABMicroPart
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PICMicroPart
 
como usar MPLAB
como usar MPLABcomo usar MPLAB
como usar MPLABMicroPart
 

Más de MicroPart (6)

Instrucciones pic16 f84
Instrucciones pic16 f84Instrucciones pic16 f84
Instrucciones pic16 f84
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84A
 
Tutorial MPLAB
Tutorial MPLABTutorial MPLAB
Tutorial MPLAB
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
 
como usar MPLAB
como usar MPLABcomo usar MPLAB
como usar MPLAB
 
Manual Pics
Manual PicsManual Pics
Manual Pics
 

Último

codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfResolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 

Último (20)

codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfResolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 

Picprimerospasos

  • 1. Capítulo V. Programación en PIC. Los primeros pasos Capítulo V Programación en PIC Los primeros pasos • Encender y apagar un LED • Secuenciador con cuatro LED's • Leer los pulsadores y encender el LED correspondiente • Programa avanzado utilizando el entrenador K-061 Curso Básico de Microcontroladores PIC • 63
  • 2. Capítulo V. Programación en PIC. Los primeros pasos 64 Curso Básico de Microcontroladores PIC •
  • 3. Capítulo V. Programación en PIC. Los primeros pasos Como la práctica hace al maestro, veremos que con la realización de ejemplos prácticos se pueden despejar muchas dudas. Los ejercicios se basan en el entrenador PIC K-061 de CEKIT, cuyo diagrama esquemático se encuentra al final del capítulo II “Conozca el PIC16C84”. Aunque lo más conveniente es tener el entrenador, usted puede ensamblar los circuitos equivalentes en un protoboard. Ejercicio 1: Encender y apagar un LED Este es el ejercicio básico por excelencia y ayuda a todas las personas a perder el miedo al manejo del microcontrolador. Si se observa el diagrama del entrenador, los ocho pines del puerto B han sido dispuestos como salidas con el objeto de controlar LED’s, necesitando sólo una resistencia en serie con éste para limitar la corriente. El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena cantidad de corriente, suficiente para proporcionar iluminación adecuada al LED. Para encender el primer LED, tiene que colocarse un estado lógico alto en el pin 6 del microcontrolador , mientras que un estado bajo hará que éste se apague; esto se debe al transistor interno del ULN2803 que invierte la señal. La función del micro- controlador será entonces sencilla: alternar estados lógicos altos y bajos en su pin RB0 con un retardo tal, que nos permita visualizar el efecto. Para una mejor com- prensión del proceso se muestra en la figura 1 el diagrama de flujo respectivo, el mismo que nos sirve para la realización del programa. EMPEZAR Encabezado Inicialización Encender LED Rutina de retardo Apagar LED Rutina de retardo Figura 1. Diagrama de flujo del primer ejercicio. Curso Básico de Microcontroladores PIC • 65
  • 4. Capítulo V. Programación en PIC. Los primeros pasos ;=================================================================== Este programa prende y apaga un LED list p=16c84 ;se utiliza el PIC16C84 ;-------------------------------------------------------------- ptob equ 06 ;el puerto b está en la dirección 06 de la ;memoria RAM reg1 equ 0b ;aquí se asignan nombres para reemplazar los ;registros reg2 equ 0c Encabezado reg3 equ 0d valor1 equ 30 ;aquí se asignan nombres a los valores valor2 equ 40 ;constantes valor3 equ 50 ;———————————————————————————————————————————————————————————— reset org 0 ;el vector de reset es la dirección 00 goto inicio ;se envía al inicio del programa org 7 ;empieza el programa en la posición de ;memoria 7 Iniciación inicio movlw 00 ;se carga el registro W con el valor 00 tris ptob ;se programan los pines del puerto B como ;salidas otra movlw 01 ;se carga el registro W con el valor 01 movwf ptob ;se pasa ese valor al puerto B para encender Encender LED ;el LED que se encuentra conectado al pin RB0 call retardo ;se mantiene el LED encendido por un momento Llamar retardo movlw 00 ;se carga el registro W con el valor 00 movwf ptob ;se carga el registro puerto B con cero para Apagar LED ;apagar el LED call retardo ;se mantiene el LED apagado por un momento Llamar retardo goto otra ;se continúa el programa en otra, es decir que ;se queda ejecutando la misma acción Volver a encender ;esta rutina genera un tiempo de espera el LED retardo movlw valor1 ;se carga el registro W con el número valor1, ;es decir con 30 movwf reg1 ;se traslada ese número al registro reg1 tres movlw valor2 ;se carga el registro W con el número valor2, ;es decir con 40 movwf reg2 ;se traslada ese número al registro reg2 dos movlw valor3 ;se carga el registro W con el número valor3, ;es decir con 50 Rutina de movwf reg3 ;se traslada ese número al registro reg3 retardo uno decfsz reg3 ;se decrementa el registro reg3 y si el valor ;es cero se salta a la goto uno ;instrucción siguiente, si no es cero se ;continúa decrementando decfsz reg2 ;igual que el anterior goto dos decfsz reg1 ;igual que el anterior goto tres retlw 0 end Final del ;==================================================================== programa Figura 2. Programa que enciende y apaga un LED (ejer1.asm) Consideremos este primer programa; en él se pueden observar una serie de lí- neas de cabecera, antes de la etiqueta inicio. Ellas, como ya lo habíamos menciona- do, son una herramienta que nos proporciona el ensamblador para asignar nombres 66 Curso Básico de Microcontroladores PIC •
  • 5. Capítulo V. Programación en PIC. Los primeros pasos lógicos, fácilmente memorizables, a algunas posiciones de memoria, bits, puertos y registros para utilizar éstos en el cuerpo principal del programa; el ensamblador se encarga de remplazar estos nombres por los valores numéricos correspondientes, formando así el programa en código objeto. Con lo anterior, la dirección 06 corresponde al puerto B, al cual hemos llamado ptob, de más fácil recordación que un número. De igual manera tres posiciones auxiliares de memoria: la 0B, 0C y 0D, que contendrán valores a decrementar para establecer una rutina de retardo, las hemos llamado reg1, reg2 y reg3. También se han utilizado tres cantidades a las cuales les hemos asignado nombres, con el objeto de facilitar el manejo ya que, al momento de ensamblar el programa, podemos rem- plazarlos rápidamente si ellos no eran los adecuados.Veamos ahora algunos bloques de instrucciones más detalladamente: Inicio. La primera instrucción carga el registro W con 0 para configurar, con la segunda instrucción (tris), el puerto B como salidas. Se debe recordar que un cero, en el registro de trabajo W, configura el pin respectivo como salida, mien- tras que un uno lo hace como entrada. Esta instrucción se da, por lo regular una sola vez por puerto. Otra. Aquí se carga el registro de trabajo W con uno, con el objeto de sacar esta- dos lógicos altos por el pin RB0 del puerto B, siendo este estado el encargado de encender el LED. Después de configurado el puerto, éste puede ser tratado como cualquier otro registro, admitiendo transferencia de datos hacia (escribir sobre el puerto) y desde (leer el puerto) el registro de trabajo W. También se pueden reali- zar operaciones lógicas, de rotación, etc. La tercera línea hace un llamado a una rutina de retardo, la cual se explicará más adelante, retornando al programa prin- cipal tan pronto ésta es ejecutada. La parte que sigue carga el registro de trabajo W con el literal cero, el cual se sacará por el puerto B, con el objeto de apagar el LED. De nuevo se hace un llamado a la rutina de retardo, para visualizar el efecto; después de la ejecución de la rutina, el control del programa salta a la dirección dada por la etiqueta otra para continuar realizando la primera parte del mismo. RETARDO movlw VALOR1 movwf REG1 TRES movlw VALOR2 movwf REG2 C DOS movlw VALOR3 movwf REG3 B UNO decfsz REG3 goto UNO A decfsz REG2 goto DOS decfsz REG1 goto TRES retlw 10 Figura 3. Rutina de retardo Curso Básico de Microcontroladores PIC • 67
  • 6. Capítulo V. Programación en PIC. Los primeros pasos Retardo. En la figura 3 se muestra la rutina de retardo mencionada anterior- mente. Debido a la gran velocidad con la cual se ejecutan las instrucciones en el microcontrolador (un millón por segundo, con un reloj de 4 MHz), es nece- sario efectuar, con mucha frecuencia, retardos que nos permitan observar al- gunos fenómenos lentos, tales como el encendido de LEDs, lámparas, relés, etc. Tales retardos se logran cargando, con un determinado valor, posiciones auxiliares de memoria RAM o registros, decrementándolos posteriormente y consultando el momento en el cual llegan a cero; dependiendo del resultado de la consulta, el programa puede dirigirse a dos sitios diferentes, como puede observarse en el diagrama de flujo de la figura 4. En ella se han resaltado tres pequeños bloques, que corresponden a una sola instrucción en la familia del microcontrolador PIC: decfsz. Esta instrucción decrementa un registro y con- sulta si el contenido de éste ha llegado a cero; si es así, omite la siguiente instrucción; si no lo es, la ejecuta. Esto permite implementar bifurcaciones de acuerdo al cumplimiento de una condición. EMPEZAR Cargar REG1 con valor 1 TRES Cargar REG2 con valor 2 DOS Cargar REG3 con valor 3 UNO DEC REG3 No es REG3 = 0 ? Si DEC REG2 No es REG2 = 0 ? Si DEC REG1 No es REG1 = 0 ? Si TERMINAR Figura 4. Diagrama de flujo de la rutina de retardo 68 Curso Básico de Microcontroladores PIC •
  • 7. Capítulo V. Programación en PIC. Los primeros pasos Para conocer el tiempo que se tarda toda la rutina, podemos hacer algunos cálcu- los, siempre expresando las cantidades en términos de los ciclos de instrucción y para ello debemos saber cuanto tarda cada una de ellas. Afortunadamente, todas las instrucciones de los microcontroladores PIC se ejecutan en un ciclo, excepto cuan- do se realiza un salto, en cuyo caso la instrucción utiliza dos ciclos. Con lo anterior, debemos empezar por la rutina más interna, marcada con la letra A en la figura 3. Mientras que no se cumpla la condición, la instrucción decfsz reg3 consume 1 ciclo y la instrucción goto se ejecuta en dos ciclos; esta rutina interna gasta entonces tres ciclos, ejecutándose un número de veces que está dado por el valor contenido en el registro valor3, en este caso el valor hexadecimal 50 (observe la definición de éste en la cabecera y recuerde que por defecto se asumen cantidades hexadecimales). El número total de ciclos consumidos por esta rutina será entonces el producto: Número ciclos A = 3 x valor3 = 3 x 80 (el decimal de 50Hex) = 240 ciclos de instrucción Haciendo un análisis similar, la subrutina B (que abarca la subrutina A) tendrá 245 (1 + 1 + 240 + 1 + 2) ciclos. Aquí el total de ciclos consumidos depende del registro valor2 y ella se tardará: Número ciclos B = 245 x valor2 = 245 x 64 (el decimal de 40Hex) = 15860 ciclos de instrucción De igual manera, podemos considerar que para la subrutina C (que abarca tanto la A como la B) se tienen un número de ciclos de 15865 (15860 + 5); considerando que el número total de ciclos depende del registro valor1, se tiene: Número ciclos C = 15865 x valor1 = 15865 x 48 (el decimal de 30Hex) = 761520 ciclos de instrucción Podemos emplear una expresión algebráica para lo anterior, resultando más fácil realizar los cálculos: Total Ciclos = ((valor3*3 + 5)*valor2 + 5)*valor1 En este caso, la constante 5 corresponde al número de ciclos que están utilizando las instrucciones adicionales en las rutinas B y C, mientras que valor1, valor2 y valor3 corresponden a las constantes tomadas de la cabecera del programa. Si quie- re conocer el tiempo empleado por esta rutina, debe saber que un ciclo de instruc- ción corresponde a cuatro ciclos del reloj oscilador; si la frecuencia del oscilador es de 4 MHz, la frecuencia del reloj de instrucciones será entonces de 1 MHz, en cuyo Curso Básico de Microcontroladores PIC • 69
  • 8. Capítulo V. Programación en PIC. Los primeros pasos caso el ciclo de instrucción es de 1 microsegundo. Para el ejemplo anterior, se ten- dría entonces que la rutina de retardo se tardaría un poco más de 765520 µs, más que suficientes para visualizar el encendido y apagado de un LED. Cuando se requiere gran precisión en el cumplimiento de rutinas de tiempo, se acude a un oscilador a cristal para el oscilador del microcontrolador. Cuando la precisión no es una preocupación, se puede acudir a una sencilla red RC, para pro- porcionar la frecuencia del oscilador. En este último caso, la frecuencia de oscila- ción dependerá de las tolerancias de la resistencia y del condensador, al igual que la temperatura y el nivel de voltaje de la alimentación. En caso de implementar una red RC, el fabricante sugiere para la resistencia valores comprendidos entre 5 K y 100 k, y para el condensador un valor mínimo de 20 pF. End. Aunque ésta no es propiamente una instrucción, sí es necesaria para el ensam- blador; si éste no la encuentra, emite un mensaje de error. Así, estaría descrito todo el programa. Después de escribirlo en el editor de tex- tos deberá ensamblarlo, con lo cual se genera el código objeto propio del microcon- trolador. Si no ha cometido errores de sintaxis, estará listo para fijar este código en el microcontrolador por medio del sistema de desarrollo; para éste último paso debe asegurarse que los fusibles posean la siguiente configuración: Osc XT Watchdog OFF CP OFF Power-Up-Timer ON Ejercicio 2: Secuenciador con cuatro LED’s Este ejercicio, con un número mayor o menor de LEDs, es de gran utilidad para desarrollar habilidades en el campo de la programación. Nuevamente basamos el ejercicio en el entrenador PIC K-061, cuyo diagrama se encuentra al final del capí- tulo II “Conozca el PIC16C84”. Se trata de encender cuatro LEDs de manera consecutiva, sin que permanezcan encendidos dos de ellos simultáneamente. Si se observa el diagrama del entrenador, los ocho pines del puerto B han sido dispuestos como salidas, con el objeto de contro- lar LED’s, necesitando sólo una resistencia en serie con éste para limitar la corriente. El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena canti- dad de corriente, suficiente para proporcionar iluminación adecuada a los LED's. En la figura 5 se tiene el diagrama de flujo correspondiente para la imple- mentación del programa. El diagrama muestra que este es un proceso que, des- pués de iniciado, no tiene una terminación; cada vez que se termina la secuencia se vuelve a iniciar, a menos que apliquemos un reset al dispositivo o apaguemos la fuente de alimentación. 70 Curso Básico de Microcontroladores PIC •
  • 9. Capítulo V. Programación en PIC. Los primeros pasos EMPEZAR Rotación = 01 Sacar por el puerto Rutina de retardo Rotar a la izquierda Fin de la No Rotación ? Si Figura 5. Diagrama de flujo del ejercicio 2 Para el programa son válidas las anotaciones hechas al anterior, salvo el hecho que se está utilizando una posición adicional de memoria RAM para almacenar un valor que corresponde al estado de la rotación presente en el puerto; ésta es la posi- ción de memoria 0A, a la cual hemos llamado rota que pretende, también, ser de más fácil recordación y manejo que el número hexadecimal 0A. En esta oportunidad, la parte que conviene resaltar es la rotación a la izquierda del registro rota, para ser sacado por el puerto B; si después de la rotación, el quinto bit aún no es uno, quiere decir que la rotación todavía no ha llegado a su fin, puesto que el ejercicio se hace sólo con cuatro LED’s. La instrucción que consulta la condición es btfss rota,4; si ella se cumple (el bit es uno), el programa omite la instrucción goto hol y ejecuta la instrucción goto otra, empezando de nuevo la secuencia; si no se cumple la condición (este bit es cero), el programa ejecuta la instrucción goto hol, procediendo a sacar el dato rotado por el puerto B. La rutina de retardo es la misma del ejemplo anterior; por lo tanto el tratamiento hecho a los registros y valores es idéntico. Al momento de fijar este programa en el microcontrolador, como en el caso anterior, se deben tener los fusibles configurados de la siguiente manera: Osc XT Watchdog OFF CP OFF Power-Up-Timer ON Curso Básico de Microcontroladores PIC • 71
  • 10. Capítulo V. Programación en PIC. Los primeros pasos ;============================================================== ;Este programa maneja una secuencia de cuatro LED's list p=16c84 ;se utiliza el PIC16C84 ;———————————————————————————————------------------------------ ptob equ 06 ;el puerto b ésta en la dirección 06 de la ;memoria RAM rota equ 0a ;aquí se asignan nombres para reemplazar los ;registros reg1 equ 0b reg2 equ 0c reg3 equ 0d valor1 equ 30 ;aquí se asignan nombres a los valores valor2 equ 40 ;constantes valor3 equ 10 ;———————————————————————————————------------------------------------- reset org 0 ;el vector de reset es la dirección 00 de la ;memoria de programa goto inicio ;se envía al inicio del programa org 7 ;empieza el programa en la posición de ;memoria 7 inicio movlw 00 ;se carga el registro W con el valor 00 tris ptob ;se programan los pines del puerto B como ;salidas otra movlw 01 ;se carga el registro W con el valor 01 movwf rota ;se dispone el dato para la rotación hol movf rota,0 ;mueve el contenido del registro rota al ;registro W movwf ptob ;enciende el LED correspondiente call retardo ;se mantiene el LED encendido por un momento rlf rota ;desplaza el contenido del registro un bit ;a la izquierda btfss rota,4 ;probar si el quinto bit se activa goto hol ;si no ha llegado al quinto bit se enciende ;el LED que sigue goto otra ;si ya se encendió el último LED se inicia ;nuevamente la secuencia ;esta rutina genera un tiempo de espera retardo movlw valor1 ;se carga el registro W con el número valor1, ;es decir con 30 movwf reg1 ;se traslada ese número al registro reg1 tres movlw valor2 ;se carga el registro W con el número valor2, ;es decir con 40 movwf reg2 ;se traslada ese número al registro reg2 dos movlw valor3 ;se carga el registro W con el número valor3, ;es decir con 50 movwf reg3 ;se traslada ese número al registro reg3 uno decfsz reg3 ;se decrementa el registro reg3 y si el valor ;es cero se salta a la goto uno ;instrucción siguiente, si no es cero se ;continua decrementando decfsz reg2 ;igual que el anterior goto dos decfsz reg1 ;igual que el anterior goto tres retlw 0 end ;============================================================= Figura 6. Programa secuenciador con 4 LED’s (ejer2.asm) 72 Curso Básico de Microcontroladores PIC •
  • 11. Capítulo V. Programación en PIC. Los primeros pasos Ejercicio 3: Leer los pulsadores y encender el LED correspondiente Los ejercicios anteriores sólo han utilizado uno de los puertos como salida, no apro- vechando las posibilidades de lectura de estos. Este ejercicio pretende entonces iniciar- nos en la lectura de los puertos y tomar decisiones con respecto al valor obtenido de ella. En el diagrama esquemático del entrenador K-061 se puede observar que hay dos pulsadores conectados al puerto A del microcontrolador, cada vez que se oprima uno de estos se debe encender el LED correspondiente del puerto B. Las teclas de lectura están conectadas a fuente, a través de resistencias de 4.7K, así cuando ningu- na de ellas esté presionada, la lectura del puerto A será 03. En la figura 8 se tiene el diagrama de flujo correspondiente a este proceso, el cual servirá de base para la realización del programa respectivo. EMPEZAR Leer pulsadores Escribir último dato Figura 7. Diagrama de flujo del ejercicio 3 Para este tercer programa también son válidas algunas de las anotaciones hechas al primero, salvo que al registro 02 o contador de programa se le ha dado el nombre de pc; a un registro auxiliar para almacenar el último estado registra- do de los pulsadores se le ha denominado leido (posición de memoria RAM 0A). Al fijar este programa en el microcontrolador, hemos utilizado la siguiente con- figuración de fusibles: Osc XT Watchdog OFF CP OFF Power-Up-Timer ON No hacemos ninguna anotación al programa, ya que consideramos que con los dos anteriores se tienen bases para éste, además de los comentarios realizados al final de cada instrucción. Curso Básico de Microcontroladores PIC • 73
  • 12. Capítulo V. Programación en PIC. Los primeros pasos ;===================================================================== ;Este programa lee dos pulsadores y enciende dos LED's, según el que se oprima ;se encenderá el LED correspondiente list p=16c84 ;se utiliza el PIC16C84 ;————————————————————————————————————————————————————————————--------- pc equ 02 ;dirección del contador de programa ptoa equ 05 ;el puerto a está en la dirección 05 de la ;memoria RAM ptob equ 06 ;el puerto b está en la dirección 06 de la ;memoria RAM leido equ 0a ;aquí se asignan nombres para reemplazar los ;registros ;————————————————————————————————————————————————————————————------- reset org 0 ;el vector de reset es la dirección 00 de la ;memoria de programa goto inicio ;se envía al inicio del programa org 7 ;empieza el programa en la posición de ;memoria 7 inicio movlw 0f ;se carga el registro W con el valor 0f tris ptoa ;se programan los pines del puerto A como ;entradas movlw 00 ;se carga el registro W con el valor 00 tris ptob ;se programan los pines del puerto B como ;salidas movlw 00 ;se carga el registro W con el valor 00 movwf leido ;se dispone el dato en alto para encender los ;LED's hol movf leido,0 ;mueve el contenido del registro leido al ;registro W movwf ptob ;enciende el LED correspondiente movf ptoa,0 ;lee el puerto A y guarda el dato en el ;registro W xorlw 03 ;invierte el dato que leyó andlw 03 ;deja solamente los dos bits de interés addwf pc ;el valor que se leyó se suma al contador de ;programa goto hol ;si no oprimen tecla, regresa a leer nop ;no hace nada nop movwf leido ;carga valor que leyó en el registro leido goto hol ;actualiza el dato de salida en el puerto B y ;vuelve a leer end ;============================================================= Figura 8. Programa lector de teclas del ejercicio 3 (ejer3.asm) Programa avanzado utilizando el entrenador K-061 Este ejercicio es una pequeña muestra de las posibilidades que se tienen cuando se usa un microcontrolador PIC; además utiliza los recursos que brin- da el entrenador K-061. Este ejemplo es un poco avanzado, pero se da para animar al lector a seguir adelante y a estudiarlo para comprender cada una de sus partes. Si el lector lo prefiere lo puede dejar para practicar al final del nivel básico. 74 Curso Básico de Microcontroladores PIC •
  • 13. Capítulo V. Programación en PIC. Los primeros pasos ;================================================================ ;Este programa realiza una secuencia luminosa en los LED's, al llegar al ;último se emite un sonido. Además, cuando se oprime una tecla se cambia ;el sentido de giro de la secuencia list p=16c84 ;------------------------------------------------------------------- ;las que vienen a continuación son una serie de equivalencias, las ;cuales toma el ensamblador y las reemplaza por el número asociado, en ;aquellos sitios en los cuales se hace referencia carry equ 0 ;estas hacen referencia a posiciones de bits cero equ 2 ; bandera equ 6 ; rtcc equ 1 ;registros que se utilizan en el programa pc equ 2 ; sta equ 3 ; port_a equ 5 ; port_b equ 6 ; rota equ 18h ; cuenta equ 19h ; tiempo equ 1ah ; reg1 equ 1bh ; reg2 equ 1ch ; reg3 equ 1dh ;------------------------------------------------------------------- inicio bcf sta, bandera ;limpiar bandera desplazamiento movlw 0 ;cargar a w con cero tris port_b ;puerto b como salidas movlw 3 ;cargar a w con 3 tris port_a ;dos líneas bajas como entradas movlw 0feh ;disponer dato para la rotación movwf rota ;cargar en registro 18 movlw 1 ;dato del led encendido movwf tiempo ;carga en registro 1a ceros movlw 2 ;cargar a w con número dos movwf reg3 ;y luego al registro 1d uno movf port_a,w ;leer puerto a andlw 3 ;elimina la parte alta xorlw 3 ;invierte el dato addwf pc ;se suma al pc para salto goto dos_a ;si no hubo tecla goto siete_a ;si tecla derecha goto siete_b ;si tecla izquierda goto siete_c ;si las dos teclas dos_a decfsz reg1 ;decrementa registro y salta si cero goto uno ;si no cero lee de nuevo teclado dos_b decfsz reg2 ;decrementa registro y salta si cero goto uno ;si no cero lee de nuevo teclado dos_c decfsz reg3 ;decrementa registro y salta si cero goto uno ;si no cero lee de nuevo teclado Curso Básico de Microcontroladores PIC • 75
  • 14. Capítulo V. Programación en PIC. Los primeros pasos dos_d bsf sta,carry ;activa o coloca carry en 1 btfsc sta, bandera ;salta si bandera está desactivada goto cuatro ;si activada bifurca a cuatro tres rlf rota ;rota a la izquierda registro de leds btfss sta,carry ;salta si carry está en 1 goto tres_b ;si es cero -limite rotación- va a tres_b tres_a incf tiempo ;incrementa registro del led encendido goto seis ;bifurca a para sacar dato tres_b rlf rota ;rota una vez más registro de leds movlw 1 ;carga a w con 1 movwf tiempo ;para indicar primer led encendido call pito ;señal sonora por límite rotación goto seis ;bifurca para sacar dato cuatro rrf rota ;rota a la derecha registro de leds btfss sta,carry ;salta si carry está en uno goto cuatro_b ;si cero -límite rotación- va a cuatro_b cuatro_a decf tiempo ;decrementa registro led encendido goto seis ;bifurca para sacar dato cuatro_b rrf rota ;rota una vez más registro de leds movlw 8 ;carga a w con 8 movwf tiempo ;para indicar último led encendido cinco call pito ;señal sonora por límite rotación goto seis ;bifurca para sacar dato seis movf rota,w ;carga a w con dato led a encenderse movwf port_b ;escribe dato en el puerto b goto ceros ;reinicia para ir por siguiente dato siete_a bsf sta,bandera ;activa bandera -rotación derecha- goto dos_a ;bifurca a leer el teclado siete_b bcf sta,bandera ;desactiva bandera -rotación izquierda- goto dos_a ;bifurca a leer el teclado siete_c movf tiempo,w ;carga valor led encendido en w rlf tiempo ;multiplica por dos (valor x 2) rlf tiempo ;multiplica por dos (valor x 4) rlf tiempo ;multiplica por dos (valor x 8) addwf tiempo ;se suma una vez más (valor x 9) addwf tiempo ;se suma una vez más (valor x 10) ocho comf tiempo,w ;se invierte el dato y se carga en w movwf port_b ;se saca tiempo faltante en los leds clrf cuenta ;se limpia registro call base ;se llama base de un segundo decfsz tiempo ;decrementa el tiempo y salta si cero goto ocho ;si no cero vuelve a mostrar tiempo movlw 0ffh ;carga a w con b’11111111' movwf port_b ;para apagar todos los leds nueve call pito ;se llama a señal sonora movlw 4 ;b’0100' carga a w con 4 movwf port_a ;para activar el relé sleep ;ir al modo de reposo 76 Curso Básico de Microcontroladores PIC •
  • 15. Capítulo V. Programación en PIC. Los primeros pasos pito movlw 8 ;b’1000' cargar a w movwf port_a ;para activar el pito movlw d’110' ;cargar con el decimal 110 movwf cuenta ;para que el pito call base ;dure 1 segundo/(125-110) clrf port_a ;dejar el puerto en b’0000' retlw 3 ;regresar de la interrupción base clrf rtcc ;dejar en cero el rtcc movlw 5 ;cargar a w con b'101', para cargar el option ;rtcc interno con una preescala de 64 bas movf rtcc,w ;leer el rtcc xorlw d’125' ;comparar con el decimal 125 btfss sta,cero ;si es igual salta goto bas ;si no igual, vuelve a leer incf cuenta ;incrementa la cuenta movf cuenta,w ;carga a w con valor de cuenta xorlw d’125' ;comparar con el decimal 125 btfss sta,cero ;si es igual salta goto base ;si no igual, vuelve a configurar cuenta retlw 4 ;al terminar regresa end ;————————————————————————————————————————————————————------------ ; Fusibles de programación ; Osc XT ; Watchdog OFF ; CP OFF ; Power-Up-Timer ON ;===================================================================== ;=========================================================== Figura 9. Programa avanzado utilizando el entrenador K-061(avanzado.asm) Los ejercicios descritos en este capítulo se encuentran en el disquete que acom- paña al curso, tanto el listado con extensión .asm, como el archivo ensamblado con extensión .hex. El lector puede, como ejercicio, utilizarlos para comprobar su fun- cionamiento y, después, hacerles los cambios que desee para modificar los tiempos de retardo, los pines de salida, etc., con el fin de profundizar en su estudio. Curso Básico de Microcontroladores PIC • 77
  • 16. Capítulo V. Programación en PIC. Los primeros pasos 78 Curso Básico de Microcontroladores PIC •