Está en la página 1de 55

INTRODUCCIN A LA PROGRAMACIN EN LENGUAJE C PARA MICROCONTROLADORES PIC UTILIZANDO EL COMPILADOR C CCS Y EL SIMULADOR PROTEUS

Parte 1
Elaborado por: Ivan Londoo Jos Fernando Perez

Lenguajes de Programacin

Lenguajes de Alto nivel

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().

Instrucciones: indican como se debe comportar el PIC en todo momento.

Comentarios: permiten describir lo que significa cada lnea de programa.

Ejemplo: Estructura de Programacin

Directivas de preprocesado Funcin Secundaria Instrucciones Comentarios Funcin Principal

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.

Funcin con parmetros de estrada y si valor de salida.

Funcin sin parmetros de estrada y sin 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.

void OPERACION (int a) { Int b; b=0x23; a=a*100; a=a*2; b=b+a; }

void OPERACION (void) { Int b; b=0x23; a=a*100; a=a*2; b=b+a; }

Funcin con parmetros de estrada tipo entero de 8 bits y si valor de salida.

Funcin sin parmetros de estrada y con valor de salida tipo entero 8 bits.

Funcin sin parmetros de estrada y sin valor de salida.

Declaracion de variables

Tipo Int1 Short Int Int8 Int16 Long Int 32


Float Char Void Signed Int8 Signed Int16 Signed Int32

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

0 a 255 -128 a + 127 -32768a + 32767

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

0b00100011 Binario(0b) x' Carcter

Adems, se pueden definir constantes con un sufijo:


Int8 Long Signed INT16 Float Char 127U 80UL 80L 3.14F Con comillas simples 'C'

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

IF-ELSE: Sirve para tomar decisiones.


if (expresion_1) sentencia_1; [else sentencia_2;] Los elementos que se encuentran entre corchetes [] son opcionales

if (expresion_1) sentencia_1; [else if (expresion 2) sentencia_2;] [else sentencia_3;]

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:

If (A==0) B=10; Else C=5;

If (A!=0) C=5; Else B=10;

Forma 1

Forma 2

If - Else
Ejemplo 2:
If (A>10) { if(A>20) B=5; else B=15; }

Ejemplo 3:

If (A>10) { if(A>20) B=15; } Else B=5;

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; }

For (inicializacion; condicion de finalizacion; incremento) { Sentencias ; }

Ejemplo :

For (N=1; N<=10; N++) { Printf (%u,N); }

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.

While (expresion) { Sentencias ; }

Si se ejecuta la siguiente expresin se consigue un BUCLE SIN FIN: WHILE (1) { Sentencias; }

Ejemplo :

While (N>5 && M<10) { A=1; B=2; }

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);

DO { Sentencias ; } While (expresion)

Ejemplo :

DO { A=1; B=2; } While (N>5 && M<10);

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

Configuracin de entradas o salidas digitales en el Microcontrolador

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 . }

Gestionando Puertos A travs de la RAM


Se definen los registros PORTx y TRISx como bytes y se sitan en la posicin correspondiente de la memoria RAM. La directiva utilizada de C es #BYTE: #BYTE variable = constante #BYTE #BYTE #BYTE #BYTE #BYTE #BYTE #BYTE #BYTE #BYTE #BYTE TRISA PORTA TRISB PORTB TRISC PORTC TRISD PORTD TRISE PORTE = = = = = = = = = = 0x85 0x05 0x86 0x06 0x87 0x07 0x88 0x08 0x89 0x09 //Variable TRISA // Variable PORTA // Variable TRISB //Variable PORTB // Variable TRISC // Variable PORTC // Variable TRISD // Variable PORTD // Variable TRISE // Variable PORTE en en en en en en en en en en 85h 05h 86h 85h 87h 07h 88h 08h 89h 09h

Gestionando Puertos A travs de la RAM


Si se requiere manipular un solo bit de un puerto se utilisa la directiva #bit Ejemplo: Se require utilizar el bit 3 del PORTB como salida, esto se configura de la siguiente Forma:

#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 de Configuracin del PORTA como entrada /salida digital


7 X 6 X 5 1/0 RA5 I/O 4 1/0 RA4 I/O 3 1/0 RA3 I/O 2 1/0 RA2 I/O 1 1/0 RA1 I/O 0 1/0 TRISA (85H) RA0 I/O PORTA (05H)
ENTRADA SALIDA

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;

: }

: }

Ejemplos de Configuracin del PORTB como entrada /salida digital

7 1/0 RB7 I/O

6 1/0 RB6 I/O

5 1/0 RB5 I/O

4 1/0 RB4 I/O

3 1/0 RB3 I/O

2 1/0 RB2 I/O

1 1/0 RB1 I/O

0 1/0 TRISB (86H) RB0 I/O PORTB (06H)

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)

PORTB (06H) Fig4.

:
#Byte TRISB = 0X86
#Byte PORTB = 0X06

:
#Byte TRISB = 0X86 #Byte PORTB = 0X06

:
Void Main() { TRISB = 0B11001100;

:
Void Main() { TRISB = 0B00001111;

: }

: }

Configuracin del PORTD como entrada /salida digital

7 1/0 RB7 I/O

6 1/0 RB6 I/O

5 1/0 RB5 I/O

4 1/0 RB4 I/O

3 1/0 RB3 I/O

2 1/0 RB2 I/O

1 1/0 RB1 I/O

0 1/0 TRISD (87H) RB0 I/O PORTD (07H)

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)

PORTD (07H) Fig6.

:
#Byte TRISD = 0X88 #Byte PORTD = 0X08

:
#Byte TRISD = 0X88 #Byte PORTD = 0X08

:
Void Main() { TRISD= 0B01010101;

:
Void Main() { TRISD= 0B11111111;

: }

: }

Configuracin de los Puertos como entrada o salida


EJEMPLOS :
:
#Byte TRISA = 0X85 #Byte TRISB = 0X86 #Byte TRISD = 0X88 #Byte PORTA = 0X05 #Byte PORTB = 0X06 #Byte PORTD = 0X08

:
Void Main() { TRISA= 0B00010000; TRISB= 0B01010101; TRISC= 0B00001111;

: }

Lectura y escritura de puertos


Escritura en los puertos:
PORTC = 0x0A; //salida de datos 00001010 por PORTC,

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.

Lectura y escritura de un bit un puerto


Tambin se pueden manipular los bits de un puerto asignando la respectiva direccin del puerto en la memoria RAM y la posicin del bit que se quiere manipular. Ejemplo: Se quiere poner un 1 en el bit 3 del Puerto B

Forma 1

Forma 2

#Byte TRISB= 0X86 #Byte PORTB= 0X06 #Bit : Void Main() { TRISB= 0B00000000; RB3 = 1; :
:

#Byte TRISB= 0X86 #Byte PORTB= 0X06 : Void Main()

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); :
:

// Se pone el bit 3 del Puerto B en 1

Ejemplo 1A: Lectura y escritura de puertos digitales


Ejemplo 1A: Escribir un programa que capture datos del Puerto D, y los
Visualice por el Puerto B. Usando el direccionamiento de la memoria RAM

#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; } }

//Configuracin PORTB como salida // Ciclo infinito

//Lectura del PORTD y visualizacin en //PORTB

Ejemplo 1B: Lectura y escritura de puertos digitales


Ejemplo 1B: Escribir un programa que capture datos del Puerto D, y los
Visualice por el Puerto B. Usando la librera Standard_IO

#include <16F877.h> #USE STANDARD_IO (B) #USE STANDARD_IO (C) //#include "usb_bootloader.h" //#include "usb_cdc.h"

Void Main () { int aux; Port_b_pullups(True); CICLO: aux=input_D(); output_B(aux); }

Ejemplo 2A: Lectura y escritura de puertos digitales


Ejemplo 2:
Escribir un programa que lea el bit 4 del Puerto D y lo visualice por el bit 7 del Puerto B. Usando el direccionamiento de la Memoria RAM.

#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

Ejemplo 2B: Lectura y escritura de puertos digitales


Ejemplo 2B:
Escribir un programa que lea el bit 4 del Puerto D y lo visualice por el bit 7 del Puerto B. Usando la librera Use Standard_IO #INCLUDE <16F877.H>

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());

} }

Ejemplo 3: Lectura y escritura de puertos digitales


Ejemplo 3: Escriba un programa que cuando se presione el
interruptor S1 haga conmutar el led D1 9 veces a una frecuencia de 1 HZ
#INCLUDE <16F877.H> #Use Delay (Clock=4M) #byte TRISB = 0X86 //Definicin de las posiciones #byte TRISC = 0X87 //de memoria en las que se encuentran #byte PORTC= 0X07 //los registros #byte PORTB = 0X06 #bit RB7 = 0X06.7 #bit RD4 = 0X08.4 void main() { Int X; TRISB = 0x00; while(True) { While (RC4 = 0) { } X = 9; DO { RD7=1; Delay_ms(500); RD7 =0 Delay_ms(500); X=X-1; } While (x>0); } }

S1

//Configuracin PORTB como salida // Ciclo infinito

Ejemplo 3: Lectura y escritura de puertos digitales


Ejemplo 3b: Escriba un programa que cuando se presione el interruptor
S1 haga conmutar el led D1 9 veces a una frecuencia de 1 HZ Usando la librera Use Standard_IO
#INCLUDE <16F877.H> #Use Delay (Clock=4M) #USE STANDARD_IO (B) #USE STANDARD_IO (C)

S1

void main() { Int X;


while(True) // Ciclo infinito { While (input(pin_C4)== 0) { } X = 9; DO { OUTPUT_HIGH(PIN_D7); Delay_ms(500); OUTPUT_LOW(PIN_D7); Delay_ms(500); X=X-1; } While (x>0); } }

Que tanto has aprendido? Taller 1


Ejercicio 1.
Escriba un programa que controle el sistema de la figura que se muestra a continuacin, segn los siguientes requerimientos: a. Cuando se enciende el sistema el led D1 se encuentra apagado. b. Usando las entradas conectadas en el PORTD se puede introducir un valor en binario de 0 a 15 dicho valor indica el numero de veces que debe conmutar el led D1. c. Cuando se presione El interruptor S1 el led D1 debe iniciar la conmutacin tantas veces como se haya programado en el PORTD , dicha conmutacin debe ser por periodos de 1 segundo, es decir 500ms apagado y 500 ms encendido. d. Cuando el led termine de conmutar el numero de veces programado, debe apagarse y el sistema regresa a su estado inicial. Evidencias: Debe realizar el diagrama de flujo, escribir el cdigo y compilarlo usando CCS compiler y simularlo usando Proteus.

S1

Que tanto has aprendido? Taller 1


Ejercicio 2.
Escriba un programa que controle la conmutacin del LED del sistema de la figura que se muestra a continuacin, segn los siguientes requerimientos: a. Si se presiona el interruptor START El led debe conmutar indefinidamente. b. Si se presiona STOP el led debe apagarse Y mantener este estado hasta que se presione nuevamente START

S1

Que tanto has aprendido? Taller 1


Ejercicio 3.
Escriba un programa que controle la velocidad de conmutacin del LED del sistema de la figura que se muestra a continuacin, segn los siguientes requerimientos:

a.

El estado inicial del LED es apagado

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.

d. Si se presiona el interruptor VEL cuatro veces Se regresa al estado inicial.

aplicacin Bsica de Control secuencial Sistema Automtico de Llenado y Mezclado de lquidos


Aplicacin 6:
Disee un sistema con el microcontrolador PIC16F877 que controle El proceso de llenado y mezclado en una planta de fabricacin de Jabn Liquido. Dicho proceso debe comportarse como se describe a continuacin: a. b. Cuando se energiza el sistema se verifican las condiciones inciales. Motor Apagado Vlvulas V1, V2,V3 y V4 cerradas Tanque T4 Vacio. En caso de que el tanque no este totalmente vacio debe abrir la vlvula V4 hasta que se cumpla dicha condicin. c. El sistema queda en espera que el operario active el interruptor de inicio (START). d. Cuando se inicia el sistema se abre la vlvula V1 hasta que se active el sensor S2. e. Activado S2 se cierra V1 y se abre V2 hasta alcanzar el nivel del sensor S3. f. Cuando se active S3 se cierra la vlvula V2 y se abre V3, esperando activacin de S4. g. Una vez que el tanque esta totalmente lleno es decir S4 Activo. Se cierra V3 y se enciende el Motor M . Durante 4 segundos. h. Despus de trascurrido el tiempo se apaga el motor y se abre la vlvula V4. i. Por ultimo el sistema espera que el tanque este totalmente vacio es decir que el sensor S1 se desactive , momento en el que se cierra la vlvula V4 y se regresa al estado inicial.

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

Salidas del PIC RD0 RD1 RD2 RD3 RD4

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.

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

Salidas del PIC RD0 RD1 RD2 RD3 RD4

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; }

continuacin Que tanto has aprendido? Taller 2


Ejercicio 4. Cortadora de acero automtica.
Analice el circuito de la figura 1 y la animacin adjunta en el archivo T03_sierra.swf . Determine cada uno de los sensores y actuadores que hacen parte del proceso. Tenga en cuenta las siguientes condiciones iniciales:

a. b.

Los motores se encuentran en paro Los cilindros estan arriba

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

Figura 1 Sistema Sierra Automtica

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 :

Figura 2 Propuesta Diagrama de Flujo

continuacin Que tanto has aprendido? Taller 2


Ejercicio 5. Llenado automtico de un tanque
Analice el circuito de la figura 3 y la animacin adjunta en el archivo T06_tanque.swf . Determine cada uno de los sensores y actuadores que hacen parte del proceso. Tenga en cuenta las siguientes condiciones iniciales:

a. b.

Bomba apagada Tanque vacio

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

Figura 3 llenado de un tanque

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 :

Figura 4 Propuesta Diagrama de Flujo

continuacin Que tanto has aprendido? Taller 2


Ejercicio 6. Gra automtica
Analice el circuito de la figura 5 y la animacin adjunta en el archivo T07_grua.swf . Determine cada uno de los sensores y actuadores que hacen parte del proceso. Tenga en cuenta las siguientes condiciones iniciales: a. Motor en el extremo derecho y apagado b. El cilindro arriba Nota: El sistema de control no manipula el abastecimiento de las piezas. para girar el motor M se requieren de dos seales segn se muestra el la M1 M2 Motor Siguiente tabla:

STOP

0
1 1

1
0 1

Derecha
Izquierda No permitido

Figura 5. Gra Automtica

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

Funciona miento normal del sistema :

Figura 6 Propuesta Diagrama de Flujo

continuacin Que tanto has aprendido? Taller 2


Ejercicio 7. Marcado de cajas automtico
Analice el circuito de la figura 7 y la animacin adjunta en el archivo T08_marcador.swf . Determine cada uno de los sensores y actuadores que hacen parte del proceso. Tenga en cuenta las siguientes condiciones iniciales: a. b. c. Cilindro c1 arriba Cilindro c2 izquierda . Banda transportadora en stop

Nota: El sistema de control no manipula el abastecimiento de las piezas.

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

Figura 7. Marcado de cajas

Funciona miento normal del sistema :

Figura 8 Propuesta Diagrama de Flujo

También podría gustarte