Está en la página 1de 11

Solucionario de practica

calificada-01
Sesion6
JACOB ASTOCONDOR VILLAR
P1.- (5 puntos)

Debido a un accidente de circulación se han colocado cuatro señales luminosas a cada lado de la
calzada para que sirvan de advertencia a los conductores que circulan por esa ruta (ver figura). El control
del encendido/apagado se realiza mediante un microcontrolador dsPIC33FJ32MC202 y unos drivers
conectados a los terminales del puerto B, como indica la figura.
 El sistema debe arrancar con todas las lámparas apagadas. Al apretar el pulsador conectado a RA4,
debe comenzar la siguiente secuencia de luces: L0, L2, L4, L6, L1, L3, L5 y L7, es decir, primero las
de la derecha y luego las de la izquierda. Al finalizar la secuencia, el ciclo debe repetirse
indefinidamente.

 El oscilador es XT de 4 MHz y el ciclo completo debe durar (más o menos) 1 segundo.


Se pide:
a) Escriba el programa en lenguaje C
b) Hacer el esquema ( circuito ) completo dejando listo para operar
#include <xc.h>
#include"p33fj32mc202.h" __delay_ms(125);
PORTB=0b01010111;//RB0=1,RB2=1, RB4=1,RB6,RB1
#include "config.h"
__delay_ms(125);
#include "reloj.h"
PORTB=0b01011111; //RB0=1,RB2=1, RB4=1,RB6,RB1 ,RB3
#include <libpic30.h> __delay_ms(125);
//Función principal PORTB=0b01111111; //RB0=1,RB2=1, RB4=1,RB6,RB1 ,RB3,RB5
int main(){ __delay_ms(125);
AD1PCFGL=0XFFFF; // Pines digitales PORTB=0b11111111;
TRISB=0x0000; //Puerto B como salida // RB0=1,RB2=1, RB4=1,RB6,RB1 ,RB3,RB5,RB7
PORTB=0x0000; // leds apagados __delay_ms(125);
TRISA=0XFFFF; // Puerto A como entrada de datos PORTB=0b00000000;
while(1){ //iniciamos ciclo infinito __delay _ms(125);

if(PORTAbits.RA4==0) // interruptor cerrado? }


else{
{ PORTB=0X0000;
PORTB=0b00000001; // RB0=1 }
__delay_ms(125); Return (0);
PORTB=0b00000101;// RB0=1 , RB2=1 }
__delay_ms(125); }
PORTB=0b000010101; // RB0=1 , RB2=1, RB4=1
__delay_ms(125);
PORTB=0b01010101; //RB0=1 , RB2=1, RB4=1,RB6
+ 3 .6 V

R 1
10k

RESET RB0
PIN1
+ 3 .6 V
SW 1
.

R 2
10K RB7 CIRCUITO EXPERIMENTAL
PIN
RA4
2

SW 2
D 8 D 7 D 6 D 5 D 4 D 3 D 2 D 1
1

dsPIC33FJMC202

UBICACIÓN DE LAS
LAMPARAS
P2.- (5 puntos)

Mediante el microcontrolador dsPIC33FJ32MC202 debe Leer el estado de 2


interruptores/pulsadores conectados al puerto A: RA4-RA3 y reflejar el nivel lógico de los
mismos sobre los leds conectados al puerto B: RB5-RB4, se pide:
a) Realizar el circuito completo dejando listo para hacer pruebas en el laboratorio-VIRTUAL
b) Realice un diagrama de flujo del programa a realizar
c) Escriba las instrucciones en c y comente cada una de ellas.
+ 3 .6 V

R 1
10k

RESET
PIN1
+ 3 .6 V + 3 .6 V
SW 1
. RB4RB4
R 3 R 2
10K 10K
PIN
RB5
RB5
RA3

PIN
2

SW 3 SW 2 RA4
D 5 D 4
1

dsPIC33FJMC202
PROGRAMA : LEER Y
ESCRIBIR EN LOS
PUERTOS

Configuracion
de puertos

NO SI
RA3=0?

RB4=1 RB4=0

NO SI
RA4=0?

RB5=1 RB5=0
#include <stdio.h>
#include <stdlib.h> // ************CHEQUEAR PIN RA4
#include "config.h" if(PORTAbits.RA4==1){
#include "reloj.h" LATBbits.LATB5=1;
#include <libpic30.h>
#include <p33FJ32MC202.h> }else{
int main( ) LATBbits.LATB5=0;
{ }
AD1PCFGL=0xFFFF; //Todos los pines digitales }
return (0);
TRISAbits.TRISA3=1;//PIN A3 entrada }
TRISAbits.TRISA4=1;//PIN A4 entrada

TRISBbits.TRISB4=0;//Pin B3  salida
TRISBbits.TRISB5=0;//Pin B4  salida

while(1)
{ // ********CHEQUEAR PIN RA3
if(PORTAbits.RA3==1){
LATBbits.LATB4=1;
}else{
LATBbits.LATB4=0;
}
P3. ( 4 puntos)

  NAME.C
Encender y apagar un led cada 50
segundos; ubicado en el pin RB11 , el declaracion variables
config.de puertos
control del tiempo debe realizarse con dos
timers ( timer2 y timer3) en modo 32bits ,
NO
considere la frecuencia del reloj RB7=0
Fosc=4MHZ
a) Realizar un diagrama de flujo del ENCENDER LED
50seg
programa
b) Escribir el programa en lenguaje C LLAMAR RUTINA
RETARDO 50seg
c) El encendido y apagado del led debe TIMER 32 BITS
comenzar cuando se cierra un
APAGAR LED
interruptor ubicado en el pin RB7 :
Realizar el circuito dejando listo para
hacer pruebas RUTINA :50seg
TIMER32 BITS
#include <stdio.h>
#include <stdlib.h> void retardo_Timer32(void)
#include "config.h" {
#define FCY 2000000UL // Calculos : PRX=FCY*TIEMPO/pres-1;
void retardo_timer32(void); // valor: PRX=1,562,499 , tiempo para 50 seg.
Int main () T3CONbits.TON = 0; //desactivamos el timer 3
{ T2CONbits.TON = 0; //desactivamos el timer 2
AD1PCFGL=0xFFFF; T2CONbits.T32 = 1; //activar timer 32 bits
TRISBbits.TRISB7=0;//PIN B7  SALIDA T2CONbits.TCS = 0; //Como temporizador
TRISBbits.TRISB11=0;//PIN B11 SALIDA T2CONbits.TGATE = 0;
LATB=0; T2CONbits.TCKPS = 0b10; //preescaler de 64
while(1) TMR3 = 0;
{ TMR2 = 0;
if(PORTAbits.RB7==0) // interruptor cerrado? PR2 = 0xD783;
{ PR3 = 0x0017;
_LATB11= 1;
IPC2bits.T3IP = 1; //prioridad de la interrupcion
retardo_timer32();
_LATB11= 0; IFS0bits.T3IF = 0; //bandera de la interrupcion
retardo_timer32(); IEC0bits.T3IE = 0; //se activa las interrupciones
} T2CONbits.TON = 1; //activamos el timer 32
else{ while(IFS0bits.T3IF==0);
PORTB=0X0000; }
}
}
return (0);
}
P4.( 2 puntos) El timer1 dsPICFJ32MC202 se configura en modo temporizador de 16 bits; con un cristal
externo de 4 MHZ, se configura el reloj modo primario ¿Cuánto es la máxima temporización que puede
realizar? Marcar la respuesta correcta
a) 7.60 seg
  2
b) 14.60 seg 𝑇 𝑚 = ∗ 𝑃 𝑠 ∗ 𝑃𝑅 1 − → 𝑃𝑅 1= 65536
𝐹 𝑜𝑠𝑐
c) 8.34 seg
d) 16.34 seg

P5. ( 2 puntos) . Encender y apagar cada 2000ms un led ubicado en el pin RB15 del dsPIC; con Fosc= 4
MHZ; prescaler Ps=64; cuanto es el valor a cargar en el registro periódico del TIMER1: MARCAR EL VALOR
CORRECTO
a) 8B12h
b) 7B13h
c) 7A12h
d) 7C13h
P6.( 2 puntos) . Para configurar el TMR1 EN MODO CONTADOR, PRESCALER Ps= 8 y timer1
habilitado el registro T1CON se carga con el valor: marcar la respuesta correcta
a) 1012h
b) 7012h
c) 8012h T1CON
d) 8013h

También podría gustarte