Página 1 de 1

Rotina de tempo

MensagemEnviado: 09 Nov 2011 22:30
por likio
Boa noite pessoal.

Fiz um código para utilizar com o pic 16f628A, neste código criei uma rotina de tempo no qual irá temporizar um segndo. mas ela não está funcionando. Já fiz de tudo e não consigo entender o por que não funciona como deveria. Vou colocar apenas o código da rotina de tempo.
Por um erro de contagem de linhas onde se encontra o goto $-10 eu coloquei $-8, ai o programa funcionou, mas não no tempo que eu precisava, e mesmo alterando os valores das variaveis temporárias não consigo fazer a rotina funcionar corretamente.

Código: Selecionar todos
tempo
      movlw   D'8'
      movwf   A_t            ; salva o valor de w em A_t
      movlw   D'47'
      movwf   B_t            ; salva o valor de w em B_t
      movlw   D'3'
      movwf   C_t            ; salva o valor de w em C_t
      nop
      decfsz   C_t            ; se C_t for 0, vai para o próximo decremento
      goto   $-1
      decfsz   B_t            ; se B_t for 0, vai para o próximo decremento
      goto   $-6
      decfsz   A_t            ; se A_t for 0, vai para o próximo decremto
      goto   $-10
      return               ; este fim da rotina
temporizou

MensagemEnviado: 10 Nov 2011 08:02
por Andre_Cruz
likio,

Você qual cristal esta usando ?

MensagemEnviado: 10 Nov 2011 08:31
por Andre_Cruz
Véio alterei seu código agora esta funcionando, de acordo com seu cristal possível ajustar as variáveis para contar o tempo que você precisa.

Código: Selecionar todos
#include <p16f628a.inc>

 __CONFIG _CP_ON & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;
 
#DEFINE   BANK1   BSF     STATUS,RP0      ; SELECIONA BANCO 1
#DEFINE   BANK0   BCF   STATUS,RP0         ; SELECIONA BANCO 0

 ;VARIAVEIS
    CBLOCK 0x20
       A_t
       B_t
       C_t    
    ENDC
    
 ;vetor de reset
 org 0x00
 goto config_cpu
 
config_cpu
    BANK1    
    movlw   .0
    movwf   TRISA
    movlw    .0
    movwf   TRISB
    
    movlw .0
    movwf   INTCON
    
    movlw   .7
    movwf   CMCON
    
    BANK0
    CLRF   PORTA
    CLRF    PORTB
    goto   MAIN
    
tempo
      movlw   .8
      movwf   A_t            ; salva o valor de w em A_t
t3                                 ;ALTEREI AQUI !!!
      movlw   .47
      movwf   B_t            ; salva o valor de w em B_t
t2                                ;ALTEREI AQUI !!!
      movlw   .3
      movwf   C_t            ; salva o valor de w em C_t
t1                                 ;ALTEREI AQUI !!!
      nop       
      decfsz   C_t           ; se C_t for 0, vai para o próximo decremento
      goto   t1                ;ALTEREI AQUI !!!
      decfsz   B_t           ; se B_t for 0, vai para o próximo decremento
      goto   t2                ;ALTEREI AQUI !!!
      decfsz   A_t           ; se A_t for 0, vai para o próximo decremto
      goto   t3                ;ALTEREI AQUI !!!
      return                    ; este fim da rotina
     
MAIN
    bsf      PORTA,1
    call   tempo
    BCF      PORTA,1
    call   tempo
    
    goto   MAIN
    
 END
 

MensagemEnviado: 10 Nov 2011 08:58
por fabim
Eu também dei uma modificada, mais não vou postar nada não.
Faça você mesmo seu folgado da poha.

http://www.piclist.com/techref/piclist/ ... /delay.htm