Arrêt final

Lors de la rencontre de deux lignes en travers, les deux capteurs se déclenchent simultanément. Or si au moins un de ces deux capteurs ne détecte pas la ligne, il met à 0 un flag à 1 en début de boucle de déplacement.
Donc dans le cas ou le flag est à 1 en fin de boucle, c'est que la ligne barre la route, le robot pile donc de la même manière que devant un obstacle, puis attend une pression du bouton pour revenir en état initial.

Logigramme

Organigramme

Code source

	movlw	B'00000001'	; Valeur du flags
				;(B0=0 => pas de ligne sur G ou D)
				; Si B0=1 après les test alors les deux
				;capteurs sont sur la ligne => arrêt
	movwf	rotled		; Affectation à rotled

;-----------------------------------------------------------------------
;  ICI LES TEST DU PROGRAMME (OBSTACLE ET LIGNE)
;-----------------------------------------------------------------------


 	btfss	rotled,0	; Si pas de ligne détecté pendant les deux
	goto 	move		; boucler

; Si on est ici, c'est qu'il y a une bande noire en travers de la route.
; On pile
	bsf	MOT_D_2		;Allumer le moteur droit dans le sens2
	bsf	MOT_G_2		;Allumer le moteur gauche dans le sens2
	movlw	7		; pour 20 boucles
	movwf	nb_tempo	; Affectation à nombre de tempo
	call 	tempo		; appeler la tempo

;et on arrête tout
	bcf	FEUX_ST		;Allumer les feux stop
	bcf	DEL_1		;Allumer la DEL_1
	bcf	MOT_D_1		;Étteindre le moteur droit dans le sens1
	bcf	MOT_D_2		;Étteindre le moteur droit dans le sens2
	bcf	MOT_G_1		;Étteindre le moteur gauche dans le sens1
	bcf	MOT_G_2		;Étteindre le moteur gauche dans le sens2

fin
	btfss	BP_STAR		; Si pas de bouton détecté
	goto    fin
;On boucle tant que le bouton n'est pas préssé une fois.
;sinon on retourne au loader.
	movlw	99		; pour 20 boucles
	movwf	nb_tempo	; Affectation à nombre de tempo
	call 	tempo		; appeler la tempo
;Tempo pour éviter le rebond au début du programme
	goto    start