Created
April 5, 2014 18:49
-
-
Save chukitow/9996246 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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