;=================================================================================================================== ; TRAVA_GRAÇA_SLEEP ; VERSÃO COM BAIXO CONSUMO 0,1mA (SEM LEDS) ; AO APERTAR BOTÃO SW_CH (CHAMAR GARÇOM) FAZ ACENDER LED DE PEDIDO DE ATENDIMENTO E LIBERA O ACIONAMENTO DO TX ; POR 250 MILISEGUNDOS, COLOCANDO O PEDIDO NA FILA DO 'CHAMA_GARÇOM'. ; SE FOR APERTADO NOVAMENTE, FICARÁ SEM EFEITO, ATÉ QUE PASSE O TEMPO ESTABELECIDO (3 MIN) OU SEJA ACIONADO O ; BOTÃO 'SW_AP', QUE CANCELA O ATENDIMENTO, ENVIANDO UMA TRANSMISSÃO AO 'CHAMA_GARÇOM', RETIRANDO DA FILA E DES- ; BLOQUEANDO O BOTÃO 'SW_CH' PARA NOVO ATENDIMENTO, E APAGANDO O LED DE PEDIDO DE ATENDIMENTO. ; ; AUTOR: CLAUDIO LÁRIOS 02/07/2013 ; ;=================================================================================================================== ;DEFINIÇÕES DO USUARIO (DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS) ;#DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629 #DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675 ;=================================================================================================================== ;TEMPO DE BLOQUEIO DO BOTÃO 'CHAMAR GARÇOM' TEMPO_DE_RELIGAR EQU .80 ; VALOR X 2,3004 SEGUNDOS = 3 MIN (OBS. MÁX= .255 -> 9 MIN) ;JANELA DA TRANSMISSÃO TEMPO_TX_ON EQU .250 ;250 MILISEGUNDOS DE TRANSMISSÃO (OBS. MÁX= .255 ) ;=================================================================================================================== IFDEF PIC_675 LIST P=12f675 , R=DEC INCLUDE "P12F675.INC" ENDIF IFDEF PIC_629 LIST P=12f629 , R=DEC INCLUDE "P12F629.INC" ENDIF ERRORLEVEL -302 ;ELIMINA MENSAGEM DE ERRO ;PALAVRA DE CONFIGURAÇÃO __CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF ;BANCOS #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ;FLAGS #DEFINE FLAG_W FLAGS,2 ;FLAG LIGA/DESLIGA TEMPORIZAÇÃO POR WDT #DEFINE FLAG_AP FLAGS,3 ;FLAG TRAVA #DEFINE FLAG_CH FLAGS,4 ;FLAG TRAVA ;DEFINIÇÕES DE IO #DEFINE SW_AP GPIO,0 ;PINO 7 IN BOTÃO PARA CONCLUIR ATENDIMENTO #DEFINE OUT_AP GPIO,5 ;PINO 2 SAIDA PARA TX CONCLUIR ATENDIMENTO #DEFINE LED GPIO,2 ;PINO 5- SAIDA DO LED PARA INDICAR PEDIDO DE ATENDIMENTO #DEFINE SW_CH GPIO,1 ;PINO 6- IN BOTÃO PARA CHAMAR GARÇOM #DEFINE OUT_CH GPIO,4 ;PINO 3- SAIDA PARA TX PEDIR PRESENÇA DE GARÇOM ;RAM CBLOCK 0X20 FLAGS,T2,T1,T0,Z3,Z2,Z1,Z0,WTEMP,STATUSTEMP,TW ENDC ;RESET ORG 0X00 GOTO START ;============================================================================================= ; ROTINA DE INTERRUPÇÃO POR MUDANÇA DE ESTADO DOS PINOS ;============================================================================================= ORG 0X04 MOVWF WTEMP ;SALVA 'W' SWAPF STATUS,W ;SALVA 'STATUS' MOVWF STATUSTEMP BANK0 MOVFW GPIO ;LE GPIO (OBRIGATÓRIO) BCF INTCON,GPIF ;APAGA FLAG DE MUDANÇA DE ESTADO SWAPF STATUSTEMP,W ;RECUPERA 'STATUS' MOVWF STATUS MOVFW WTEMP ;RECUPERA 'W' RETFIE ;============================================================================================= ; CONFIGURAÇÕES INICIAIS DE REGISTRADORES E PORTAS ;============================================================================================= START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES CLRF GPIO ; RESET PORT BANK1 MOVLW B'11001011' ; SETUP PORTA MOVWF TRISIO MOVLW B'00001111' MOVWF OPTION_REG BSF IOC,0 ;LIGA MUDANÇA DE ESTADO NO PINO 7 BSF IOC,1 ;LIGA MUDANÇA DE ESTADO NO PINO 6 MOVLW 0X03 MOVWF WPU ;LIGA PULL UPS CLRF VRCON IFDEF PIC_675 MOVLW .0 MOVWF ANSEL ;LIBERA PORTAS DO AD (SOMENTE 12f675) ENDIF BANK0 CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS BSF INTCON,GPIE ;INTERRUPÇÃO POR MUDANÇA DE ESTADO BSF INTCON,GIE ;============================================================================================= ; ROTINA PRINCIPAL DO PROGRAMA ;============================================================================================= INICIO: VAI_SLEEP NOP SLEEP ;ENTRA EM MODO DE BAIXO CONSUMO E AGUARDA WDT OU MUDANÇA DE ESTADO DOS BOTÕES NOP BTFSS STATUS,NOT_TO GOTO ROTINA_WDT ;ACORDADO PELO WDT BTFSC SW_AP ;ACORDADO PELA INTERRUPÇÃO DE MUDANÇA DE ESTADO (BOTÕES) GOTO SEG99 ;TESTA O OUTRO BOTÃO BTFSC FLAG_AP ;TESTA FLAG DO BOTÃO GOTO VAI_SLEEP ;JÁ ESTAVA ACIONADO,VAI PARA BAIXO CONSUMO E DESPRESA ACIONAMENTO BSF FLAG_AP ;NÃO ESTAVA ACIONADO, ACIONA E LIGA SAIDA PARA TX. BSF OUT_AP BCF LED ;DESLIGA LED INDICADOR DE CHAMADA NA MESA CALL DELAY_FOR_TX ;TEMPO QUE SAIDA FICARÁ LIGADA PARA TRANSMITIR BCF OUT_AP ;DESLIGA SAIDA E A TRANSMISSÃO BCF FLAG_CH ;LIBERA PARA NOVO ACIONAMENTO DE PEDIDO DE GARÇOM G1 BSF FLAG_W ;SETA FLAG PARA LIGAR A TEMPORIZAÇÃO VIA WDT MOVLW TEMPO_DE_RELIGAR ;CARGA DE TEMPO PARA PERMITIR NOVO ACIONAMENTO NO BOTÃO DE CHAMADA DE GARÇOM MOVWF TW ;CARREGA O REGISTRADOR GOTO VAI_SLEEP ;VAI PARA BAIXO CONSUMO SEG99 BTFSC SW_CH ;TESTA BOTÃO DE CHAMADA DE GARÇOM GOTO VAI_SLEEP ;VAI PARA BAIXO CONSUMO BTFSC FLAG_CH ;ACIONADO, TESTA FLAG GOTO VAI_SLEEP ;JÁ ACIONADO, VAI PARA BAIXO CONSUMO BSF FLAG_CH ;NÃO ESTAVA ACIONADO, ACIONA E LIGA SAIDA PARA TRANSMITIR BSF LED ;LIGA LED DE INDICAÇÃO DE CHAMADA DE GARÇOM BSF OUT_CH ;LIGA SAIDA CALL DELAY_FOR_TX ;TEMPO QUE FICARÁ LIGADA ESTA SAIDA BCF OUT_CH ;DESLIGA A SAIDA BCF FLAG_AP ;LIBERA FLAG PARA O BOTÃO DE ENCERRAMENTO DE CHAMADA GOTO G1 ;VAI PARA CARGA DO TEMPO DE BLOQUEIO DO BOTÃO DELAY_FOR_TX ;JANELA DE TEMPO EM QUE OCORRERÁ A TRANSMISSÃO NO TX MOVLW TEMPO_TX_ON ;250 MILISEGUNDOS MOVWF T1 CLRF T0 NOP DECFSZ T0,F GOTO $-2 DECFSZ T1,F GOTO $-4 RETURN ;ROTINA DE TEMPORIZAÇÃO VIA WATCHDOG TIMER ROTINA_WDT BTFSS FLAG_W ;VERIFICA SE ESTÁ LIGADA A TEMPORIZAÇÃO GOTO VAI_SLEEP ;NÃO DECFSZ TW,F ;ESTÁ, COMEÇA A DECREMENTAR A CARGA 'EM TW' GOTO VAI_SLEEP ;VAI PARA BAIXO CONSUMO BCF FLAG_W ;APAGA OS FLAGS E LED DE ATENDIMENTO BCF FLAG_AP BCF FLAG_CH BCF LED GOTO VAI_SLEEP ;VAI PARA BAIXO CONSUMO END