Está en la página 1de 4

PREGUNTA 3

Se debe realizar el programa para leer el estado de los interruptores conectados a RA0 y RA1 para
reflejarlo en los leds conectados a RB0 y RB1 respectivamente. Al mismo tiempo el TMR1 debe
generar una interrupción interna cada 0.01 seg. (10 ms) que se repetirá 50 veces con objeto de
hacer intermitencia de 500 ms sobre el led conectado a RB7. Se pide

a) Realizar el diagrama de flujo del programa


b) ESCROBIR EL PROGRAMA COMENTANDO CASA INSTRUCCIÓN O
FUNCION
#include <stdio.h>
#include <stdlib.h>
#include "config.h" //Configuracion del dspic
#include "reloj.h" //Reloj FCY 5MHZ
#include <libpic30.h> //Libreria de delays

void Configurar_Timer(void);
uint8_t x=0;

int main(int argc, char** argv) {

AD1PCFGL=0xFFFF; //Todos los pines digitales


TRISB=0; //Puerto B como salida
LATB=0;
TRISAbits.TRISA0=1; //Pin A0 como entrada
TRISAbits.TRISA1=1; //Pin A1 como entrada
Configurar_Timer();

while(1){

//Leemos pin A0
if(PORTAbits.RA0==1){

LATBbits.LATB0=1;
}else{
LATBbits.LATB0=0;
}

//Leemo pin A1
if(PORTAbits.RA1==1){

LATBbits.LATB1=1;
}else{
LATBbits.LATB1=0;
}
}

return (EXIT_SUCCESS);
}

void Configurar_Timer(void){
//PRX=FCY*TIEMPO/pres-1;
//PRX=5MHz*0.01/1-1;
//PRX=49999;

T1CONbits.TON=0; //Se desactiva el timer1


T1CONbits.TCS = 0;//Modo temporizador
T1CONbits.TGATE = 0;
T1CONbits.TSIDL = 0;
T1CONbits.TCKPS=0b00;// preescaler 1
PR1=49999;// Valor para un tiempo de 0,01 seg
TMR1=0;
IFS0bits.T1IF=0; //bandera en 0
IEC0bits.T1IE=1;// se Habilita las interrupciones
IPC0bits.T1IP=1;//prioridad
T1CONbits.TON=1; //Se activa el timer1

void _attribute((interrupt_,no_auto_psv)) _T1Interrupt(void)


{
IFS0bits.T1IF=0; //bandera en 0
x++;//aumentamos x
if(x==50){//si se repite 50 veces
LATBbits.LATB7=~LATBbits.LATB7;//Toggleamos el led
x=0;//reiniciamos x
}

También podría gustarte