Ah ok ! xD Cool pour l'arrêt des intérupts ^^
Bon ben si tu tiens à te faire chier à lire mon programme je te le mets en entier alors, merci x]
Bon je te préviens tout de suite il y a beaucoup de conneries en commentaire...
Quand je code je m'ennuie alors j'aime bien faire ça ! En même temps quand je le relis ça m'éclate et je me dis : "Ce que je peut être *** quand même" xD Enfin bon n'y prête pas trop attention x')
;*************************************************************************************
; *
; Systeme d exploitation : _GALACTUX_ *
; PIC utilise : 16F84A *
; Version : 1.0 (\_/) *
; Auteur : Desaindes Franck (=*.*) *
; Date : 2011 *(")_(") *
; *
;*************************************************************************************
;_____________________________________________________________________________________
;
;programme fonctionnel !! Sauf les intérupts "^^
;
;_____________________________________________________________________________________
LIST p=16F84 ; définition de processeur
#include <p16F84A.inc> ; définition des constantes
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
OPTIONVAL EQU H'13' ; Valeur registre option
;résistance de rappel off
;intéruption de RB0 actif au niveau haut
;timer 0 en fonction de l'horloge interne
;pas de prédiviseurs
INTERMASK EQU H'0090' ; Masque d'interruption
; Interruptions sur RB0
;*********************************************************************
; DEFINE *
;*********************************************************************
#DEFINE rrd PORTA, 0 ;reculer roue droite
#DEFINE ard PORTA, 1 ;avancer roue droite
#DEFINE arg PORTA, 2 ;avancer roue gauche
#DEFINE rrg PORTA, 3 ;reculer roue gauche
#DEFINE adig PORTA, 4 ;allumer del infrarouge gauche
#DEFINE obstacle PORTB, 0 ;si capteur infrarouge détecte un obstacle -> interuption
#DEFINE adid PORTB, 1 ;allumer del infrarouge droite
#DEFINE adjg PORTB, 2 ;allumer del jaune gauche
#DEFINE adjd PORTB, 3 ;allumer del jaune droite
#DEFINE dbd PORTB, 4 ;descendre bras droit
#DEFINE lbd PORTB, 5 ;lever bras droit
#DEFINE dbg PORTB, 6 ;descendre bras gauche
#DEFINE lbg PORTB, 7 ;lever bras gauche
;*********************************************************************
; MACRO *
;*********************************************************************
;
;liste des macros utilisées
;on pour sortie à 1 (instruction bsf)
;off pour sortie à 0 (instruction bcf)
;
;_____________________________________________________________________
BANK0 macro
bcf STATUS,RP0 ; passer banque0
endm
BANK1 macro
bsf STATUS,RP0 ; passer banque1
endm
;_1_
rrdon macro
bsf rrd ;enclenche le moteur reculer roue droite
endm
rrdoff macro
bcf rrd ;éteint le moteur reculer roue droite
endm
;_2_
ardon macro
bsf ard ;enclenche le moteur avancer roue droite
endm
ardoff macro
bcf ard ;éteint le moteur avancer roue droite
endm
;_3_
argon macro
bsf arg ;enclenche le moteur avancer roue gauche
endm
argoff macro
bcf arg ;éteint le moteur avancer roue gauche
endm
;_4_
rrgon macro
bsf rrg ;enclenche le moteur reculer roue gauche
endm
rrgoff macro
bcf rrg ;éteint le moteur reculer roue gauche
endm
;_5_
adigon macro
bsf adig ;allumer del infrarouge gauche
endm
adigoff macro
bcf adig ;arrêter d'allumer del infrarouge gauche
endm
;_6_
adidon macro
bsf adid ;allumer del infrarouge droite
endm
adidoff macro
bcf adid ;arrêter d'allumer del infrarouge droite
endm
;_7_
adjgon macro
bsf adjg ;allumer del jaune gauche
endm
adjgoff macro
bcf adjg ;éteindre del jaune gauche
endm
;_8_
adjdon macro
bsf adjd ;allumer del jaune droite
endm
adjdoff macro
bcf adjd ;éteindre del jaune droite
endm
;_9_
dbdon macro
bsf dbd ;enclenche le moteur qui permet de descendre le bras droit
endm
dbdoff macro
bcf dbd ;éteint le moteur de descente du bras droit
endm
;_10_
lbdon macro
bsf lbd ;allumer le moteur lever bras droit
endm
lbdoff macro
bcf lbd ;éteindre le moteur lever bras droit
endm
;_11_
dbgon macro
bsf dbg ;enclenche le moteur qui permet de descendre le bras gauche
endm
dbgoff macro
bcf dbg ;éteint le moteur de descente du bras gauche
endm
;_12_
lbgon macro
bsf lbg ;allumer le moteur lever bras gauche
endm
lbgoff macro
bcf lbg ;éteindre le moteur lever bras gauche
endm
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
CBLOCK 0x00C ; début de la zone variables
w_temp :1 ; Sauvegarde de W dans interruption
status_temp : 1 ; Sauvegarde de STATUS dans interruption
cmpt1 : 1 ;compteur de boucles 1
cmpt2 : 1 ;compteur de boucles 2
cmpt3 : 1 ;compteur de boucles 3
cmpt4 : 1 ;compteur de boucles 4
cmpt5 : 1 ;compteur de boucles 5
cmpt9 : 1 ;compteur de boucles 9
cmpt10 : 1 ;compteur de boucles 10
cmpt11 : 1 ;compteur de boucles 11
;(gros trou, hein ? oO mystère et boule de gomme ! xD)
flags : 1 ; un octet pour 8 flags
; b0 : libre
; b1 : libre
; b2 : libre
; b3 : libre
; b4 : libre
; b5 : libre
; b6 : libre
; b7 : libre
ENDC ; Fin de la zone
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;---------------------
org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
;Traiter directement RB0 car c'est la seule
;intéruption autorisée
call intrb0 ; traiter interrupt RB0
goto restorereg ; et fin d'interruption
;restaurer registres
;-------------------
restorereg
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; Réinversion de L et H dans W
; W restauré sans modifier status
retfie ; return from interrupt
;**********************************************************************
; INTERRUPTION RB0/INT *
;**********************************************************************
;
;L'intérruption est déclenchée lorsque le phototransistor fixée sur le
;corps du robot devient passant. Il y a alors une impulsion sur la pin
;du microcontrolleur RB0, ce qui provoque l'intéruption, le système va
;alors arrêter ce qu'il était en train de faire et va exécuter les actions
;ci-dessous. Enfin, quand il aura terminé, il "reprendra" au moment où il
;s'était arrêté.
;
;L'intéruption consiste à reculer le robot pendant 3 secondes puis à n'actionner
;que le moteur de la rouge gauche pour que le robot tourne à droite.
;
;_______________________________________________________________________
intrb0
BANK0 ;conseil appliqué du cours
;de Bigonoff qui conseille
;d'entrer dans une sous routine
;en banque 0
;jeu avec les dels jaunes
;permet d'éteindre les deux dels si elles étaient allumées
adjgoff ;éteindre del jaune gauche
adjdoff ;éteindre del jaune droite
;mode réflexion è_é
call tempo ;le robot
call tempo ;ne fait rien
call tempo ;pendant 5 secondes
call tempo ;comme s'il
call tempo ;réfléchissait ;p
;clignottement
adjgon ;allumer la del jaune gauche
call tempo ;attends une seconde
adjgoff ;éteins la del jaune gauche
adjdon ;allumer la del jaune droite
call tempo ;attends 1 seconde
adjgon ;allumer la del jaune gauche
;il a trouvé la solution au problème <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
;tout d'abord : reculer pendant 3 secondes
call rr ;recule les 2 roues (dure 1s)
call rr ;recule les 2 roues (dure 1s)
call rr ;recule les 2 roues (dure 1s)
;puis il suffit de contourner l'obstacle en tournant à droite par exemple <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />
argon ;avance la roue gauche
;ce qui a pour effet
;de tourner le robot
;vers la droite
call tempo ;ces deux temporisations
;ont pour but de laisser
call demitempo ;du temps au moteur
;et voilà ! Félicitations ! ;p Maintenant vous n'avez plus qu'à reprendre votre route <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
ardon ;avancer la roue droite
;Satisfait ? Alors à la prochaine ! <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
bcf INTCON , INTF ; effacer flag INT/RB0
return ; fin d'interruption RB0/INT
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
clrf EEADR ; permet de diminuer la consommation
bsf STATUS,RP0 ; sélectionner banque 1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirec
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
; initialisations spécifiques
; ---------------------------
;définir si les pins sont des sorties (bcf)
;ou des entrées (bsf?)
bcf rrd ;reculer la roue droite en sortie RAO (banque1)
bcf ard ;avancer la roue droite en sortie RA1 (banque 1)
bcf arg ;avancer la roue gauche en sortie RA2 (banque1)
bcf rrg ;reculer la roue gauche en sortie RA3 (banque 1)
bcf adig ;allumer la del infrarouge gauche en sortie RA4 (banque1)
bcf adid ;allumer la del infrarouge droite en sortie RB1 (banque1)
bcf adjg ;allumer la del jaune gauche en sortie, RB2 (banque1)
bcf adjd ;allumer la del jaune droite en sortie RB3 (banque1)
bcf dbd ;descendre bras droit en sortie RB4 (banque1)
bcf lbd ;lever le bras droit en sortie RB5 (banque1)
bcf dbg ;descendre bras gauche en sortie RB6 (banque1)
bcf lbg ;lever le bras gauche en sortie RB7 (banque1)
BANK0
movlw INTERMASK ; masque interruption
movwf INTCON ; charger interrupt control
bcf STATUS,RP0 ; repasser banque 0
goto start ; sauter au programme principal
;*********************************************************************
; Sous routine de temporisation *
;*********************************************************************
;
; Temporisation d'approximativement 1 seconde
; Cycles perdus : 262 144 * nombre du compteur 3
; Soit approximativement 1 048 576 cylces de perdu pour cmp 3 = 4
;
;______________________________________________________________________
tempo
BANK0
movlw 4 ;4 boucles (amène 4 dans le registre W)
movwf cmpt11 ;initialise compteur 11 à la valeur 4
boucle6
clrf cmpt10 ; effacer compteur10
boucle5
clrf cmpt9 ; effacer compteur9
boucle4
clrwdt ;remet à 0 le watchdog
decfsz cmpt9,f ; décrémenter compteur9
goto boucle4 ; si pas 0, boucler
decfsz cmpt10,f ; si 0, décrémenter compteur 2
goto boucle5 ; si cmpt10 pas 0, recommencer boucle4
decfsz cmpt11,f ; si 0, décrémenter compteur 3
goto boucle6 ; si cmpt11 pas 0, recommencer boucle5
return ; retour de la sous-routine
;*********************************************************************
; Sous routine de demi temporisation *
;*********************************************************************
;
; Temporisation d'approximativement 1/2 seconde
;
;_____________________________________________________________________
demitempo
BANK0
movlw 2 ;2 boucles (amène 4 dans le registre W)
movwf cmpt3 ;initialise compteur 3 à la valeur 4
boucle3
clrf cmpt2 ; effacer compteur2
boucle2
clrf cmpt1 ; effacer compteur1
boucle1
clrwdt ;remet à 0 le watchdog
decfsz cmpt1,f ; décrémenter compteur1
goto boucle1 ; si pas 0, boucler
decfsz cmpt2,f ; si 0, décrémenter compteur 2
goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
decfsz cmpt3,f ; si 0, décrémenter compteur 3
goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
return ; retour de la sous-routine
;*********************************************************************
; Sous routine de quart de temporisation *
;*********************************************************************
;
; Temporisation d'approximativement 1/4 seconde
;
;_____________________________________________________________________
quartempo
BANK0
boucle8
clrf cmpt4 ; effacer compteur4
boucle7
nop ;perdre 1 cycle
clrwdt ;remet à 0 le watchdog
decfsz cmpt4,f ; décrémenter compteur4
goto boucle7 ; si pas 0, boucler
decfsz cmpt5,f ; si 0, décrémenter compteur 5
goto boucle8 ; si cmpt5 pas 0, recommencer boucle7
return ; retour de la sous-routine
;*********************************************************************
; Sous programme de megatempo *
;*********************************************************************
;
;
;Temporisation très courte dédiée au sous programme de détection
;1 cycle d'un microcontrolleur durt 1 micro seconde (quand il est
;utilisé avec un quartz d'une fréquence de 4 MHz).
;Le but ici est de faire perdre 50 cycles (donc 50 micro secondes)
;au pic
;La temporisation est d'environ 52/53 cycles.
;
;_____________________________________________________________________
;remarque : l'écriture est ici longue pour rien. On peut la racourcir en
;rajoutant un compteur. Je ne l'ai pas fait car je n'en avais pas envie. xP
;De plus c'est plus simple comme ça et au moins je suis sûr que ça marche xD
megatempo
BANK0
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
;et de 10 cycles x)
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
;et de 20 x')
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
;et de 30, ça devient long :/
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
;et de 40, j'adoooore le copié/collé xD
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
nop ;fait perdre 1 cycle
clrwdt ;remet à 0 le watchdog
;et de 50, OUF ! Enfin terminé :]
return
;*********************************************************************
; Sous programme de détection *
;*********************************************************************
;
;Ce sous programme permet au système de "s'informer" de la présence
;ou non d'obstacles.
;Pour ce faire, il va envoyer de manière saccadée des émissions de rayons
;infrarouge.
;- S'il y a un obstacle : les rayons sont renvoyés au phototransistor qui
;devient passant et déclenche la routine d'intéruption du pic.
;- Dans le cas contraire : rien ne se passe.
;
;Ce sous programme alterne alimentation d'une diode infrarouge émettrice
;(droite ou gauche) et une temporisation. La période est de 100 micro secondes.
;
;_____________________________________________________________________
detection
BANK0
;1ère étape : allumer puis éteindre successivement la diode émettrice gauche
;pendant une période d'environ 550 micro secondes
;(inspiré du sujet bac si de 2009)
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigon ;allumer del infrarouge gauche
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adigoff ;éteins la del infrarouge gauche
;2ème étape : on fait pareil avec l'autre del infrarouge
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidon ;allume la del infrarouge droite
call megatempo ;fait perdre environ 50 micro secondes
clrwdt ;remet à 0 le watchdog
adidoff ;éteins la del infrarouge droite
return
;*********************************************************************
; sous programme : "T'as de beaux yeux tu sais ?" *
;*********************************************************************
;
;Ce sous programme permet de faire clignoter les del des yeux à une
;fréquence d'1Hz environ
;
;_____________________________________________________________________
clignotement
BANK0
adjdon ;allume la del droite
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdoff ;éteint la del droite
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjgon ;allume la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjgoff ;éteint la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdon ;allume la del droite
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdoff ;éteint la del droite
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjgon ;allume la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjgoff ;éteint la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdon ;allume la del droite
adjgon ;allume la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdoff ;éteint la del droite
adjgoff ;éteint la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdon ;allume la del droite
adjgon ;allume la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
adjdoff ;éteint la del droite
adjgoff ;éteint la del gauche
call demitempo ;temporisation d'1/2s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "avrg" *
;*********************************************************************
;
;Ce sous programme permet de faire avancer la roue gauche (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
avrg
BANK0
argon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
argoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
argon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
argoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "rerg" *
;*********************************************************************
;
;Ce sous programme permet de faire reculer la roue gauche (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
rerg
BANK0
rrgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "avrd" *
;*********************************************************************
;
;Ce sous programme permet de faire avancer la roue droite (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
avrd
BANK0
ardon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "rerd" *
;*********************************************************************
;
;Ce sous programme permet de faire reculer la roue droite (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
rerd
BANK0
rrdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "av" *
;*********************************************************************
;
;Ce sous programme permet de faire avancer les deux roues (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
av
BANK0
ardon ;allume les moteur
argon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardoff ;éteint les moteurs
argoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardon ;allume les moteurs
argon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
ardoff ;éteint les moteurs
argoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "rr" *
;*********************************************************************
;
;Ce sous programme permet de faire reculer les deux roues (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
rr ;DragoOon BaAall !!! xD
BANK0
rrdon ;allume les moteurs
rrgon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdoff ;éteint les moteurs
rrgoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdon ;allume les moteurs
rrgon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
rrdoff ;éteint les moteurs
rrgoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "lebd" *
;*********************************************************************
;
;Ce sous programme permet de lever le bras droit (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
lebd
BANK0
lbdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "debd" *
;*********************************************************************
;
;Ce sous programme permet de descendre le bras droit (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
debd
BANK0
dbdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbdon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbdoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "lebg" *
;*********************************************************************
;
;Ce sous programme permet de lever le bras gauche (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
lebg ;'spèce de prétentieux sous
;programme va xP
BANK0
lbgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "debg" *
;*********************************************************************
;
;Ce sous programme permet de descendre le bras gauche (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
debg
BANK0
dbgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgon ;allume le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgoff ;éteint le moteur
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "lb" *
;*********************************************************************
;
;Ce sous programme permet de lever les 2 bras (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
lb
BANK0
lbgon ;allume les moteurs
lbdon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgoff ;éteint les moteurs
lbdoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgon ;allume les moteurs
lbdon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
lbgoff ;éteint les moteurs
lbdoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; sous programme : "deb" *
;*********************************************************************
;
;Ce sous programme permet de descendre les 2 bras (en alternant
;marche et coupure). Ce sous programme dure environ 1 seconde
;
;_____________________________________________________________________
deb ;roh, méchant va è_é
BANK0
dbgon ;allume les moteurs
dbdon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgoff ;éteint les moteurs
dbdoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgon ;allume les moteurs
dbdon
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
dbgoff ;éteint les moteurs
dbdoff
call quartempo ;1/4 de s
clrwdt ;remet à 0 le watchdog
return
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
;_____________prêt au décollage ?
call clignotement ;fait appel au sous programme de clignotement
clrwdt ;remet à 0 le watchdog
;_____________allumage des feux (il y a du brouillard) xP ...
adjgon ;allumer la del jaune gauche
adjdon ;allumer la del jaune droite
;_____________allumage des moteurs...
call av ;allume les 2 moteurs (dure 1s)
;_____________Activation du S.A.C. (système anti-collision) è_é ...
call detection ;fait appel au sous programme détection
;_____________Et c'est parti !! :]
call av ;allume les 2 moteurs pour avancer (dure 1s)
argon ;avance la roue gauche
ardon ;avance la roue droite
adjgoff ;éteins la del jaune gauche
lbdon ;lever le bras droit
call tempo ;1seconde de temporisation
call demitempo ;1/2 seconde de temporisation
lbdoff ;arrêter de lever le bras droit
clrwdt ;remet à 0 le watchdog
;éteins les 2 moteurs pour essayer d'éviter les surchauffes
argoff ;éteins le moteur roue gauche
ardoff ;éteins le moteur roue droite
;les rallume. Ca ne sert peut être pas à grand chose, test...
argon ;allumer le moteur roue gauche
ardon ;allumer le moteur roue droite
dbdon ;descends le bras droit
call tempo ;1seconde de temporisation
call demitempo ;1/2 seconde de temporisation
dbdoff ;arrête le moteur
clrwdt ;remet à 0 le watchdog
adjgon ;allume la del jaune gauche
argoff ;éteins le moteur roue gauche
ardoff ;éteins le moteur roue droite
call av ;allume les 2 moteurs pour avancer
;(dure 1s)
;_____________Petite vérification xP
call detection ;fait appel au sous programme détection
;_____________Et c'est reparti !!! x]
call av ;allume les 2 moteurs pour avancer
;(dure 1s)
argon ;avance la roue gauche
ardon ;avance la roue droite
adjdoff ;éteins la del jaune droite
lbgon ;lever le bras gauche
call tempo ;1seconde de temporisation
call demitempo ;1/2 seconde de temporisation
lbgoff ;arrêter de lever le bras gauche
clrwdt ;remet à 0 le watchdog
;éteins les 2 moteurs pour essayer d'éviter les surchauffes
argoff ;éteins le moteur roue gauche
ardoff ;éteins le moteur roue droite
;les rallume. Ca ne sert peut être pas à grand chose, test...
argon ;allumer le moteur roue gauche
ardon ;allumer le moteur roue droite
dbgon ;descends le bras gauche
call tempo ;1seconde de temporisation
call demitempo ;1/2 seconde de temporisation
dbgoff ;arrête le moteur
clrwdt ;remet à 0 le watchdog
adjdon ;allume la del jaune droite
argoff ;éteins le moteur roue gauche
ardoff ;éteins le moteur roue droite
call av ;allume les 2 moteurs pour avancer
;(dure 1s)
;____________Juste au cas où... <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/ohmy.gif' class='bbc_emoticon' alt=':o' />
call detection ;fait appel au sous programme détection
;____________Wouhou !!! Il n'y a rien !!! (ou plus rien...) On lève les bras en signe de joie ! XDD
lbdon ;lever le bras droit
lbgon ;lever le bras gauche
adjdoff ;éteins la del jaune droite
adjgoff ;éteins la del jaune gauche
lbdoff ;éteins le moteur
lbgoff ;éteins le moteur
;à peu près pendant 4 secondes, ça doit permettre
;aux deux bras de faire un tour complet
call lb ;lève les 2 bras (1seconde)
clrwdt ;remet à 0 le watchdog
call lb ;lève les 2 bras (1seconde)
clrwdt ;remet à 0 le watchdog
call lb ;lève les 2 bras (1seconde)
clrwdt ;remet à 0 le watchdog
call lb ;lève les 2 bras (1seconde)
clrwdt ;remet à 0 le watchdog
adjdon ;allume la del jaune droite
adjgon ;allume la del jaune gauche
;_____________On est jamais trop prudent <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/tongue.gif' class='bbc_emoticon' alt=':P' />
call detection ;fait appel au sous programme détection
call av ;fait avancer les 2 roues
; Oh ! Mais qu'est-ce que c'est ???
;______________________________________________________________________________________________
; ___________________________________________________________________________
; ___________AAAAAAAAAAHHHHHHHHHHHHHHHH!!!!!!!!___________
; ____Je suis aspiré dans une faille____
; ______Temporelle!!!!_____
; ______!!!!elleropmeT_____
; ____elliaf enu snad éripsa sius eJ____
; ___________!!!!!!!!HHHHHHHHHHHHHHHHAAAAAAAAAA___________
; ___________________________________________________________________________
;______________________________________________________________________________________________
; ??? tse'c euq ec-tse'qu siaM ! hO
goto start ;boucle du programme principal
END ; directive fin de programme
PS : méchante limitation des smileys :'(