Title: PROGRAMACION DE MICROCONTROLADORES PIC EN C
1PROGRAMACION DE MICROCONTROLADORES PIC EN C
CORPOCIDES
Ing. Emilio Medina Baquero Ing.medinaemilio_at_gmail.
com
2SOFTWARE NECESARIO
INSTALADOR DE PICC PROTEUS
3OPERADORES
Asignación de Suma xy // Es lo mismo
que xxy Ejercicio int x4,y5 xy //
Cuanto vale x? Asignación de Resta x-y
// Es lo mismo que xx-y Ejercicio int
y4,x5 x-y // Cuanto vale x?
4OPERADORES
Asignación de Multiplicación xy // Es
lo mismo que xxy Ejercicio int
x4,y5 xy // Cuanto vale x? Asignación de
División x/y // Es lo mismo que
xx/y Ejercicio int y4,x20 x/y //
Cuanto vale x?
5FUNCIONES
Tipodato Nombrefunción(tipo param1, tipo
param2,) Sentencias return(dato) Ejemplo
int suma(int a,int b) //Definición de la
función int c cab return(c) Void
main() int dato datosuma(a,b) //Llamado
de la función
6VARIABLES
VARIABLES GLOBALES Su valor puede ser escrito y
leído desde cualquier función. VARIABLES LOCALES
Su valor se pierde al salir de una función.
7INSTALACION DE PICC
1. Instalar el PICC - Es importante
descomprimir el instalador e instalar los dos
archivos
8EL PRIMER PROYECTO
1. Abre el PICC (Inicio, programas, PIC-C, PIC C
Compiler) 2.Seleccionar New -gt Project Wizard
9EL PRIMER PROYECTO
3. coloca el nombre del proyecto
(Primer_Programa) y la carpeta donde se
guardará.
10EL PRIMER PROYECTO
4. En la pestaña General selecciona las opciones
como aparece en la figura
11EL PRIMER PROYECTO
5. En la pestaña Comunicaciones deshabilita RS-232
12EL PRIMER PROYECTO
6. Acepta los cambios haciendo click en OK
7. La ventana del PICC debe aparecer como en la
figura
13EL PRIMER PROYECTO
8. Nuestro primer programa consistirá en sacar un
1 por el pin RB0 con el comando output_high(
pin_b0)
14EL PRIMER PROYECTO
9. Ahora compilamos el código haciendo click en
Build de la pestaña Compile.
15EL PRIMER PROYECTO
10. Ahora verificamos que no se hallan presentado
errores, mirando la ventana Output
16EL PRIMER PROYECTO
11. Para simular el programa usaremos Proteus,
por lo que debemos abrir el ISIS.
12. Hacemos click en la carpeta para abrir el
esquemático
17EL PRIMER PROYECTO
18EL PRIMER PROYECTO
14. Hacemos doble click sobre el PIC para editar
sus propiedades. - Verificamos la frecuencia del
reloj 4MHz
19EL PRIMER PROYECTO
15. Hacemos doble click sobre la carpeta de la
opción Program File
16. Seleccionamos el programa (.hex) de la
carpeta del proyecto de PICC
20I/O DIGITALES
Los microcontroladores PIC tienen teminales de
entrada/salida divididos en puertos, que se
encuentran nombrados alfabéticamente A,B,C,D.
Cada puerto puede tener hasta 8 teminales que,
de forma básica se comportan como una
entrada/salida digital.
21I/O DIGITALES
- Los pines son configurables por software como
entrada o salida digital. - - El pin RA4 necesita resistencia de pull-up si
se va a usar como salida. - - El puerto B tiene resistencias de pull-up que
se pueden habilitar por software.
22I/O DIGITALES
- Los pines de salida del PIC tienen un límite de
corriente.
23I/O DIGITALES
- Por defecto se usa la directiva STANDARD_IO (el
compilador configura automáticamente los pines
como entrada o salida). - COMANDOS
- output_a(valor) //saca valor (entero
de 8 bits) por el puerto A - output_b(valor) //saca valor (entero
de 8 bits) por el puerto B - Ejemplo
- output_b(23) //saca el dato 23 por el
puerto B - Es importante notar que el comando output
configura automáticamente el puerto como salida.
24I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
25I/O DIGITALES
output_bit(pin,valor) //saca valor (1 ó 0)
por el pin seleccionado Ejemplo output_bit(pin
_b1,0) //saca un 0 lógico por el pin
RB1 Es importante notar que el comando
output_bit configura automáticamente el pin como
salida.
26I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
27I/O DIGITALES
output_high(pin) //saca un 1 lógico por
el pin seleccionado Ejemplo output_high(pin_b7)
//saca un 1 lógico por el pin RB7 Es
importante notar que el comando output_high
configura automáticamente el pin como salida.
28I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
29I/O DIGITALES
output_low(pin) //saca un 0 lógico por
el pin seleccionado Ejemplo output_low(pin_b0)
//saca un 0 lógico por el pin RB1 Es
importante notar que el comando output_low
configura automáticamente el pin como salida.
30I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
31I/O DIGITALES
output_toggle(pin) //niega el estado
lógico del pin seleccionado Ejemplo output_tog
gle(pin_b6) //si el estado del pin b6 es 0
saca un 1 //si el estado del pin b6 es 1
saca un 0 Es importante notar que el comando
output_toggle configura automáticamente el pin
como salida.
32I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
33I/O DIGITALES
- Valor1input_a() //lee el dato (8 bits)
del puerto A y lo almacena en - //la variable Valor1
- Valor2input_b() //lee el dato (8 bits)
del puerto B y lo almacena en - //la variable Valor2
- - La función retorna un dato entero (8bits).
- Es importante notar que el comando input
configura automáticamente el puerto como entrada. - Ej int dato
- datoinput_a()
- Output_b(dato)
34I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
35I/O DIGITALES
CICLOS INFINITOS While(1) //aquí va el
programa a repetir infinitamente For()
//aquí va el programa a repetir
infinitamente
36INSTRUCCIÓN IF-ELSE
Con la ayuda de If-Else se pueden tomar
desiciones. If (expresión) sentencia1 Else
sentencia2
37I/O DIGITALES
- Valor1input(pin) // lee el valor (0 ó
1) del pin seleccionado - // y lo almacena en la variable Valor1
- La función retorna un valor booleano 0 si el
pin está en bajo. - La función retorna un valor booleano 1 si el
pin está en alto. - - Es importante notar que el comando input
configura automáticamente el puerto como entrada. - Ejemplo
- While(1)
- if(input(pin_a0)1)
- output_b(0xFF)
- else
- output_b(0x00)
-
38I/O DIGITALES
- Modificamos el programa
- Compilamos
- En el ISIS damos play a la simulación.
- (es necesario detener la simulación previamente
para que los cambios en el programa se reflejen)
39I/O DIGITALES
- Valor1input_state(pin) // lee el valor (0 ó
1) del pin seleccionado - // y lo almacena en la variable Valor1
- Ejemplo
- Valor2input_state(pin_b1) //lee el pin RB1 y
almacena el valor en Valor2 - La función retorna un valor booleano 0 si el
pin está en bajo. - La función retorna un valor booleano 1 si el
pin está en alto. - - Es importante notar que el comando input NO
cambia la dirección del pin leído.
40EJERCICIOS
- Se tiene una lámpara conectada al pin RB0 y dos
pulsadores conectados a los pines RA0 y RA1
respectivamente. - Encender la lámpara si se presionan los dos
pulsadores (si se pulsa uno solo no debe
encender). - Encender la lámpara si se presiona alguno de los
dos pulsadores (si se pulsan juntos también debe
encender) - Encender la lámpara si se presiona alguno de los
dos pulsadores (si se pulsan juntos no debe
encender) - Si se tiene un tercer pulsador conectado en el
pin RA2, encender la lámpara si se pulsan 2
interruptores a la vez. (si se pulsa uno solo o
los tres a la vez no debe encender) - Realizar la siguiente secuencia de luces, dejando
500ms entre cada dato - 00000001, 00000010, 00000101, 00001010, 00010100,
00101000, - 01010000, 10100000, 01000000, 10000000, 00000000
- Para realizar retardos se usa el comando
delay_ms(tiempo_en_ms) - F. Realice un programa en el cual al presionar
un pulsador en RA0 se incremente el dato del
puerto B y al presionar un pulsador en RA1 se
decremente el dato del puerto B.
41DESARROLLO EJERCICIOS
42 GRACIAS