Programació en pic-as del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Bucles de retard

La configuració per defecte del microcontrolador és amb un rellotge de 4 MHz. Cada instrucció normal requereix quatre cicles de rellotge i, per tant, cada instrucció normal s'executa en un microsegon (us). Quan la instrucció que s'executa no és la següent (perquè hi ha un salt en el programa) es perden quatre cicles de rellotge i, per tant, triga 2 μs en executar-se. En aquest apartat estem suposant la configuració per defecte.

Per a retards de pocs microsegons podem fer servir la instrucció nop que introdueix un retard d'un microsegon.

Bucle de 0,77 ms

La funció següent crea un bucle de retard de 0,77 ms. No importa quin valor tingui l'acumulador. L'acumulador no es modifica.

Retard1 EQU 0x20  ; Variable de retard	
;
; Funció de retard de 0,8 ms
;
RetC:
  decfsz Retard1,f	
  goto RetC
  return

Bucle de 0,2 s

La funció següent crea un bucle de retard de 0,2 s. No importa quin valor tingui l'acumulador. L'acumulador no es modifica.

Retard1 EQU 0x20  ; Variables de retard	
Retard2 EQU 0x21
;
; Funció de retard de 0,2 s
;
RetM:
  decfsz Retard1,f		
  goto RetM		
  decfsz Retard2,f	
  goto RetM
  return

Bucle variable de microsegons

La funció següent crea un bucle de retard variable. L'acumulador conté el nombre de cops que es repeteix el bucle i cada bucle dura uns 3 μs. Per exemple, amb un valor d'entrada de 10 tindrem un bucle de 30 μs. L'acumulador no es modifica.

Retard1 EQU 0x20  ; Variable de retard	
;
; Funció de retard
;
Retus:
  movwf Retard1
Bucleus:
  decfsz Retard1,f
  goto Bucleus
  return

Bucle variable de milisegons

La funció següent crea un bucle de retard variable. L'acumulador conté el nombre de cops que es repeteix el bucle i cada bucle dura 771 μs. Per exemple, amb un valor d'entrada de 13 tindrem un bucle de 10 ms. L'acumulador no es modifica.

  Retard1 EQU 0x20  ; Variables de retard	
  Retard2 EQU 0x21
;
; Funció de retard
;
Retms:
  movwf Retard2
Buclems:
  decfsz Retard1,f
  goto Buclems
  decfsz Retard2,f
  goto Buclems
  return

Bucle variable de segons

La funció següent crea un bucle de retard variable. L'acumulador conté el nombre de cops que es repeteix el bucle i cada bucle dura 0,2 s. Per exemple, amb un valor d'entrada de 10 tindrem un bucle de 2 s. L'acumulador no es modifica.

Retard1 EQU 0x20  ; Variables de retard	
Retard2 EQU 0x21
Retard3 EQU 0x22
;
; Funció de retard de 0,2 W s
;
Rets:
  movwf Retard3
Bucles:
  decfsz Retard1,f		
  goto Bucles		
  decfsz Retard2,f		
  goto Bucles		
  decfsz Retard3,f	
  goto Bucles
  return

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.