Juan Carlos Gamboa P.
(200019045)
PROGRAMACIN DEL MICROCONTROLADOR PIC 16xxx
Prcticas de laboratorio
1. 2. 3. 4. Practica 4. Practica 5. Practica 6. Practica 7. Direccionamiento con PIC Operaciones aritmticas bsicas con PIC Operaciones con puertos en PICs Conversin A/D
Juan Carlos Gamboa P. (200019045)
PRACTICA No. 4
CARGA DE REGISTROS Y MODOS DE DIRECCIONAMIENTO
1. Escribir un programa que transfiera el contenido de un registro a otro registro de manera directa en un PIC 16c54. Simlelo.
Para el direccionamiento directo fue necesaria la implementacin del registro de trabajo (W) necesario para este tipo de acciones. Bsicamente, se carga el registro de trabajo con el comando MOVLW con una constante cualquiera, y posteriormente, mediante el comando MOVWF se transfiere el contenido cargado en el registro de trabajo a una determinado registro ubicado en algn espacio de memoria X.
Juan Carlos Gamboa P. (200019045) A continuacin, como se puede observar en la fig. 1, se ubican los registros y el espacio de memoria del pic16c54. Por ltimo, se observa como la constante 11 es transferido de registro en registro, es decir, del registro 0x08 al 0x0C.
Figura 1. Registros del pic16c54. 2. Realizar un programa que efectu la transferencia de datos de un registro a otro utilizando direccionamiento indirecto (con el registro INDF). Simlelo.
En el direccionamiento indirecto, se utilizan los registros FSR e INDF, ubicados en los registros especiales. El registro FSR sirve como puntero para el direccionamiento indirecto. Al operar registro INDF se transfiere el valor cargado en el registro W al registro donde est apuntando FSR dentro de la RAM. El resultado de la simulacin es anlogo a la fig. 1. Se pretende transferir datos de un registro a otro de manera indirecta.
Juan Carlos Gamboa P. (200019045)
PRACTICA No. 3
OPERACIONES LGICAS Y ARITMTICAS BSICAS
1. Escribir un programa que sume el contenido de dos registros y guarde el resultado en otros dos registros consecutivos.
Juan Carlos Gamboa P. (200019045) 2. Realizar un programa que efecte la multiplicacin de datos contenidos en dos registros. El resultado debe guardarse en otros dos registros consecutivos.
Juan Carlos Gamboa P. (200019045)
3. Escriba un programa que divida el contenido de dos registros entre el contenido de otro registro y guarde el resultado en otros dos registros consecutivos.
Juan Carlos Gamboa P. (200019045)
Ambas operaciones, tanto divisin como multiplicacin se realizan mediante rotaciones y sumas sucesivas del bit contenido en el carry. En la divisin se emplea el comando rlf, que rota el hacia la izquierda los bits que representan el numero decimal. Por otro lado, para la multiplicacin se empleo la instruccin rrf, el cual de manera anloga que el comando anterior rota los bits del vector pero en sentido contrario, es decir, hacia la derecha. El cdigo anterior, para ambos casos se inicia cargando las constantes a multiplicar, despus se crea un vector contador el cual estar encargado de contar 8 rotaciones de posicin. Despus se llama a una subrutina encargada de generar las rotaciones y sumas sucesivas. Cuando el contador llegue a cero se detiene dicha funcin y se almacenan en dos vectores la parte alta y baja del resultado ya que la multiplicacin de dos vectores de 8 bits genera uno de 16 bits. Se comprueba el resultado por medio de la calculadora.
Juan Carlos Gamboa P. (200019045)
PRACTICA No. 6
OPERACIONES CON PUERTOS Y OTRAS UNIDADES PERIFRICAS
1. Escribir un programa que coloque en el puerto B los datos contenidos en el registro f8 de la siguiente manera: los cuatro bits superiores salen sin ninguna alteracin y los cuatro bajos son enmascarados con el nmero "5".
2. Realizar un circuito bsico que permita el funcionamiento de un microcontrolador PIC 54, en el cual se disponga de 8 leds conectados al puerto B y un pulsador conectado al RTCC. 3. Escribir un programa que cuente los pulsos que entran por el pin RTCC. Cuando la cuenta llegue a 10d, active por un segundo el LED 0 el puerto B. Hemos integrado estos dos puntos en uno solo. Por un lado generamos un contador de rebotes por el puerto RTCC y el resultado son cargados en el puerto B del PIC implementado. Se implemento un Software PIC Simulator IDE, que nos permite simular en tiempo real y observar los resultados de la programacin del PIC. Debido a que el Software no soporta el PIC16c54 se escogi el PIC16f84a que est habilitado para su implementacin.
Juan Carlos Gamboa P. (200019045) A continuacin, se muestra el cdigo Assembler del PIC:
Se declaran los contadores para el retardo. Adems, como se requiere que el conteo llegue a 10d, creamos un vector que posteriormente se cargara con .10, se crea un vector auxiliar para guardar el valor del Timer0 en cada ciclo de conteo. Por ltimo, se genera un vector para que guarde la diferencia con el fin de ir restando el vector auxiliar del Timer0 con el valor mximo .10. cuando se haga cero este saltara de una subrutina y prendera por un 1seg el LED0 del puerto 0.
En la etiqueta de inicio se configuran los puertos, las constantes y el vector OPTION_REG. Este ltimo se utiliza para configurar el timer0 como contador o
Juan Carlos Gamboa P. (200019045) temporizador. En nuestro caso se configura como contador, en nuestro caso hemos puesto a 1 los bits T0SC, T0SE y PSA. Esto quiere decir que se habilita el pin RTCC del PIC como entrada del Timer0, que cambiara por medio de una transicin de ALTO a BAJO y, por ltimo, el prescaler se le asigna al WDG. En la etiqueta Contador_pulsos, lo que se hace es cargar el valor del Timer0 a W, cabe recalcar que antes de entrar a la siguiente instruccin se llama una subrutina que convierte el nmero decimal a BCD que prcticamente es una tabla con los 10 posibles nmeros. Despus se enmascara con el fin de guardar los 4 bits que nos interesa. Despus se realiza una resta sucesiva entre tmr0_actual y mximo_num se testea el bit Z del STATUS para verificar cuando es cero para generar un salto a la subrutina de retardo donde se prendera el LED0. Simulacin.
Como se puede observar, del lado derecho observamos el puertoA,0 en donde est conectado un LED el cual es utilizado para indicar cuando la cuenta llegue a 10d. En los 7 segmentos se muestra el conteo. Tambin se puede observar las entradas del PIC, que se identifican por medio de los botones T. y las salidas por el puerto B indicados en color verde.
Por ltimo, se observa que en el momento que el conteo del Timer llega a 10d se prende el LED conectado al puertoA,0. El cual dura 1seg encendido.
Juan Carlos Gamboa P. (200019045)
PRACTICA No. 7
EJERCICIOS CON LOS CONVERTIDORES A/D
1. Realizar el montaje del circuito de la figura, en el cual se dispone de 8 leds conectados al puerto B y un potencimetro.
2. Escribir un programa que coloque en el puerto B los datos correspondientes al valor en hexadecimal producto de la conversin A/D de la seal anloga presente en un pin del puerto A.
Juan Carlos Gamboa P. (200019045)
3. Escribir un programa que entregue una oscilacin (ON-OFF) de un LED en el puerto B con frecuencia variable y proporcional a la entrada anloga. Para la solucin de este enunciado planteamos dos posibles soluciones. Primero, cuando se haga la conversin de un valor, se testea el bit de interrupcin que indica el fin de la conversin, de voltaje este valor se carga a un ciclo de espera al cual vamos disminuyendo progresivamente hasta que llegue a cero durante este ciclo de espera el LED estar encendido. Segundo lugar, configuramos el Timer0 como temporizador y que produzca una interrupcin mediante desbordamiento. Cargamos el valor producto de la conversin en W , despus realizamos la resta de 256-W y este le dar el tiempo de duracin del pulso. El Timer0 comenzara a partir de 256-W y cuando llegue a 256 desborda a pasa a 0000. Durante ese tiempo que dura en desbordamiento se activara el LED se testeara el bit de interrupcin para apagar el LED y comenzar todo el proceso de conversin.