programacion de microcontroladores pic en c
DESCRIPTION
CORPOCIDES. PROGRAMACION DE MICROCONTROLADORES PIC EN C. Ing. Emilio Medina Baquero [email protected]. SOFTWARE NECESARIO. INSTALADOR DE PICC PROTEUS. OPERADORES. Asignación de Suma: x+=y ; // Es lo mismo que x=x+y; Ejercicio: int x=4,y=5; x+=y; // Cuanto vale x? - PowerPoint PPT PresentationTRANSCRIPT
CORPOCIDES
Ing. Emilio Medina [email protected]
SOFTWARE NECESARIO
INSTALADOR DE PICC
PROTEUS
OPERADORES
Asignación de Suma:x+=y ; // Es lo mismo que x=x+y;
Ejercicio:int x=4,y=5;x+=y; // Cuanto vale x?
Asignación de Resta:x-=y ; // Es lo mismo que x=x-y;
Ejercicio:int y=4,x=5;x-=y; // Cuanto vale x?
OPERADORES
Asignación de Multiplicación:x*=y ; // Es lo mismo que x=x*y;
Ejercicio:int x=4,y=5;x*=y; // Cuanto vale x?
Asignación de División:x/=y ; // Es lo mismo que x=x/y;
Ejercicio:int y=4,x=20;x/=y; // Cuanto vale x?
FUNCIONES
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;c=a+b;return(c);
}Void main(){
int dato;dato=suma(a,b); //Llamado de la función
}
VARIABLES
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.
INSTALACION DE PICC
1. Instalar el PICC: - Es importante descomprimir el instalador e instalar los dos archivos:
EL PRIMER PROYECTO
1. Abre el PICC (Inicio, programas, PIC-C, PIC C Compiler)
2.Seleccionar New -> Project Wizard
EL PRIMER PROYECTO
3. coloca el nombre del proyecto (Primer_Programa) y la carpeta donde se guardará.
EL PRIMER PROYECTO
4. En la pestaña General selecciona las opciones como aparece en la figura
EL PRIMER PROYECTO
5. En la pestaña Comunicaciones deshabilita RS-232
EL PRIMER PROYECTO
6. Acepta los cambios haciendo click en OK
7. La ventana del PICC debe aparecer como en la figura:
EL PRIMER PROYECTO
8. Nuestro primer programa consistirá en sacar un “1” por el pin RB0 con el comando:
output_high(pin_b0);
EL PRIMER PROYECTO
9. Ahora compilamos el código haciendo click en Build de la pestaña Compile.
EL PRIMER PROYECTO
10. Ahora verificamos que no se hallan presentado errores, mirando la ventana Output
EL 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
EL PRIMER PROYECTO
EL PRIMER PROYECTO
14. Hacemos doble click sobre el PIC para editar sus propiedades.- Verificamos la frecuencia del reloj: 4MHz
EL 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
I/O DIGITALES
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U2
PIC16F84A
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
OSC1/CLKIN9
OSC2/CLKOUT10
RC1/T1OSI/CCP212
RC2/CCP113
RC3/SCK/SCL14
RB7/PGD28
RB6/PGC27
RB526
RB425
RB3/PGM24
RB223
RB122
RB0/INT21
RC7/RX/DT18
RC6/TX/CK17
RC5/SDO16
RC4/SDI/SDA15
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI11
MCLR/Vpp/THV1
U3
PIC16F873A
MCLR/VPP1
RA0/AN02
RA1/AN13
RA2/AN2/VREF-4
RA3/AN3/VREF+5
RA4/T0CKI6
RA5/AN4/SS/LVDIN7
RE0/RD/AN58
RE1/WR/AN69
RE2/CS/AN710
OSC1/CLKI13
RA6/OSC2/CLKO14
RC0/T1OSO/T1CKI15
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RD2/PSP221
RD3/PSP322
RD4/PSP427
RD5/PSP528
RD6/PSP629
RD7/PSP730
RC4/SDI/SDA23
RC5/SDO24
RC6/TX/CK25
RC7/RX/DT26
RB0/INT033
RB1/INT134
RB2/INT235
RB3/CCP2B36
RB437
RB5/PGM38
RB6/PGC39
RB7/PGD40
RC1/T1OSI/CCP2A16
U4
PIC18F452
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.
I/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.
I/O DIGITALES
- Los pines de salida del PIC tienen un límite de corriente.
I/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 Aoutput_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.
I/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)
I/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.
I/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)
I/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.
I/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)
I/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.
I/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)
I/O DIGITALES
output_toggle(pin); //niega el estado lógico del pin seleccionado
Ejemplo:
output_toggle(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.
I/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)
I/O DIGITALES
Valor1=input_a(); //lee el dato (8 bits) del puerto A y lo almacena en//la variable Valor1
Valor2=input_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;dato=input_a();Output_b(dato);
I/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)
I/O DIGITALES
CICLOS INFINITOS:
While(1){//aquí va el programa a repetir infinitamente
}
For(;;) {//aquí va el programa a repetir infinitamente
}
INSTRUCCIÓN IF-ELSE
Con la ayuda de If-Else se pueden tomar desiciones.
If (expresión){sentencia1;}
Else{sentencia2;
}
I/O DIGITALES
Valor1=input(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);
elseoutput_b(0x00);
}
I/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)
I/O DIGITALES
Valor1=input_state(pin); // lee el valor (“0” ó “1”) del pin seleccionado// y lo almacena en la variable Valor1
Ejemplo:
Valor2=input_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.
EJERCICIOS
Se tiene una lámpara conectada al pin RB0 y dos pulsadores conectados a los pines RA0 y RA1 respectivamente.
A.Encender la lámpara si se presionan los dos pulsadores (si se pulsa uno solo no debe encender). B.Encender la lámpara si se presiona alguno de los dos pulsadores (si se pulsan juntos también debe encender)C.Encender la lámpara si se presiona alguno de los dos pulsadores (si se pulsan juntos no debe encender)D.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)E.Realizar la siguiente secuencia de luces, dejando 500ms entre cada dato:
00000001, 00000010, 00000101, 00001010, 00010100, 00101000, 01010000, 10100000, 01000000, 10000000, 00000000Para 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.
DESARROLLO EJERCICIOS