Ir ao conteúdo
  • Cadastre-se

Rafael Hipolito Dieterich

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. ola a todos, recentemente como trabalho de aplicação em curso de graduação recebi a tarefa de confeccionar um alarme residencial implementado no pic16f877a, programado em assembly, apos elaboração do programa e simulação do proteus, o mesmo não executa as tarefas solicitadas, creio que seja algo alem da configuração de entradas e saídas. estarei postando abaixo o código inicial, para que se possível alguém dos sr's possa me ajudar. ressaltando, ainda está na fase de elaboração, alguns passos ou rotinas podem estar incorretos. o funcionamento básico se deve por meio de sensores que quando em nível baixo ativam as rotinas de alarme, uma chave para ligar e desligar o alarme, como saídas, leds de advertência, uma sirene e um discador para sms. ;;;;;;;;;;;;;;;;;alarme residencial;;;;;;;;;;;;;;;;;; list p=16f877a #include __config h'3f32' errorlevel -302,-305 cblock 0x20 contador,contador1,contador2,contador3 endc org 0x00 goto inicio nop nop nop inicio: bcf status,rp0 bcf status,rp1 bsf status,rp1 movlw 0x0e movwf adcon1 movlw 0xff movwf trisa movwf trise clrf trisb clrf trisd clrf trisc bcf status,rp0 clrf contador ; limpa valores do contador principal: call delay05 ; gasto de tempo para refazer os testes btfss porte,1 ; testa porta e0 se for um pula pra rotina de teste dos sensores btfsc porte,1 ; testa porta e0 se for zero pula para rotina de gasto de tempo goto teste ; vai para rotina de testes dos sensores goto principal ; vai para principal testar a porta novamente (alarme não esta ligado) ;;;;;;;;;;;;;;;;;;delay de 500ms;;;;;;;;;;;;;;;;;; delay05: movlw d'181' movwf contador1 movlw d'175' movwf contador2 movlw d'13' movwf contador3 decfsz contador1,1 goto $-1 decfsz contador2,1 goto $-3 decfsz contador3,1 goto $-5 return ;;;;;;;;;;;;;;;;;;delay de 3ms;;;;;;;;;;;;;;;;;; delay03: movlw d'147' movwf contador1 movlw d'16' movwf contador2 decfsz contador1,f goto $-1 decfsz contador2,1 goto $-3 return ;;;;;;;;;;;;;;;;;;delay de 15s;;;;;;;;;;;;;;;;;; delay15: nop return ;;;;;;;;;;;;;;;;;;teste das chaves;;;;;;;;;;;;;;;;;; ; porta com nivel alto está ok. ; porta com nivel baixo starta a contagem. teste: goto t1 t1: call delay05 btfss porta,0 ; janela 1 está trancada? btfsc porta,0 ; janela 1 foi aberta? goto t2 ; trancada!! testa outro sensor. goto alarme1 ; destrancada!! vai para alarme1. t2: call delay05 btfss porta,1 ; janela 1 está trancada? btfsc porta,1 ; janela 1 foi aberta? goto t3 ; trancada!! testa outro sensor. goto alarme2 ; destrancada!! vai para alarme2. t3: call delay05 btfss porta,2 ; porta 1 está trancada? btfsc porta,2 ; porta 1 foi aberta? goto t4 ; trancada!! testa outro sensor. goto alarme3 ; destrancada!! vai para alarme3. t4: call delay05 btfss porta,3 ; tem alguem na casa? btfsc porta,3 ; tem alguem na casa? goto t5 ; não! testa outro sensor. goto alarme4 ; sim!! vai para alarme4 t5: call delay05 btfss porta,4 ; casa ta pengando fogo? btfsc porta,4 ; casa ta pegando fogo? goto t6 ; não!! testa outro sensor. goto alarme5 ; sim!!!! vai pra alarme5 t6: call delay05 btfss porta,5 ; porta 2 está trancada? btfsc porta,5 ; porta 2 foi aberta? goto t7 ; trancada!! testa outro sensor. goto alarme6 ; destrancada!! vai para alarme6. t7: call delay05 btfss porte,0 ; alguem passou no infrared? btfsc porte,0 ; alguem passou no infrared? goto ok ; não! então volta e verifica tudo goto alarme7 ; passou!! vai para alarme7 ok: goto teste ;;;;;;;;;;;;;;;;;;alarmes;;;;;;;;;;;;;;;;;; alarme1: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene1 ; vai para rotina sinalização. alarme2: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene2 ; vai para rotina sinalização. alarme3: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene3 ; vai para rotina sinalização. alarme4: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene4 ; vai para rotina sinalização. alarme5: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene5 ; vai para rotina sinalização. alarme6: call delay15 ; conta 15 segundos tempo para desabilitar o alarme. btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes. goto principal ; desligaram a chave, alarme desligado goto sirene6 ; vai para rotina sinalização. alarme7: call delay15 ; conta 15 segundos tempo para desabilitar o alarme btfss porte,1 ; testa porta e0 se for um pula para acionamento das sirenes goto principal ; desligaram a chave, alarme desligado goto sirene7 ; vai para rotina sinalização. ;;;;;;;;;;;;;;;;;;sirenes;;;;;;;;;;;;;;;;;; sirene1: bsf portb,0 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene bsf portd,1 ; move nivel alto para o discador goto standyby ; apos acionamento fica esperando resetarem. sirene2: bsf portb,1 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. sirene3: bsf portb,2 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. sirene4: bsf portb,3 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. sirene5: bsf portb,4 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. sirene6: bsf portb,5 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. sirene7: bsf portb,6 ; move nivel alto para led do alarme bsf portd,0 ; move nivel alto para sirene. bsf portd,1 ; move nivel alto para o discador. goto standyby ; apos acionamento fica esperando resetarem. ;;;;;;;;;;;;;;;;;;standyby;;;;;;;;;;;;;;;;;; standyby: call delay05 ; gasta 0,5s para novo teste btfsc porte,1 ; testa porta e0 se for zero pula para principal goto $-2 ; volta e faz novo teste. goto desligando ; desligaram o alarme, desliga tudo. ;;;;;;;;;;;;;;;;;;desligando;;;;;;;;;;;;;;;;;; desligando: clrf trisb clrf trisd goto principal end

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!