salut tout le monde bon voila au sein de notre club on bosse sur notre premier robot qui est un rebot suiveur de ligne ( noir sur un fond clair ) , le concepte est simple on travaille avec deux octocoupleurs le temps que celui de droite detecte une réflexion du fond clair il arrete la roue gauche pour resdresser et du temps que le detecteur de gauche detecte le fond clair il arrete la roue de droite et kand les deux detecteurs ne recoivent rien ( sur la ligne noir ) les deux roues sont en marche on a etablit un programme pour et on a besoin d'une verification par des gens qui ont l habitude de programmer avec au cas ou d un beug ou autre et merci davance XD
le programme :
LIST p=16F84A ; Définition de processeur
#include <p16F84A.inc> ; Définitions des constantes
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***************************** ****************************** **********
; ASSIGNATIONS *
;***************************** ****************************** **********
OPTIONVAL EQU H'0008' ; Valeur registre option
; Résistance pull-up ON
; Interrupt flanc montant RB0
; Préscaler timer à 2 (exemple)
;***************************** ****************************** **********
; DEFINE *
;***************************** ****************************** **********
; exemples
; ---------
#DEFINE MOTD PORTA,0
#DEFINE MOTG PORTA,1
#DEFINE CAPD PORTB,2
#DEFINE CAPG PORTB,3
;***************************** ****************************** **********
; MACRO *
;***************************** ****************************** **********
MOTDON macro
BSF MOTD
endm
MOTDOFF macro
bcf MOTD
endm
MOTGON macro
BSF MOTG
endm
MOTGOFF macro
bcf MOTG
endm
;***************************** ****************************** ***********
; DEMARRAGE SUR RESET *
;***************************** ****************************** ***********
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;***************************** ****************************** **********
; INITIALISATIONS *
;***************************** ****************************** **********
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
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
; ---------------------------
bcf MOTD
bcf MOTG
bSf CAPD
bSf CAPG
bcf STATUS , RP0 ; accée à la banque 0
goto start ; accée au start
;***************************** ****************************** **********
; PROGRAMME PRINCIPAL *
;***************************** ****************************** **********
start
boucle3
bsf MOTG
bsf MOTD
btfsc CAPG
goto boucle2
btfsc CAPD
goto boucle1
goto boucle3
boucle1
bsf MOTD
btfsc CAPD
goto boucle1
goto boucle3
boucle2
bsf MOTG
btfsc CAPG
goto boucle2
goto boucle3
goto start ; boucler
END ; directive fin de programm
-----