Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 14.24 KB | None | 0 0
  1. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * *
  2. ;*        TITULO: PROJETO (CORREDOR: ACIONAMENTO DE LÂMPADAS E ALARME DE INCÊNDIO)                      *
  3. ;*                                                                                                                                       *
  4. ;*                                                                                                                    *
  5. ;*      DESENVOLVIDO PELO GRUPO:                                                              *
  6. ;*   => WANDERLEY JOSE ROMUALDO DA SILVA FILHO                                                                                          *
  7. ;*   => EMERSON LIMA                                                                            *
  8. ;*   => BIANCA SANTA CRUZ                                                                                   *
  9. ;*                                                                                                        *
  10. ;*      VERSÃO: 2.0                             DATA: 19/10/2018                                               *
  11. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  12. ;*                      DESCRIÇÃO DO ARQUIVO                                                                   *
  13. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  14. ;* PROGRAMA PARA ACIONAMENTO INTELIGENTE DE LÂMPADAS E SENSOR DE FUMAÇA                               *
  15. ;*                                                                                                  *
  16. ;*                                                                                                                                        *
  17. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  18.  
  19. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  20. ;*                     ARQUIVOS DE DEFINIÇÕES                                                                   *
  21. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  22.  
  23. #include <p16f628a.inc>     ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A
  24.  
  25.     list        p=16f628a
  26.  
  27. ; --- FUSE BITS ---
  28.     __config     _BOREN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON
  29. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  30. ;*                    PAGINAÇÃO DE MEMÓRIA                                                                       *
  31. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  32. ;DEFINIÇÃO DE COMANDOS  PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
  33. #define     bank0       bcf     STATUS,RP0
  34. #define     bank1       bsf     STATUS,RP0
  35.  
  36. ; --- CONSTANTES ---
  37. DELAY_1S    equ     D'246'
  38.  
  39. ; --- ENTRADAS ---
  40. #define     sensor_pres1        PORTB,RB4   ;
  41. #define     sensor_pres2        PORTB,RB5   ;           SENSOR_PRES = 1 --> PRESENÇA DETECTADA
  42. #define     sensor_pres3        PORTB,RB6   ;
  43. #define     sensor_luminosidade PORTB,RB2   ;           SENSOR_LUMIN = 1 --> DEVE-SE LIGAR A LUZ
  44. #define     sensor_fumaca       PORTB,RB0   ;           SENSOR_FUMACA = 1 --> FUMAÇA DETECTADA
  45. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  46. ;*                           SAÍDAS                                                                                               *
  47. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  48. ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
  49. #define     buzina              PORTA,RA3       ; buzina de incêndio
  50. #define     led_buz             PORTB,RB3       ; LED DA BUZINA DE INCÊNDIO
  51. #define     on                  PORTB,RB1       ; led de on/off
  52. #define     luminaria1          PORTA,RA0       ; Luminárias da primeira seção       (luz1)
  53. #define     luminaria2          PORTA,RA1       ; Luminárias da segunda seção        (luz2)
  54. #define     luminaria3          PORTA,RA2       ; Luminárias da terceira seção       (luz3)
  55. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  56. ;*                          DEFINIÇÕES GERAIS                                                *
  57. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  58. ;DEFINIÇÃO DE MNEMÔNICOS PARA ACESSO A BITS DE REGISTRADORES
  59. #DEFINE     HGINT       INTCON, GIE         ;HABILITACAO GERAL
  60. #define     thab        INTCON,TOIE         ; Interrupção do timer ativada
  61. #define     tflag       INTCON,T0IF         ; Flag para estouro do timer
  62. #define     extflag     INTCON,INTF         ; interrupcao externa
  63. #define     rflag       INTCON,RBIF         ; interrupcao de mudanca de estado RB4 - RB7
  64. #define     zero        STATUS,Z            ; resultado da ultima operacao foi 0
  65. #define     pos_sensor1      B'00000001'         ; sensor de presenca 1 ativo
  66. #define     pos_sensor2      B'00000010'         ; sensor de presenca 2 ativo
  67. #define     pos_sensor3      B'00000100'         ; sensor de presenca 3 ativo
  68. #define     pos_sensor_fum     B'00001000'         ; sensor de fumaca   ativo
  69. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  70. ;*                             VARIÁVEIS                                                              *
  71. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  72. ;DEFINIÇÃO DO BLOCO DE VARIÁVEIS
  73.     cblock 0x20
  74.         W_TEMP                          ; REGISTRADORES TEMPORÁRIOS PARA
  75.         STATUS_TEMP                     ; INTERRUPÇÕES
  76.         tempo1                          ; CONTADOR DA LÂMPADA 1
  77.         tempo2                          ; CONTADOR DA LÂMPADA 2
  78.         tempo3                          ; CONTADOR DA LÂMPADA 3
  79.         tempo_sensor_fumaca             ; CONTADOR DO SENSOR DE FUMAÇA
  80.         vetor_presenca                  ; VETOR COM AS POSIÇÕES DOS SENSORES DE PRESENÇA
  81.         flag_cont                       ; VETOR COM AS FLAGS DE CONTAGEM
  82.     endc
  83.  
  84. ; ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  85. ;*                       VETOR DE RESET                                                                                   *
  86. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  87.     org         H'0000'     ; ORIGEM NO ENDERECO 0 DE MEMORIA
  88.     goto        main        ; DESVIA DO VETOR DE INTERRUPCAO
  89.  
  90. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  91. ;*                       INICIO DA INTERRUPÇÃO                                               *
  92. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  93.     org         H'0004'                 ; TODAS AS INTERRUPCOES APONTAM PARA ESTE VETOR
  94.     movwf       W_TEMP                  ; SALVA W EM W_TEMP
  95.     swapf       STATUS,W
  96.     bank0                
  97.     movwf       STATUS_TEMP             ; SALVA STATUS EM STATUS_TEMP
  98.    
  99. ;************************************************************************
  100. ;*                  ROTINA DE ATENDIMENTO DA INTERRUPÇÃO              *
  101. ;************************************************************************
  102.     btfsc       extflag                 ; interrupcao pelo sensor de fumaca?
  103.     call        test_fumaca            
  104.  
  105.     btfsc       rflag                   ; VERIFICA INTERRUPÇÃO POR MUDANÇA DE ESTADO.
  106.     call        check_pres         
  107.    
  108.     btfsc       tflag                   ; FLAG QUE ATIVA FINAL DA CONTAGEM DE    
  109.     call        contador                ; 1 segundo
  110. ;*************************************************************************
  111. ;*                          SAÍDA DA INTERRUPÇÃO                      *
  112. ;*************************************************************************
  113. SAI_INT
  114.     SWAPF   STATUS_TEMP,W
  115.     MOVWF   STATUS      ;MOVE STATUS_TEMP PARA STATUS
  116.     SWAPF   W_TEMP,W    ;MOVE W_TEMP PARA W    
  117.     RETFIE              ; RETORNA A INTERRUPCAO
  118. ;*************************************************************************
  119. ;*                          ROTINAS E SUB-ROTINAS                        *
  120. ;*************************************************************************
  121. ;DEFINIÇÃO DAS ROTINAS E SUB-ROTINAS:
  122. test_fumaca:
  123.     bcf         HGINT
  124.     bcf         extflag             ; limpa a flag da interrupção
  125.     btfss       sensor_fumaca       ; Checa sensor de fumaça. Sensor ativo?
  126.     goto        reset_contf         ; Não, reseta contagem da fumaça
  127.     bsf         flag_cont,pos_sensor_fum
  128.     return
  129. reset_contf:
  130.     movlw       D'10'               ; Move 10 decimal para work
  131.     movwf       tempo_sensor_fumaca     ; Move 10 segundos de contagem do sensor de fumaça p/ contador
  132.     bcf         buzina              ; Não, buzina desligada.
  133.     return
  134. check_pres:
  135.     btfss       sensor_luminosidade
  136.     return     
  137.     btfss       sensor_pres1                ;CHECA O PRIMEIRO SENSOR DE PRESENÇA. HÁ ALGÚEM NA PRIMEIRA SEÇÃO?
  138.     goto        check_timer1                ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
  139.     bsf         vetor_presenca,pos_sensor1  ;Sim, altero a varíável dizendo que há alguém na seção 1.
  140.     bsf         luminaria1                  ;Primeira luz acessa
  141.     bcf         flag_cont,pos_sensor1      
  142.     goto        check_pres2
  143. check_timer1:
  144.     btfss       vetor_presenca,pos_sensor1  ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
  145.     goto        check_pres2                 ;SIM, VÁ CHECAR A SEÇÃO 2.
  146.     bsf         flag_cont,pos_sensor1       ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 1.
  147.     bcf         vetor_presenca,pos_sensor1  ;LIMPO A VARIÁVEL DE PRESENÇA
  148. check_pres2:
  149.     btfss       sensor_pres2                ;CHECA O SEGUNDO SENSOR DE PRESENÇA. HÁ ALGÚEM NA SEGUNDA SEÇÃO?
  150.     goto        check_timer2                ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
  151.     bsf         vetor_presenca,pos_sensor2  ;Sim, altero a varíável dizendo que há alguém na seção 2.
  152.     bsf         luminaria2                  ;SEGUNDA LUZ ACESSA
  153.     bcf         flag_cont,pos_sensor2      
  154.     goto        check_pres3
  155. check_timer2:
  156.     btfss       vetor_presenca,pos_sensor2  ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
  157.     goto        check_pres3                 ;SIM, VÁ CHECAR A SEÇÃO 2.
  158.     bsf         flag_cont,pos_sensor2                   ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 2.
  159.     bcf         vetor_presenca,pos_sensor2  ;LIMPO A VARIÁVEL DE PRESENÇA
  160. check_pres3:
  161.     btfss       sensor_pres3                ;CHECA O TERCEIRO SENSOR DE PRESENÇA. HÁ ALGÚEM NA SEGUNDA SEÇÃO?
  162.     goto        check_timer3                ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
  163.     bsf         vetor_presenca,pos_sensor3  ;Sim, altero a varíável dizendo que há alguém na seção 2.
  164.     bsf         luminaria3                  ;SEGUNDA LUZ ACESSA
  165.     bcf         flag_cont,pos_sensor3      
  166.     goto        end_check
  167. check_timer3:
  168.     btfss       vetor_presenca,pos_sensor3  ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
  169.     goto        end_check                   ;SIM, VÁ CHECAR A SEÇÃO 2.
  170.     bsf         flag_cont,pos_sensor3       ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 2.
  171.     bcf         vetor_presenca,pos_sensor3  ;LIMPO A VARIÁVEL DE PRESENÇA    
  172.    
  173. end_check:
  174.     bcf         rflag                       ;LIMPA A FLAG DA INTERRUPÇÃO
  175.     goto        SAI_INT
  176.  
  177. contador:
  178.     bcf         tflag                   ;Flag em zero
  179.     movlw       DELAY_1S                ;Move delay de 1s para work
  180.     movwf       TMR0                    ;Move delay de 1s para o timer
  181.     btfsc       flag_cont,pos_sensor_fum
  182.     call        dec_fum
  183.     btfsc       flag_cont,pos_sensor1
  184.     call        dec_temp1
  185.     btfsc       flag_cont,pos_sensor2
  186.     call        dec_temp2  
  187.     btfsc       flag_cont,pos_sensor3
  188.     call        dec_temp3
  189.     return
  190. dec_fum:
  191.     decfsz      tempo_sensor_fumaca
  192.     return
  193.     goto        incendio
  194. incendio:
  195.     bsf         buzina              ; Sim, liga buzina
  196.     bsf         luminaria1
  197.     bsf         luminaria2
  198.     bsf         luminaria3
  199.     btfsc       sensor_fumaca
  200.     goto        incendio
  201.     goto        main
  202. dec_temp1:
  203.     decfsz      tempo1,1                ;Decrementa contador. Contador em zero?
  204.     return                              ;Não,volta para contador
  205.     call        reset_cont1             ;Sim, reseta contagem. 
  206.     return
  207. dec_temp2:
  208.     decfsz      tempo2,1                ;Decrementa contador. Contador em zero?
  209.     return                              ;Não,volta para contador
  210.     call        reset_cont2             ;Sim, reseta contagem. 
  211.     return
  212. dec_temp3:
  213.     decfsz      tempo3,1                ;Decrementa contador. Contador em zero?
  214.     return                              ;Não,volta para contador
  215.     call        reset_cont3             ;Sim, reseta contagem. 
  216.     return
  217.    
  218. reset_cont1:
  219.     movlw       D'60'
  220.     movwf       tempo1
  221.     bcf         flag_cont, pos_sensor1
  222.     bcf         luminaria1
  223.     return
  224. reset_cont2:
  225.     movlw       D'60'
  226.     movwf       tempo2
  227.     bcf         flag_cont, pos_sensor2
  228.     bcf         luminaria2
  229.     return
  230. reset_cont3:
  231.     movlw       D'60'
  232.     movwf       tempo3
  233.     bcf         flag_cont, pos_sensor3
  234.     bcf         luminaria3
  235.     return
  236.  
  237. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  238. ;*                     INICIO DO PROGRAMA                                                                          *
  239. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  240. main:
  241.     bank1
  242.     movlw       H'00'           ; W = B'00000000'
  243.     movwf       TRISA           ; TODO PORTA COMO SAÍDA
  244.     movlw       B'01110101'     ; B'01110101'  
  245.     movwf       TRISB           ; PINOS RB0/RB2/RB4/RB5/RB6/RB7 COMO ENTRADAS
  246.     movlw       H'F1'           ; W = B'11110001'
  247.     movwf       OPTION_REG      ; BIT5 = 1 (CLOCK EXTERNO NO TIMER)/BIT4 = 1 (INCREMENTAÇÃO NA DESCIDA NO CLOCK)
  248.                                 ; BIT3 = 0 (PRESCALER NO TIMER)/ BIT2-0 = 001 (PRESCALER 1:4)
  249.                                
  250.     movlw       B'10111000'    
  251.     movwf       INTCON          ; DEFINE OPCOES DE INTERRUPCAO
  252.  
  253.     movlw       B'00001000'    
  254.     movwf       PCON            ; UTILIZAR CRISTAL INTERNO DE 4MHZ
  255.     bank0
  256.  
  257.     movlw       B'00000111'    
  258.     movwf       CMCON           ; DESATIVA COMPARADORES
  259.  
  260.     movlw       B'00000000'
  261.     movwf       PORTB           ; MANTER SAÍDAS EM LOW AO INCIAR O PIC
  262.     movlw       B'00000000'
  263.     movwf       PORTA           ; MANTER SAÍDAS EM LOW AO INICIAR O PIC
  264.  
  265.     movlw       D'60'
  266.     movwf       tempo1              ; inicializa contador do sensor de presenca1
  267.     movlw       D'60'
  268.     movwf       tempo2              ; inicializa contador do sensor de presenca2
  269.     movlw       D'60'
  270.     movwf       tempo3              ; inicializa contador do sensor de presenca3
  271.     movlw       D'10'
  272.     movwf       tempo_sensor_fumaca ; inicializa contador do sensor de fumaca
  273.     movlw       D'0'
  274.     movwf       vetor_presenca      ; zerando variável vetor_presenca
  275.     movlw       D'0'
  276.     movwf       flag_cont
  277.     clrf        TMR0                ; zerando TIMER0
  278.     bcf         tflag               ; zerando flag
  279.     movlw       DELAY_1S            ; movendo Delay de 1s para work
  280.     movwf       TMR0                ; movendo Delay para contador
  281. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  282. ;*                     ROTINA PRINCIPAL                                                                                *
  283. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
  284. start:
  285.     bsf         on
  286. loop:
  287.     goto        loop
  288. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement