UNIVERSIDAD Tร CNICA DEL NORTE
SISTEMAS MICROPROCESADOS Manual Prรกctico con el Microprocesador 16F28A
Marco Hidrobo Soledad Calderรณn
6ยบ CIERCOM
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
OBJETIVO GENERAL
Realizar un manual práctico con los trabajos realizados con el microcontrolador para facilitar el aprendizaje, conocimiento el funcionamiento del mismo
CONTENIDO
1. Programa PIC-C 2. Proteus 3.
Diseño de un semáforo con un indicador de giros
4.
Secuencia de luces
5.
Juego de luces
6.
Contador del 0 al 15 en binario
7.
Contador utilizando un pulsador
8.
Contador en la Lcd
9.
Contador utilizando Teclado y Lcd
10. Temporizador del Timmer0, Timmer1, Timmer2
Soledad Calderón
2
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
Existe varios programas para utilizar el microcontrolador en nuestro caso utilizaremos el PIC-C y para su funcionamiento utilizaremos como simulador el PROTEUS ISIS, para lo cual daremos los pasos de instalación de los mismos para los trabajos que a continuación vamos a explicar .
INSTALACION DEL PIC-C Para la instalación del PIC-C realizaremos los siguientes pasos:
1.
primero descomprimir el archivo recibido
2.
Ejecutamos el archivo de dice PIC-C Compiles CCS
Soledad Calderón
3
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
3.
Ponemos en todo siguiente (Next)
Y ponemos las siguientes ventanas solo (NEXT) ya que no se debe realizar ningún cambio
Soledad Calderón
4
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
4.
Después ejecutamos el PCD IDE
Soledad Calderón
5
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
5.
clic en NEXT
Clic en Next y finalizamos la instalaci贸n del mismo
Soledad Calder贸n
6
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
6.
vamos a la carpeta ICE
Pondremos de igual manera Next ya que instalamos las utilerías q necesita el programa 7.
Y se abrirá la ventana del programa el cual ya podemos seguir utilizando
Soledad Calderón
7
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
INSTALACION DEL PROTEUS
Para la instalaci贸n del Proteus realizamos los siguientes pasos:
1.
Descomprimimos el archivo para instalar
2.
Ejecutamos el archivo instalador setup.exe
3.
Clic en la condici贸n NEXT o siguiente
Soledad Calder贸n
8
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
Se realizara la instalaci贸n del programa con todas sus funciones.
Soledad Calder贸n
9
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
4.
como siguiente nos pedirá la licencia para ello realizamos doble clic el licencia y cargamos las carpetas
Después de ello seleccionaremos las carpetas, realizamos clic en FIND ALL KEYS FILES Luego clic el install, de igual manera se abrirá la ventana del programa ya instalado
Soledad Calderón
10
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CONCEPTOS BASICOS MICROCONTROLADOR 16F628A Características principales del microcontrolador
Procesador tipo RISC (Procesador con un Conjunto Reducido de Instrucciones) Procesador segmentado Arquitectura HARVARD Es capaz de ejecutar instrucciones solamente con un ciclo de instrucción Conexión a Vcc será conectado el pin 14 Conexión a Gnd será conectado el pin 5
Soledad Calderón
11
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
LÓGICA DE PROGRAMACION La lógica de la programación debemos declarar el micro que vamos a utilizar e inicializar los fusibles dependiendo si vamos a utilizar un oscilador interno o un externo esto podemos identificar en la librería q se encuentra en el programa.
#include <16F628A.h> #fuses INTRC_IO, NOCPD, NOWDT, NOPUT, NOLVP, NOBROWNOUT,NOMCLR Debemos declarar la frecuencia de trabajo del microcontrolador lo más factible es trabajar a 4MHz
#use delay (clock=4M)
Inicializar o declarar el puerto a utilizar en este caso trabajaremos con el puerto B, entonces nuestro siguiente paso será declarar cada registro y declaramos el código
#use fast_io(b)
EJERCICIOS PLANTEADOS PARA EL FUNCIONAMIENTO DEL PIC Para el diseño de cada uno de nuestras prácticas daremos a conocerlos significados de los elementos incluidos en los mismos y sus diagramas de flujo ya q son un paso muy importante para la realización del programa de este circuito utilizaremos
Soledad Calderón
12
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
DISEÑO DE UN SEMAFORO CON INDICADOR DE GIRO Para ello daremos a conocer un concepto básico del led
LED Es un diodo emisor de luz. Un semiconductor que emite luz poli cromática, es decir, con diferentes longitudes de onda, cuando se polariza en directa y es atravesado por la corriente eléctrica.
ENUNCIADO Realizar el código para crear un semáforo que se encuentra ubicado en una intersección en una avenida, existirán dos semáforos y un tercer semáforo que indicara la condición de giro para una de las avenidas
DIAGRAMA DE FLUJO
Soledad Calderón
13
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
CODIGO DE PROGRAMACION // Realizamos la declaraci贸n de cada bit del Puerto B #bit RB0=0X06.0 #bit RB1=0X06.1 #bit RB2=0X06.2 #bit RB3=0X06.3 #bit RB4=0X06.4 #bit RB5=0X06.5 #bit RB6=0X06.6 //Damos la inicializaci贸n de cada uno de los puertos los que se van a mantener desconectado void main(void) { set_tris_b(0x00); disable_interrupts(GLOBAL); RB0=0; RB1=0; RB2=0; RB3=0; RB4=0; RB5=0; RB6=0; do { RB0=1; RB1=0; RB2=0; RB3=0; RB4=1; RB5=0; RB6=0; delay_ms(200); //permite identficar el tiempo que va a demorarse para cambiar la condicion RB0=1; RB1=0; RB2=0; RB3=0; RB4=1; RB5=0; RB6=1; delay_ms(2000); RB0=0; RB1=0; RB2=1; RB3=1; RB4=0; RB5=0; RB6=0; delay_ms(2000); RB0=0; RB1=1;
Soledad Calder贸n
14
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
RB2=0; RB3=0; RB4=0; RB5=1; RB6=0; delay_ms(2000); }WHILE (TRUE); }
Simulaci贸n
SECUENCIA DE LUCES ENUNCIADO
Realizar el c贸digo de programa q ocupe la secuencia le luces de todo el puerto B y 5 bits del pueto A
Soledad Calder贸n
15
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
DIAGRAMA DE FLUJO
Soledad Calder贸n
16
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CODIGO DE PROGRAMACION //se declara la posición de memoria del puerto b #byte portb=0x06 //se declara la posición de memoria del puerto a #byte porta =0x05 //declarar el metodo para encendido y apagado de los puertos void main(void) { //se definen distintas variables para diferenciar la condicion // se define una variable on int16 led_on; // se define una variable on1 int16 led_on1; int i; int j ; set_tris_b(0x00); set_tris_a(0x00); disable_interrupts(GLOBAL); do { //Desplazamiento a la izquierda con rotate led_on=1; // comienza el encendido por el puerto b con el for for (i=0;i<=7;i++) { // pone al puerto a lo que tenga la variable led_on portb= led_on; delay_ms(250);// tienpo de demora en rotar de 0.25s rotate_left (&led_on,1);//función para rotar led_on=led_on+1;//incrementa en 1 lo que tenga l variable led_on } led_on=255; led_on1=1; for (j=0;j<=7;j++) // pasa el encendido de los leds al puerto a { porta= led_on1; // pone al puerto a lo que teenga la variable led_on1
Soledad Calderón
17
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
delay_ms(250); // tienpo de demora en rotar de 0.25s rotate_left (&led_on1,1);//funci贸n para rotar led_on1=led_on1+1;//incrementa en 1 lo que tenga l variable led_on1 }
led_on1=100; // for(j=0;j<=9;j++) { porta= led_on; delay_ms(250); led_on=led_on>>1; } led_on=255; for(i=0;i<=7;i++) { portb= led_on; delay_ms(250); led_on=led_on>>1; } }while(TRUE);//ciclo sea infinito }
Simulaci贸n
Soledad Calder贸n
18
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
JUEGOS DE LUCES ENUNCIADO
Realizar el c贸digo que nos permita realizar diferentes juegos de luces utilizando todo el puerto B , que los juegos no repetidos
DIAGRAMA DE FLUJO
Soledad Calder贸n
19
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CODIGO DE PROGRAMACION // Método para el arreglo de juegos de luces arreglos para los juegos de luces
void main(void) { int led_on; int i; signed char k; int puerto; int leds[4]={0b10000001,0b01000010,0b00100100,0b00011000}; int led[8]={0b00000001,0b00000100,0b00010000,0b01000000,0b00000010,0b00001000, 0b00100000,0b10000000}; int le[20]={0b11110000,0b11101000,0b11100100,0b11100010,0b11100001, 0b11100001,0b11010001,0b11001001,0b11000101,0b11000011, 0b11000011,0b10100011,0b10010011,0b10001011,0b10000111, 0b10000111,0b01000111,0b00100111,0b00010111,0b00001111}; set_tris_b(0x00); set_tris_a(0xff); disable_interrupts(GLOBAL);
do { //puerto=porta&0b00000111; puerto=input_a(); switch(puerto) { case 0: // juego 1 do { led_on=1; for(i=0;i<=7;i++) { portb=led_on; delay_ms(250); led_on=led_on<<1; led_on=led_on+1;
Soledad Calderón
20
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
} led_on=255; for(i=0;i<=7;i++) { portb=led_on; delay_ms(250); led_on=led_on<<1; } }while(porta==0b00000000); break;
case 1:
//juego2
do { led_on=0b11111111; for(i=0;i<=4;i++) { portb=led_on; delay_ms(250); led_on=led_on<<1; } led_on=0b11111111; for(i=0;i<=4;i++) { portb=led_on; delay_ms(250); led_on=led_on>>1; }
}while(porta==0b00000001); break; case 2: //juego3 do {
Soledad Calder贸n
21
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
led_on=0b00000001; for(i=0;i<=7;i++) { portb=led_on; delay_ms(250); led_on=led_on<<1; } led_on=0b10000000; for(i=0;i<=7;i++) { portb=led_on; delay_ms(250); led_on=led_on>>1; } }while(porta==0b00000010); break; case 3: //juego 4 do { portb =255; for (i= 0; i< 7; i++) { delay_ms(250); portb = portb>>2; } portb =255; for (i= 0; i< 7; i++) { delay_ms(250); portb = portb<<2; } }while(porta==0b00000011); break; case 4: // juego 5 do {
Soledad Calder贸n
22
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
for(k=0;k<4;k++) { portb=leds[k] ; delay_ms(250); }
} while(porta==0b00000100); break; case 5: // juego 6 do { for(k=0;k<=7;k++) { portb=led[k] ; delay_ms(250); } }while(porta==0b00000101); break; case 6: // juego 7 do {
for(k=3;k>=0;k--) { portb=leds[k]; delay_ms(250); } } while(porta==0b00000110); break; case 7: // juego 8 do {
Soledad Calder贸n
23
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
for(i=0;i<20;i++) { portb=le[i] ; delay_ms(250); }
} while(porta==0b00000111); break;
} }while(TRUE); }
Simulacion
Soledad Calder贸n
24
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CONTADOR DEL 0 A 15 EN BINARIO PULSADOR Es el elemento que permite el paso o interrupción de la corriente mientras es accionado. Cuando ya no se actúa sobre él vuelve a su posición de reposo. Puede ser el contacto normalmente cerrado en reposo NC, o con el contacto normalmente abierto Na.
ENUNCIADO
Realizar el código que nos permita realizar el conteo de 0 al 15 utilizando 4 bits del puerto B, de tal forma que estaran dos pulsadores en el `puerto A el uno de forma ascendente y el otro pulsador de forma descendente
DIAGRAMA DE FLUJO
Soledad Calderón
25
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
CODIGO DE PROGRAMACION //Declaramos una variable para que vaya realizando la haciendo la comparaci贸n y la acumulacion int cont; // en este metodo vamos a poder visualizar la variable declarada void visualizar() { portb=cont; delay_ms(5); } // vamos a realizar la condicion de ascendente void ascendente()
Soledad Calder贸n
26
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
{ if(!input(pin_A0)) { delay_ms(5); if(cont<0x0f) { cont++; } } // se declara la condicion de cuando se presiona el pulsador realice su function de ascendente while(!input(pin_A0)) { output_high(pin_a2); visualizar(); output_low(pin_a2); }
} // metodo desendente y la condicin del Segundo pulsador void descendente() { if(!input(pin_A1)) { delay_ms(5); if((cont>0)&&(cont<=0x0f)) { cont--; } } while(!input(pin_A1)) { output_high(pin_a3); visualizar(); output_low(pin_a3); } }
Soledad Calder贸n
27
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
void main(void) { set_tris_b (0x00); set_tris_a(0b00000011); disable_interrupts(GLOBAL); cont=0; portb=0; output_low(pin_a6); output_low(pin_a7);
do { visualizar(); ascendente(); descendente(); if(cont==0) { output_high(pin_a6); } else if(cont!=0) { output_low(pin_a6); } if(cont==15) { output_high(pin_a7); } else if(cont!=15) { output_low(pin_a7); } }while (true); }
Simulaci贸n
Soledad Calder贸n
28
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CONTADOR DE 0-999 UTILIZANDO EL PULSADOR , DISPLAYS Y LED DISPLAY Una pantalla es el espacio donde se dispone aquella información, espacio que en castellano podría ser entendido como “visualizador” ya que es la porción visual de los elementos a saber
ENUNCIADO
Realizar el código que nos permita realizar el conteo de 0 a 999, que los valores sean visualizados en tres displays, y existan un led indicador si el numero es múltiplo de 2, otro de 3 y otro si es múltiplo de 2 y de 3, los pulsadores estarán conectados al puerto A y los displays en el puerto B estos irán multiplexados
Soledad Calderón
29
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
DIAGRAMA DE FLUJO
CODIGO DE PROGRAMACION #use fast_io(b) #byte portb=0x06 #byte porta=0x05 int i; int j; int k; int l; int tab7seg[3]={4, 2, 1 };
void main (void)
Soledad Calder贸n
30
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
{ set_tris_b(0b11110000); set_tris_a(0b00000000); disable_interrupts(GLOBAL); portb=0; j=0; k=0; l=0; do {
if (bit_test(portb,4)==0) // primer display { delay_ms(5); output_high(pin_a2); output_low(pin_a1); output_low(pin_a0); if(j<0x09) { j++; portb=j; if((j==0b10)||(j==0b100)||(j==0b110)||(j==0b1000)) //solo pares { output_high(pin_a3); delay_ms(500); } else { output_low(pin_a3); } } do { } while(bit_test(portb,4)==0); } if (bit_test(portb,5)==0) // segundo display
Soledad Calder贸n
31
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
{ delay_ms(5); output_high(pin_a1); output_low(pin_a2); output_low(pin_a0);
if(k<0x09) { k++; portb=k; if((k==0b11)||(k==0b110)||(k==0b1001)) //solo impares { output_high(pin_a3); delay_ms(500); } else { output_low(pin_a3); } } do { } while(bit_test(portb,5)==0); } if (bit_test(portb,6)==0) // tercer display { delay_ms(5); output_high(pin_a0); output_low(pin_a1); output_low(pin_a2); do { } while(bit_test(portb,6)==0); if(l<0x09) { l++; portb=l; if((l==0b11)||(l==0b1001)||(l==0b10)||(l==0b100)||(l==0b110)||(l==0b1000))//pares impares {
Soledad Calder贸n
32
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
output_high(pin_a3); delay_ms(500); } else { output_low(pin_a3); } } do { } while(bit_test(portb,6)==0); } if(!input (pin_b7)) // reset { delay_ms(5); j=0; k=0; l=0; portb=j; portb=k; portb=l; }
}while(true); }
Simulaci贸n
Soledad Calder贸n
33
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CONTADOR EN UNA LCD LCD Estas pantallas están integradas por diminutos puntos. Estas pantallas poseen dos capas de material polarizarte. Entre las capas se introduce una solución de cristal líquido. Luego una señal eléctrica hace que los cristales se alineen de tal manera que impidan el paso de la luz. Cuando la pantalla se pone negra, todos sus cristales están alineados para que no pase ningún tipo de luz
ENUNCIADO
Realizar el código que permita el conteo de 0 a 999en la fila superior aparcera el numero de conteo y en la fila inferior los múltiplos, si es múltiplo de 2, 3, 5, 7, si este valor es múltiplo de alguno de ellos se encenderá el múltiplo, existirán 4 pulsadores dos q serán de forma ascendente y descendente que irán contando de uno en uno, y los otros dos de igual manera ascendente y descendente pero contara de 10 en 10 existirá un quinto pulsador q nos servirá de reset
Soledad Calderón
34
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
DIAGRAMA DE FLUJO
Soledad Calder贸n
35
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
CODIGO DE PROGRAMACION #define use_portb_lcd TRUE // ACTIVA PORTB PARA LCD #include <lcd.c> // LIBRERIA #byte porta=0x05 #bit RA0=0x05.0 #bit RA1=0x05.1 #bit RA2=0x05.2 #bit RA3=0x05.3 #bit RA4=0x05.4 long int contador=0; void main(void) { lcd_init(); // Inicia LCD lcd_putc(" Contador \n"); // Saca texto lcd_putc(" 0-999"); // Saca texto delay_ms(255); // Retardo lcd_putc("\f"); // Limpia pantalla lcd_putc(""); // Saca texto while(true) { if(input(pin_A0)==0) // Pregunta si RA0 es cero { do { } while(input(pin_A0)==0); contador++; // Incremento el conteo delay_ms(250); // Para visualizar correctamente el conteo if(contador>=999) // Preguto si A es mayor o igual a 255, { // cuando sea igual iguala "A" a cero contador=999; } if ((contador % 2)== 0) { lcd_gotoxy(7,1); // Acomoda cursor LCD
Soledad Calder贸n
36
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Multiplo de 2 "); } if ((contador % 3)== 0) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Multiplo de 3 "); } if ((contador % 5)== 0) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Multiplo de 5 "); } if ((contador % 7)== 0) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Multiplo de 7 "); } if ((contador % 2== 0)&&(contador % 3== 0)) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Mult de 2 y 3"); } if ((contador % 2== 0)&&(contador % 5== 0)) { delay_ms(255); lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Mult de 2 y 5"); } if ((contador % 2== 0)&&(contador % 7== 0)) { lcd_gotoxy(7,1); lcd_putc(" ");
Soledad Calder贸n
// Acomoda cursor LCD // Limpia ese sector de pantalla
37
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
printf(lcd_putc,"\n Mult de 2 y 7"); } if ((contador % 3== 0)&&(contador % 5== 0)) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Mult de 3 y 5"); } if ((contador % 3== 0)&&(contador % 7== 0)) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Mult de 3 y 7"); } if ((contador % 5== 0)&&(contador % 7== 0)) { lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"\n Mult de 3 y 5"); } } ///////// if(input(pin_A1)==0) { do { } while(input(pin_A1)==0); contador--; // Decrementa el conteo delay_ms(250); // Para visualizar mejor la cuenta if(contador==0) // Pregunta si A llego a cero, cuando sea { // 0 iguala "A" a 255 contador=999; }
Soledad Calder贸n
38
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
} if(input(pin_A2)==0) // Pregunta si RA0 es cero { do { } while(input(pin_A2)==0); contador=contador+10; // Incremento el conteo delay_ms(250); // Para visualizar correctamente el conteo if(contador>=999) // Pregunto si A es mayor o igual a 255, { // cuando sea igual iguala "A" a cero contador=999; } } if(input(pin_A3)==0) // Pregunta si RA1 es cero { do { } while(input(pin_A3)==0); contador=contador-10; // Decrementa el conteo delay_ms(250); // Para visualizar mejor la cuenta if(contador==0) // Pregunta si A llego a cero, cuando sea { // 0 iguala "A" a 255 contador=0; } } lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"%3lu",contador); // Imprime el conteo por la lcd if(input(pin_A5)==0) // Pregunta si RA1 es cero { do { } while(input(pin_A5)==0); contador=0 ; delay_ms(250);
Soledad Calder贸n
39
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
} lcd_gotoxy(7,1); // Acomoda cursor LCD lcd_putc(" "); // Limpia ese sector de pantalla printf(lcd_putc,"%3lu",contador); // Imprime el conteo por la lcd } }
Simulaci贸n
Soledad Calder贸n
40
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
CONTADOR CON EL TECLADO Y LA LCD
TECLADO MATRICIAL La mayoría de los teclados se leen por una técnica de exploración consistente en ir leyendo consecutivamente las filas o las columnas de éste. Hay circuitos especializados en esta tarea, pero es fácil hacer que un microcontrolador lea estos teclados matriciales (los ordenadores compatibles PC incluyen un pequeño microcontrolador que hace esta tarea y envía las teclas pulsadas a la unidad central)
ENUNCIADO
Realizar el código que permita introducir datos desde un teclado matricial y estos sean visualizados en una lcd en la fila superior, en la fila inferior nos dara a conocer si en valore ingresado es un valor par impar o primo.ademas tendra un pulsador para reset.
codigo de programacion #include <kbd_lib.c> #include <lcd.c> #byte kbd_port_b = 8 void main() { int k; //variable int i,a,cont; set_tris_d (0x00); set_tris_b (0xff);
lcd_init(); kbd_init(); i=0; cont=0;
//declaracion de lcd //declaracion de teclado
Soledad Calderón
41
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
lcd_putc("\fPRECIONAR ON...\n"); while (TRUE) { k=kbd_getc(); //variable de ingreso de datos if(k!=0) { if(k=='*') {
//linpia lcd
lcd_putc('\f'); i=0; } else { if(i<2) //ingresa valores de 2 digitos { lcd_putc(k); i++; if(i==2) { for(a=1;a<k;a++) //ciclo { if(k%a==0) { cont=cont+1; } } if (cont<=3) // condicion para el primo { lcd_gotoxy(1,1); printf(lcd_putc,"\n........primo "); cont=0; } if ( cont>2) { printf(lcd_putc,"\n............. ");
Soledad Calder贸n
42
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
cont=0; } if (k%2==0) //ccondicion para numero par { lcd_gotoxy(7,1); printf(lcd_putc,"\n Par"); } else //condicion para numero inpar { lcd_gotoxy(7,1); printf(lcd_putc,"\n Impar"); } } } } } } }
Simulaci贸n
Soledad Calder贸n
43
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
TIMMER TIMMER 0 Cálculos para el timer 0
Para un valor de 50 milisegundos con un prescaler de 256 Despejamos Valor TRMRO TMRO=256-[(Interrupt_TMR0/256)(F.Oscilador/4))] TMRO=256-[(50milisengundos /256)(4 Mhz/4))] TMRO=61 Nota : Como queremos 2.5 segundos debemos hacer un ciclo de 50 repeticiones para llegar al tiempo requerido
TIMMER 1 Cálculos para el timer 1
Soledad Calderón
44
Marco Hidrobo
Universidad técnica del norte Fica-ciercom Sistemas Microprocesados
Para un valor de 500ms tenemos TMR1=65536-[(0.5*4mHZ)/4*8] TMR1=3036 Nota : Como queremos 1.5 segundos debemos hacer un ciclo de 30 repeticiones para llegar al tiempo requerido
TIMMER 2 Cálculos para el timer 2 TempTMR2 = [Preescaler*(PR2+1)*Postscaler]*Tinstr Preescaler = Valor del preescalador PR2 = Valor cargado al registro PR2 Postscaler = Valor del post-escalador Tinstr = 4/frecuencia de oscilación TempTMR2 = Temporización dada en segundos PR2 = [([TempTMR2/(4/fosc)])/(Preescaler*Postscaler)]-1 Para un valor de 50ms PR2 = [([50mS/(4/4Mhz)])/(16*16)]-1 = 194.31 Nota : Como queremos 1 segundo debemos hacer un ciclo de 20 repeticiones para llegar al tiempo requerido
CONTADOR DE O A 9 CON LOS TIMMER 0, 1, 2.
ENUNCIADO
Realizar el código para crear un contador de 0 a 9 utilizando los timmer 0, 1, 2 en los tiempos 2s, 1,5s, 1s respectivamente la salida de los resultados serán visualizados en tres display
CODIGO DE PROGRAMACION #use standard_io(b) #byte portb=0x06 #byte porta=0x05
Soledad Calderón
45
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
int cont1=0; int cont2=0; int cont3=0; int i; int j; int k; #int_TIMER0 // se declara timer 0 para poder utlizarlo void temp0_isr(void) //funci贸n timer0 {
if (bit_test(porta,0)==0) // funciona solo si el switch esta en 0 l贸gico {
output_high(pin_b4); output_low(pin_b5); output_low(pin_b6); cont1++; if(cont1==50) // para que nos de el tiempo de 2s { cont1=0; if(i<9) { i++; // para el contador portb=i; } }
set_TIMER0(61); // RECARGA TIMER CERO }
} #int_TIMER1 void temp1_isr() { if (bit_test(porta,1)==0) { output_high(pin_b5); output_low(pin_b4); output_low(pin_b6); cont2++; //aumenta variable para los ciclos
Soledad Calder贸n
46
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
if(cont2==30) // parq que nos de un tiempo de 1.5s { cont2=0; if(j<9) { j++; portb=j; } }
set_TIMER1(3036); // RECARGA TIMER 1 } } #int_TIMER2 void temp2_isr() { if (bit_test(porta,2)==0) {
output_high(pin_b6); output_low(pin_b4); output_low(pin_b5); cont3++; if(cont3==20) // para que nos de el timer de 1s { cont3=0; if(k<9) { k++; portb=k; } }
set_TIMER2(195); // RECARGA TIMER 2 }
} void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); set_TIMER0(61);
Soledad Calder贸n
47
Marco Hidrobo
Universidad t茅cnica del norte Fica-ciercom Sistemas Microprocesados
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //Configuraci贸n timer set_timer1(3036); // Carga el timer setup_timer_2(T2_DIV_BY_16,195,16); // configuracion timer2 set_timer2(195); // carga el timer enable_interrupts(INT_timer0); enable_interrupts(INT_timer1); enable_interrupts(INT_timer2); enable_interrupts(global); set_tris_b(0b00000000); set_tris_a(0b00001111); portb=0; do {
}while(true); }
SIMULACION
Soledad Calder贸n
48
Marco Hidrobo