;=================================================================================================================== ; TRAVA_GRAÇA1.ASM ; OBJETIVO: IMPEDIR QUE UM USUÁRIO MANTENHA APERTADO O BOTÃO DE TX('CHAMAR GARÇOM'), BLOQUEANDO O SISTEMA. ; APÓS 5 MINUTOS, DESTRAVA E APAGA LED INDICADOR DE PEDIDO DE GARÇOM, LIBERANDO PARA NOVO ACIONAMENTO. ; AUTOR: CLÁUDIO LÁRIOS ; DATA: 05-04-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 ;ABAIXO, SE DESCOMENTADO, PERMITE QUE HAJA NOVO ACIONAMENTO DEPOIS DE 5MIN #DEFINE RESETA_APOS_5MIN ;TEMPORIZA POR 5 MINUTOS E NÃO HAVENDO ATENDIMENTO APAGA LED E LIBERA NOVA TX ;=================================================================================================================== 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 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 #DEFINE FLAG_T FLAGS,0 ;FLAG TRAVA #DEFINE FLAG_T1 FLAGS,1 ;FLAG TRAVA1 #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 CBLOCK 0X20 FLAGS,T2,T1,T0,Z3,Z2,Z1,Z0 ENDC ORG 0X00 GOTO START ORG 0X04 RETFIE START: MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES CLRF GPIO ; RESET PORT BANK1 CALL 0X03FF ;BUSCA CALIBRAÇÃO DO OSCILADOR MOVWF OSCCAL ;TRANSFERE PARA O REG.OSCILADOR MOVLW B'11001011' ; SETUP PORTA MOVWF TRISIO CLRF OPTION_REG ;LIGA GERAL DE PULL UPS MOVLW 0X03 MOVWF WPU ;LIGA PULL UPS IFDEF PIC_675 MOVLW .0 MOVWF ANSEL ;LIBERA PORTAS DO AD (SOMENTE 12f675) BANK0 ENDIF CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS INICIO: BTFSS SW_AP GOTO APAGAR BTFSC SW_CH GOTO TESTA_TIME BTFSC FLAG_T1 GOTO INICIO IFDEF RESETA_APOS_5MIN MOVLW .2 ;POR VOLTA DE 5 MINUTOS MOVWF Z3 CLRF Z2 CLRF Z1 CLRF Z0 ENDIF BSF FLAG_T1 BSF OUT_CH BSF LED ;LIGA LED BCF FLAG_T CALL DELAY_FOR_TX BCF OUT_CH ;DESLIGA TRANSMISSÃO GOTO INICIO APAGAR BCF FLAG_T1 BTFSC FLAG_T GOTO INICIO BSF FLAG_T BSF OUT_AP BCF LED CALL DELAY_FOR_TX BCF OUT_AP GOTO INICIO DELAY_FOR_TX ;JANELA DE TEMPO EM QUE OCORRERÁ A TRANSMISSÃO NO TX MOVLW .4 ;TEMPO DE 1 SEGUNDO MOVWF T2 LOOP45 MOVLW .250 ;250 MILISEGUNDOS MOVWF T1 CLRF T0 NOP DECFSZ T0,F GOTO $-2 DECFSZ T1,F GOTO $-4 DECFSZ T2,F GOTO LOOP45 RETURN TESTA_TIME IFDEF RESETA_APOS_5MIN ;PERMITE QUE O BOTÃO SE APERTADO APÓS ESTE TEMPO, ACIONE O TX DECFSZ Z0,F GOTO X1 DECFSZ Z1,F GOTO X1 DECFSZ Z2,F GOTO X1 DECFSZ Z3,F GOTO X1 BCF FLAG_T BCF FLAG_T1 BCF LED BSF OUT_AP CALL DELAY_FOR_TX BCF OUT_AP ENDIF X1 GOTO INICIO END