' Exemple de programme pour simuler l'ouverture du portail en BASIC11 (basic compilé)
' démo HB du 09/12/1998

' LES ENTREES SORTIES SUR LA CARTE CONTROLBOY
' Les entrées :
' PORT A bit 0 : fdfer
' PORT A bit 1 : fdouv
'
' Les sorties :
' PORT B bit 0 : commande RE1 (sens Ouverture = 0 / fermeture =1)
' PORT B bit 1 : commande RE3 (alimentation moteur)


' Fichier de config E/S
#include "start.bas"

' Déclaration des variables

BYTE X(2) ' Déclaration du tableau des étapes 0 à 1
BYTE fdouv ' Déclaration variable associée au capteur fin d'ouverture
BYTE commande ' Déclaration variable associée à la télécommande (simulé par bouton poussoir)
BYTE arreter_moteur, ouvrir_portail ' variables associées aux sorties (actions)

' Initialisation

X(0) = 1
X(1) = 0
PORTB = 0 ' Arrêt moteur

DDRD = 0 ' PD5=PD4=PD3=PD2=input
SCONF = 0x4C ' B,C = sorties
lcdinit()

print " GRAFCET OUVRIR "

' PROGRAMME PRINCIPAL

DO ' début de la boucle

' Lecture des entrées

LDAA PORTD ' Lecture interrupteur sur carte Controlboy
ANDA #32 ' MASQUAGE
EORA #32 ' inversion du bit car
STAA commande ' Interrupteur carte actif niveau 0

LDAA PORTA ' Lecture capteur fdouv (fin ouverture)
ANDA #2 ' bit1 = 1 si non actif
EORA #2 ' Inversion bit
STAA fdouv





' Mise à jour des étapes

IF commande > 0 AND X(0) = 1 then
X(1) = 1
X(0) = 0
END IF

IF fdouv > 0 AND X(1) = 1 THEN
X(0) = 1
X(1) = 0
END IF

' Equation des sorties
ouvrir_portail = X(1)
arreter_moteur = X(0)

' Affectation des sorties

IF ouvrir_portail = 1 THEN
PORTB = 2 ' Activation du relais RE3 de l'alimentation moteur .
' Par défaut RE1 est ouvert (sens ouverture)
END IF

IF arreter_moteur = 1 THEN
PORTB = 0 ' Arrêter le moteur (RE3 désactivé)
END IF

LOOP ' Reboucler vers DO

#include "lcd.bas"

' FIN DU PROGRAMME BASIC11