|
;***************************************************************
; ATE2009 v05/2010
;
; Cliquer ici pour télécharger le projet complet
;
; Programme sur PIC10F20x effectuant une oscillation inversee
; sur GP0 et GP1. L'oscillation est une suite d'impulsion dont
; la frequence varie de 2 a 25 kHz.
;
; GP0 est une sortie
; GP1 est une sortie (complement de GP0)
; GP2 est une sortie (non connectee)
; GP3 est configuree en MCLR
;
; Historique
; Date Commentaire
; ------- ------------------------------------------------------
; 06/2010 Version de base du logiciel
title ATE2009
; inclusion des definitions du PIC10F202
#include <p10f202.inc>
; configuration specifique
; MCLR/GP3 configuree en tant que MCLR
; Protection du code desactivee
; Watchdog active
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_ON
; variables
CBLOCK 0x010
delai_1 ; boucle attente depart
delai_2
f_index ; selection frequence
f_valeur ; reference frequence
ENDC
; vecteur reset (le code demarre a partir de l'adresse 0x0000
ORG 0x000
nop
; OPTION
; reveil sur changement etat desactive
; pull-up desactivees
; TRM0 cadence a 125 kHz (4 MHz / 4 / 8)
; -> TMR0 sert de cadencement
movlw ( 1 << NOT_GPWU ) | ( 1 << NOT_GPPU ) | ( 1 << PS1 )
option
; Positionne GP0, GP1 et GP2 en sortie
; GP3 est toujours une entree
movlw ( 1 << GP3 )
tris 6
; sur PIC10F204/206 desactiver le comparateur
; clrf CMCON0
; initialisation etat depart de GP0 et GP1
; les sorties sont positionnees en complement
movlw ( 1 << GP0 )
movwf GPIO
; temporisation depart pour test sortie
; les sorties (LED) oscillent lentement
; durant quelques secondes. cela permet
; de constater une condition de defaut
movlw 0x10
movwf delai_1
clrf delai_2
attend: movlw D'125' ; attend 1 ms
subwf TMR0,W
btfss STATUS,C
goto attend
clrf TMR0 ; relance le compteur
clrwdt ; relance watchdog
decfsz delai_2,F ; decrement poids faible
goto attend
movlw ( 1 << GP0 ) | ( 1 << GP1 ) ; inversion sorties
xorwf GPIO,F
decfsz delai_1,F ; decrement poids fort
goto attend
; initialisation des variables
clrf f_index ; selection frequence depart
; boucle principale (n'en sort jamais)
boucle: clrwdt ; relance le watchdog
call f_tmr ; mise a jour reference
movwf f_valeur
delai: movfw f_valeur ; attente largeur impulsion
subwf TMR0,W
btfss STATUS,C
goto delai
clrf TMR0 ; relance le compteur
movlw ( 1 << GP0 ) | ( 1 << GP1 ) ; inversion sorties
xorwf GPIO,F
incf f_index,F ; passe a la frequence suivante
goto boucle ; c'est reparti
; conversion frequence en duree pour TMR0
; la table est une repartition entre 2 kHz et 25 kHz
f_tmr: movlw 0x0F ; masque bits utiles
andwf f_index,F
movlw f_tbl ; prepare le saut
addwf f_index,W
movwf PCL ; saut dans la table
f_tbl: retlw D'125' / D'2' ; 0: 2 kHz
retlw D'125' / D'5' ; 1: 5 kHz
retlw D'125' / D'9' ; 2: 9 kHz
retlw D'125' / D'12' ; 3: 12 kHz
retlw D'125' / D'15' ; 4: 15 kHz
retlw D'125' / D'18' ; 5: 18 kHz
retlw D'125' / D'22' ; 6: 22 kHz
retlw D'125' / D'25' ; 7: 25 kHz
retlw D'125' / D'25' ; 8: 25 kHz
retlw D'125' / D'22' ; 9: 22 kHz
retlw D'125' / D'18' ; A: 18 kHz
retlw D'125' / D'15' ; B: 15 kHz
retlw D'125' / D'12' ; C: 12 kHz
retlw D'125' / D'9' ; D: 9 kHz
retlw D'125' / D'5' ; E: 5 kHz
retlw D'125' / D'2' ; F: 2 kHz
END
|