Programación en C para Electrónica.
Microcontrolador PIC16F876. 1
Características µC RISC. Reloj de hasta
20Mhz.(CM=1/4fosc) 35 instrucciones de 14 bit. Instrucciones de 1
CM (excepto saltos) Power On Reset (POR) 8Kx14 bits en memoria
flash. 368 bytes de RAM. 256 bytes de EEPROM. 22 E/S digital. 14
interrupciones. Programación serie LVP. 2
Características 3
Periféricos. 3 temporizador /contador T0 = 8bits T1 y T2 =
16 bits 2 módulos de comparación y captura / PWM.
Puerto serie síncrono (SSP) con SPI y I2C. USART / SCI. 5
entradas A/D de 10 bits. Hasta 22 E/S digital. Comparador
analógico. Perro guardian (WDT) 4
Encapsulado. 5
Diagrama de bloques: 6
Características de los puertos Son bidireccionales. Acceso
como byte o bit. Lectura del valor del pin. Corriente
máxima del pin 25mA. Corriente máxima del puerto
200mA. Después de un reset todas son entradas. 7
Organización de la memoria 8
Programación en C para Electrónica. Entrada/Salida
digital. 9
Entrada salida digital El PIC 16F876A dispone de 22 lineas de E/S
digital configurables repartidas en 3 puertos. Puerto A = 6
lineas (RA0..RA5) Puerto B = 8 lineas (RB0..RB7) Puerto C = 8
lineas (RC0..RC7) Los puertos son independientes y se puede
programar cada terminal para que se comporte como entrada o como
salida. 10
Entrada salida digital La configuración como entrada o
salida se hace a través del registro TRISx correspondiente
del banco 1 de la memoria. TRISA=85h (Puerto A) TRISB=86h (Puerto
B) TRISC=87h (Puerto C) Un valor 0 en los bits de estos registros
configuran el pin correspondiente del puerto como salida y un 1
como entrada. 11
Entrada salida digital Para configurar los puertos se utiliza la
función set_tris_X(valor) Se puede leer la
configuración de los puertos con la función
get_tris_X(valor) Ejemplos: set_tris_A (0x3F) /* Puerto A como
entradas.*/ set_tris_B (0x00) /* Puerto B como salidas.*/
set_tris_C (0b00001111) /*Pines RB0..RB3 salidas y RB4..RB7
entradas*/ 12
Entrada salida digital La lectura o escritura de datos en los
puertos se hace mediante la lectura o escritura en el registro
del banco 0 asociado a cada puerto. PORTA=05h (Puerto A)
PORTB=06h (Puerto B) PORTC=07h (Puerto C) La lectura y/o
escritura se realiza directamente sobre los pines del puerto.
13
Entrada salida digital CCS tiene funciones predefinidas para el
uso de los puertos de E/S digital. Las funciones pueden tratar el
puerto completo o un bit del mismo. Los parámetros de
estas funciones están definidos en un fichero include
(p.ej:16F876A.h) con un formato PIN_Xn donde X es el puerto y n
el bit. 14
Funciones de Salida (bit) output_low(PIN_Xn) //pone a 0.
output_high(PIN_Xn) //pone a 1. output_bit(PIN_Xn,valor) //pone
el pin Xn a valor (0 ó 1). output_toggle (PIN_Xn)
//complementa el valor del pin output_float (PIN_Xn) //Pin como
entrada (simula d. ab.) 15
Funciones de Entrada (bit) input_state(PIN_Xn) //Lee el valor del
pin sin cambiar //el sentido del terminal. input(PIN_Xn) //Lee el
valor del pin. 16
Funciones de E/S (bit) Ejemplos: output_low(PIN_A0);
output_high(PIN_B1); output_bit(PIN_B3,0); output_toggle
(PIN_C6); output_float (PIN_A2); valor=input_state (PIN_B7);
valor=input(PIN_C3); 17
Funciones de E/S (byte) output_X(valor): X= puerto (A,B o C)
Valor= byte a escribir en el puerto. Escribe valor en X. Ejemplo:
output_B(0xA5); //PORTB=10100101 input_X(): X= puerto (A,B o C)
Lee el valor del puerto X. Ejemplo: valor=input_B(); /*guarda en
valor el contenido del puerto B*/ 18
Entrada salida digital CCS provee directivas y funciones
predefinidas para el uso de los puertos de E/S digital. Las
funciones output_X() e input_X() dependen de la directiva de
configuración que usemos. Directivas: #use fast_io
(puerto) #use standar_io (puerto) #use fixed_io (puerto) 19
Directivas del preprocesador 20
Directivas de gestión de puertos #use fast_io (puerto) No
modifica el registro TRIS en lecturas y escrituras. Hay que
asegurarse de que los pines está configurados
correctamente. #use standar_io (puerto) Modifica el registro TRIS
correspondiente en lecturas y escrituras. (Modo por defecto) #use
fixed_io (puerto) Configura el puerto y no modifica el registro
TRIS en lecturas y escrituras. 21
Programación en C para Electrónica. Ejemplos
22
Led intermitente 23
Led intermitente 24
Led intermitente (con funciones) 25
Pulsador 26
Pulsador (con funciones) 27
Cruce semáforos 28
Cruce semáforos 29