Issuu on Google+

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


Manual de prácticas micro-controladores en Pic C Compiler