;********************************************************************************************************************* ; ; SORTEADOR_REV.ASM ; ; ; ; ; C/ PIC 12F675 ; INICIO : 12/10/13 TERMINO : 12/10/13 ; AUTOR: CLAUDIO LARIOS ; OBJETIVO: ESCOLHER DENTRO DE UMA FAIXA PREVIAMENTE PROGRAMADA, UM DETERMINADO ; APERTO DE BOTÃO, DE FORMA PSEUDO-RANDOMICA. ; USO: SORTEIO PARA REVISTA DE EMPREGADOS EM PORTARIAS DE EMPRESAS ; OS EMPREGADOS AO SAIR PELA PORTARIA, APERTAM UM BOTÃO NO APARELHO. SE ACENDER O ; LED 'VERDE' PODERÁ SAIR SEM REVISTA. NO ENTANTO, SE ACENDER O LED 'VERMELHO', ; DEVERÁ SER REVISTADO. ;********************************************************************************************************************** ;ARQUIVOS PARA COMPILAÇÃO LIST P=12f675 , R=DEC INCLUDE "P12F675.INC" ;ARQUIVO PADRAO ERRORLEVEL -302 ;-202 ;ELIMINA MENSAGEM DE ERRO ;============================================================================================================== ;PALAVRA DE CONFIGURAÇÃO __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF ;=============================================================================================================== ;TROCA DE BANCOS #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ;PORTS #DEFINE SW GPIO,3 ;PINO 4 - BOTÃO DE SORTEIO #DEFINE LED_VERDE GPIO,4 ;PINO 3 - LED VERDE 'SIGA' #DEFINE LED_VERM GPIO,5 ;PINO 2 - LED VEMELHO 'PARE' #DEFINE SOM GPIO,2 ;PINO 5 - SIRENE ;EQUATES V_FAIXA EQU .20 ;SORTEIA ENTRE 1 E 20 ;================================================================================================================ ;RAM CBLOCK 0X20 ;ENDERECO INICIAL DE MEMORIA TEMP2,TEMP1,TEMP,AUX2,AUX1,AUX,PONT,NUM,NUM_S,NUM_C DEL2,DEL1,DEL0,TR,R0,N_B,NUM_H,RANDOM,Q_APERTO,CONT ENDC ; ;================================================================================================== ; VETOR DE RESET ;================================================================================================== ORG 0X00 GOTO INICIO ORG 0X04 RETFIE ;================================================================================================= ; INICIO DO PROGRAMA ;================================================================================================= INICIO BANK1 ;BANCO 1 CLRF TRISIO ;TUDO SAIDA CLRF ANSEL MOVLW B'00001000' MOVWF OPTION_REG ;HABILITA PULL UP BANK0 MOVLW .7 ;DESLIGA COMPARADORES MOVWF CMCON CLRF GPIO ;ZERA SAIDAS MOVLW .1 MOVWF Q_APERTO CLRF CONT ;================================================================================================= ; PROGRAMA PRINCIPAL ;================================================================================================= MAIN BANK0 ;================================================================================================= ; TESTA CHAVE DE SORTEIO ;================================================================================================= INCF RANDOM,F MOVFW RANDOM SUBLW V_FAIXA BTFSS STATUS,C CLRF RANDOM BTFSC SW GOTO MAIN VV1 MOVLW .1 CALL DELAY_MS BTFSS SW GOTO VV1 INCF CONT,F MOVFW CONT SUBLW V_FAIXA BTFSS STATUS,C CLRF CONT MOVFW CONT XORWF Q_APERTO,W BTFSS STATUS,Z GOTO N_IGUAL ;NÃO IGUAL MOVFW RANDOM MOVWF Q_APERTO ;NOVO VALOR DE SORTEIO MOVLW .7 MOVWF TEMP BSF LED_VERM VV4 MOVLW .3 CALL DELAYW_SOM MOVLW .3 CALL DELAYW DECFSZ TEMP,F GOTO VV4 BCF LED_VERM CLRF CONT GOTO MAIN N_IGUAL BSF LED_VERDE MOVLW .3 CALL DELAYW_SOM MOVLW .7 CALL DELAYW BCF LED_VERDE GOTO MAIN ;============================================================================== ; ROTINAS DE DELAY ;============================================================================== DELAYW_SOM ; CARGA DE 'W' X 50 MS MOVWF DEL2 CALL DELAY_50MS_SOM DECFSZ DEL2,F GOTO $-2 RETURN DELAY_50MS_SOM MOVLW .50 DELAY_MS_SOM ;TEMPO EM MS PASSADO EM 'W' MOVWF DEL1 CLRF DEL0 VV7 BSF DEL0,7 BSF SOM DECFSZ DEL0,F GOTO $-1 BSF DEL0,7 BCF SOM DECFSZ DEL0,F GOTO $-1 DECFSZ DEL1,F GOTO VV7 RETURN DELAYW ; CARGA DE 'W' X 50 MS MOVWF DEL2 CALL DELAY_50MS DECFSZ DEL2,F GOTO $-2 RETURN DELAY_50MS MOVLW .50 DELAY_MS ;TEMPO EM MS PASSADO EM 'W' MOVWF DEL1 CLRF DEL0 NOP DECFSZ DEL0,F GOTO $-2 DECFSZ DEL1,F GOTO $-5 RETURN END