Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * *
- ;* TITULO: PROJETO (CORREDOR: ACIONAMENTO DE LÂMPADAS E ALARME DE INCÊNDIO) *
- ;* *
- ;* *
- ;* DESENVOLVIDO PELO GRUPO: *
- ;* => WANDERLEY JOSE ROMUALDO DA SILVA FILHO *
- ;* => EMERSON LIMA *
- ;* => BIANCA SANTA CRUZ *
- ;* *
- ;* VERSÃO: 2.0 DATA: 19/10/2018 *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* DESCRIÇÃO DO ARQUIVO *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* PROGRAMA PARA ACIONAMENTO INTELIGENTE DE LÂMPADAS E SENSOR DE FUMAÇA *
- ;* *
- ;* *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* ARQUIVOS DE DEFINIÇÕES *
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- #include <p16f628a.inc> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A
- list p=16f628a
- ; --- FUSE BITS ---
- __config _BOREN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* PAGINAÇÃO DE MEMÓRIA *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DE COMANDOS PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
- #define bank0 bcf STATUS,RP0
- #define bank1 bsf STATUS,RP0
- ; --- CONSTANTES ---
- DELAY_1S equ D'246'
- ; --- ENTRADAS ---
- #define sensor_pres1 PORTB,RB4 ;
- #define sensor_pres2 PORTB,RB5 ; SENSOR_PRES = 1 --> PRESENÇA DETECTADA
- #define sensor_pres3 PORTB,RB6 ;
- #define sensor_luminosidade PORTB,RB2 ; SENSOR_LUMIN = 1 --> DEVE-SE LIGAR A LUZ
- #define sensor_fumaca PORTB,RB0 ; SENSOR_FUMACA = 1 --> FUMAÇA DETECTADA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* SAÍDAS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
- #define buzina PORTA,RA3 ; buzina de incêndio
- #define led_buz PORTB,RB3 ; LED DA BUZINA DE INCÊNDIO
- #define on PORTB,RB1 ; led de on/off
- #define luminaria1 PORTA,RA0 ; Luminárias da primeira seção (luz1)
- #define luminaria2 PORTA,RA1 ; Luminárias da segunda seção (luz2)
- #define luminaria3 PORTA,RA2 ; Luminárias da terceira seção (luz3)
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* DEFINIÇÕES GERAIS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DE MNEMÔNICOS PARA ACESSO A BITS DE REGISTRADORES
- #DEFINE HGINT INTCON, GIE ;HABILITACAO GERAL
- #define thab INTCON,TOIE ; Interrupção do timer ativada
- #define tflag INTCON,T0IF ; Flag para estouro do timer
- #define extflag INTCON,INTF ; interrupcao externa
- #define rflag INTCON,RBIF ; interrupcao de mudanca de estado RB4 - RB7
- #define zero STATUS,Z ; resultado da ultima operacao foi 0
- #define pos_sensor1 B'00000001' ; sensor de presenca 1 ativo
- #define pos_sensor2 B'00000010' ; sensor de presenca 2 ativo
- #define pos_sensor3 B'00000100' ; sensor de presenca 3 ativo
- #define pos_sensor_fum B'00001000' ; sensor de fumaca ativo
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* VARIÁVEIS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DO BLOCO DE VARIÁVEIS
- cblock 0x20
- W_TEMP ; REGISTRADORES TEMPORÁRIOS PARA
- STATUS_TEMP ; INTERRUPÇÕES
- tempo1 ; CONTADOR DA LÂMPADA 1
- tempo2 ; CONTADOR DA LÂMPADA 2
- tempo3 ; CONTADOR DA LÂMPADA 3
- tempo_sensor_fumaca ; CONTADOR DO SENSOR DE FUMAÇA
- vetor_presenca ; VETOR COM AS POSIÇÕES DOS SENSORES DE PRESENÇA
- flag_cont ; VETOR COM AS FLAGS DE CONTAGEM
- endc
- ; ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* VETOR DE RESET *
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- org H'0000' ; ORIGEM NO ENDERECO 0 DE MEMORIA
- goto main ; DESVIA DO VETOR DE INTERRUPCAO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* INICIO DA INTERRUPÇÃO *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- org H'0004' ; TODAS AS INTERRUPCOES APONTAM PARA ESTE VETOR
- movwf W_TEMP ; SALVA W EM W_TEMP
- swapf STATUS,W
- bank0
- movwf STATUS_TEMP ; SALVA STATUS EM STATUS_TEMP
- ;************************************************************************
- ;* ROTINA DE ATENDIMENTO DA INTERRUPÇÃO *
- ;************************************************************************
- btfsc extflag ; interrupcao pelo sensor de fumaca?
- call test_fumaca
- btfsc rflag ; VERIFICA INTERRUPÇÃO POR MUDANÇA DE ESTADO.
- call check_pres
- btfsc tflag ; FLAG QUE ATIVA FINAL DA CONTAGEM DE
- call contador ; 1 segundo
- ;*************************************************************************
- ;* SAÍDA DA INTERRUPÇÃO *
- ;*************************************************************************
- SAI_INT
- SWAPF STATUS_TEMP,W
- MOVWF STATUS ;MOVE STATUS_TEMP PARA STATUS
- SWAPF W_TEMP,W ;MOVE W_TEMP PARA W
- RETFIE ; RETORNA A INTERRUPCAO
- ;*************************************************************************
- ;* ROTINAS E SUB-ROTINAS *
- ;*************************************************************************
- ;DEFINIÇÃO DAS ROTINAS E SUB-ROTINAS:
- test_fumaca:
- bcf HGINT
- bcf extflag ; limpa a flag da interrupção
- btfss sensor_fumaca ; Checa sensor de fumaça. Sensor ativo?
- goto reset_contf ; Não, reseta contagem da fumaça
- bsf flag_cont,pos_sensor_fum
- return
- reset_contf:
- movlw D'10' ; Move 10 decimal para work
- movwf tempo_sensor_fumaca ; Move 10 segundos de contagem do sensor de fumaça p/ contador
- bcf buzina ; Não, buzina desligada.
- return
- check_pres:
- btfss sensor_luminosidade
- return
- btfss sensor_pres1 ;CHECA O PRIMEIRO SENSOR DE PRESENÇA. HÁ ALGÚEM NA PRIMEIRA SEÇÃO?
- goto check_timer1 ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
- bsf vetor_presenca,pos_sensor1 ;Sim, altero a varíável dizendo que há alguém na seção 1.
- bsf luminaria1 ;Primeira luz acessa
- bcf flag_cont,pos_sensor1
- goto check_pres2
- check_timer1:
- btfss vetor_presenca,pos_sensor1 ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
- goto check_pres2 ;SIM, VÁ CHECAR A SEÇÃO 2.
- bsf flag_cont,pos_sensor1 ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 1.
- bcf vetor_presenca,pos_sensor1 ;LIMPO A VARIÁVEL DE PRESENÇA
- check_pres2:
- btfss sensor_pres2 ;CHECA O SEGUNDO SENSOR DE PRESENÇA. HÁ ALGÚEM NA SEGUNDA SEÇÃO?
- goto check_timer2 ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
- bsf vetor_presenca,pos_sensor2 ;Sim, altero a varíável dizendo que há alguém na seção 2.
- bsf luminaria2 ;SEGUNDA LUZ ACESSA
- bcf flag_cont,pos_sensor2
- goto check_pres3
- check_timer2:
- btfss vetor_presenca,pos_sensor2 ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
- goto check_pres3 ;SIM, VÁ CHECAR A SEÇÃO 2.
- bsf flag_cont,pos_sensor2 ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 2.
- bcf vetor_presenca,pos_sensor2 ;LIMPO A VARIÁVEL DE PRESENÇA
- check_pres3:
- btfss sensor_pres3 ;CHECA O TERCEIRO SENSOR DE PRESENÇA. HÁ ALGÚEM NA SEGUNDA SEÇÃO?
- goto check_timer3 ;NÃO, CHECAR SE JÁ COMEÇOU A CONTAGEM PARA DESLIGAR A LAMPADA.
- bsf vetor_presenca,pos_sensor3 ;Sim, altero a varíável dizendo que há alguém na seção 2.
- bsf luminaria3 ;SEGUNDA LUZ ACESSA
- bcf flag_cont,pos_sensor3
- goto end_check
- check_timer3:
- btfss vetor_presenca,pos_sensor3 ;FLAG DE CONTAGEM JÁ ESTA ATIVA?
- goto end_check ;SIM, VÁ CHECAR A SEÇÃO 2.
- bsf flag_cont,pos_sensor3 ;NÃO, ATIVAR CONTAGEM PARA DESLIGAR LAMPADA 2.
- bcf vetor_presenca,pos_sensor3 ;LIMPO A VARIÁVEL DE PRESENÇA
- end_check:
- bcf rflag ;LIMPA A FLAG DA INTERRUPÇÃO
- goto SAI_INT
- contador:
- bcf tflag ;Flag em zero
- movlw DELAY_1S ;Move delay de 1s para work
- movwf TMR0 ;Move delay de 1s para o timer
- btfsc flag_cont,pos_sensor_fum
- call dec_fum
- btfsc flag_cont,pos_sensor1
- call dec_temp1
- btfsc flag_cont,pos_sensor2
- call dec_temp2
- btfsc flag_cont,pos_sensor3
- call dec_temp3
- return
- dec_fum:
- decfsz tempo_sensor_fumaca
- return
- goto incendio
- incendio:
- bsf buzina ; Sim, liga buzina
- bsf luminaria1
- bsf luminaria2
- bsf luminaria3
- btfsc sensor_fumaca
- goto incendio
- goto main
- dec_temp1:
- decfsz tempo1,1 ;Decrementa contador. Contador em zero?
- return ;Não,volta para contador
- call reset_cont1 ;Sim, reseta contagem.
- return
- dec_temp2:
- decfsz tempo2,1 ;Decrementa contador. Contador em zero?
- return ;Não,volta para contador
- call reset_cont2 ;Sim, reseta contagem.
- return
- dec_temp3:
- decfsz tempo3,1 ;Decrementa contador. Contador em zero?
- return ;Não,volta para contador
- call reset_cont3 ;Sim, reseta contagem.
- return
- reset_cont1:
- movlw D'60'
- movwf tempo1
- bcf flag_cont, pos_sensor1
- bcf luminaria1
- return
- reset_cont2:
- movlw D'60'
- movwf tempo2
- bcf flag_cont, pos_sensor2
- bcf luminaria2
- return
- reset_cont3:
- movlw D'60'
- movwf tempo3
- bcf flag_cont, pos_sensor3
- bcf luminaria3
- return
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* INICIO DO PROGRAMA *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- main:
- bank1
- movlw H'00' ; W = B'00000000'
- movwf TRISA ; TODO PORTA COMO SAÍDA
- movlw B'01110101' ; B'01110101'
- movwf TRISB ; PINOS RB0/RB2/RB4/RB5/RB6/RB7 COMO ENTRADAS
- movlw H'F1' ; W = B'11110001'
- movwf OPTION_REG ; BIT5 = 1 (CLOCK EXTERNO NO TIMER)/BIT4 = 1 (INCREMENTAÇÃO NA DESCIDA NO CLOCK)
- ; BIT3 = 0 (PRESCALER NO TIMER)/ BIT2-0 = 001 (PRESCALER 1:4)
- movlw B'10111000'
- movwf INTCON ; DEFINE OPCOES DE INTERRUPCAO
- movlw B'00001000'
- movwf PCON ; UTILIZAR CRISTAL INTERNO DE 4MHZ
- bank0
- movlw B'00000111'
- movwf CMCON ; DESATIVA COMPARADORES
- movlw B'00000000'
- movwf PORTB ; MANTER SAÍDAS EM LOW AO INCIAR O PIC
- movlw B'00000000'
- movwf PORTA ; MANTER SAÍDAS EM LOW AO INICIAR O PIC
- movlw D'60'
- movwf tempo1 ; inicializa contador do sensor de presenca1
- movlw D'60'
- movwf tempo2 ; inicializa contador do sensor de presenca2
- movlw D'60'
- movwf tempo3 ; inicializa contador do sensor de presenca3
- movlw D'10'
- movwf tempo_sensor_fumaca ; inicializa contador do sensor de fumaca
- movlw D'0'
- movwf vetor_presenca ; zerando variável vetor_presenca
- movlw D'0'
- movwf flag_cont
- clrf TMR0 ; zerando TIMER0
- bcf tflag ; zerando flag
- movlw DELAY_1S ; movendo Delay de 1s para work
- movwf TMR0 ; movendo Delay para contador
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- ;* ROTINA PRINCIPAL *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;* * * * * * * * * * * * * * * * *
- start:
- bsf on
- loop:
- goto loop
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement