;SATPOS.ASM
;POSITIONNEUR PARABOLE SATELLITE TV a PIC16C84 et affichage LCD retro-eclaire
; PRINCIPE
;le tableau des valeurs de positions des satellites doit etre etabli suivant votre equipement
;principe : parabole motorisee par verin avec signal de retour sur ILS
;ce montage pilote le moteur, compte (et decompte ) les impulsions de l'ILS
;Le choix du satellite s'effectue avec un commutateur rotatif (1 circuit 12 positions).
;Ensuite le montage asservi la position en fonction de ce choix et des
; valeurs memo dans le tableau
;voir ce tableau plus bas dans le code: "tableau des valeurs de positions des satellites"
;REGLAGE PREALABLE
;conserver la valeur 126 pour T2B 5.0 ºW (Telecom 2B)
;placer le commutateur sur la position T2B (l'affichage indique T2B)
;orienter en mode manuel (boutons < et >) la parabole sur T2B (controle sur image TV)
;RESET-ER le montage (mise a jour de la position courante a 126)
;en mode manuel, chercher les autres satellites, et noter les valeurs de positions obtenues
;sur l'affichage LCD
;vous n'avez plus qu'a mettre a jour le tableau (une fois pour toutes) et a recompiler le soft
;et a reprogrammer le PIC
;par la suite, le choix d'un satellite par le commutateur rotatif suivi d'un appui sur le
;bouton GOTO pointera la parabole sur le satellite.
;lorsque l'alim du montage est coupee, la position est retenue
;- d'une part, par la monture de la parabole...
;- et d'autre part par la position du commutateur rotatif.
;il ne faut donc pas toucher au commutateur lorsque le montage est hors tension !
;en pour que tout se passe bien, il suffit que le commutateur rotatif soit positionne
;sur le bon satellite a la mise sous tension.
;dans le cas contraire, si la parabole est totalement desorientee, il suffit de:
;1- chercher un satellite manuellement (boutons < et >)
;2- positionner correctement le commutateur rotatif ( affichage du bon sat sur le LCD)
;3- RESETER
;pour Qx=3,2768Mhz
;RAPPEL REGISTRE D'ETAT = STATUS : p:30
;----------------------------------------------------------------------
;
; w = 7
; wreg = 7
;
LIST P=PIC16C84
;qq
include p16c84.inc
;SVP definir ScratchPadRam ici:
;Si vous utilisez un PIC16C5X definissez "departRam equ 0x10"
;sinon definissez "departRam equ 0x20"
;----------------------------------------------------------------------
w equ 0
f equ 1
;attention: le PIC16C84 possede 36 octets de RAM
;adresses OCh a 2Fh
;attention: le nb qui suit Ram0+... doit etre ecrit en Hexa !
Ram0 equ 000C
AA equ Ram0+00 ;mon registre de travail
BB equ Ram0+01 ;mon registre de travail
CC equ Ram0+02 ;mon registre de travail
DD equ Ram0+03 ;mon registre de travail
WW equ Ram0+04 ;pour sauvegarder w pendant INT
nb0 equ Ram0+05
nb1 equ Ram0+06
t1 equ Ram0+07 ;pour les tempos
t2 equ Ram0+08
t3 equ Ram0+09
dtlcd equ Ram0+0A ;data vers afficheur LCD
aff1 equ Ram0+0B
aff2 equ Ram0+0C
aff3 equ Ram0+0D
aff4 equ Ram0+0E
bitn equ Ram0+0F
memo1 equ Ram0+10 ;variable de travail
memo2 equ Ram0+11 ;variable de travail
memo3 equ Ram0+12 ;variable de travail
compte equ Ram0+133
pos1 equ Ram0+14
val0 equ Ram0+15 ;position actuelle de l'antenne
moteur equ Ram0+16 ;00=arret 01=droite 10=gauche 11=arret 1xx=rotation 0xx=arret
ils equ Ram0+17 ;=0 ou 1 memo ILS
org 0 ;start address 0
goto start
;----------------------------------------------------------------------
;traitement interruption
;ici INT par RB0
org 0004 ;INT
movwf WW
call cptils
call tp2ms
movf WW,w
bcf INTCON,1
retfie
;----------------------------------------------------------------------
;INITIALISATION DES PORTS
;----------------------------------------------------------------------
org 0020
start
restart clrwdt
movlw B'00000000' ;0=sortie 1=entree (RA4=aussi RTCC) attention RA4 =drain ouvert
;il faut donc cabler une R a VDD
TRIS PORTA ;config du port A (TRISA en page 1)
movlw B'00111101'
TRIS PORTB ;config du port B (RB0 aussi entree INT )
bcf PORTB,6 ;sortie vers LM272 (pilote moteur)
bcf PORTB,7 ;sortie vers LM272 (pilote moteur)
clrf moteur
;----------------------------------------------------------------------
;PROGRAMMATION DU REGISTRE OPTION
;VOIR page 144 et 143
;soit Timer0 = 1/128 -> PS2,1,0 = 111b VOIR PAGE 135
;PSA (bit3) = 1 -> prediv affecte au chien de garde voir p:73
;RTE (bit4) = 0 -> inc sur front montant
;RTS (bit5) = 0 -> branche Timer0 sur horloge interne
;INTEDG=0 = INT sur front descendent de RB0
;RBPU (bit7)=1 -> pas de R tirage a Vdd du port B (10k ext a GND sur PB2, et a VCC sur PB3,4,5)
; bits: 76543210
movlw B'10001111'
OPTION
;----------------------------------------------------------------------
;PROG DU REGISTRE INTCON
;voir page 155 et surtout p:136
;bit0 RBIF=x (sortie?)
;bit1 INTF=x (sortie?)
;bit2 RTIF=x (SORTIE?)
;bit3 RBIE=0 -> INT du port RB4 a RB7 interdites.
;bit4 INTE=1 -> INT de RB0/INT autorisees.
;bit5 RTIE=0 -> INT par debordement Timer0 interdites.
;bit6 EEIE=0 -> INT EEPROM interdites
;bit7 GIE=1 ->INT GLOBALE autorisee.
movlw B'10010000'
movwf INTCON
;----------------------------------------------------------------------
;Initialisation des variables
clrf TMR0
clrf nb0
clrf nb1
clrf moteur
movlw .128 ;valeur moyenne correspondant a T2B (5ºW)
movwf val0
bcf PORTB,6
bcf PORTB,7
;-----------------------------------------------------------------------
;essai
;-----------------------------------------------------------------------
;RAZ LCD
call dspclr
call home
call fset
call setmod0
call dsp10
movlw 00h
call ddras
movlw .0 ;offset "SatPos"
call texte1
movlw .2
call tx100ms
movlw 00h
call ddras
call dspclr ;efface LCD
call scr1 ;lit le commutateur rotatif. resultat dans pos1
call affisat
call satpos ;retourne dans w, l'octet orientation du sat pointe par le commt rotatif
movwf val0 ;initialise la variable de position courante avec cette valeur
call affipos
;----------------------------------------------------------------------
;BOUCLE PRINCIPALE
auto clrwdt
call tp100ms
btfss PORTB,3 ;bouton <
goto manuel ;passe en manuel ?
btfss PORTB,4 ;bouton >
goto manuel ;passe en manuel ?
movlw 00h
call ddras
movf pos1,w
movwf memo1
call scr1
movf memo1,w
subwf pos1,w ;ne touche pas pos1
btfsc STATUS,2 ;bit z
goto auto2 ;saute l'affichage si pos1 inchange
call affisat
auto2 btfsc PORTB,5 ;3eme bouton
goto auto ;boucle courte (sans pointer) tant que touche pas enfoncee
call pointer ;rotation de l'antenne si appui du 3eme bouton . c'est une boucle
call affipos ;lorsque pointage fini
goto auto
manuel clrwdt
call testbtn
call cmdmotr
call affipos
btfss PORTB,5 ;bouton M
goto auto ;passe en auto
goto manuel
;----------------------------------------------------------------------
;DEBUT DES PROCEDURES
;----------------------------------------------------------------------
;traitement des impultions ILS detectees par INT de RB0
cptils btfsc moteur,0
goto incils
goto decils
incils incf val0,f
goto findec1
decils decf val0,f
goto findec1
findec1 return
;----------------------------------------------------------------------
;test appui boutons commande manuelle. pas de touche enfoncee = pas de changement du sens
;positionne 3 bits de la variable 'moteur'
testbtn clrwdt
bcf moteur,2
btfss PORTB,3 ;test touche <
goto sens1
goto test2
sens1 bcf moteur,1 ;sens
bsf moteur,0 ;sens
bsf moteur,2 ;marche
goto fin1
test2 btfss PORTB,4 ;test touche >
goto sens2
goto stop1 ;pas de touche enfoncee
sens2 bcf moteur,0
bsf moteur,1
bsf moteur,2 ;marche
goto fin1
stop1 bcf moteur,2 ;bit arret/marche
fin1 return
;----------------------------------------------------------------------
;commande moteur
cmdmotr clrwdt
btfss moteur,2 ;test bit arret/marche
goto stop2
btfsc moteur,0
bsf PORTB,6
btfss moteur,0
bcf PORTB,6
btfsc moteur,1
bsf PORTB,7
btfss moteur,1
bcf PORTB,7
goto fin2
stop2 bcf PORTB,6 ;stop le moteur
bcf PORTB,7
return
fin2 return
;----------------------------------------------------------------------
;tableau des noms de satellites
;le texte doit obligatoirement finir par .0 pour sortir de la boucle
txt1 addwf PCL,f
retlw 'S' ;0
retlw 'a'
retlw 't'
retlw 'P'
retlw 'o'
retlw 's'
retlw .0 ;bsf w bit 7 -> fin
retlw 'A' ;7
retlw 'S'
retlw 'T'
retlw 'R'
retlw 'A'
retlw .0 ;bsf w bit 7 -> fin
retlw 'E' ;13
retlw 'U'
retlw 'T'
retlw '-'
retlw 'W'
retlw '2'
retlw .0 ;bsf w bit 7 -> fin
retlw 'H' ;20
retlw 'o'
retlw 't'
retlw 'B'
retlw 'i'
retlw 'r'
retlw 'd'
retlw .0 ;bsf w bit 7 -> fin
retlw 'E' ;28
retlw 'U'
retlw 'T'
retlw '-'
retlw 'W'
retlw '1'
retlw .0 ;bsf w bit 7 -> fin
retlw 'I' ;35
retlw '7'
retlw '0'
retlw '7'
retlw .0 ;bsf w bit 7 -> fin
retlw 'T' ;40
retlw '2'
retlw 'B'
retlw .0 ;bsf w bit 7 -> fin
retlw 'T' ;44
retlw '2'
retlw 'A'
retlw '-'
retlw '2'
retlw 'D'
retlw .0 ;bsf w bit 7 -> fin
retlw 'H' ;51
retlw 'i'
retlw 's'
retlw 'p'
retlw 'a'
retlw 's'
retlw 'a'
retlw 't'
retlw .0 ;bsf w bit 7 -> fin
;----------------------------------------------------------------------
;tableau des valeurs de positions des satellites
;taper les valeurs correspondant a votre equipement (monture + verin + ILS + site)
tabpos addwf PCL,f
retlw .196 ; ASTRA 19.2 ºE
retlw .189 ; EUT-W2 16.0 ºE
retlw .180 ; HotBird 13.0 ºE
retlw .170 ; EUT-W1 10.0 ºE
retlw .140 ; I-707 1.0 ºW
retlw .126 ; T2B 5.0 ºW
retlw .111 ; T2A 8.0 ºW
retlw .35 ; Hispasat 30.0 ºW
retlw .128 ; non utilise
retlw .128 ; non utilise
retlw .128 ; non utilise
;----------------------------------------------------------------------
;w doit contenir la position du commutateur rotatif [1..11]
satpos movlw .1
subwf pos1,w ;position (0..10) du commutateur rotatif de selection du sat
call tabpos ;retourne la valeur de l'octet de consigne de position dans w
return
;----------------------------------------------------------------------
;decodage de la position du commutateur rotatif et
;affichage du nom du satellite en fontion de la variable pos1
affisat movlw 00h ;affiche partie gauche du LCD
call ddras
call dspclr ;efface LCD
movlw .1
subwf pos1,w ;ne touche pas pos1 ! result dans w
btfss STATUS,2 ;bit z
goto sat2
;traitement sat1
movlw .7 ;astra
call texte1
goto finafst
sat2 movlw .2
subwf pos1,w
btfss STATUS,2
goto sat3
;traitement sat2
movlw .13 ;EUT-W2
call texte1
goto finafst
sat3 movlw .3
subwf pos1,w
btfss STATUS,2
goto sat4
;traitement sat3
movlw .20 ;HotBird
call texte1
goto finafst
sat4 movlw .4
subwf pos1,w
btfss STATUS,2
goto sat5
;traitement sat4
movlw .28 ;EUT-W1
call texte1
goto finafst
sat5 movlw .5
subwf pos1,w
btfss STATUS,2
goto sat6
;traitement sat5
movlw .35 ;I707
call texte1
goto finafst
sat6 movlw .6
subwf pos1,w
btfss STATUS,2
goto sat7
;traitement sat6
movlw .40 ;T2B
call texte1
goto finafst
sat7 movlw .7
subwf pos1,w
btfss STATUS,2
goto sat8
;traitement sat7
movlw .44 ;T2A-2D
call texte1
goto finafst
sat8 movlw .8
subwf pos1,w
btfss STATUS,2
goto sat9
;traitement sat8
movlw .51 ;Hispasat
call texte1
goto finafst
sat9
finafst return
;----------------------------------------------------------------------
;affichage de la position actuelle
affipos movlw 40h ;affiche partie droite du LCD
call ddras
movf val0,w
call affiw
call affi4
call tp10ms
return
;-----------------------------------------------------------------------
;actionne le moteur pour pointer le satellite
pointer call dspclr ;efface LCD
call affisat
bcl2 clrwdt
movlw 40h
call ddras
movlw ' ' ;fait clignoter la fleche
call ecrire
btfss PORTB,3 ;bouton <
goto finptr ;sort
btfss PORTB,4 ;bouton >
goto finptr ;sort
call satpos
movwf memo2
subwf val0,w
btfsc STATUS,0 ;bit c
goto sens11
goto sens22
sens11 bcf moteur,0
bsf moteur,1
movlw 40h
call ddras
movlw '>'
call ecrire
goto action
sens22 bcf moteur,1
bsf moteur,0
movlw 40h
call ddras
movlw '<'
call ecrire
goto action
action bsf moteur,2
call cmdmotr
; call affipos
movf memo2,w
subwf val0,w
btfss STATUS,2 ;bit z
goto bcl2 ;boucle
goto finptr ;si la position de la consigne est atteinte
finptr bcf moteur,2
call cmdmotr ;stop
return
;-----------------------------------------------------------------------
;le texte doit obligatoirement finir par .0 pour sortir de la boucle
texte1 movwf DD
looptx1 movf DD,w
call txt1
andlw .255 ; pos bit z
btfsc STATUS,2 ;test bit z
return
call ecrire
incf DD,f
goto looptx1
;----------------------------------------------------------------------
;scrute le 4017
;resultat dans pos1
scr1 clrwdt
bsf PORTB,1 ;RAZ 4017
call tp300us
bcf PORTB,1 ;FIN RAZ
clrf pos1
incf pos1 ;pour partir de 1 et pas de 0
bcl4017 clrwdt
btfsc PORTB,2
return
call clk4017
incf pos1
movlw .11
xorwf pos1,w ;debordement ? (toutes les sorties du 4017 NC)=pos10b
btfss STATUS,2 ;bit z
goto bcl4017
return
;-----------------------------------------------------------------------
clk4017 clrwdt
bsf PORTA,4
call tp300us
bcf PORTA,4
return
;***********************************************************************************************
;debut des procedures d'affichage LCD
;----------------------------------------------------------------------
;FUNCTION SET
fset bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .56 ;(32+16+8)
movwf dtlcd
call dt_out ;transmission serie vers 4015 -> DATA // LCD
call impuls
return
;----------------------------------------------------------------------
;DISPLAY CLEAR
dspclr bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .1
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;RETURN HOME
home clrf PORTA
movlw .2
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;ENTRY MODE SET 0
;le curseur se deplace
setmod0 bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .6 ;( 4+2 sens inverse si 4+0 )
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;ENTRY MODE SET 1
;curseur gele
setmod1 bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .7 ;( 4+2+1 )
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;DISPLAY ON OFF
dsp10 bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .12 ;( 8+4 )
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;DDRAM ADRESS SET (A)
;w doit contenir l'adresse (position d'affichage. voir doc)
ddras bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
addlw .128
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;CURSOR OR DISPLAY SHIFT
;DEFILEMENT DU TEXTE
shiftT bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .24 ;( 16+8 )
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;CURSOR OR DISPLAY SHIFT
;DEFILEMENT DE LA POSITION D'AFFICHAGE (CURSEUR)
shiftC bcf PORTA,2 ;E=0
bcf PORTA,3 ;R/S=0
movlw .16 ;( 16 )
movwf dtlcd
call dt_out
call impuls
return
;----------------------------------------------------------------------
;ECRIRE
;w doit contenir la valeur ASCII du caractere a afficher
ecrire clrwdt
bcf PORTA,2 ;E=0
bsf PORTA,3 ;R/S=1
movwf dtlcd
call dt_out
bsf PORTA,2 ;impuls E a 1 avec RS=1
call tp10ms
bcf PORTA,2 ;fin impulsion
call tp10ms
return
;----------------------------------------------------------------------
;impulsion E a 1 avec RS=0
impuls bcf PORTA,3 ;R/S=0
bsf PORTA,2 ;impulsion E a 1
call tp10ms
bcf PORTA,2 ;fin impulsion
call tp10ms
return
;----------------------------------------------------------------------
;SORTIE DATA (8 bits) en serie sur PA0 vers CD4015. PA1=Clock 4015.
dt_out movlw .8
movwf bitn
dtbcl rlf dtlcd,f
bcf PORTA,0 ;bit = 0 (a priori)
btfsc STATUS,0 ;test carry
bsf PORTA,0 ;non, bit = 0
out bsf PORTA,1 ;clock 4015
call tp300us
bcf PORTA,1 ;fin clock
call tp300us
decfsz bitn,f
goto dtbcl
return
;------------------------------------------------------------------------
;affichage physique de 4 NOMBRES.
affi4 clrwdt
movlw .10
subwf aff4,w ;pour detecter depassement...
btfsc STATUS,0 ;bit de carry
goto depass
movf aff4,w
addlw .48 ;code ASCII de zero
call ecrire
affi3 movf aff3,w
addlw .48 ;code ASCII de zero
call ecrire
affi2 movf aff2,w
addlw .48 ;code ASCII de zero
call ecrire
movf aff1,w
addlw .48 ;code ASCII de zero
call ecrire
goto finaff
depass movlw "-"
call ecrire
movlw "-"
call ecrire
movlw "-"
call ecrire
movlw "-"
call ecrire
finaff return
;------------------------------------------------------------------------
;nb decimaux dans AA(unites) et BB(centaines) au prealable
affdeci clrwdt
movf BB,w
movwf CC ;memo BB danc CC because cvBDU utilise BB
call cvBDU
movf AA,w ;ld A,V
movwf aff1 ;ld Aff1,A
movf BB,w ;ld A,W
movwf aff2 ;ld Aff2,A
movf CC,w ;ld A,BB ;0..99
movwf AA
call cvBDU
movf AA,w
movwf aff3
movf BB,w
movwf aff4
return
;-----------------------------------------------------------------------
;affiche un octet complet dans variables aff1..4
;W doit contenir l'octet a afficher
affiw clrwdt
movwf AA
call cvBDU ;BB=18 et AA=4
movf AA,w
movwf aff1 ;aff1=4
movf BB,w ;w=18
movwf AA ;AA=18
call cvBDU ;BB=1 et AA=8
movf AA,w
movwf aff2 ;aff2=8
movf BB,w
movwf aff3 ;aff3=1
clrf aff4
return
;-----------------------------------------------------------------------
;affiche un temps <= 51s
affitp clrwdt
clrf nb1
movwf nb0
bcf STATUS,0 ;RAZ bit de carry
rlf nb0 ;multiplie par deux toutes les valeurs
rlf nb1 ;recupere la retenue...
call affnb
movf aff3,w
addlw .48 ;code ASCII de zero
movf aff3,f ;ne fait rien mais positionne le bit z
btfsc STATUS,2 ;bit z
blanc movlw .32
call ecrire
movf aff2,w
addlw .48
call ecrire
movlw "."
call ecrire
movf aff1,w
addlw .48
call ecrire
movlw "s"
call ecrire
return
;-----------------------------------------------------------------------
;affichage nombre 0..9999
;nb0 et nb1 contiennent un nb 0..9999
affnb clrwdt
movf nb0,w ;ld A,nb0
movwf AA
call cvBCU ;convertit nb0 en BCD
;resultat dans AA(unites) et BB(centaines)
;on va ajouter nb1 x 256
movf nb1,w ;ld A,nb1
movwf memo3 ;ld memo3,A pour'pas toucher nb1
incf memo3,f ;hors boucle
bcl1 decfsz memo3,f
goto saut1 ;jrnz ici1
goto suitef
;ld A,AA
saut1 movlw .56
addwf AA,f ;+56 retenue decimale possible
movf AA,w
sublw .99 ;carry =0 si AA>99
btfsc STATUS,0 ;bit de carry
goto st1 ;donc saut si carry=1, c.a.d si A>99
;jrc st1
movlw .100
subwf AA,f
incf BB,f ;ajout retenue decimale
st1 movlw .2
addwf BB,f ;(+200) soit en tout +256
goto bcl1
suitef call affdeci
return
;------------------------------------------------------------------------
;CONVERSION BINAIRE(1) (1 octet incomplet 0..99 et pas 0..255) --> BCD
;nombre a convertir dans AA
;resultat dans BB (dizaines) et dans AA (unites)
;ex: AA=237 -> BB=23 et AA=7
;ex2 AA=84 -> BB=8 et AA=4
cvBDU clrf BB
conv2 movlw .10
subwf AA,w ;w=AA-10 positionne le bit de carry si A<10
btfss STATUS,0 ;bit de carry
goto conv3 ;donc saut ->conv3 si carry=1, c.a.d si A<10
movlw .10
subwf AA,f ;en boucle : revient a diviser A par 10
incf BB,f
goto conv2 ;9 passages au max si nb <= 99
conv3 return
;--------------------------------------------------------------------
;CONVERSION BINAIRE(2) (1 octet complet 0..255) --> BCD
;nombre a convertir dans AA
;resultat dans BB (centaines) et dans AA (unites)
;ex: AA=237 -> BB=23 et AA=7
cvBCU clrf BB
conv4 movlw .100
subwf AA,w ;w=AA-100 positionne le bit de carry si A<100
btfss STATUS,0 ;bit de carry
goto conv5 ;donc saut ->conv3 si carry=1, c.a.d si A<100
movlw .100
subwf AA,f ;en boucle : revient a diviser A par 100
incf BB,f
goto conv4 ;9 passages au max si nb <= 999
conv5 return
;--------------------------------------------------------------------
; Qx = 3,2768Mhz
tp300us movlw .79
movwf t1
t3loop1 decfsz t1,f
goto t3loop1
return
;----------------------------------------------------------------------
; Qx = 3,2768Mhz
tp2ms clrwdt
movlw .16
movwf t1
t4loop1 movlw .32
movwf t2
t4loop2 decfsz t2,f
goto t4loop2
decfsz t1,f
goto t4loop1
return
;----------------------------------------------------------------------
; Qx = 3,2768Mhz
tp10ms clrwdt
movlw .82
movwf t1
t1loop1 movlw .32
movwf t2
t1loop2 decfsz t2,f
goto t1loop2
decfsz t1,f
goto t1loop1
return
;----------------------------------------------------------------------
; Qx = 3,2768Mhz
tp100ms clrwdt
movlw .170
movwf t1
t2loop1 movlw .160
movwf t2
t2loop2 clrwdt
decfsz t2,f
goto t2loop2
decfsz t1,f
goto t2loop1
return
;----------------------------------------------------------------------
; Qx = 3,2768Mhz
;tempo n x 100ms
;charger w avec n avant l'appel de cette procedure
tx100ms clrwdt
movwf t3
txloop clrwdt ;chien de garde
call tp100ms
decfsz t3,f
goto txloop
return
;----------------------------------------------------------------------
; Qx = 3,2768Mhz
;tempo n x 10ms
;charger w avec n avant l'appel de cette procedure
tx10ms clrwdt
movwf t3
txlp2 clrwdt ;chien de garde
call tp10ms
decfsz t3,f
goto txlp2
return
ORG 2007H ; Fuses
DATA 3FF1H ;osc=XT
;----------------------------------------------------------------------
end