Jump to content

Modificar delays no PIC 16F627


aasoares07

Recommended Posts

 

#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 by aasoares07
Link to comment
Share on other sites

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 by maluco-123
formatação
  • Vote 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.