6. Manejo básico del PIC16F877
6.5 Preparativos
en la ALU
In-Circuit-Serial-Programming (ICSP), para programar sin retirar el componente
Alimentación de+5 V
Corriente de salida hasta 25 mA por pin
De manera adicional, contiene periféricos encargados de realizar fun- ciones especiales para no realizar todo por medio de la ALU o para darle posibilidades adicionales:
3 temporizadores, para llevar conteos de eventos o tiempo
2 modulos PWM, para realizar control sobre componentes externos Comunicación serial, MSSP y USART
Comunicación paralela, PSP
Conversor análogo-digital con 8 canales de entrada
6.5
Preparativos
Para este laboratorio, se utilizará el circuito que se muestra en la figura 6.1. Dicho circuito utiliza 2 pines del puerto C (RC7 y RC6) para “quemar” el PIC con los programas que se realicen y compilen en un computador debidamente configurado (la instalación de los paquetes y programas necesarios para realizar esta práctica se pueden encontrar en el apéndice F). Para verificar que todo está funcionando correctamente, debe compilar y quemar el siguiente programa:
#include <pic.h> __CONFIG(0x3f71); void main(){
TRISB = 0B00000000; // Todos los bits como salida PORTB = 0B11111111;
while(1); }
46 PRÁCTICA 6. MANEJO BÁSICO DEL PIC16F877
Guarde este programa en un archivo llamado prueba.c. Compílelo utilizando el comando:
$ compilar prueba.c
En la pantalla del computador se mostrará información acerca del lugar donde se guarda la palabra de configuración, así como también del espacio de memoria que ocupará el programa (ignore por ahora los avisos de advertencia “Unknown prefix SPACEOPT”).
Conecte la extensión USB al computador y la fuente de alimentación al circuito del PIC. Si todo marchó bien en la etapa de compilación, se habrá creado el archivo prueba.hex que contiene el código de máquina a grabar en el PIC. Reinicie o resetee el PIC con el pulsador e inmediata- mente después (menos de un segundo) use el comando:
$ quemar prueba.hex
Si todo está funcionado debidamente, todos los LED del circuito del PIC deben encenderse. Si esto no sucede, puede probar lo siguiente:
¿Están los LED invertidos? Recuerde que la pata más larga del LED debe conectarse al lado positivo.
Pruebe los condensadores que se colocaron junto al cristal. Inter- cambielos por un par que considere que está funcionando.
Mida los voltajes en las patas de alimentación Vdd y Vss del PIC y también entre Vcc y GND del FT232RL.
Revise nuevamente el alambrado del circuito. Con plano en mano, cerciórese de que todas las conexiones del PIC han sido alambradas correctamente.
6.6
Procedimiento
1. Una vez el circuito esté funcionando correctamente, edite el archivo fuente usando un número binario diferente en el puerto B; luego,
6.6. PROCEDIMIENTO 47 compile el programa y quémelo en el PIC. Observe la correspon- dencia entre el nuevo número y los LED que se encienden en el protoboard.
2. Usando el mismo programa del paso 1, cambie PORTB=0B11111111 por PORTB= 0x67. Compile y queme el nuevo programa en el PIC. ¿Qué LED se encendieron? Convierta el número 0x67 a binario y compare con los LED que se encendieron.
3. Usando el mismo programa del paso 1 cambie PORTB=0B11111111 por PORTB= 123. Compile y queme el nuevo programa en el PIC. ¿Qué LED se encendieron? Convierta el número 123 a binario y compare con los LED que se encendieron.
4. Usando el mismo programa del paso 1 cambie PORTB=0B11111111 por PORTB= 0163. Compile y queme el nuevo programa en el PIC. ¿Qué LED se encendieron? Convierta el número 0163 a binario y compare con los LED que se encendieron.
5. Usando el mismo programa del paso 1 cambie PORTB=0B11111111 por PORTB= −123. Compile y queme el nuevo programa en el PIC. ¿Qué leds se encendieron? Convierta el número −123 a bina- rio (procedimiento explícito por favor) y compare con los LED que se encendieron. Recuerde que el PIC representa los números nega- tivos como complemento a 2 (que es lo mismo que complemento a 1 más 1).
Todos los pasos deben escribirse en forma explícita. 6. Compile y queme en el PIC el siguiente programa:
#include <pic.h> __CONFIG(0x3f71); void main(){
int i = 3245;
TRISB =0B00000000; // Todos los bits como salida PORTB = i ;
while(1); }
Explique el resultado que obtiene en los LED. Puede ayudarse de la tabla de tipos de datos que se entregó en clase (PORTB es una variable tipo char tal como se declara en /usr/hitech/inclu- de/pic1687x.h).
48 PRÁCTICA 6. MANEJO BÁSICO DEL PIC16F877 7. Compile y queme en el PIC el siguiente programa:
#include <pic.h> __CONFIG(0x3f71); void main(){
float f = 0.21;
TRISB =0B00000000; // Todos los bits como salida PORTB = f*35;
while(1); }
Explique el resultado que obtiene en los LED. Realice lo mismo con f = 0.22.
8. Compile, queme, compruebe y explique el funcionamiento del si- guiente programa (ejemplo: estructura if ).
#include <pic.h> __CONFIG(0x3f71); void main() {
TRISB=0x00; // Todos los bits como salida
TRISD=0xF0; // Cuatro bits mas significativos como entrada if(RD7 == 0){ PORTB = 0x03; } else{ PORTB = 0x0C; } while(1); }
Elimine la línea while(1); y ejecute nuevamente el programa. ¿Qué diferencias hay? ¿Hay que resetear el PIC cada vez que se cambia el estado de RD7? Explique. Modifique el programa origi- nal de tal forma que se enciendan los bits RB0 y RB3 cuando RD7 = 0 y en caso contrario para que se enciendan los bits RB1 y RB2. El nuevo programa debe escribirse en el informe.
9. Compile, queme y compruebe el funcionamiento del siguiente pro- grama (ejemplo: estructura case).
#include <pic.h> __CONFIG(0x3f71); void main(){
int entrada;
TRISB=0x00; // Todos los bits como salida TRISD=0xC0;
6.6. PROCEDIMIENTO 49
entrada = PORTD & 0xC0; switch(entrada){
case 0x00 : PORTB = 0x04; break; case 0x40 : PORTB = 0x0A; break; case 0x80 : PORTB = 0x11; break; case 0xC0 : PORTB = 0x1F; }
while(1); }
Modifique el programa original de tal forma que cumpla con las condiciones que se muestran en la tabla 6.1.
Tabla 6.1. Condiciones para el programa correspondiente al punto 9.
RD7=0 y RD6=0 RB0=1, los demás en cero RD7=0 y RD6=1 RB1=1, los demás en cero RD7=1 y RD6=0 RB2=1, los demás en cero RD7=1 y RD6=1 RB3=1, los demás en cero
10. El problema que se presenta en la práctica 9 se puede resolver por un circuito combinacional. Elabore la tabla de verdad y dibuje el correspondiente circuito. Resuelva el mismo problema utilizando el PIC en vez de lógica combinacional.
PRÁCTICA
7
Temporizadores del PIC16F877
7.1
Objetivos
Introducir al estudiante a los temporizadores de un PIC cuando funcionan como contadores y como temporizadores.
7.2
Materiales
Los mismos materiales utilizados en la práctica 6.
7.3
¿Qué debe saber antes del laboratorio?
Haber leído los siguientes temas: Utilización del timer 0, 1 y 2