aasoares07 Posted June 9, 2021 at 02:06 AM Report Share #622591 Posted June 9, 2021 at 02:06 AM (edited) #INCLUDE<P16F627.INC> __CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF ORG 0X40 COUNT EQU 0X20 NUM EQU 0X21 ORG 0X0 START ;DESABILITAR COMPARADORES MOVLW 0X07 MOVWF CMCON ;SELECIONAR BANCO 1 BSF STATUS,5 BCF STATUS,6 ;ENTRADA (BOTÃO DE SELEÇÃO DE MODOS) BSF TRISB,0 ;SAÍDAS (SEMÁFOROS) ;------------------------------- ;A1 BCF TRISA,0 ;VERDE 1 BCF TRISA,1 ;AMARELO 1 BCF TRISA,2 ;VERMELHO 1 ;A2 BCF TRISA,3 ;VERDE 2 BCF TRISA,4 ;AMARELO 2 BCF TRISA,5 ;VERMELHO 2 ;A3 BCF TRISB,1 ;VERDE 3 BCF TRISB,2 ;AMARELO 3 BCF TRISB,3 ;VERMELHO 3 😜 BCF TRISB,4 ;VERDE PEÃO BCF TRISB,5 ;VERMELHO PEÃO ;------------------------------- ;SELECIONAR BANCO 0 BCF STATUS,5 BCF STATUS,6 ;------------------------------- BTFSS PORTB,0 ;TESTA SE BOTÃO ESTÁ LIGADO GOTO INTERMITENTE ;SE BOTÃO ESTÁ DESLIGADO, EXECUTA ESTA INSTRUÇÃO GOTO SEQUENCIA ;SE BOTÃO ESTÁ LIGADO, EXECUTA ESTA INSTRUÇÃO INTERMITENTE ;A1 BCF PORTA,0 ;DESLIGA VERDE 1 BSF PORTA,1 ;LIGA AMARELO 1 BCF PORTA,2 ;DESLIGA VERMELHO 1 ;A2 BCF PORTA,3 ;DESLIGA VERDE 2 BSF PORTA,4 ;LIGA AMARELO 2 BCF PORTA,5 ;DESLIGA VERMELHO ;A3 BCF PORTB,1 ;DESLIGA VERDE 3 BSF PORTB,2 ;LIGA AMARELO 3 BCF PORTB,3 ;DESLIGA VERMELHO 3 ;DESLIGAR AMARELOS BCF PORTA,1 BCF PORTA,4 BCF PORTB,2 BTFSC PORTB,0 ;TESTA SE BOTÃO ESTÁ DESLIGADO GOTO SEQUENCIA GOTO INTERMITENTE SEQUENCIA BTFSS PORTB,0 ;TESTA SE BOTÃO ESTÁ LIGADO GOTO INTERMITENTE ;EXECUTA ESTA INSTRUÇÃO SE BOTÃO ESTIVER DESLIGADO ;VINTE_SEGUNDOS 😜 BCF PORTB,4 ;DESLIGA VERDE BSF PORTB,5 ;LIGA VERMELHO ;A1 BSF PORTA,0 ;LIGAR VERDE 1 BCF PORTA,1 ;DESLIGAR AMARELO 1 BCF PORTA,2 ;DESLIGAR VERMELHO 1 ;A2 BSF PORTA,3 ;LIGAR VERDE 2 BCF PORTA,4 ;DESLIGAR AMARELO 2 BCF PORTA,5 ;DESLIGAR VERMELHO 2 ;A3 BCF PORTB,1 ;DESLIGAR VERDE 3 BCF PORTB,2 ;DESLIGAR AMARELO 3 BSF PORTB,3 ;LIGAR VERMELHO 3 CALL DELAY20 BTFSS PORTB,0 GOTO INTERMITENTE ;TRES_SEGUNDOS ;A1 BCF PORTA,0 ;DESLIGAR VERDE 1 BSF PORTA,1 ;LIGAR AMARELO 1 BCF PORTA,2 ;DESLIGAR VERMELHO 1 ;A2 BCF PORTA,3 ;DESLIGAR VERDE 2 BSF PORTA,4 ;LIGAR AMARELO 2 BCF PORTA,5 ;DESLIGAR VERMELHO 2 ;A3 BCF PORTB,1 ;DESLIGAR VERDE 3 BCF PORTB,2 ;DESLIGAR AMARELO 3 BSF PORTB,3 ;LIGAR VERMELHO 3 CALL DELAY3 BTFSS PORTB,0 GOTO INTERMITENTE ;NOVE_SEGUNDOS 😜 BSF PORTB,4 ;LIGA VERDE BCF PORTB,5 ;DESLIGA VERMELHO ;A1 BCF PORTA,0 ;DESLIGAR VERDE 1 BCF PORTA,1 ;DESLIGAR AMARELO 1 BSF PORTA,2 ;LIGAR VERMELHO 1 ;A2 BCF PORTA,3 ;DESLIGAR VERDE 2 BCF PORTA,4 ;DESLIGAR AMARELO 2 BSF PORTA,5 ;LIGAR VERMELHO 2 ;A3 BSF PORTB,1 ;LIGAR VERDE 3 BCF PORTB,2 ;DESLIGAR AMARELO 3 BCF PORTB,3 ;DESLIGAR VERMELHO 3 CALL DELAY9 BTFSS PORTB,0 GOTO INTERMITENTE ;ÚLTIMO 😜 BCF PORTB,4 ;DESLIGA VERDE BSF PORTB,5 ;LIGA VERMELHO ;A1 BCF PORTA,0 ;DESLIGAR VERDE 1 BCF PORTA,1 ;DESLIGAR AMARELO 1 BSF PORTA,2 ;LIGAR VERMELHO 1 ;A2 BCF PORTA,3 ;DESLIGAR VERDE 2 BCF PORTA,4 ;DESLIGAR AMARELO 2 BSF PORTA,5 ;LIGAR VERMELHO 2 ;A3 BCF PORTB,1 ;DESLIGAR VERDE 3 BSF PORTB,2 ;LIGAR AMARELO 3 BCF PORTB,3 ;DESLIGAR VERMELHO 3 CALL DELAY3 GOTO SEQUENCIA DELAY20 MOVLW B'11011111' ;MOVE 223 PARA W MOVWF COUNT ;MOVE 223 PARA COUNT CICLO_DELAY20 INCFSZ COUNT,1 ;COUNT+ GOTO CICLO_DELAY20 CLRF COUNT ;PÕE COUNT A 0 RETURN DELAY3 MOVLW B'11111001' ;MOVE 249 PARA W MOVWF COUNT ;MOVE 249 PARA COUNT CICLO_DELAY3 INCFSZ COUNT,1 GOTO CICLO_DELAY3 CLRF COUNT RETURN DELAY9 MOVLW B'11110000' ;MOVE 240 PARA W MOVWF COUNT ;MOVE 240 PARA COUNT CICLO_DELAY9 INCFSZ COUNT,1 GOTO CICLO_DELAY9 CLRF COUNT RETURN END Precisava de ajuda em alterar o delay de 20 segundos para 15 segundos, o de 3 segundos para 2 segundos e o de 9 segundos para 8 segundos Edited June 9, 2021 at 02:10 AM by aasoares07 Link to comment Share on other sites More sharing options...
maluco-123 Posted June 10, 2021 at 09:10 AM Report Share #622610 Posted June 10, 2021 at 09:10 AM (edited) Viva, Pelo que percebi, os ciclos nos delays executam até o COUNT ser 256 (ou 0 depois do overflow de 8-bit), o que ainda não percebi, foi a relação da quantidade de loops por cada delay: DELAY20: 223 a 256, 33 loops DELAY9: 240 a 256, 16 loops DELAY3: 249 a 256, 7 loops Quando perceberes essa relação, diria que tens a solução 🙂 Entretanto, também podes considerar usar o DECFSZ (em vez do INCFSZ) para não teres de trabalhar com números negativos (ou overflows de 8bits, two's complement) btw, estou a escrever no telemóvel, pode não estar o mais bem explicado EDIT: agora no computador, para referências https://en.wikipedia.org/wiki/Two's_complement https://www.teachmemicro.com/pic-assembly-instruction-set/incfsz/ https://www.teachmemicro.com/pic-assembly-instruction-set/decfsz/ Edited June 10, 2021 at 09:39 AM by maluco-123 formatação 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now