LIST P=16F628 INCLUDE INCLUDE __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_OFF&_BODEN_OFF&_MCLRE_OFF&_INTRC_OSC_NOCLKOUT&_LVP_OFF TEMPO EQU 0X20 OLHO EQU 0X21 TREM EQU 0X22 ORG 0X0000 GOTO INICIO ORG 0X0004 BCF PIR1,TMR1IF DECFSZ TEMPO,F RETFIE MOVLW D'4' MOVWF TEMPO ; 4 x 0,5s = 2 segundos JPE TRATA_1,TREM,0x01 JPE TRATA_2,TREM,0x02 JPE TRATA_3,TREM,0x03 JPE TRATA_4,TREM,0x04 JPE TRATA_5,TREM,0x05 JPE TRATA_6,TREM,0x06 JPE TRATA_7,TREM,0x07 JPE TRATA_8,TREM,0x08 JPE TRATA_9,TREM,0x09 JPE TRATA_10,TREM,0x0A CLRF TREM RETFIE TRATA_1: COMBF PORTA,0 CLRF TREM RETFIE TRATA_2: COMBF PORTA,1 CLRF TREM RETFIE TRATA_3: COMBF PORTA,2 CLRF TREM RETFIE TRATA_4: COMBF PORTA,3 CLRF TREM RETFIE TRATA_5: COMBF PORTA,4 CLRF TREM RETFIE TRATA_6: COMBF PORTB,2 CLRF TREM RETFIE TRATA_7: COMBF PORTA,6 CLRF TREM RETFIE TRATA_8: COMBF PORTA,7 CLRF TREM RETFIE TRATA_9: COMBF PORTB,1 CLRF TREM RETFIE TRATA_10: BTFSS INTCON,T0IF ; 1us x 256 x (256-TMR0) x 150(OLHO) = 10 segundos = DELAY para acionamento do alarme. GOTO TRATA_10 BCF INTCON,T0IF DECFSZ OLHO,F GOTO TRATA_10 MOVLW D'150' MOVWF OLHO COMBF PORTB,3 CLRF TREM RETFIE INICIO: MOVLW B'00000111' MOVWF CMCON ;C2OUT = 0 ( entrada Vin+ > Vin-) ;C1OUT = 0 ( entrada Vin+ < Vin-) ;C2INV = 0 ( saída não invertida ) ;C1INV = 0 ( saída não invertida ) ;CIS = 0 ( seleção de entrada dos comparadores nos modos 1 e 2 ) ;CM2 = 1 ( comparadores desligados ) ;CM1 = 1 ;CM0 = 1 MOVLW B'00110001' MOVWF T1CON ; Fint=CLOCK/PRESCALER/(65536-TMR1) ;U-0 ;U-0 ;T1CKPS1 = 1 ( seleciona um dos quatro fatores de pré divisão disponíveis para o prescaler do timer 1 ;T1CKPS0 = 1 que é 1:8 ) --> tempo de estouro do TMR1 = 1us x 8 x (65536-TMR1) = 0,5s ;T1OSCEN = 0 ( o oscilador externo está desabilitado ) ;T1SYNC barrado = 0 ( o clock está sincronizado com o ciclo de instruções interno) ;TMR1CS = 0 ( Clock interno (=Fosc/4) ;TMR1ON = 1 ( timer 1 habilitado ) BCF RCSTA,SPEN ; USART desabilitada (pinos RB1 e RB2 podem ser utilizados para I/O BANKSEL TRISB BSF PIE1,TMR1IE ; interrupção habilitada (transbordo do TMR1) MOVLW B'00000001' MOVWF TRISB CLRF TRISA MOVLW B'11000111' MOVWF OPTION_REG ;RBPU barrado = resistores de pull-up desativados ;INTEDG = poderá ocorrer interrupção na borda de subida do sinal no pino RB0/INT ;TOCS = o clock do timer será proveniente do clock interno do sistema (Fosc/4) ;TOSE = o timer 0 será incrementado na borda de subida do sinal externo aplicado em RA4/T0CKI ;PSA = prescaler conectado ao TMR0 ;PS2 = prescaler do TMR0 = 1:256 ;PS1 ;PS0 BANKSEL PORTB MOVLW B'11000000' MOVWF INTCON ;GIE = poderá ocorrer interrupção ;PEIE = interrupções periféricas habilitadas ;T0IE = interrupção de transbordo do TMR0 desligada ;INTE = interrupção externa desligada ;RBIE = interrupção por mudança na porta B desligada ;T0IF = flags sinalizadores ;INTF = ;RBIF = CLRF TMR1H CLRF TMR1L MOVLW D'150' MOVWF OLHO MOVLW D'4' MOVWF TEMPO MOVLW 0x00 MOVWF TREM LOOP: BTFSS INTCON,INTF GOTO LOOP BCF INTCON,INTF CLRF TMR1H CLRF TMR1L INCF TREM,F GOTO LOOP END