Ejercicios Pic c Compiler

MATERIAL DE ENSEÑANZA 09 EJERCICCIOS RESUELTOS CON EL COMPILADOR PIC C COMPILER 1. 2. OBJETIVO.  Programar Microco

Views 217 Downloads 1 File size 376KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

MATERIAL DE ENSEÑANZA 09

EJERCICCIOS RESUELTOS CON EL COMPILADOR PIC C COMPILER

1.

2.

OBJETIVO. 

Programar Microcontroladores con lenguaje de alto nivel “PIC C COMPILER”



Familiarizarse con las instrucciones del compilador PIC C COMPILER.



Editar y compilar programas para Microcontroladores PIC

EJERCICIOS.

2.1 Por el puerto B, que actúa como salida es controlado por el bit 0 del puerto A, que actúa como entrada. De manera tal que: portA.0 =1 se enciende todos los leds de salida portA.0 =0 se apaga todos los leds de salida.

SOLUCION: void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // TODO: USER CODE!! for(;;) {

if((input(pin_a0))==1) { output_b(0b11111111); } else if((input(pin_a0))==0)

{ } }

output_b(0b00000000); }

2.2 Prender y apagar un led cada 0.5 segundos con un 16F84A por RB0

SOLUCION: void main() { int x=500; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_b(0b00000000); output_b(0x00); // TODO: USER CODE!! for(;;) { //

if(input(pin_a0)==0) { delay_ms(x); output_b(0x01); delay_ms(x); output_b(0x00);

} }}

2.3 Prender y apagar 4 leds cada segundo (RB0 a RB3). 0,5 segundos prendido y 0,5 segundos apagado con un 16F84A

SOLUCION: void main() { int x=500; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // TODO: USER CODE!! set_tris_b(0b00000000); output_b(0x00); for(;;) { delay_ms(x); output_b(0b1111); delay_ms(x); output_b(0b0000); } }

2.4 Según el estado de los interruptores RA0 y RA1, activar los leds RB0-RB7 conectados a la puerta B, conforme a la siguiente tabla de la verdad:

SOLUCION: void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // TODO: USER CODE!! output_b(0x00); // poniendo 0 a todos los bits del puerto b set_tris_a(0x3F); //todos los bits como entrada set_tris_b(0x00); //todos como salida while(true) { switch(input_a() & 0b00000011) { case 0: output_b(0b10101010);break; case 1: output_b(0b01010101);break; case 2: output_b(0b00001111);break; case 3: output_b(0b11110000);break; default:; delay_ms(100);

} }

}

2.5 Una lámpara conectada en RB0 se controla mediante dos interruptores conectados en RA0 y RA1. Cuando cualquiera de los interruptores cambie de estado, la lámpara también lo hará. SOLUCION: void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // TODO: USER CODE!! output_b(0x00); set_tris_a(0x3F); set_tris_b(0x00);

output_low(pin_b0); // INICIO DEL BUCLE DEL PROGRAMA. for(;;) {

if((input(pin_a0)==0) && (input(pin_a1)==0)) {

output_low(pin_b0);

}

else if((input(pin_a0)==1) && (input(pin_a1)==0)) { output_high(pin_b0);

}

else if((input(pin_a0)==0) && (input(pin_a1)==1)) { output_high(pin_b0);

}

else if((input(pin_a0)==1) && (input(pin_a1)==1)) {

output_low(pin_b0);

} } }

2.6 Una lámpara conectada en RB0 se controla mediante 3 interruptores conectados en RA0, RA1 y RA2. Cuando 2 interruptores están en estado alto se activara la salida RB0, en otra condición la salida estará apagado. SOLUCION: void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // TODO: USER CODE!! output_b(0x00); // poniendo 0 a todos los bits del puerto b set_tris_a(0x3F); //todos los bits como entrada set_tris_b(0x00); //todos como salida for(;;) {

if((input(pin_a0)==1) && (input(pin_a1)==1) && (input(pin_a2)==0)) { output_b(0b00000001); } else if((input(pin_a1)==1) && (input(pin_a2)==1) && (input(pin_a0)==0)) {

output_b(0b00000001);

} else if((input(pin_a0)==1) && (input(pin_a2)==1) && (input(pin_a1)==0)) {

output_b(0b00000001);

} else { } }

output_b(0b00000000);

}

2.7 Efecto de luces tipo Auto Fantástico con un 16F84A por el puerto b, RB0 a RB7. SOLUCION: #BYTE TRISA = 0x05

// trisb en 85h.

#BYTE PORTA = 0x05 #BYTE TRISB = 0x06

// portb en 85h. // trisb en 86h.

#BYTE PORTB = 0x06

// portb en 86h.

#BYTE OPTION_REG = 0x81 // OPTION_REG EN 81h. void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); // TODO: USER CODE!! while (TRUE) {output_b(0b00000001); delay_ms(100); output_b(0b00000010); delay_ms(100); output_b(0b00000100); delay_ms(100); output_b(0b00001000); delay_ms(100); output_b(0b00010000); delay_ms(100); output_b(0b00100000); delay_ms(100); output_b(0b01000000); delay_ms(100); output_b(0b10000000); delay_ms(100); output_b(0b01000000); delay_ms(100);

output_b(0b00100000); delay_ms(100); output_b(0b00010000); delay_ms(100); output_b(0b00001000); delay_ms(100); output_b(0b00000100); delay_ms(100); output_b(0b00000010); delay_ms(100);

}

}

2.8 Diseñe un contador de 8 bits, que se incrementa cada vez que se pulsa “P” (RA3). Visualice el resultado por el puerto B. Activar un led (RA0), cuando el contador llegue a D’125’ y pagarlo cuando llegue a D’221’. Repetir el ciclo. SOLUCION: // declaracion de variables. #BYTE TRISA = 0x05

// trisa en 85h.

#BYTE PORTA = 0x05

// porta en 85h.

#BYTE TRISB = 0x06

// trisb en 86h.

#BYTE PORTB = 0x06

// portb en 86h.

int A=0; void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); //Setup_Oscillator parameter not selected from Intr Oscillotar Config tab // TODO: USER CODE!! output_b(0x00);

// Todo el Puerto B estara apagado

output_bit(pin_a0,0); while(true)

// Bucle Infinito

{if(bit_test(porta,3)==0) input(pin_a0)

// Si el pulsador conectado en RA0 es cero "0" ;

{A++; output_b(A);

// Muestro "A" por el Puerto B

delay_ms(100);

// Retardo

if(a==256) {A=0; } if(a==125) {output_high(pin_a0); } if(a==221) {output_low(pin_a0);

} }

}

2.9 Utilizando un PIC16F877 realice un Juego de Luces de 8 leds, donde por medio de un Pulsador de Inicio el Juego se coloque en funcionamiento. El Juego se comportara de la siguiente manera: Los leds inicialmente se encenderán solo uno a la vez en secuencia, de izquierda a derecha y de derecha a izquierda; Este proceso lo realizara 5 veces, donde al terminar pasara a la siguiente secuencia que se comportara de la siguiente manera: El secuenciador será de 8 leds donde encenderán uno por uno, y al estar todos encendidos se apagaran; Este Proceso se realizara 4 veces. Luego todo este proceso se realizara nuevamente. Nota: Utilice las instrucciones RLF y RRF. SOLUCION: void main() { int i=1,ii=1,h=1; setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); set_tris_d(0b00000000); for(;;) {

if(input(pin_b0)==1)

{ output_d(0b00000000); delay_ms(100); } else if(input(pin_b0)==0) {

for(i==1;i