miércoles, 26 de febrero de 2014
FOR
Se utiliza para repetir alguna sentencia
For (inicialización; condición de finalización; incremento)
{
sentencias;
}
En las expresiones del FOR la inicialización es una variable a la cual se le asigna un valor inicial con el que controlar en bucle. Por ejemplo si se utiliza la variable a se puede indicar como inicialización a=0 (se le asigno un valor inicial de 0).
La condición de finalización sirve para evaluar ANTES de ejecutar las sentencias si es cierta o no, en caso de ser cierta se ejecutan las sentencias ( como prender o apagar un led, un motor, etc.). y en caso contrario se sale del FOR. Por ejemplo cuando a es igual a 9 (a=9) entonces se sale de la sentencia FOR.
Por ultimo, la expresión de incremento o decremento modifica la variable de control DESPUÉS de ejecutar el bucle. Por ejemplo si la variable a decrementa (a++), y la inicialización es a=0 y la finalización es a=9 entonces la variable a incrementa de 1,2,.....,8 en este intervalo se repite el bucle hasta que la variable a es igual a 9 (a=9) se sale del bucle.
Se pueden anidar bucles FOR utilizando distintas variables de control.
Si se ejecuta la siguiente expresión se consigue un BUCLE SIN FIN:
For( ; ;)
{
sentencias;
}
For (A=0; A=9; A++)
{
PORTB=0x01;
}
Ejemplo 1: temporizador de 9 a 0 segundos con PIC 16f84a.
MATERIAL:1- PIC16f84a.
1- Crystal 4Mhz.
2- Capacitores cerámicos 22pf.
1- Pushbutton.
1- Resistor 10k.
1- Display 7 segmentos cátodo común.
7-Resistores de 220.
CÓDIGO:
#include <16f84a.h>
#use delay(clock=4000000)
#fuses xt,nowdt,noprotect,noput
#byte trisa=0x85
#byte trisb=0x86
#byte porta=0x05
#byte portb=0x06
byte display[10]={0xDB,0xFB,0x0B,0xF9,0xD9,0xCA,0x9B,0xB3,0x0A,0x7B};
int8 a;
void main(){
trisa=0xff;
trisb=0x00;
while(true){
if(bit_test(porta,0)==1){
for(a=1;a<10;a++){
portb=display[a];
delay_ms(1000);
}
}
else{
portb=display[0];
}
}
}
// Cada vez que se aprieta el porta,0 se inicializa el temporizador hasta que llega a 0.
SIMULACION:
SWITCH
Switch es un caso particular de una decisión múltipleSwich (expresión) // expresión puede ser a, b o por ejemplo el porta
{
case constante 1: // constante 1 puede ser 1, 2, o 0x01, 0x02 o 0b00001,000010
sentencias; //podemos activar un puerto
break;
case constante 2:
sentencias;
break;
...........................
[default:
sentencias;]
}
Evalúa la expresión y en orden a la constante adecuada realiza las sentencias asociadas. Si ninguno de los case corresponde a la constante se ejecuta default (este comando es opcional).
El comando break provoca la salida de swich, de lo contrario se ejecuta el siguiente case.
No puede existir dos case con la misma constante.
el
switch tiene una ventaja en comparación con el if cuando se refiere a
decisiones múltiples ya que con el if necesitamos anidar demasiados if.
El switch se puede utilizar cuando se tiene un gran numero de combinaciones por ejemplo en un seguilineas al haber un gran numero de sensores y cada combinacion binaria de estos sensores realiza una acción en los motores, es conveniente utilizar un switch en lugar de anidar if.
El switch se puede utilizar cuando se tiene un gran numero de combinaciones por ejemplo en un seguilineas al haber un gran numero de sensores y cada combinacion binaria de estos sensores realiza una acción en los motores, es conveniente utilizar un switch en lugar de anidar if.
Switch(A){
case 0:
bit_set(portb,0);
break;
case 1:
bit_set(portb,1);
break;
case 2:
bit_set(portb,2);
break;
}
Ejemplo 2: convertidor de binario a hexadecimal .
MATERIAL:
1- PIC16f887.
1- Cristal 8 Mhz.
2- Capacitores cerámicos.
2- Display 7 segmentos cátodo común.
14- Resistores de 220.
5- Resistores 10k.
1- Dipswitch 5 posiciones.
1- Fuente de 5v.
CÓDIGO:
#include <16f887.h>
#fuses hs,wdt
#use delay(clock=8000000)
#byte trisb=0x86
#byte trisa=0x85
#byte trisd=0x88
#byte portb=0x06
#byte porta=0x05
#byte portd=0x08
byte display[16]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB,0xEB,0xF8,0x71,0xBA,0xF1,0xE1};
byte display_2[4]={0x7B,0x0A,0xB3,0x9B};
int8 a;
void main(){
trisa=0xff;
trisb=0x00;
trisd=0x00;
portb=0x00;
portd=0x00;
while(true){
a=porta;
Switch (a){
case 0:
portd=display[0];
portb=display_2[0];
break;
case 1:
portd=display[1];
portb=display_2[0];
break;
case 2:
portd=display[2];
portb=display_2[0];
break;
case 3:
portd=display[3];
portb=display_2[0];
break;
case 4:
portd=display[4];
portb=display_2[0];
break;
case 5:
portd=display[5];
portb=display_2[0];
break;
case 6:
portd=display[6];
portb=display_2[0];
break;
case 7:
portd=display[7];
portb=display_2[0];
break;
case 8:
portd=display[8];
portb=display_2[0];
break;
case 9:
portd=display[9];
portb=display_2[0];
break;
case 10:
portd=display[10];
portb=display_2[0];
break;
case 11:
portd=display[11];
portb=display_2[0];
break;
case 12:
portd=display[12];
portb=display_2[0];
break;
case 13:
portd=display[13];
portb=display_2[0];
break;
case 14:
portd=display[14];
portb=display_2[0];
break;
case 15:
portd=display[15];
portb=display_2[0];
break;
case 16:
portd=display[0];
portb=display_2[1];
break;
case 17:
portd=display[1];
portb=display_2[1];
break;
case 18:
portd=display[2];
portb=display_2[1];
break;
case 19:
portd=display[3];
portb=display_2[1];
break;
case 20:
portd=display[4];
portb=display_2[1];
break;
case 21:
portd=display[5];
portb=display_2[1];
break;
case 22:
portd=display[6];
portb=display_2[1];
break;
case 23:
portd=display[7];
portb=display_2[1];
break;
case 24:
portd=display[8];
portb=display_2[1];
break;
case 25:
portd=display[9];
portb=display_2[1];
break;
case 26:
portd=display[10];
portb=display_2[1];
break;
case 27:
portd=display[11];
portb=display_2[1];
break;
case 28:
portd=display[12];
portb=display_2[1];
break;
case 29:
portd=display[13];
portb=display_2[1];
break;
case 30:
portd=display[14];
portb=display_2[1];
break;
case 31:
portd=display[15];
portb=display_2[1];
break;
case 32:
portd=display[0];
portb=display_2[2];
break;
case 33:
portd=display[1];
portb=display_2[2];
break;
case 34:
portd=display[2];
portb=display_2[2];
break;
case 35:
portd=display[3];
portb=display_2[2];
break;
case 36:
portd=display[4];
portb=display_2[2];
break;
case 37:
portd=display[5];
portb=display_2[2];
break;
case 38:
portd=display[6];
portb=display_2[2];
break;
case 39:
portd=display[7];
portb=display_2[2];
break;
case 40:
portd=display[8];
portb=display_2[2];
break;
case 41:
portd=display[9];
portb=display_2[2];
break;
case 42:
portd=display[10];
portb=display_2[2];
break;
case 43:
portd=display[11];
portb=display_2[2];
break;
case 44:
portd=display[12];
portb=display_2[2];
break;
case 45:
portd=display[13];
portb=display_2[2];
break;
case 46:
portd=display[14];
portb=display_2[2];
break;
case 47:
portd=display[15];
portb=display_2[2];
break;
case 48:
portd=display[0];
portb=display_2[3];
break;
case 49:
portd=display[1];
portb=display_2[3];
break;
case 50:
portd=display[2];
portb=display_2[3];
break;
case 51:
portd=display[3];
portb=display_2[3];
break;
case 52:
portd=display[4];
portb=display_2[3];
break;
case 53:
portd=display[5];
portb=display_2[3];
break;
case 54:
portd=display[6];
portb=display_2[3];
break;
case 55:
portd=display[7];
portb=display_2[3];
break;
case 56:
portd=display[8];
portb=display_2[3];
break;
case 57:
portd=display[9];
portb=display_2[3];
break;
case 58:
portd=display[10];
portb=display_2[3];
break;
case 59:
portd=display[11];
portb=display_2[3];
break;
case 60:
portd=display[12];
portb=display_2[3];
break;
case 61:
portd=display[13];
portb=display_2[3];
break;
case 62:
portd=display[14];
portb=display_2[3];
break;
case 63:
portd=display[15];
portb=display_2[3];
break;
}
}
}
REFERENCIA:
- COMPILADOR C CCS Y SIMULADOR PROTEUS PARA MICROCONTROLADORES PIC.
Etiquetas:
16f84a,
tutorial CCS,
tutorial CCS compiler y proteus
Suscribirse a:
Enviar comentarios (Atom)
1 comentarios:
buenas tardes.
Excelente pagina. Voy a seguirlos detenidamente. Muy Didáctico y buenas explicaciones.
Gracias por la oportunidad.
Publicar un comentario