Ir ao conteúdo
  • Cadastre-se

PIC 16F877A programado com ASM


furustec

Posts recomendados

Boa tarde, estou ficando louco e ainda não arrumei uma solução;

o problema é o prof. pediu para fazer uma placa com pic 16f877 três botões e 8 LEDs, programar em ASM e cada rotina de botão fazer algo diferente.

fiz a rotina pelo MPLAB porém quando mando compilar não vai, da erro em quase todas as linhas. se alguem puder me ajudar a encontrar o erro ou souber de alguma coisa que eu possa estar fazendo agradeceria muito.

Att: Max

Esta é a rotina que eu fiz :


; Arquivos de Definição
;-------------------------------------------------------------------------------
#INCLUDE <P16F877A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F877A
;DEFINE TODOS OS REGISTRADORES SFRs
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC

;--------------------------------------------------------------------
; Definição das Memórias
;--------------------------------------------------------------------
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;--------------------------------------------------------------------
; Variáveis
;--------------------------------------------------------------------
CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO
REG_TEMPO_1
REG_TEMPO_2
REG_TEMPO_3
ENDC ;FIM DO BLOCO DE MEMÓRIA

;--------------------------------------------------------------------
; Entradas
;--------------------------------------------------------------------
#DEFINE BOTAO1 PORTA,0 ;PORTA DO BOTÃO 1
; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,1 ;PORTA DO BOTÃO 2
; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BOTAO3 PORTA,2 ;PORTA DO BOTÃO 3
; 0 -> PRESSIONADO
; 1 -> LIBERADO

;----------------------------------------------------------
; Saídas
;----------------------------------------------------------
#DEFINE LED1 PORTB,0 ;PORTB DO LED 1
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED2 PORTB,1 ;PORTB DO LED 2
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED3 PORTB,2 ;PORTB DO LED 3
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED4 PORTB,3 ;PORTB DO LED 4
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED5 PORTB,4 ;PORTB DO LED 5
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED6 PORTB,5 ;PORTB DO LED 6
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED7 PORTB,6 ;PORTB DO LED 7
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED8 PORTB,7 ;PORTB DO LED 8
; 0 -> APAGADO
; 1 -> ACESO

;----------------------------------------------------------
; VETOR DE RESET
;----------------------------------------------------------
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO VETOR RESET

GOTO INICIO

;----------------------------------------------------------
; INICIO DE INTERRUPÇÃO
;----------------------------------------------------------
ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
RETFIE ;RETORNA DA INTERRUPÇÃO
;----------------------------------------------------------
; ROTINA DE DELAY
;----------------------------------------------------------
DELAY_1s ;DELAY (X) SEGUNDOS
DL1
MOVWF REG_TEMPO_3 ;**** ---1uS
MOVLW .100 ;**** ---1uS
MOVWF REG_TEMPO_1 ;**** ---1uS
DL2
MOVWF REG_TEMPO_2 ;---1uS (T1)
NOP ;---1uS (T2) NOP --- Gasta 1 tempo
DECFSZ REG_TEMPO_2,F ;---1uS (T3) ((T2+T3+T4)*250) * ((T1+T5+T6)*250) * TT
GOTO DL1 ;---2uS (T4)
DECFSZ REG_TEMPO_1,F ;---1uS (T5)
GOTO DL2 ;---2uS (T6)
DECFSZ REG_TEMPO_3,F ; TT
GOTO DALAY

RETURN

;----------------------------------------------------------
; ROTINA DE CONFIGURAÇÃO
;----------------------------------------------------------

INICIO
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
CLRF PORTC ;LIMPA O PORTB
CLRF PORTD ;LIMPA O PORTB
CLRF PORTE ;LIMPA O PORTB


BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000111' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISA ;DEFINE RA0 COMO ENTRADA E DEMAIS
;COMO SAÍDAS, CONFIGURA A DIREÇÃO DOS PINOS DO PORT A

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISC ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISD ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISE ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO COMPARADOR ANALÓGICO
;DESLIGADOS
BANK1

MOVLW B'00000110' ;DESLIGAR CONVERSORES A/D INTERNOS
MOVWF ADCON1

BANK0

;--------------------------------------------------------
; Rotina do Botão 1
;--------------------------------------------------------
BT1
BTFSS BOTAO1 ;O BOTÃO ESTÁ PRESSIONADO? Testa o BIT do arquivo e pula se SET (nível lógico alto)
GOTO BOTAO1_ON ;NÃO, ENTÃO TRATA BOTÃO1 LIBERADO
GOTO BOTAO1_OFF ;SIM, ENTÃO TRATA BOTÃO1 PRESSIONADO
BT2
BTFSS BOTAO2
GOTO BOTAO2_ON
GOTO BOTAO2_OFF

BT3
BTFSS BOTAO3
GOTO BOTAO3_ON
GOTO BOTAO3_OFF

BOTAO1_ON
BSF LED1 ;ACENDE O LED1
BSF LED2 ;ACENDE O LED2
BSF LED3 ;ACENDE O LED3
BSF LED4 ;ACENDE O LED4
BSF LED5 ;ACENDE O LED5
BSF LED6 ;ACENDE O LED6
BSF LED7 ;ACENDE O LED7
BSF LED8 ;ACENDE O LED8

GOTO BT2 ;RETORNA AO LOOP MAIN

BOTAO1_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT2 ;RETORNA AO LOOP MAIN

BOTAO2_ON
BSF LED1 ;ACENDE O LED1
CALL DELAY
BCF LED1 ;APAGA O LED1

BSF LED2 ;ACENDE O LED2
CALL DELAY
BCF LED2 ;APAGA O LED2

BSF LED3 ;ACENDE O LED3
CALL DELAY
BCF LED3 ;APAGA O LED3

BSF LED4 ;ACENDE O LED4
CALL DELAY
BCF LED4 ;APAGA O LED4

BSF LED5 ;ACENDE O LED5
CALL DELAY
BCF LED5 ;APAGA O LED5

BSF LED6 ;ACENDE O LED6
CALL DELAY
BCF LED6 ;APAGA O LED6

BSF LED7 ;ACENDE O LED7
CALL DELAY
BCF LED7 ;APAGA O LED7

BSF LED8 ;ACENDE O LED8
CALL DELAY
BCF LED8 ;APAGA O LED8

GOTO BT3 ;RETORNA AO LOOP MAIN

BOTAO2_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT3 ;RETORNA AO LOOP MAIN

BOTAO3_ON
BSF LED1 ;ACENDE O LED1
CALL DELAY
BCF LED1 ;APAGA O LED1

BSF LED3 ;ACENDE O LED3
CALL DELAY
BCF LED3 ;APAGA O LED3

BSF LED5 ;ACENDE O LED5
CALL DELAY
BCF LED5 ;APAGA O LED5

BSF LED7 ;ACENDE O LED7
CALL DELAY
BCF LED7 ;APAGA O LED7

GOTO BT1 ;RETORNA AO LOOP MAIN

BOTAO3_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT1 ;RETORNA AO LOOP MAIN


END ;OBRIGATÓRIO
;-------------------------------------------------------------------------------

Link para o comentário
Compartilhar em outros sites

Cara,vou dar uma bronca em voce e quem te ajudou.

1- Não está cheio de erros,tem 2 erros.

2 - 'WARNING' é um aviso e não erro,o programa compila com 'WARNING'.

3 - Todos os erros e WARNING são exclarecidos pelo MPLAB.

4 - Deixe uma espaço antes de um LABEL e pelo menos 2 espaços no começo dos códigos.

Isto evita WARNING.

Preste atenção no que está digitando!!

voce digitou;

GOTO DALAY

o que é isso?É um DELAY do Caetano Veloso??

voce não tem esta rotina no seu código,como o compilador vai achar?

voce tem a rotina de atraso chamada;

DELAY_1s ;DELAY (X) SEGUNDOS

É essa que voce tem que chamar.

voce chamou;

CALL DELAY

Aonde tem neste código uma rotina com esse nome?

Não vou postar o código corrigido,espero que mostre para nós,ele sem nehum WARNING ou erro.

DICA:Para compilar sem aviso de 'Register in operand not in bank 0. Ensure that bank bits are correct.',coloque esse código no começo do programa;

ERRORLEVEL -302

Veja,ASM é uma linguagem 'Flat' e voce não percebeu estes erros,imagine se voce não prestar atençao e programar em C misturando Chaves,colchetes, pointer etc...

Qualquer dúvida poste,não fique com vergonha.

Link para o comentário
Compartilhar em outros sites

Cara agradeço a ajuda mas não mudou nada rsrsrs continua aparecendo error para todas a linhas do programa

mesmo mudando os lugares onde estavam escrito Delay e fazendo todos os toques que tu deu não surtiu efeito

mas agradeço a ajuda. o pior que tenho que entregar a placa montada na segunda.

montada ela estará mas pelo visto não vai programada

Link para o comentário
Compartilhar em outros sites

Substitui o "DELAY" por "DELAY_1s", já que a label DELAY não foi definida no programa. Também troquei o GOTO DALAY por GOTO DL2.

Aqui compilou certo, acho que você definiu o projeto com alguma coisa errada.

Aqui está o projeto já compilado:

http://www.4shared.com/zip/hn_LScIx/PLACA_PIC.html

Link para o comentário
Compartilhar em outros sites

Seguinte,á noite posto o código...

voce setou o MPLAB em 'devices' para o pic correto?

Segue a listagem sem nenhum Warning.

#INCLUDE <P16F877A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F877A
;DEFINE TODOS OS REGISTRADORES SFRs
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC

ERRORLEVEL -302
;--------------------------------------------------------------------
; Definição das Memórias
;--------------------------------------------------------------------
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;--------------------------------------------------------------------
; Variáveis
;--------------------------------------------------------------------
CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO
REG_TEMPO_1
REG_TEMPO_2
REG_TEMPO_3
ENDC ;FIM DO BLOCO DE MEMÓRIA

;--------------------------------------------------------------------
; Entradas
;--------------------------------------------------------------------
#DEFINE BOTAO1 PORTA,0 ;PORTA DO BOTÃO 1
; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,1 ;PORTA DO BOTÃO 2
; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BOTAO3 PORTA,2 ;PORTA DO BOTÃO 3
; 0 -> PRESSIONADO
; 1 -> LIBERADO

;----------------------------------------------------------
; Saídas
;----------------------------------------------------------
#DEFINE LED1 PORTB,0 ;PORTB DO LED 1
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED2 PORTB,1 ;PORTB DO LED 2
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED3 PORTB,2 ;PORTB DO LED 3
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED4 PORTB,3 ;PORTB DO LED 4
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED5 PORTB,4 ;PORTB DO LED 5
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED6 PORTB,5 ;PORTB DO LED 6
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED7 PORTB,6 ;PORTB DO LED 7
; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED8 PORTB,7 ;PORTB DO LED 8
; 0 -> APAGADO
; 1 -> ACESO

;----------------------------------------------------------
; VETOR DE RESET
;----------------------------------------------------------
ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO VETOR RESET

GOTO INICIO

;----------------------------------------------------------
; INICIO DE INTERRUPÇÃO
;----------------------------------------------------------
ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
RETFIE ;RETORNA DA INTERRUPÇÃO
;----------------------------------------------------------
; ROTINA DE DELAY_1s
;----------------------------------------------------------
DELAY_1s;DELAY_1s (X) SEGUNDOS
DL1
MOVWF REG_TEMPO_3 ;**** ---1uS
MOVLW .100 ;**** ---1uS
MOVWF REG_TEMPO_1 ;**** ---1uS
DL2
MOVWF REG_TEMPO_2 ;---1uS (T1)
NOP ;---1uS (T2) NOP --- Gasta 1 tempo
DECFSZ REG_TEMPO_2,F ;---1uS (T3) ((T2+T3+T4)*250) * ((T1+T5+T6)*250) * TT
GOTO DL1 ;---2uS (T4)
DECFSZ REG_TEMPO_1,F ;---1uS (T5)
GOTO DL2 ;---2uS (T6)
DECFSZ REG_TEMPO_3,F ; TT
GOTO DELAY_1s

RETURN

;----------------------------------------------------------
; ROTINA DE CONFIGURAÇÃO
;----------------------------------------------------------

INICIO
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
CLRF PORTC ;LIMPA O PORTB
CLRF PORTD ;LIMPA O PORTB
CLRF PORTE ;LIMPA O PORTB


BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000111' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISA ;DEFINE RA0 COMO ENTRADA E DEMAIS
;COMO SAÍDAS, CONFIGURA A DIREÇÃO DOS PINOS DO PORT A

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISC ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISD ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

MOVLW B'00000000' ;QUANDO COLOCAR "0" INDICA SAIDA E "1" ENTRADA
MOVWF TRISE ;DEFINE TODO O PORTB COMO SAÍDA CONFIGURA A
;DIREÇÃO DOS PINOS DO PORT B

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO COMPARADOR ANALÓGICO
;DESLIGADOS
BANK1

MOVLW B'00000110' ;DESLIGAR CONVERSORES A/D INTERNOS
MOVWF ADCON1

BANK0

;--------------------------------------------------------
; Rotina do Botão 1
;--------------------------------------------------------
BT1
BTFSS BOTAO1 ;O BOTÃO ESTÁ PRESSIONADO? Testa o BIT do arquivo e pula se SET (nível lógico alto)
GOTO BOTAO1_ON ;NÃO, ENTÃO TRATA BOTÃO1 LIBERADO
GOTO BOTAO1_OFF ;SIM, ENTÃO TRATA BOTÃO1 PRESSIONADO
BT2
BTFSS BOTAO2
GOTO BOTAO2_ON
GOTO BOTAO2_OFF

BT3
BTFSS BOTAO3
GOTO BOTAO3_ON
GOTO BOTAO3_OFF

BOTAO1_ON
BSF LED1 ;ACENDE O LED1
BSF LED2 ;ACENDE O LED2
BSF LED3 ;ACENDE O LED3
BSF LED4 ;ACENDE O LED4
BSF LED5 ;ACENDE O LED5
BSF LED6 ;ACENDE O LED6
BSF LED7 ;ACENDE O LED7
BSF LED8 ;ACENDE O LED8

GOTO BT2 ;RETORNA AO LOOP MAIN

BOTAO1_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT2 ;RETORNA AO LOOP MAIN

BOTAO2_ON
BSF LED1 ;ACENDE O LED1
CALL DELAY_1s
BCF LED1 ;APAGA O LED1

BSF LED2 ;ACENDE O LED2
CALL DELAY_1s
BCF LED2 ;APAGA O LED2

BSF LED3 ;ACENDE O LED3
CALL DELAY_1s
BCF LED3 ;APAGA O LED3

BSF LED4 ;ACENDE O LED4
CALL DELAY_1s
BCF LED4 ;APAGA O LED4

BSF LED5 ;ACENDE O LED5
CALL DELAY_1s
BCF LED5 ;APAGA O LED5

BSF LED6 ;ACENDE O LED6
CALL DELAY_1s
BCF LED6 ;APAGA O LED6

BSF LED7 ;ACENDE O LED7
CALL DELAY_1s
BCF LED7 ;APAGA O LED7

BSF LED8 ;ACENDE O LED8
CALL DELAY_1s
BCF LED8 ;APAGA O LED8

GOTO BT3 ;RETORNA AO LOOP MAIN

BOTAO2_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT3 ;RETORNA AO LOOP MAIN

BOTAO3_ON
BSF LED1 ;ACENDE O LED1
CALL DELAY_1s
BCF LED1 ;APAGA O LED1

BSF LED3 ;ACENDE O LED3
CALL DELAY_1s
BCF LED3 ;APAGA O LED3

BSF LED5 ;ACENDE O LED5
CALL DELAY_1s
BCF LED5 ;APAGA O LED5

BSF LED7 ;ACENDE O LED7
CALL DELAY_1s
BCF LED7 ;APAGA O LED7

GOTO BT1 ;RETORNA AO LOOP MAIN

BOTAO3_OFF
BCF LED1 ;APAGA O LED1
BCF LED2 ;APAGA O LED2
BCF LED3 ;APAGA O LED3
BCF LED4 ;APAGA O LED4
BCF LED5 ;APAGA O LED5
BCF LED6 ;APAGA O LED6
BCF LED7 ;APAGA O LED7
BCF LED8 ;APAGA O LED8

GOTO BT1 ;RETORNA AO LOOP MAIN


END ;OBRIGATÓRIO

Se faltou algo,depois corrija.

Link para o comentário
Compartilhar em outros sites

Para um código simples deste e não 'relocatable',voce nem precisa criar um projeto,é simples.

Abra o MPLAB,/OPEN,escolha o arquivo .asm e vá em 'Project/QuickBuild'.

Não esqueça de verificar em 'Configure/Select Device',se etá setado para o micro que vai usar,neste caso,16F877A.

Link para o comentário
Compartilhar em outros sites

Vou passar o que aprendi, não era meu programa que estava bugado rsrs e sim um erro bobo que estava cometendo , não conseguia compilar pelo simples fato que o diretorio onde tem que gravar não pode ter mais que 64 caracteres, rsrsrsr joquei a pasta pra area de trabalho pronto ta compilando perfeitamente

agora que arrumei tudo conforme foi passado por vocês, montei o cirquito no proteus e quando vou testar funciona assim:

Botão 1 era pra acender todos os LEDs, porém estão piscando.;

Botão 2 era para piscar todos os LEDs, porém esta acendendo só o primeiro Led

Botao 3 era pra ser os leds 1,3,5,7 e só está acendendo o primeiro tambem ...

e agora rsrsr

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Bom dia a todos.

Tambem estou com problemas na programação desse pic 16f877a.

Preciso de uma ajuda urgente.

Tenho uma placa de comando para 2 motores que trabalham em sistema eclusa (1 so abre quando o outro esta fechado).

Tenho a placa montada e o programa em ASM.

Quando ligo o equip. ele funciona beleza, mas apos uns 40 min ele trava.

o que pode ser???? ajude

Link para o comentário
Compartilhar em outros sites

Boa noite.

Estou usando 16f877A, e a programação é essa:

;*******************************************************************************

;$$$$$$$$$$$$$$$$$$ Programa: PORTA ECLUSA 2005 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

;*******************************************************************************

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

;*******************************************************************************

;***************** VARIAVEIS ***********************************

;*******************************************************************************

CBLOCK 0X20

aux0

aux1

aux2

FILTRO_RUA_FECHADO

FILTRO_DETECTOR

FILTRO_SELETOR

FILTRO_RUA_ANTIESM

FILTRO_BOT_RUA

FILTRO_BOT_AGE

FILTRO_AGE_ABERTA

FILTRO_AGE_ANTIESM

FILTRO_AGE_FECHADO

FILTRO_RUA_ABERTA

INTERNO_TEMP

FILTRO_RADAR_AGE

FILTRO_DESTRAVA

RUA

GENTEA

GENTER

ENDC

#INCLUDE <P16F877A.INC>

;*******************************************************************************

;***************** PAGINAÇÃO MEMÓRIA ***********************************

;*******************************************************************************

#DEFINE BANK0 BCF STATUS,RP0 ;VAI PARA BANCO 0 DA MEMORIA

#DEFINE BANK1 BSF STATUS,RP0 ;VAI PARA BANCO 1 DA MEMORIA

;*******************************************************************************

;***************** CONSTANTES INTERNAS ****************************

;*******************************************************************************

;FILTRO EQU .50 ;O FILTRO DEVE SER LIDO 50 VEZES PARA VERIFICAR SE REALMENTE ESTA LIGADO

;*******************************************************************************

;***************** FLAGS INTERNOS ***********************************

;*******************************************************************************

#DEFINE presenca_cabine 32,0

#DEFINE CLIENTE 33,0

#DEFINE CLIENTEA 34,0

#DEFINE INTERNO2 35,1

;*******************************************************************************

;***************** ENTRADAS ***********************************

;*******************************************************************************

#DEFINE BOT_AGE PORTB,0 ;BOTÃO AGENCIA PINO (33) RB0

#DEFINE BOT_RUA PORTB,1 ;BOTÃO RUA PINO (34) RB1

#DEFINE SELETOR PORTB,4 ;BOTÃO SELETOR PINO (37) RB4

#DEFINE DESTRAVA PORTB,2 ;BOTÃO DESTRAVA PINO (35) RB2

#DEFINE CONTAR PORTB,5 ;CONTA PESSOAS LADO RUA PINO (38)

#DEFINE CONTAA PORTB,6 ;CONTA PESSOAS LADO AGENCIA PINO (39)

#DEFINE AGE_ANTIESM PORTC,4 ;ANTIESMAGAMENTO AGENCIA PINO (23) RC4

#DEFINE RUA_FECHADO PORTC,5 ;SENSOR PORTA RUA FECHADO ACIONADO PINO (24) RC5

#DEFINE RUA_ABERTA PORTC,6 ;SENSOR PORTA RUA ABERTA ACIONADO PINO (25) RC6

#DEFINE AGE_FECHADO PORTC,7 ;SENSOR PORTA AGENCIA FECHADO PINO (26) RC7

#DEFINE DETECTOR PORTD,2 ;ENTRADA DETECTOR DE METAL PINO (21) RD2

#DEFINE RUA_ANTIESM PORTD,3 ;ANTIESMAGAMENTO RUA PINO (22) RD3

#DEFINE AGE_ABERTA PORTD,4 ;PORTA AGENCIA ABERTO PINO (27) RD4

#DEFINE INTERNO PORTD,5 ;SENSOR INTERNO NIVEL 1 ACIONADO PINO (28) RD5

#DEFINE RADAR_AGE PORTD,6 ;RADAR AGENCIA PINO (29) RD6

#DEFINE RADAR_RUA PORTD,7 ;RADAR RUA PINO (30) RD7

;*******************************************************************************

;***************** SAIDAS ***********************************

;*******************************************************************************

#DEFINE MOTOR_RUA_ABRE PORTA,0 ;MOTOR RUA ABRE PINO (2) RA0

#DEFINE MOTOR_RUA_FECHA PORTA,1 ;MOTOR RUA FECHA PINO (3) RA1

#DEFINE MOTOR_AGE_ABRE PORTA,2 ;MOTOR AGENCIA ABRE PINO (4) RA2

#DEFINE MOTOR_AGE_FECHA PORTA,3 ;MOTOR AGENCIA FECHA PINO (5) RA3

#DEFINE TRAVA_RUA PORTA,5 ;TRAVA RUA PINO (7)

#DEFINE BUZZER PORTC,0 ;SOM DETECTOR OU POS EXPEDIENTE (15)

#DEFINE LED_DETECTOR PORTC,1 ;LED DETECOU METAL PINO (16)

#DEFINE LED_MANUAL PORTC,2 ;LED MANUAL PINO (17)

#DEFINE LED_AUTOM PORTC,3 ;LED AUTOMATICO PINO (18)

#DEFINE LED_POS PORTD,0 ;LED POS EXPEDIENTE PINO (19)

#DEFINE TRAVA_AGE PORTE,0 ;TRAVA AGENCIA PINO (8)

;*******************************************************************************

;***************** VETOR DE RESET ***********************************

;*******************************************************************************

ORG 0X0000 ;ENDEREÇO VETOR DE RESET

GOTO START ;VAI PARA INICIO PROGRAMA

;*******************************************************************************

;***************** INICIO INTERRUPÇÃO ***********************************

;*******************************************************************************

;*******************************************************************************

;***************** ROTINAS DE INTERRUPÇÃO ***********************************

;*******************************************************************************

;*******************************************************************************

;***************** ROTINA DE SAIDA DE INTERRUPÇÃO ***********************************

;*******************************************************************************

;*******************************************************************************

;***************** ROTINA E SUB-ROTINAS ***********************************

;*******************************************************************************

START

CLRF PORTA

CLRF PORTB

CLRF PORTC

CLRF PORTD

CLRF PORTE

BANK1 ;ALTERA PARA BANCO DE MEMORIA NUMERO 1

MOVLW B'00000000' ;configurei todas como saida, mesmo utilizando

;somente 5 saidas=0,1,2,3,5

MOVWF TRISA

MOVLW B'01110111' ;RB5 E RB6 CONTAM PESSOAS restante

;como saida para evitar interferencia

MOVWF TRISB

MOVLW B'11110000' ;configurei entrada e saidas portc

MOVWF TRISC

MOVLW B'11111100' ;configurei 2 saidas mesmo utilizando só a 0

MOVWF TRISD

MOVLW B'00000000' ;E0 SAIDA, RESTANTE não utlizadas por isso saídas

MOVWF TRISE

MOVLW B'00000111'

MOVWF ADCON1

BANK0

BSF LED_MANUAL

BSF LED_AUTOM

BSF LED_POS

BSF TRAVA_RUA

BSF TRAVA_AGE

BSF INTERNO2

BCF CLIENTEA ;LIMPA FLAG AGENCIA

BCF CLIENTE ;LIMPA FLAG RUA

GOTO inicio

;***************************************************************************

;*******************************************************************************

;******************* Area de subrotinas ****************************************

;*******************************************************************************

;********** delay (utiliza TMR0 sem habilitar interrupcao)**********************

;*******************************************************************************

time1 movlw 64h ;1.000.000 vezes

movwf aux2

salto2 movlw 64h

movwf aux1

salto1 movlw 64h

movwf aux0

salto0 decfsz aux0,f

goto salto0

decfsz aux1,f

goto salto1

decfsz aux2,f

goto salto2

return

time1mr movlw 34h ;520.000 vezes

movwf aux2

salto2mr movlw 64h

movwf aux1

salto1mr movlw 64h

movwf aux0

salto0mr decfsz aux0,f

goto salto0mr

decfsz aux1,f

goto salto1mr

decfsz aux2,f

goto salto2mr

return

time1ma movlw 34h ;520.000 vezes

movwf aux2

salto2ma movlw 64h

movwf aux1

salto1ma movlw 64h

movwf aux0

salto0ma decfsz aux0,f

goto salto0ma

decfsz aux1,f

goto salto1ma

decfsz aux2,f

goto salto2ma

return

time1_3 movlw 24h ;360.000 vezes

movwf aux2

salto2_3 movlw 64h

movwf aux1

salto1_3 movlw 64h

movwf aux0

salto0_3 decfsz aux0,f

goto salto0_3

decfsz aux1,f

goto salto1_3

decfsz aux2,f

goto salto2_3

return

time3 movlw 0A8h ;168 vezes

movwf aux2

salto23 movlw 0C8h ;200 vezes

movwf aux1

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA FECHANDO

BCF INTERNO2 ;COLOCO SE TIVER ALGUEM

btfsc SELETOR

return

salto13 movlw 064h ;100 vezes Total = 3.360.000 vezes

movwf aux0

salto03 decfsz aux0,f

goto salto03

decfsz aux1,f

goto salto13

decfsz aux2,f

goto salto23

return

time3_com_dm movlw 0A8h ;3.360.000 vezes

movwf aux2

salto23dm movlw 0C8h

movwf aux1

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA FECHANDO

BCF INTERNO2 ;COLOCO SE TIVER ALGUEM

btfsc DETECTOR

return

btfsc SELETOR

return

salto13dm movlw 064h

movwf aux0

salto03dm decfsz aux0,f

goto salto03dm

decfsz aux1,f

goto salto13dm

decfsz aux2,f

goto salto23dm

return

;************************************************************************

rotina_abre_rua

TESTA_RUA_ABERTA

BTFSS RUA_ABERTA ;TESTA PORTA RUA SETA FECHADA

GOTO RUA_ABERTA_LIB ;0-PORTA RUA ABERTA= VÁ PARA RUA LIBERADA

DECFSZ FILTRO_RUA_ABERTA,F ;1-PORTA RUA FECHADA= VERIFICA 50 VEZES SE REALMENTE ESTA FECHADA

GOTO TESTA_RUA_ABERTA ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR RUA

BCF MOTOR_RUA_ABRE ;0-ZEROU CONTADOR= DESLIGA MOTOR QUE FECHA RUA

return ;RETORNA PARA PILHA

RUA_ABERTA_LIB

MOVLW .50 ;MANDO OVALOR DO FILTRO GERAL PARA W

MOVWF FILTRO_RUA_ABERTA ;MANDO O VALOR DO W PARA FILTRO_RUA_FECHADO

TESTA_DETECTOR2

BTFSS DETECTOR ;TESTA DETECTOR

GOTO DETECTOR_LIB2 ;0-NÃO FOI DETECTADO METAL= VA PARA DETECTOR LIBERADO

DECFSZ FILTRO_DETECTOR,F ;1-DETECTOU METAL= TESTA 50 VEZES SE REALMENTE DETECTOU

GOTO TESTA_DETECTOR2 ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR DETECTOR

BCF MOTOR_RUA_ABRE ;0-ACABOU TESTE= DESLIGA MOTOR QUE FECHA RUA

;RETORNA PARA PILHA

DETECTOR_LIB2

MOVLW .50

MOVWF FILTRO_DETECTOR

TESTA_SELETOR3

BTFSS SELETOR

GOTO SELETOR_LIB3

DECFSZ FILTRO_SELETOR,F

GOTO TESTA_SELETOR

BCF MOTOR_RUA_ABRE

SELETOR_LIB3

MOVLW .50

MOVWF FILTRO_SELETOR

TESTA_AGE_FECHADO1

BTFSS AGE_FECHADO

GOTO AGE_FECHADO_LIB1

DECFSZ FILTRO_AGE_FECHADO,F

GOTO TESTA_AGE_FECHADO1

BTFSC RADAR_AGE ;TESTO SE TEM ALGUEM ESPERANDO NA AGENCIA

BSF CLIENTEA ;SE TIVER ALGUEM COLOQUE UM NO FLAG

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA ABRINDO

BCF INTERNO2 ;COLOCO 0 SE HOUVE PRESENÇA

BSF MOTOR_RUA_ABRE

AGE_FECHADO_LIB1

MOVLW .50

MOVWF FILTRO_AGE_FECHADO

goto rotina_abre_rua

;*************************************************

rotina_fecha_rua

TESTA_RUA_FECHADO

BTFSS RUA_FECHADO ;TESTA PORTA RUA ESTA FECHADA

GOTO RUA_FECHADO_LIB ;0-PORTA RUA ABERTA= VÁ PARA RUA LIBERADA

DECFSZ FILTRO_RUA_FECHADO,F ;1-PORTA RUA FECHADA= VERIFICA 50 VEZES SE REALMENTE ESTA FECHADA

GOTO TESTA_RUA_FECHADO ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR RUA

BCF MOTOR_RUA_FECHA ;0-ZEROU CONTADOR= DESLIGA MOTOR QUE FECHA RUA

RETURN ;RETORNA PARA PILHA

RUA_FECHADO_LIB

MOVLW .50 ;MANDO OVALOR DO FILTRO GERAL PARA W

MOVWF FILTRO_RUA_FECHADO ;MANDO O VALOR DO W PARA FILTRO_RUA_FECHADO

TESTA_DETECTOR

BTFSS DETECTOR ;TESTA DETECTOR

GOTO DETECTOR_LIB ;0-NÃO FOI DETECTADO METAL= VA PARA DETECTOR LIBERADO

DECFSZ FILTRO_DETECTOR,F ;1-DETECTOU METAL= TESTA 50 VEZES SE REALMENTE DETECTOU

GOTO TESTA_DETECTOR ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR DETECTOR

BCF MOTOR_RUA_FECHA ;0-ACABOU TESTE= DESLIGA MOTOR QUE FECHA RUA

BSF LED_DETECTOR ;LIGA LED DETECTOR

CALL time1

CALL detetor_metal

DETECTOR_LIB

MOVLW .50

MOVWF FILTRO_DETECTOR

TESTA_SELETOR

BTFSS SELETOR

GOTO SELETOR_LIB

DECFSZ FILTRO_SELETOR,F

GOTO TESTA_SELETOR

BCF MOTOR_RUA_FECHA

RETURN

SELETOR_LIB

MOVLW .50

MOVWF FILTRO_SELETOR

TESTA_RUA_ANTIESM

BTFSS RUA_ANTIESM

GOTO RUA_ANTIESM_LIB

DECFSZ FILTRO_RUA_ANTIESM,F

GOTO TESTA_RUA_ANTIESM

BCF MOTOR_RUA_FECHA

RETURN

RUA_ANTIESM_LIB

MOVLW .50

MOVWF FILTRO_RUA_ANTIESM

TESTA_BOT_RUA

BTFSS BOT_RUA

GOTO BOT_RUA_LIB

DECFSZ FILTRO_BOT_RUA,F

GOTO TESTA_BOT_RUA

BCF MOTOR_RUA_FECHA

RETURN

BOT_RUA_LIB

MOVLW .50

MOVWF FILTRO_BOT_RUA

BTFSC RADAR_AGE ;TESTO SE TEM ALGUEM ESPERANDO NA AGENCIA

BSF CLIENTEA ;SE TIVER ALGUEM COLOQUE UM NO FLAG

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA FECHANDO

BCF INTERNO2 ;COLOCO SE TIVER ALGUEM

BSF MOTOR_RUA_FECHA

GOTO rotina_fecha_rua

;*************************************************

rotina_abre_agencia

TESTA_AGE_ABERTA

BTFSS AGE_ABERTA

GOTO AGE_ABERTA_LIB

DECFSZ FILTRO_AGE_ABERTA,F

GOTO TESTA_AGE_ABERTA

BCF MOTOR_AGE_ABRE

RETURN

AGE_ABERTA_LIB

MOVLW .50 ;MANDO OVALOR DO FILTRO GERAL PARA W

MOVWF FILTRO_AGE_ABERTA ;MANDO O VALOR DO W PARA FILTRO_AGE_ABERTA

TESTA_SELETOR1

BTFSS SELETOR

GOTO SELETOR_LIB1

DECFSZ FILTRO_SELETOR,F

GOTO TESTA_SELETOR1

BCF MOTOR_AGE_ABRE

RETURN

SELETOR_LIB1

MOVLW .50

MOVWF FILTRO_SELETOR

TESTA_RUA_FECHADO1

BTFSS RUA_FECHADO ;TESTA PORTA RUA ESTA FECHADA

GOTO RUA_FECHADO_LIB1 ;0-PORTA RUA ABERTA= VÁ PARA RUA LIBERADA

DECFSZ FILTRO_RUA_FECHADO,F ;1-PORTA RUA FECHADA= VERIFICA 50 VEZES SE REALMENTE ESTA FECHADA

GOTO TESTA_RUA_FECHADO1 ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR RUA

BTFSC RADAR_RUA ;TESTO SE CHEGOU ALGUEM NA RUA ENQUANTO A AGENCIA ESTA ABRINDO

BSF CLIENTE ;COLOCO 1 NO FLAG AVISANDO QUE TEM ALGUEM NA RUA

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA ABRINDO

BCF INTERNO2 ;COLOCO 0 SE HOUVE PRESENÇA

BSF MOTOR_AGE_ABRE

RUA_FECHADO_LIB1

MOVLW .50 ;MANDO OVALOR DO FILTRO GERAL PARA W

MOVWF FILTRO_RUA_FECHADO ;MANDO O VALOR DO W PARA FILTRO_RUA_FECHADO

GOTO rotina_abre_agencia

;*************************************************

rotina_fecha_agencia

TESTA_AGE_FECHADO

BTFSS AGE_FECHADO ;TESTA PORTA AGENCIA ESTA FECHADA

GOTO AGE_FECHADO_LIB ;0-PORTA AGENCIA ABERTA= VÁ PARA AGENCIA LIBERADA

DECFSZ FILTRO_AGE_FECHADO,F ;1-PORTA AGENCIA FECHADA= VERIFICA 50 VEZES SE REALMENTE ESTA FECHADA

GOTO TESTA_AGE_FECHADO ;1-AINDA NÃO TERMINOU DE TESTAR= VOLTA TESTAR RUA

BCF MOTOR_AGE_FECHA ;0-ZEROU CONTADOR= DESLIGA MOTOR QUE FECHA RUA

RETURN ;RETORNA PARA PILHA

AGE_FECHADO_LIB

MOVLW .50 ;MANDO OVALOR DO FILTRO GERAL PARA W

MOVWF FILTRO_AGE_FECHADO ;MANDO O VALOR DO W PARA FILTRO_RUA_FECHADO

TESTA_SELETOR2

BTFSS SELETOR

GOTO SELETOR_LIB2

DECFSZ FILTRO_SELETOR,F

GOTO TESTA_SELETOR2

BCF MOTOR_AGE_FECHA

RETURN

SELETOR_LIB2

MOVLW .50

MOVWF FILTRO_SELETOR

TESTA_BOT_AGE

BTFSS BOT_AGE

GOTO BOT_AGE_LIB

DECFSZ FILTRO_BOT_AGE,F

GOTO TESTA_BOT_AGE

BCF MOTOR_AGE_FECHA

RETURN

BOT_AGE_LIB

MOVLW .50

MOVWF FILTRO_BOT_AGE

TESTA_AGE_ANTIESM

BTFSS AGE_ANTIESM

GOTO AGE_ANTIESM_LIB

DECFSZ FILTRO_AGE_ANTIESM,F

GOTO TESTA_AGE_ANTIESM

BCF MOTOR_AGE_FECHA

RETURN

AGE_ANTIESM_LIB

MOVLW .50

MOVWF FILTRO_AGE_ANTIESM

TESTA_RADAR BTFSS RADAR_AGE

GOTO RADAR_AGE_LIB

DECFSZ FILTRO_RADAR_AGE,F

GOTO TESTA_RADAR

BCF MOTOR_AGE_FECHA

RETURN

RADAR_AGE_LIB MOVLW .50

MOVWF FILTRO_RADAR_AGE

BTFSC RADAR_RUA ;TESTO SE CHEGOU ALGUEM NA RUA ENQUANTO A AGENCIA ESTA ABRINDO

BSF CLIENTE ;COLOCO 1 NO FLAG AVISANDO QUE TEM ALGUEM NA RUA

BTFSS INTERNO ;TESTO SENSOR INTERNO QUANDO A PORTA ESTA FECHANDO

BCF INTERNO2 ;COLOCO 0 SE HOUVE PRESENÇA

BSF MOTOR_AGE_FECHA

GOTO rotina_fecha_agencia

;*******************************************************************************

presenca_rua

BSF INTERNO2

btfss AGE_FECHADO ;TESTO SE AGENCIA ESTA FECHADA

return ;0-AGENCIA NÃO ESTA FECHADA =ENTÃO RETORNO, PARA PILHA

bcf TRAVA_RUA ;1-AGENCIA FECHADA= DESLIGO TRAVA

bcf presenca_cabine ;LIMPO PRESENÇA NA CABINE

CALL rotina_abre_rua

CALL time3_com_dm

BTFSC SELETOR

RETURN

BTFSC DETECTOR

jpr2 CALL detetor_metal

CALL rotina_fecha_rua

BCF CLIENTE ;LIMPA FLAG DO CLIENTE, DEPOIS QUE A PORTA FECHOU O FLAG ESTARÁ LIMPO

BTFSC SELETOR

RETURN

BTFSC DETECTOR

GOTO jpr2

BTFSC BOT_RUA

GOTO jpr1

BTFSC RUA_ANTIESM

GOTO jpr1

BSF TRAVA_RUA

CALL time1

RETURN

jpr1 BTFSC DETECTOR

GOTO jpr2

CALL time1

CALL rotina_abre_rua

GOTO presenca_rua

;*******************************************************************************

presenca_agencia

BSF INTERNO2

btfss RUA_FECHADO

return

bcf TRAVA_AGE

bsf presenca_cabine

call rotina_abre_agencia

btfsc SELETOR

return

call time3

btfsc SELETOR

return

call rotina_fecha_agencia

BCF CLIENTEA ;LIMPA FLAG AGENCIA ENQUANTO A AGENCIA ESTA FECHANDO

btfsc SELETOR

return

BTFSC AGE_ABERTA

GOTO $-5

btfsc BOT_AGE

goto jpa1

btfsc AGE_ANTIESM

goto jpa1

BTFSC RADAR_AGE

GOTO jpa1

bsf TRAVA_AGE

call time1

return

jpa1 call time1

BTFSS AGE_ABERTA

call rotina_abre_agencia

goto presenca_agencia

;********************************************************************************

detetor_metal bsf LED_DETECTOR ;LIGA LED DETECTOR

bcf MOTOR_RUA_FECHA ;CASO O MOTOR RUA FECHANDO ESTEJA LIGADO ESTOU DESLIGANDO

BSF MOTOR_RUA_ABRE ;LIGO O MOTOR RUA ABRE

BSF BUZZER ;LIGA BUZZER

BTFSS RUA_ABERTA ;VERIFICA SE A PORTA RUA JA ESTA ABERTA

GOTO $-3 ;0-VOLTA 2 LINHAS

BCF MOTOR_RUA_ABRE ;1-DESLIGA O MOTOR DA RUA ABRE

jdm2 BCF BUZZER ;DESLIGO O BUZZER ASSIM QUE A PORTA ESTIVER ABERTA

BTFSC DETECTOR ;TESTO SE DISPAROU O DETECTOR

BSF BUZZER ;1- LIGO BUZZER

btfss DESTRAVA ;TESTA SE BOTÃO DESTRAVA (BOT_RUA) ESTA ACIONADO E PULA 1 SE ESTIVER

goto jdm2 ;BOTÃO DESTRAVA NÃO ESTA ACIONADO ENTÃO VÁ PARA jdm2

bcf LED_DETECTOR ;BOTÃO ESTA ACIONADO, DESLIGA LED DETECTOR

BCF BUZZER

BCF INTERNO2 ;COLOCO 0 PARA GARANTIR QUE A PORTA IRA ABRIR, MESMO QUE SENSOR INTERNO NÃO VEJA

return ;RETORNE PARA A PILHA(LOCAL QUE CHAMOU A ROTINA)

;********************************************************************************

funcao_automatica btfss SELETOR

goto jfat3

BCF PORTA,0

BCF PORTA,1

BCF PORTA,2

BCF PORTA,3

bcf LED_AUTOM

bsf LED_POS

call time1_3

goto FUNCAO_POS_EXPEDIENTE

jfat3 bsf TRAVA_RUA ;LIGA A TRAVA DA RUA

bsf TRAVA_AGE ;LIGA A TRAVA AGENCIA

bsf LED_AUTOM ;LIGA O LED AUTOMATICO

btfss RUA_FECHADO ;TESTA SE PORTA DA RUA ESTA FECHADA

call rotina_fecha_rua ;0-ABERTA= VÁ PARA ROTINA FECHA RUA

btfss AGE_FECHADO ;1-FECHADA= TESTA SE AGENCIA ESTA FECHADA

call rotina_fecha_agencia ;0-ABERTA= VÁ PARA ROTINA FECHA AGENCIA

BTFSS CLIENTE ;TESTO SE TEM ALGUM CLIENTE QUE PAROU NA PORTA RUA LOGO DEPOIS QUE ELA FECHOU

btfsc RADAR_RUA ;1-FECHADA= TESTA SE TEM ALGUEM NO RADAR RUA

call presenca_rua ;1-PRESENÇA NA RUA= VÁ PARA ROTINA PRESENÇA RUA

BTFSC RADAR_RUA ;TESTE RADAR PARA SABER SE ALGUEM CHEGOU DEPOIS QUE A PORTA FECHOU

BSF CLIENTE ;COLOQUEI 1 PARA ELE ABRIR A RUA SEM AGUARDAR

BTFSS CLIENTEA ;TESTO SE ALGUEM ESTA ESPERANDO NA AGENCIA

btfsc RADAR_AGE ;0-NÃO TEM NINGUEM= TESTA SE TEM ALGUEM NO RADAR AGENCIA

call presenca_agencia ;1-PRESENÇA NA AGENCIA= VÁ PARA PRESENÇA AGENCIA

BTFSC RADAR_AGE ;TESTA RADAR PARA SABER SE ALGUEM CHEGOU DEPOIS QUE A PORTA FECHOU

BSF CLIENTEA ;COLOQUEI 1 PARA ABRIR A PORTA SEM TER QUE SE MEXER

BTFSC DESTRAVA ;SE MANTIVER BOTÃO PRESSIONADO ELE MUDA ROTINA

BCF INTERNO2

BTFSC INTERNO

GOTO INT

GOTO PRESENCA

PRESENCA btfsc presenca_cabine ;TESTA ROTINA PRESENÇA NA CABINE

goto jfat1 ;1-IR PARA RUA

goto jfat2 ;0-IR PARA AGENCIA

jfat1 BSF TRAVA_AGE

call presenca_rua ;VÁ PARA PRESENÇA NA RUA

goto funcao_automatica ;VOLTE PARA FUNÇÃO AUTOMATICA

jfat2 BSF TRAVA_RUA

call presenca_agencia ;VÁ PARA PRESENÇA AGENCIA

goto funcao_automatica ;VOLTE PARA FUNÇÃO AUTOMATICA

INT BTFSC INTERNO2

GOTO funcao_automatica ;0-NÃO TEM NINGUEM= VOLTE PARA FUNÇAO AUTOMATICA

GOTO PRESENCA

;********************************************************************************

FUNCAO_POS_EXPEDIENTE btfss SELETOR

goto jfp1

BCF MOTOR_RUA_ABRE

BCF MOTOR_RUA_FECHA

BCF MOTOR_AGE_ABRE

BCF MOTOR_AGE_FECHA

BSF TRAVA_RUA

BSF TRAVA_AGE

bsf LED_MANUAL

bsf LED_POS

BSF LED_AUTOM

call time1_3

goto FUNCAO_EMERGENCIA

jfp1 BSF INTERNO2

bsf TRAVA_RUA ;LIGA A TRAVA RUA

bsf TRAVA_AGE ;LIGA A TRAVA AGENCIA

bsf LED_POS ;LIGA LED POS EXPEDIENTE

btfss RUA_FECHADO ;TESTA SE PORTA DA RUA ESTA FECHADA

call rotina_fecha_rua ;0-ABERTA= VÁ PARA ROTINA FECHA RUA

btfss AGE_FECHADO ;1-FECHADA= TESTA SE AGENCIA ESTA FECHADA

call rotina_fecha_agencia ;0-ABERTA= VÁ PARA ROTINA FECHA AGENCIA

jfp2

btfsc RADAR_AGE ;TESTA RADAR AGENCIA

call presenca_agencia ;1-ACIONADO= VÁ PARA PRESENÇA AGENCIA

btfsc INTERNO2 ;1-FECHADO= TESTA SENSOR INTERNO VIRTUAL(FLAG)

goto int1 ;1-SEM PRESENÇA= VÁ PARA int1 (SENSOR INTERNO NORMAL)

PR3 call presenca_rua ;0-COM PRESENÇA= VÁ PARA PRESENÇA RUA

goto FUNCAO_POS_EXPEDIENTE ;VÁ PARA FUNÇÃO POS EXPEDIENTE

int1 BTFSS INTERNO ;TESTO PRESENÇA REAL

GOTO PR3 ;0- TEM PRESENÇA VÁ PARA PR3

GOTO FUNCAO_POS_EXPEDIENTE ;1-LIBERADO= VÁ PARA POS EXPEDIENTE

;*******************************************************************************

FUNCAO_EMERGENCIA BCF BUZZER

btfss SELETOR ;TESTA SELETOR SE ESTA ACIONADO E PULA 1 LINHA SE ESTIVER

GOTO botões ;NÃO ESTA ACIONADO ENTÃO VÁ PARA botões

MOVLW B'0000' ;MANDO 0 PARA RA0,RA, RA2, RA3

MOVWF PORTA ;LIMPA PORTA MOTOR RUA ABRE E FECHA E MOTOR AGENCIA ABRE E FECHA

bcf LED_AUTOM ;DESLIGA LED AUTOMATICO

bcf LED_POS ;DESLIGA LED POE-EXPEDIENTE

BSF LED_MANUAL ;LIGA LED MANUAL

call time1_3 ;CONTA UM TEMPO EM time_3

CALL rotina_fecha_rua ;MANDA FECHAR A PORTA DA RUA

CALL rotina_fecha_agencia ;MANDA FECHAR A PORTA DA AGENCIA

goto funcao_manual ;VAI PARA FUNCAO MANUAL

botões

BTFSC DETECTOR

BSF BUZZER

BTFSC BOT_RUA ;TESTA SE BOTÃO RUA NÃO ESTA ACIONADO E PULA 1 LINHA

GOTO RUA_ACIONADA ;VÁ PARA RUA ACIONADO

BTFSS BOT_AGE ;TESTA SE BOTÃO AGENCIA ESTA ACIONADO E PULA UMA LINHA SE ESTIVER

GOTO FUNCAO_EMERGENCIA ;BOTÃO RUA NÃO ESTA ACIONADO VOLTA PARA EMERGENCIA

GOTO AGENCIA_ACIONADO ;VÁ PARA AGENCIA ACIONADA

RUA_ACIONADA BTFSS RUA_FECHADO ;TESTA SE PORTA RUA ESTA FECHADA E PULA 1 LINHA SE ESTIVER

GOTO EMER_FECHA_RUA ;PORTA RUA NÃO ESTA FECHADA ENTÃO MANDA FECHAR RUA

GOTO EMER_ABRE_RUA ;PORTA RUA ESTA FECHADA ENTÃO MANDA ABRIR

AGENCIA_ACIONADO BTFSS AGE_FECHADO ;TESTA SE PORTA EGENCIA ESTA FECHADA E PULA I LINHA SE ESTIVER

GOTO EMER_FECHA_AGENCIA ;PORTA AGENCIA ESTA ABERTA ENTÃO FECHE

GOTO EMER_ABRE_AGENCIA ;PORTA AGENCIA ESTA FECHADA então ABRE.

EMER_ABRE_RUA

BTFSC SELETOR ;TESTA SELETOR SE NÃO ESTA ACIONADO E PULA 1 LINHA

GOTO funcao_manual ;BOTÃO SELETOR ESTA ACIONADO ENTÃO VÁ PARA FUNÇÃO MANUAL

BCF TRAVA_RUA

BSF MOTOR_RUA_ABRE ;LIGA MOTOR ABRE PORTA RUA

BTFSC DETECTOR

BSF BUZZER

BTFSS RUA_ABERTA ;TESTA SE A RUA ESTA ABERTA E PULA 1 LINHA SE JA ABRIU

GOTO EMER_ABRE_RUA ;AINDA NÃO ABRIU ,VÁ PARA EMER_ABRE_RUA

BCF MOTOR_RUA_ABRE ;DESLIGA O MOTOR PORTA ABRE RUA

GOTO FUNCAO_EMERGENCIA

EMER_FECHA_RUA

BTFSC SELETOR ;TESTA SELETOR SE NÃO ESTA ACIONADO E PULA 1 LINHA

GOTO funcao_manual ;BOTÃO SELETOR ESTA ACIONADO ENTÃO VÁ PARA FUNÇÃO MANUAL

BSF MOTOR_RUA_FECHA ;LIGA MOTOR FECHA PORTA RUA

BTFSC DETECTOR

BSF BUZZER

BTFSS RUA_FECHADO ;TESTA SE A RUA ESTA FECHADA E PULA 1 LINHA SE JA FECHOU

GOTO EMER_FECHA_RUA ;AINDA NÃO ABRIU ,VÁ PARA EMER_FECHA_RUA

BCF MOTOR_RUA_FECHA ;DESLIGA O MOTOR PORTA FECHA RUA

BSF TRAVA_RUA

GOTO FUNCAO_EMERGENCIA

EMER_ABRE_AGENCIA

BTFSC SELETOR ;TESTA SELETOR SE NÃO ESTA ACIONADO E PULA 1 LINHA

GOTO funcao_manual ;BOTÃO SELETOR ESTA ACIONADO ENTÃO VÁ PARA FUNÇÃO MANUAL

BCF TRAVA_AGE

BSF MOTOR_AGE_ABRE ;LIGA MOTOR ABRE PORTA AGENCIA

BTFSS AGE_ABERTA ;TESTA SE A AGENCIA ESTA ABERTA E PULA 1 LINHA SE JA ABRIU

GOTO EMER_ABRE_AGENCIA ;AINDA NÃO ABRIU ,VÁ PARA EMER_ABRE_AGENCIA

BCF MOTOR_AGE_ABRE ;DESLIGA O MOTOR PORTA ABRE AGENCIA

GOTO FUNCAO_EMERGENCIA

EMER_FECHA_AGENCIA

BTFSC SELETOR ;TESTA SELETOR SE NÃO ESTA ACIONADO E PULA 1 LINHA

GOTO funcao_manual ;BOTÃO SELETOR ESTA ACIONADO ENTÃO VÁ PARA FUNÇÃO MANUAL

BSF MOTOR_AGE_FECHA ;LIGA MOTOR FECHA PORTA AGENCIA

BTFSS AGE_FECHADO ;TESTA SE A AGENCIA ESTA FECHADA E PULA 1 LINHA SE JA FECHOU

GOTO EMER_FECHA_AGENCIA ;AINDA NÃO ABRIU ,VÁ PARA EMER_FECHA_AGENCIA

BCF MOTOR_AGE_FECHA ;DESLIGA O MOTOR PORTA AGENCIA FECHADA

BSF TRAVA_AGE

GOTO FUNCAO_EMERGENCIA ;VÁ PARA FUNÇAO EMERGENCIA

DORME

CLRF PORTA

CLRF PORTB

CLRF PORTC

CLRF PORTD

CLRF PORTE

CALL time1

BSF TRAVA_RUA

GOTO FUNCAO_EMERGENCIA

;********************************************************************************

funcao_manual

btfss SELETOR ;TESTA SELETOR SE ESTA ACIONADO PULA UMA LINHA

goto jfm1 ;SELETOR NÃO ESTA ACIONADO VÁ ATE jfm1

BCF MOTOR_RUA_ABRE ;SELETOR ACIONADO ENTÃO = DESLIGA MOTOR QUE ABRE PORTA RUA

BCF MOTOR_RUA_FECHA ;DESLIGA MOTOR QUE FECHA PORTA RUA

BCF MOTOR_AGE_ABRE ;DESLIGA MOTOR QUE ABRE PORTA AGENCIA

BCF MOTOR_AGE_FECHA ;DESLIGA MOTOR QUE FECHA PORTA AGENCIA

bcf LED_MANUAL ;DESLIGA LED MANUAL

bsf LED_AUTOM ;LIGA LED AUTOMATICO

call time1_3 ;VAI CONTAR TEMPO EM time1_3

goto funcao_automatica ;VAI PARA A FUNÇÃO AUTOMATICA

jfm1 BSF TRAVA_RUA

BSF TRAVA_AGE

btfss DETECTOR ;SELETOR NÃO ACIONADO = TESTA DETECTOR DE METAIS E PULA SE ACIONADO

goto jfm3 ;NÃO FOI DETECTADO METAL VÁ PARA jfm3

btfss RUA_FECHADO ;FOI DETECTADO METAL, TESTA SE PORTA RUA ESTA FECHADO E PULA SE FECHADO

call detetor_metal ;PORTA ESTA ABERTA ENTÃO VÁ PARA ROTINA DETECTOR DE METAL

jfm3 btfss BOT_RUA ;PORTA FECHADA, TESTA SE BOTÃO RUA ESTA ACIONADO E PULA 1 SE ACIONADO

goto jfm2 ;BOTÃO NÃO ESTA ACIONADO, VA PARA jfm2

call time1_3 ;BOTÃO ESTA ACIONADO, VÁ CONTAR TEMPO EM timelmr

btfsc RUA_FECHADO ;TESTA SE PORTA RUA ESTA NÃO ESTA FECHADA E PULA 1 SE NÃO ESTIVER

goto jfmar ;PORTA ESTA FECHADA ENTÃO VÁ PARA jfmar

goto jfmfr ;PORTA NÃO ESTA FECHADA ENTÃO VÁ PARA jfmfr

jfmar btfss AGE_FECHADO ;TESTA SE PORTA AGENCIA ESTA FECHADA E PULA 1 SE ESTIVER

goto jfm2 ;PORTA AGENCIA ESTA ABERTA ,VÁ PARA jfm2

bcf TRAVA_RUA ;PORTA AGENCIA ESTA FECHADA, ENTÃO DESLIGA TRAVA RUA

jar1 call rotina_abre_rua ;VÁ PARA ROTINA ABRE RUA

btfsc DETECTOR ;TESTA SE DETECTOR NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

call detetor_metal ;DETECTOR ESTA ACIONADO, VÁ PARA ROTINA DETECTOR DE METAL

bcf MOTOR_RUA_FECHA ;DETECTOR NÃO ESTA ACIONADO, DESLIGA MOTOR QUE FECHA RUA

goto jfm2 ;VÁ PARA jfm2

jfmfr call rotina_fecha_rua ;VÁ PARA ROTINA FECHA RUA

btfsc DETECTOR ;TESTA SE DETECTOR NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

call detetor_metal ;DETECTOR ESTA ACIONADO, VÁ PARA ROTINA DETECTOR DE METAL

bcf MOTOR_RUA_FECHA ;DETECTOR NÃO ESTA ACIONADO, DESLIGA MOTOR QUE FECHA RUA

btfsc RUA_ANTIESM ;TESTA SE ANTIESMAGAMENTO RUA NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

goto anti_rua ;ANTIESMAGAMENTO ESTA ACIONADO, VÁ PARA ROTINA ANTI_RUA

btfsc BOT_RUA ;TESTA SE BOTÃO RUA NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

goto anti_rua ;BOTÃO ESTA ACIONADO, VÁ PARA ANTIESMAGAMENTO RUA

bsf TRAVA_RUA ;BOTÃO NÃO ESTA ACIONADO, LIGA TRAVA RUA

goto jfm2 ;VÁ PARA jfm2

anti_rua bcf MOTOR_RUA_FECHA ;DESLIGA MOTOR QUE FECHA RUA

btfsc DETECTOR ;TESTA SE DETECTOR NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

call detetor_metal ;DETECTOR ESTA ACIONADO, VÁ PARA ROTINA DETECTOR DE METAL

call time1 ;DETECTOR NÃO ESTA ACIONADO VÁ CONTAR TEMPO EM time1

goto jar1 ;VÁ PARA ROTINA ABRE RUA EM jar1

jfm2 btfss BOT_AGE ;TESTA BOTÃO AGENCIA ESTA ACIOANDO E PULA 1 SE ESTIVER

goto funcao_manual ;BOTÃO AGENCIA NÃO ESTA ACIONADO, VÁ PARA FUNÇÃO MANUAL

call time1_3 ;BOTÃO ESTA ACIONADO, VÁ CONTAR TEMPO EM time1ma

btfsc AGE_FECHADO ;TESTA SE AGENCIA NÃO ESTA FECHADO E PULA 1 SE NÃO ESTIVER

goto jfmaa ;AGENCIA ESTA FECHADO, VÁ PARA jfmaa

goto jfmfa ;AGENCIA NÃO ESTA FECHADA ,VÁ PARA jfmfa

jfmaa btfss RUA_FECHADO ;TESTA SE RUA ESTA FECHADA E PULA 1 SE ESTIVER

goto funcao_manual ;RUA NÃO ESTA FECHADO VÁ PARA FUNÇÃO MANUAL

bcf TRAVA_AGE ;RUA ESTA FECHADO, DESLIGA TRAVA AGENCIA

jaa1 call rotina_abre_agencia ;VÁ PARA ROTINA ABRE AGENCIA

goto funcao_manual ;VÁ PARA FUNÇÃO MANUAL

jfmfa call rotina_fecha_agencia ;VÁ PARA ROTINA FECHA AGENCIA

BTFSC SELETOR

RETURN

BTFSC AGE_ABERTA

GOTO $-4

bcf MOTOR_AGE_FECHA ;DESLIGA MOTOR QUE FECHA AGENCIA

btfsc AGE_ANTIESM ;TESTA SE ANTIESMAGAMENTO AGENCIA NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

goto anti_agencia ;ANTIESMAGAMENTO ESTA ACIONADO, VÁ PARA ANTIESMAGAMENTO AGENCIA

BTFSC RADAR_AGE ;Se o botão for precionado e alguem estiver proximo da porta ele para retorna

GOTO anti_agencia

btfsc BOT_AGE ;TESTA SE BOTÃO AGENCIA NÃO ESTA ACIONADO E PULA 1 SE NÃO ESTIVER

goto anti_agencia ;BOTÃO AGENCIA ESTA ACIONADO, VÁ PARA ANTIESMAGAMENTO AGENCIA

bsf TRAVA_AGE ;BOTÃO NÃO ESTA ACIONADO, LIGA A TRAVA AGENCIA

goto funcao_manual ;VÁ PARA FUNÇÃO MANUAL

anti_agencia bcf MOTOR_AGE_FECHA ;DESLIGA O MOTOR QUE FECHA A AGENCIA

call time1 ;VÁ CONTAR TEMPO EM time1

goto jaa1 ;VÁ PARA jaa1

;*******************************************************************************

;******************** segmento principal ***************************************

;*******************************************************************************

inicio

goto FUNCAO_EMERGENCIA

;*******************************************************************************

END

Link para o comentário
Compartilhar em outros sites

Estou usando cristal de 12 mhz e 2 cap 33pf ligado no terra e 1 resistor de 220r entre o term do cristal e o pino 14 do pic.

as saidas pinos 2-3-4-5 estão protegidas por moc 3021 e bt 139 (saidas para inverso dos motores mono 110volts) e as saidas 6-7 com 4n25 e tip 41 c para as travas magnéticas.

Esse codigo que você menciona seria nas variáveis?

Eles serviriam para que? desculpe sou meio leigo estou aprendendo na raça a programar pic, esse ano ainda faço um bom curso de programação.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!