Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Parte 1
Elaborado por: Ivan Londoo Jos Fernando Perez
Lenguajes de Programacin
Lenguaje ensamblador
Lenguaje de maquina
Lenguaje C. Basic.
Nemnicos ASM
Cdigo Binario
Estructura de Programacin
Para escribir un programa en c con el compilador CCS C se deben tener En cuenta una serie de elementos bsicos de su estructura.
Directivas de Preprocesado: controlan la conversin del programa a cdigo maquina por parte del compilador.
Programas o Funciones: conjunto de instrucciones. Pueden haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusin de la llamada main().
Las Funciones
Las funciones son bloques de sentencias; todas las sentencias se beben enmarcar dentro de las funciones. Al igual que las variables, las funciones deben definirse antes de utilizarse. Una funcin puede ser invocada desde una sentencia de otra funcin. Una funcin puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica en la definicin de la funcin; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La funcin, adems de devolver un valor, puede recibir parmetros o argumentos.
Tipo_dato Nombre_Funcion (tipo param1, param2,) { (sentencias); } Funcin con parmetros de estrada y con valor de salida. Funcin con parmetros sin estrada y con valor de salida.
Las Funciones
Funcin con parmetros de estrada tipo float y con valor de salida tipo float float OPERACION (float a) { Float b; b=0x23; a=a-b; a=a*100; a=floor(a); a=a*0.01; a=b+a; return(a); } Funcin con parmetros de estrada tipo float y con valor de salida tipo float. Funcin con parmetros de estrada tipo int y sin valor de salida Funcin con parmetros de salida tipo int y sin valor de entrada. Int a OPERACION (void) { Int b; b=0x23; a=a*100; a=a*2; b=b+a; return(a); } Funcin sin valor de salida y sin parmetros de entrada.
Funcin sin parmetros de estrada y con valor de salida tipo entero 8 bits.
Declaracion de variables
Tamao
1 bit 8 bits 16 bits 32 bits 32 bits 8 bits 8 bits 16 bits 32 bits
Rango
0a1 0 a 255 0 a 65535 0 a 4.249.967.295
Descripcin
Entero de 1 bit Entero
Entero de 16 bits
Entero de 32 bits Coma flotante
Carcter Sin valor Entero con signo Entero Largo con signo Entero 32 bit con signo
Declaracion de Constantes
Las constantes se pueden especificar en decimal, octal, hexadecimal o en binario:
35 O43 Decimal Octal(O) Hexadecimal(0x)
0x23
Los Operadores
Asignacin
+= -= *= /= %= <<= >>= &= |= ^= Asignacin de suma (x+=y es lo mismo que x=x+y) Asignacin de resta (x-=y es lo mismo que x=x-y) Asignacin de multiplicacin (x*=y es lo mismo que x=x*y) Asignacin de divisin (x/=y es lo mismo que x=x/y) Asignacin del resto de la divisin (x%=y es lo mismo que x=x%y) Asignacin de desplazamiento a la izquierda (x<<=y es lo mismo que x=x<<y) Asignacin de desplazamiento a la derecha (x>>=y es lo mismo que x=x>>y) Asignacin AND de bits (x&=y es lo mismo que x=x&y) Asignacin OR de bits (x|=y es lo mismo que x=x|y) Asignacin de OR EXCLUSIVA de bits (x^=y es lo mismo que x=x^y)
Los Operadores
Aritmticos
+ * / % -++ sizeof
Suma Resta Multiplicacin Divisin Modulo, resto de una divisin entera Decremento Incremento Determina el tamao, en bytes, de un operando
Los Operadores
Relacionales
< > >= <= == != Menor que Mayor que Mayor igual que Menor igual que Igual Distinto
De bits
~ & ^ | >> << Complemento a 1 AND OR EXCLUSIVA OR Desplazamiento a derechas Desplazamiento a izquierda
Lgicos
! && || NOT AND OR
Punteros
& direccion * Indireccion -> Puntero a estructura
Declaraciones de Control
La declaraciones son usadas para controlar el proceso de ejecucin del programa
Primero se evala la EXPRESION y si es cierta (TRUE o 1) ejecuta SENTENCIA_1, EN EL CASO CONTRARIO (false o 0) ejecuta la SENTENCIA_2.
Puede anidarse los IF-ELSE dando lugar a los ELSEE-IF; esto permite tomar decisiones mltiples.
If - else
En caso de que existan varias sentencias a ejecutar cuando se cumpla la condicin se deben utilizar llaves {}: If (expresion) { Sentencia_1; Sentencia_2; : Sentencia_n; } [else { sentencia_1; : Sentencia_n; : }]
Ejemplo 1:
Forma 1
Forma 2
If - Else
Ejemplo 2:
If (A>10) { if(A>20) B=5; else B=15; }
Ejemplo 3:
Esctructura SWITCH:
Sirve en caso particular de switch (expresion_1) { una decision multiple
Case constante 1: sentencias; Break; Case constante 2: Sentencias; Break; : : [default: Sentecnias:] }
Evala la expresin y en orden a la CONSTANTE adecuada realiza las sentencias asociadas. Sin ninguno de los CASE corresponde a la CONSTANTE se ejecuta DEFAULT (este comando es opcional). El comando BREAK provoca la salida de SWITCH, de lo contrario se ejecuta el siguiente CASE Nota : No puede existir dos CASE con la misma CONSTANTE switch (A) { Case 0: B=1; Break; Case 2: B=2; Break; Case 3: B=3; Break; default: Break; }
Ejemplo :
Esctructura FOR:
Se usa para repetir sentencias En las expresiones del FOR la inicializacin es una variable a la cual se le asigna un valor inicial con el que controlar un bucle. La condicin de finalizacin sirve para evaluar ANTES de ejecutar las sentencias si es cierta o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del FOR. Por ultimo, la expresin de incremento o decremento modifica la variable de control DESPUES de ejecutar el bucle. Nota : se pueden anidar bucles FOR utilizando distintas variables de control. Si se ejecuta la siguiente expresin se consigue un BUCLE SIN FIN: For (;;) { Sentencias; }
Ejemplo :
Estructura WHILE:
Se usa para repetir sentencias La expresin se evala y la sentencia se ejecuta mientras la expresin es verdadera, cuando es falsa se sale del WHILE.
Si se ejecuta la siguiente expresin se consigue un BUCLE SIN FIN: WHILE (1) { Sentencias; }
Ejemplo :
Estructura DO -WHILE:
Se diferencia del WHILE y del FOR en la condicin de finalizacin, la cual se evala al final del bucle, por lo que las sentencias se ejecutan al menos una vez
Si se ejecuta la siguiente expresin se consigue un BUCLE SIN FIN: DO { Sentencias; } WHILE (1);
Ejemplo :
Los Comentarios
Los comentarios en el programa facilitan la comprensin de las distintas expresiones tanto para el programador como para quien tiene que interpretar dicho programa.
No afecta a la compilacin por lo que pueden ser tan extensos como el programador quiera. Se puede colocar en cualquier parte del programa y con dos formatos:
Utilizando //. Al colocar estos signos se comienza el comentario y finaliza en el final lnea. // comentario que termina al final de lalinea Utilizando /* y */. Se debe utilizar y al final de comentario, pero no pueden repetirse dentro del mismo comentario. /*Este comentario no finaliza al final de la lnea Finaliza cuando se cierre el comentario */
Distribucin de Puertos
Nombre Tecnico Direccion RAM PORTA = 0x05 PORTB = PORTC = PORTD = PORTE = 0x06 0x07 0x08 0x09 # pines
6 PINES 8 PINES 8 PINES 8 PINES 3 PINES
Gestin de Puertos
La configuracin de los puertos del microcontrolador se pueden realizar de tres formas diferentes: 1. Gestionando Puertos A travs de la RAM 2. Gestionando Puertos A travs de las directivas 3. Gestionando Puertos Con Punteros En este tutorial se explicara la configuracin a travs de la RAM que consiste en declarar la direccin del registro que manipula el puerto a utilizar y el registro TRIS respectivo que define las entradas o salidas del puerto. Tenga en cuanta que las direcciones de los puertos y de los registros TRIS pueden variar dependiendo del microcontrolador a utilizar, en este caso se har referencia al microcontrolador PIC16F877.
Ejemplo: si se quiere configurar los 4 bits menos significativos del Puerto B como salida y los 4 bits mas significativos como entrada se debe escribir en el programa las siguientes lineas de codigo: #byte TRISB = 0X86 // se indica la direccion en la memoria RAM del registro TRISB el cual se // encarga de configurar el Puerto B void main () { TRISB = 0B11110000; // se carga en el registro TRISB la constante 11110000 en formato binario // esto configura los 4 bits mas siginificativos como entrada y los 4 menos // significativos como salida . }
#BYTE TRISB = 0x86 // Variable TRISB en 86h #BYTE PORTB = 0x06 //Variable PORTB en 85h #Bit RB3 = 0x06.3 //RB3 es equivalante al bit numero 3 del PORTB
EJEMPLOS :
7 X 6 X 5 0 RA5 4 0 RA4 3 1 RA3 2 1 RA2 1 0 RA1 0 0 RA0 PORTA (05H) Fig1. TRISA (85H) 7 X 6 X 5 0 RA5 4 0 RA4 3 0 RA3 2 1 RA2 1 1 RA1 0 1 RA0 PORTA (05H) Fig2. TRISA (85H)
:
#Byte TRISA = 0X85 #Byte PORTA = 0X05
:
#Byte TRISA = 0X85 #Byte PORTA = 0X05
:
Void Main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); TRISA = 0B00001100;
:
Void Main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); TRISA = 0B00000111;
: }
: }
ENTRADA SALIDA
EJEMPLOS :
7 1 RB7 6 1 RB6 5 0 RB5 4 0 RB4 3 1 RB3 2 1 RB2 1 0 RB1 0 0 RB0 PORTB (06H) Fig3. TRISB (86H) 7 0 RB7 6 0 RB6 5 0 RB5 4 0 RB4 3 1 RB3
2 1 RB2
1 1 RB1
0 1 RB0
TRISB (86H)
:
#Byte TRISB = 0X86
#Byte PORTB = 0X06
:
#Byte TRISB = 0X86 #Byte PORTB = 0X06
:
Void Main() { TRISB = 0B11001100;
:
Void Main() { TRISB = 0B00001111;
: }
: }
ENTRADA SALIDA
EJEMPLOS :
7 0 RC7 6 1 RC6 5 0 RC5 4 1 RC4 3 0 RC3 2 1 RC2 1 0 RC1 0 1 RC0 PORTD(07H) Fig5. TRISD (87H) 7 1 RC7 6 1 RC6 5 1 RC5 4 1 RC4 3 1 RC3 2 1 RC2
1 1 RC1
0 1 RC0
TRISD (87H)
:
#Byte TRISD = 0X88 #Byte PORTD = 0X08
:
#Byte TRISD = 0X88 #Byte PORTD = 0X08
:
Void Main() { TRISD= 0B01010101;
:
Void Main() { TRISD= 0B11111111;
: }
: }
:
Void Main() { TRISA= 0B00010000; TRISB= 0B01010101; TRISC= 0B00001111;
: }
Lectura de puertos:
Valor = PORTB; // almacena en la variable valor el dato ledo por el PORTB
Existen unas funciones de C que permiten manipular bit a bit los registros o variables definidas previamente. Estas funciones son las siguientes:
Bit_clear(variable,bit); Bit_set(variable,bit); Bit_test(var,bit); Swap(var); //Pone en 0 el bit especifico (0 a 7) de la variable. //Pone en 1 el bit especifico (0 a 7) de la variable. //Muestrea el bit especifico (0 a 7) de la variable. //Intercambia los 4 bits de mayor perso por los 4 de menor peso.
Forma 1
Forma 2
#Byte TRISB= 0X86 #Byte PORTB= 0X06 #Bit : Void Main() { TRISB= 0B00000000; RB3 = 1; :
:
RB3= 0X06.3
{
//Se configura el Puerto B como salida // Se pone el bit 3 del Puerto B en 1 TRISB= 0B00000000; //Se configura el Puerto B como salida Bit_set(PORTB,3); :
:
#INCLUDE <16F877.H> #byte TRISB = 0X86 //Definicin de las posiciones #byte TRISD = 0X88 //de memoria en las que se encuentran #byte PORTD = 0X08 //los registros #byte PORTB = 0X06 void main() { TRISB = 0x00; while(1) { PORTB = PORTD; } }
#include <16F877.h> #USE STANDARD_IO (B) #USE STANDARD_IO (C) //#include "usb_bootloader.h" //#include "usb_cdc.h"
#INCLUDE <16F877.H>
1
#byte TRISB = 0X86 #byte TRISD = 0X88 #byte PORTD = 0X08 #byte PORTB = 0X06 #bit RB7 = 0X06.7 #bit RD4 = 0X08.4 void main() { TRISB = 0x00; while(1) { If (RD4 == 1) { RB7 =1; } Else { RB7 =0; } } } //Definicin de las posiciones //de memoria en las que se encuentran //los registros
1
//Configuracin PORTB como salida // Ciclo infinito
1
#USE STANDARD_IO (B) #USE STANDARD_IO (C) void main() { TRISB = 0x00; while(1) {
//Configuracin PORTB como salida // Ciclo infinito IF(INPUT(pin_B7)==0) { OUTPUT_LOW(PIN_C2); } ELSE { OUTPUT_HIGH(PIN_C2); } OUTPUT_D(INPUT_B());
} }
S1
S1
S1
S1
a.
a. Si se presiona el interruptor VEL una vez La velocidad de conmutacin es 1Hz. b. Si se presiona el interruptor VEL dos veces La velocidad de conmutacin es de 10Hz c. Si se presiona el interruptor VEL tres veces La velocidad de conmutacin es de 100HZ.
START
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos
Solucin: Paso 1: (Mapeo de Entras y Salidad) Lo primero que debemos desarrollar es el mapeo de entradas y salidas, es decir que pines del microcontrolador se utilizaran como entradas o salidas y a que elemento se conectara cada uno de ellos. A continuacin se propone la siguiente distribucin:
Entradas del PIC RB0 RB1 RB2 RB3 RB4 SIMBOLO START S1 S2 S3 S4 Funcin Pulsador de inicio Sensor de lmite inferior Sensor nivel 1 Sensor nivel 2 Sensor nivel 3 Estado inicial Normalmente abierto Normalmente cerrado Normalmente abierto Normalmente abierto Normalmente abierto
SIMBOLO M V1 V2 V3 V4
Funcin Mezclador Vlvula producto 1 Vlvula producto 2 Vlvula producto 3 Vlvula de Vaciado
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos
Solucin: Paso 2: (Planteamiento del Diagrama de Flujo)
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos
Solucin: Paso 3: (Codigo en lenguaje C) Con el mapeo de las entradas desarrollado anteriormente elaboramos la configuracin de puertos , funciones del preprocesador y declaracion de variables.
SIMBOLO START S1 S2 S3 S4
Funcin Pulsador de inicio Sensor de lmite inferior Sensor nivel 1 Sensor nivel 2 Sensor nivel 3
Estado inicial Normalmente abierto Normalmente cerrado Normalmente abierto Normalmente abierto Normalmente abierto
SIMBOLO M V1 V2 V3 V4
Funcin Mezclador Vlvula producto 1 Vlvula producto 2 Vlvula producto 3 Vlvula de Vaciado
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Mtodo 1: Usando While 5
Paso 1: Identificamos del diagrama de flujo todas las estructuras que tengan arcos ascendentes (ciclos), y posteriormente los marcamos y numeramos consecutivamente.
7
4
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 1: Usando While 5
Paso 2: Representamos cada ciclo marcado con la instruccin WHILE teniendo en cuenta los siguientes aspectos:
A) Intrepretar correctamente la anidacion y/o secuencia de cada ciclo, teniendo en cuenta la numeracion dada.
7
4
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 1 : Usando While
Paso 2: Representamos cada ciclo marcado con la instruccin WHILE teniendo en cuenta los siguientes aspectos: B) Cada ciclo se traduce a la instruccin WHILE, colocando como condicion, la condicion que realiza el arco ascendente o repeticion (si se trata de un rombo de decisin) o colocar como condicion 1 o TRUE si el ciclo es infinito.
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 1 : Usando While Paso 3:
Realizar un barrido del diagrama de flujo y completar en el codigo las acciones del diagrama teniendo en cuenta la secuencia del diagrama y las anidaciones de las acciones con los WHILE. 1 2 3 4 5 6
4 5 6
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 2: Usando Etiquetas
9
10 3 11
Paso 1: Identificamos del diagrama de flujo todas FASES O ETAPAS y las enumeramos consecutivamente. Luego colocamos las etiquetas (Labels) correspondientes a cada FASE O ETAPA.
12
13
6 14 7 15 8
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 2: Usando Etiquetas
9
10 3 11
Paso 2: Realizamos la evolucion y asignacin de acciones del diagrama de flujo, en lenguaje C con las siguientes pautas: CUADROS DE ACCIN: Se cumplen las acciones de dicha etapa y se evoluciona o avanza a la siguiente etapa. ROMBOS DE DECISIN: Se utiliza la instruccin IF y ELSE para evaluar la condicion y GOTO para determinar el curso de evolucion o avance del diagrama de flujo.
12
13
6 14 7 15 8
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 2: Usando Etiquetas
9
10 3 11
12
13
6 14 7 15 8
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 2: Usando Etiquetas
//===========DIRECTIVAS Y FUNCIONES DEL // //==============PREPROCESADOR================================ #include <16F877.h> //Incluir el fichero del micro a utilizar #fuses XT,NOWDT //Permite definir los parametros de configuracion del PIC a programar #use delay( clock = 4000000 ) // Reloj de 4 MHz #BYTE TRISB = 0x86 #BYTE PORTB = 0x06 #BYTE TRISD = 0x88 #BYTE PORTD = 0x08 #BIT RB0=PORTB.0 #BIT RB1=PORTB.1 #BIT RB2=PORTB.2 #BIT RB3=PORTB.3 #BIT RB4=PORTB.4 #BIT RD0=PORTD.0 #BIT RD1=PORTD.1 #BIT RD2=PORTD.2 #BIT RD3=PORTD.3 #BIT RD4=PORTD.4 // TRISB en 86h. // PORTB en 06h. // TRISB en 86h. // PORTB en 06h.
Solucin: aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos Metodo 2: Usando Etiquetas
//=================================================== //PROGRAMA //PRINCIPAL*********************************************************** void main() { //======CONFIGURACION DE PUERTOS=========== TRISB=0XFF; TRISD=0X00; //============================================= STEP1: PORTD=0x00; STEP2: IF (RB1==0) GOTO STEP4; ELSE GOTO STEP3; STEP3: RD4=1; GOTO STEP2; STEP4: RD4=0; STEP5: IF (RB0==1) GOTO STEP6; ELSE GOTO STEP5; STEP6: RD1=1; STEP7: IF (RB2==1) GOTO STEP8; ELSE GOTO STEP7; STEP8: RD1=0; RD2=1; STEP9: IF (RB3==1) GOTO STEP10; ELSE GOTO STEP9; STEP10: RD2=0; RD3=1; STEP11: IF (RB4==1) GOTO STEP12; ELSE GOTO STEP11; STEP12: RD3=0; RD0=1; DELAY_MS(4000); STEP13: RD0=0; RD4=1; STEP14: IF (RB1==0) GOTO STEP15; ELSE GOTO STEP14; STEP15: RD4=0; GOTO STEP5; }
a. b.
Anexar un interruptor para el stop del sistema en caso de ser activado el sistema debe permanecer en condiciones inciales. Anexar un pulsador normalmente abierto que inicia el funcionamiento del sistema
start.
Plantee el diagrama de flujo que cumpla con el funcionamiento del sistema. Escriba el cdigo en lenguaje C. Simule el funcionamiento en Proteus simulando sensores con entradas lgicas y actuadores con salidas lgicas Tome como referencia el diagrama de flujo de la figura 2.
Evidencia a entregar: Mapeo de entradas y salidas Un archivo con el diagrama de flujo Un archivo con el cdigo en lenguaje C usando el compilador CCSC El circuito de la respectiva simulacin en ISIS Proteus
Funciona miento normal del sistema :
a. b.
Nota: El sistema de control no manipula el desage Anexar un interruptor para el stop del sistema en caso de ser activado el sistema debe permanecer en condiciones inciales. Anexar un pulsador normalmente abierto que inicia el funcionamiento del sistema
start.
Plantee el diagrama de flujo que cumpla con el funcionamiento del sistema. Escriba el cdigo en lenguaje C. Simule el funcionamiento en Proteus simulando sensores con entradas lgicas y actuadores con salidas lgicas Tome como referencia el diagrama de flujo de la figura 4. Evidencia a entregar: Mapeo de entradas y salidas Un archivo con el diagrama de flujo Un archivo con el cdigo en lenguaje C usando el compilador CCSC El circuito de la respectiva simulacin en ISIS Proteus
Funciona miento normal del sistema :
STOP
0
1 1
1
0 1
Derecha
Izquierda No permitido
Anexar un interruptor para el stop del sistema en caso de ser activado el sistema debe permanecer en condiciones inciales. Anexar un pulsador normalmente abierto que inicia el funcionamiento del sistema start. Plantee el diagrama de flujo que cumpla con el funcionamiento del sistema. Escriba el cdigo en lenguaje C. Simule el funcionamiento en Proteus simulando sensores con entradas lgicas y actuadores con salidas lgicas Tome como referencia el diagrama de flujo de la figura 6.
Evidencia a entregar:
Mapeo de entradas y salidas Un archivo con el diagrama de flujo Un archivo con el cdigo en lenguaje C usando el compilador CCSC El circuito de la respectiva simulacin en ISIS Proteus
Anexar un interruptor para el stop del sistema en caso de ser activado el sistema debe permanecer en condiciones inciales. Anexar un pulsador normalmente abierto que inicia el funcionamiento del sistema start. Plantee el diagrama de flujo que cumpla con el funcionamiento del sistema. Escriba el cdigo en lenguaje C. Simule el funcionamiento en Proteus simulando sensores con entradas lgicas y actuadores con salidas lgicas Tome como referencia el diagrama de flujo de la figura 8. Evidencia a entregar: Mapeo de entradas y salidas Un archivo con el diagrama de flujo Un archivo con el cdigo en lenguaje C usando el compilador CCSC El circuito de la respectiva simulacin en ISIS Proteus