Está en la página 1de 7

1.

En base al semáforo explicado en clase haga las modificaciones necesarias para


que funcione según las siguientes condiciones:
/*
* File: SEMAFORO.c
* Author: MAMANI RAMOS DIEGO ENRIQUE
*
* Created on 9 de julio de 2017, 07:04 PM
*/
#include <xc.h>
// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is
digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection
off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all
program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//Configuramos el cristal
#define _XTAL_FREQ 4000000
void main(void) {
//Configurando registros a los puertos
TRISD = 0b00011000; //BIT 3 y BIT 4 del puerto D seran como entradas
PORTDbits.RD0 = 0;
PORTDbits.RD1 = 0;
PORTDbits.RD2 = 0;
PORTDbits.RD5 = 0;
PORTDbits.RD6 = 0;
PORTDbits.RD7 = 0;
//Condicion while
while (1)
{
PORTD = 0b10000001;
__delay_ms(3000);

PORTD = 0b01000001;
__delay_ms(2000);

PORTD = 0b00100100;
__delay_ms(3000);

PORTD = 0b00100010;
__delay_ms(2000);
}

return;
}
FALSE

TRUE
2. Para el programa contador ascendente explicado en clase. Realice las modificaciones para
que pueda funcionar como un contador ascendente descendente (pulsador 1 para
ascender y pulsador 2 para descender).
Utilice el puerto B RB0 y RB1 para los respectivos pulsadores

RB0 ascendente
RB1 descendente

Se pide adicionalmente que solo cuente hasta 10 y si se descuenta solo hasta 0.


Ello será indicado mediante 2 lets, RB7 y RB4 donde RB4 permanecerá encendido mientras
que llegue a 10 y RB7 permanecerá apagado.

Contador = 10 Contador < 10


RB4 OFF RB4 ON
RB7 ON RB7 OFF
/*
* File: contador.c
* Author: MAMANI RAMOS DIEGO ENRIQUE
* Created on 9 de julio de 2017, 08:27 PM
*
* Uso del display 7 segmentos como contador
* ascendente.
*/
//Variables Globales
int contador = 0, a, b, c, d;
int centenas, decenas, unidades;
//Declaracion de procedimientos
void ent_2_bcd(int valor);
void visualizar();
//Archivos de cabecera
#include <xc.h>
// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming
Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code
protection off)

//Configuramos el cristal
#define _XTAL_FREQ 4000000
/* +-------------------------+
* | DECLARA PROCEDIMIENTO |
*| RETARDO |
* +-------------------------|*/

//Programa principal
void main(void)
{
TRISD = 0x00; //Puerto D como salida
TRISB = 0x0F;/*Los 4 LSB como entrada y los
* 4MSBcomo salida*/
//Puerto D apagado (OFF)
PORTD = 0x00;

while(1)
{
ent_2_bcd(contador); //Llamada a procedimiento
a = 0;
b = centenas;
c = decenas;
d = unidades;
visualizar(); //Llamada a procedimiento
if (PORTBbits.RB0==0)
{
if(contador<10)
{
++contador;
visualizar();
}

if (contador>=0&& contador<10)
PORTBbits.RB7=1;
if (contador==10)
PORTBbits.RB5=1;
}
else if (PORTBbits.RB1==0)
{
if(contador<10)
{
--contador;
visualizar();
}

if (contador>=0&& contador<10)
PORTBbits.RB7=1;
if (contador==10)
PORTBbits.RB5=1;
}

return;
}

void ent_2_bcd(int valor)


{
centenas = (int) valor/100;
valor -= centenas*100; //valor = centenas*100 - valor
decenas = (int) valor/10;
valor-= decenas*10;
unidades = valor;
}
void visualizar()
{
PORTD = ((a&0b00001111)|(0b00010000));
__delay_ms(5);
PORTD = ((b&0b00001111)|(0b00100000));
__delay_ms(5);
PORTD = ((c&0b00001111)|(0b01000000));
__delay_ms(5);
PORTD = ((d&0b00001111)|(0b10000000));
__delay_ms(5);
}

También podría gustarte