#include <18F4550.h> // Definición de registros internos.
#fusesXT,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOPBADEN
#use delay (clock=4000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C) // con esta instruccion evitamos que
#use fast_io(D) // se este configurando cada vez que usamos
#use fast_io(E) // alguna instruccion de entrada o salida
#byte porta=0xf80
#byte portb=0xf81
#byte portc=0xf82
#byte portd=0xf83
#byte porte=0xf84
#int_rb
void control_rb()
{
disable_interrupts(global);
if (input(pin_b4)==0)
{
//COLUMNA 1
portb=0b00001110;
if (input(pin_b4)==0) portd=1;
portb=0b00001101;
if (input(pin_b4)==0) portd=4;
portb=0b00001011;
if (input(pin_b4)==0) portd=7;
portb=0b00000111;
if (input(pin_b4)==0) portd=10;
portb=0;
}
else if (input(pin_b5)==0)
{
//COLUMNA 2
portb=0b00001110;
if (input(pin_b5)==0) portd=2;
portb=0b00001101;
if (input(pin_b5)==0) portd=5;
portb=0b00001011;
if (input(pin_b5)==0) portd=8;
portb=0b00000111;
if (input(pin_b5)==0) portd=0;
portb=0;
}
else if (input(pin_b6)==0)
{
//COLUMNA 3
portb=0b00001110;
if (input(pin_b6)==0) portd=3;
portb=0b00001101;
if (input(pin_b6)==0) portd=6;
portb=0b00001011;
if (input(pin_b6)==0) portd=9;
portb=0b00000111;
if (input(pin_b6)==0) portd=11;
portb=0;
}
else if (input(pin_b7)==0)
{
//COLUMNA 4
portb=0b00001110;
if (input(pin_b7)==0) portd=12;
portb=0b00001101;
if (input(pin_b7)==0) portd=13;
portb=0b00001011;
if (input(pin_b7)==0) portd=14;
portb=0b00000111;
if (input(pin_b7)==0) portd=15;
portb=0;
}
delay_ms(350);
enable_interrupts(global);
}
void main (void)
{
Setup_adc_ports(NO_ANALOGS);
set_tris_b(0b11110000); //RB4 - RB7 COMO ENTRADAS Y RBO - RB3 COMO SALIDAS
set_tris_d(0b00000000); //PUERTO D COMO SALIDAS
port_b_pullups(true); //PULL-UP ACTIVADAS EN EL PUERTO B
portb=0;
portd=0;
enable_interrupts(int_rb); //HABILITAMOS INTERRUPCION POR RB
enable_interrupts(global); //HABILITAMOS INTERRUPCIONES GLOBALES
while(1)
{
sleep();
}
}
No hay comentarios:
Publicar un comentario