Advertisement
Electgpl

PIC - Temporizador 2 minutos con RTOS

Jun 19th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. #include<16F883.h>
  2. #use delay(int=4000000)
  3. #fuses NOWDT
  4. //Configuracion sistema operativo
  5. #use rtos(timer=0,minor_cycle=1ms)
  6. //Definicion de variables globales
  7. int num[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};
  8. int secD=5,secU=9,buz=0;
  9. int1 flag_1=0;
  10. //Funcion de sensado de displays
  11. #task(rate=20ms,max=1ms)
  12. void funcion1();
  13. //Funcion de cuenta
  14. #task(rate=850ms,max=1ms)
  15. void funcion2();
  16. //Funcion de buzzer
  17. #task(rate=100ms,max=1ms)
  18. void funcion3();
  19. //Funcion de validacion
  20. #task(rate=20ms,max=1ms)
  21. void funcion4();
  22. //Funcion principal
  23. void main(){
  24.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
  25.    output_low(pin_a0);
  26.    rtos_run();
  27. }  
  28. //secuencia de desarme
  29. void convinacion(void){
  30.    flag_1=0;
  31.    if(input(pin_a3)==0)
  32.       if(input(pin_a4)==0)
  33.          if(input(pin_a5)==0)
  34.             if(input(pin_a6)==0)
  35.                if(input(pin_a7)==0)
  36.                   flag_1=1;
  37. }
  38. //Funcion de sensado de displays
  39. void funcion1(){
  40.    output_b(0b00000001);
  41.    output_c(num[secD]);
  42.    delay_ms(1);
  43.    output_b(0x00);
  44.    convinacion();
  45.    output_b(0b00000010);  
  46.    output_c(num[secU]);
  47.    delay_ms(1);
  48.    output_b(0x00);  
  49.    convinacion();
  50. }
  51. //Funcion de cuenta
  52. void funcion2(){  
  53.    if(flag_1==0){
  54.       if(secU--<1){
  55.          secU=9;
  56.          if(secD--<1){
  57.             secD=5;  
  58.          }
  59.       }
  60.    }
  61. }
  62. //Funcion de buzzer
  63. void funcion3(){
  64.    if(flag_1==0){
  65.       if(secD==0&&secU<5){
  66.          output_toggle(pin_a1);
  67.       }else{
  68.          if(++buz>2){
  69.             output_toggle(pin_a1);
  70.             buz=0;
  71.          }  
  72.       }  
  73.    }  
  74. }
  75. //Funcion de validacion
  76. void funcion4(){
  77.    if((secU==0&&secD==0)||input(pin_a2)==0){
  78.       output_high(pin_a0);
  79.       sleep();
  80.    }else
  81.       output_low(pin_a0);  
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement