Skip to content

Instantly share code, notes, and snippets.

@chukitow
Created April 5, 2014 18:49
Show Gist options
  • Select an option

  • Save chukitow/9996246 to your computer and use it in GitHub Desktop.

Select an option

Save chukitow/9996246 to your computer and use it in GitHub Desktop.
#include <16F877A.h>
#fuses XT, NOWDT, PUT, NODEBUG, NOBROWNOUT, NOPROTECT, NOLVP, NOWRT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
//determinamos las variables globales que utilizaremos en el codigo.
int8 var1;
int8 var2,var3;
signed int16 resu; //se declara la variable del resultado de acuerdo al maximo
//numero que puede salir en las operacion realizadas, y el
//signed es el que permite identificar los numeros negativos y mostrarlos.
boolean bandera;
//codigo que permite realizar la interrupcion.
#int_rb // es la que permite que se ejecute la rutina interrupcion, y se pone seguido de la misma
//ya que no puede ir aparte de esta
void rutina(void) //Rutina de interrupcion.
{
if (input_b()>=0x10)
{
var1=(input_b()& 0xF0);
}
bandera=true;
}
void main(void)
{
set_tris_a(0x00); //se declaran los puertos a como Salida.
set_tris_b(0xF0); //se declaran los puertos a utilizar de b como Salida los cuales son los primeros 4, rb0,rb1,rb2 y rb3.
set_tris_c(0xFF); //se declaran los puertos c como Entrada.
set_tris_d(0xFF); //se declaran los puertos d como Entrada.
//Habilitar las mascaras de las interrupciones la cuales permiten que se detecten las interrupciones.
enable_interrupts(global);
enable_interrupts(int_rb);
while (true) //ciclo while que permite utilizarse infinitamente.
{
if(bandera!=false)
{
var2=input_c();
var3=input_d();
if (var1==0x10)
{
resu=(int16)var2+(int16)var3;
output_a(resu);
output_b(resu>>6);
var1=0x00;
}
else if (var1==0x20) //RESTA.
{
resu=(int16)var3-(int16)var2;
output_a(resu);
output_b(resu>>6);
var1=0x00;
}
else if (var1==0x40) //MULTIPLICACION.
{
resu=(int16)var2*(int16)var3;
output_a(resu);
output_b(resu>>6);
var1=0x00;
}
else if (var1==0x80) //DIVICIÓN.
{
resu=(int16)var3/(int16)var2;
output_a(resu);
output_b(resu>>6);
var1=0x00;
}
} //Se finaliza el ciclo while.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment