début portb =0 mli = 0 tant que « vrai » répéter si (bplus =0 ou bpmoins = 0) alors si...
Post on 04-Apr-2015
115 Views
Preview:
TRANSCRIPT
DÉBUT
Tant que1
Appel d'une macroEtape_0
divergence OU
Sitrans1 =1
?
Oui
Non
1 -> A4
Monter
Appel d'une macroEtape_1
Exécution étape 1
1-> A5
Descendre
Appel d'une macroEtape_2
Exécutionétape 2
Condition
0 -> PORT A
Arrêt
Boucle
Boucle
FIN
DébutPortB =0MLI = 0Tant Que « vrai » Répéter
Si (Bplus =0 OU Bpmoins = 0) AlorsSi (Bpplus=0 ET MLI<255)
Alors MLI =MLI + 51Fin SiSi (Bpmoins=0 ET MLI>50)
Alors MLI =MLI - 51Fin SiSi MLI = 0
Alors jakubowicz MarcLycée Loritz
Fin SiAttendre 2s
Fin SiFin Tant Que
Fin
Étapes de programmation
•Définition d’un cahier des charges fonctionnel (ce que doit faire le programme…)
•Définition de l’environnement (A quelle broche brancher telles ou telles commandes …)
•Ecriture du programme :A partir du cahier charge fonctionnel (CdCf), le programmeur écrit le programme. Le langage utilisé est l’algorithme ou l’algorigramme.
•Le codage :A partir de l’algorithme le codeur va transcoder l’algorithme ou algorigramme en un langage de haut niveau : C C++ Basic, ou en un langage de bas niveau : assembleurA ce stade le programme peut-être simulé afin de vérifier que son exécution est conforme.
•La Compilation :La compilation consiste à transformer le langage de haut ou bas niveau en code machine directement exécutable par le microcontrôleur.
Étapes de programmation
•Programmation des composants.Le code machine et les variables de fonctionnement vont être introduits dans les différentes mémoires du microcontrôleur. La programmation peut s'effectuer :Sur site, le microcontrôleur est dans son environnement, le technicien le place dans un mode "maintenance" ce qui permet de modifier n'importe quelle mémoire.Hors site, le microcontrôleur est placé sur un programmateur externe, ce qui permet de modifier la mémoire ROM et EEPROM.
•Vérification.Elle se fait directement sur le système.
Points blancs = broche 1
Câble port COM1 (ne pas visser sur le PC SVP)
Alimentation 9V
Support ZIF
Points blancs = broche 1
A1
A0 A2
A3
B0
B7
Un algorithme est une règle.
Processus défini par une succession finie, ordonnée dans le temps, d’opérations d’un acteur unique appliquées à un nombre fini de données conduisant en un nombre fini d’étapes à un résultat défini quelles que soient les valeurs des données dans leurs domaines de définition.
Algorigramme Représentation graphique conventionnelle d’un algorithme
Règle 0
L’algorithmique est faite pour décrire l’aspect temporel des processus.
Un algorithme sans fin ne peut représenter qu’un programme mal fait et planté.
Deux événements représentés sur deux lignes (cellules graphiques) consécutivesse succèdent strictement dans le temps.
Règle 1
Deux événements simultanés doivent être mentionnés dans la même ligned’algorithme, ou dans le même rectangle d’algorigramme.
Règle 2
Les mots clés de l’algorithmique (il n’y en n’a même pas 20, un minimum de 12suffisent) s’emploient toujours soulignés.
Règle 3
Les couples suivants fonctionnent comme des parenthèses algébriques (à uneouverture correspond une et une seule fermeture sans enchevêtrement) et sont toujours reliés par des traits verticaux de validation :
Début
Fin
Tant que
Fin tant que (ftq)
Répéter
Jusqu’à
Règle 4
Le signe « = » a toujours une valeur de test booléen (une question à laquelle la réponse ne peut être que oui ou non, un affirmation qui ne peut être que vraie ou fausse) , l’affectation est toujours représentée par son signe « prend pour valeur » :
Règle 5
Tout algorithme a un début et une fin. Un processus « permanent » a toujours une boucle principale qui n’atteint sa fin que sur rupture des conditions normales de fonctionnement.
Règle 6
Tout algorithme peut se représenter en algorigramme et réciproquement.
Règle 7
L’algorigramme n’est pas un outil d’analyse des systèmes, c’est un outil devalidation et de présentation des solutions élaborées en mode algorithme (texte).
Règle 8
Les deux formes de boucle légitimes ne sont pas équivalentes.Les événements de la boucle répéter sont toujours exécutés au moins une fois alors que la boucle tant que peut très bien ne jamais avoir lieu.
Règle 9
Un « si » ne contrôle jamais une boucle ! ! !Ce sont les structures « tant que » et « répéter ...jusqu’à » qui contrôlent les boucles légitimes
Règle 10
La description en langage libre ne doit jamais contenir de structures decontrôle implicites.
Cela interdit donc les synonymes plus ou moins avoués de nos mots clés :“continuer”, “reprendre”, “arrêter”, “passer à”, “attendre”, “stop”, “sauter en”, “selon”, “en fonction de”, “exécuter”, “attendre”, “choisir”, “recommencer”, “soit que...soit que”, “quand”, “dès que”, “après que”, “vérifier”, “au cas où”, etc...
Règle 11
Une boucle algorithmique est toujours exécutée un nombre entier de fois.
Règle 12
Une boucle GOTO peut apparaître en première analyse de constatation d’unobjet existant mais elle peut et doit toujours être éliminée de la version finale.
Règle 14
Deux boucles peuvent être successives ou imbriquées, jamais enchevêtrées.
Règle 13
LE GOTO s’élimine en réécrivant une boucle tant que ou répéter
Successives Imbriquées Enchevêtrées
Règle 15
La hiérarchie matérielle d’un système doit se traduire par la hiérarchie del’algorithme : l’algorithme liée à une structure matériellement subordonnée à une autre ne peut être qu’un sous- algorithme de l’algorithme de la structure prioritaire
Règle 16
Tout état physique mémoire (bascule, charge de condensateur, état d’uncommutateur...) se représente par une variable
Règle 17
La hiérarchie algorithmique doit respecter la hiérarchie matérielle.
Règle 18
Le sous-algorithme d’une structure qui fonctionne sous le contrôle matérielpermanent d’une autre ne peut contenir de boucle « durable ».
Séquence
Ensemble d'opérations, d'instructions, comprises entre deux délimiteurs qui seront exécutées successivement dans le temps.
DébutInstruction 1Instruction 2Opération 1…
Fin
Condition est une variable booléenne.
Structure algorithmique correspondante :
Si (condition vraie) alors faire Séquence 1sinon faire Séquence 2.
Fin si
Alternative ou choix
Condition vraie
Séquence 1
Condition fausse
Séquence 2
Alternative multiple
Cas [variable_clé][condition_booléenne_1 sur variable_clé] [action_1][condition_booléenne_2 sur variable_clé] [action_2]...[condition_booléenne_n sur variable_clé] [action_n]sinon [action_autre]
Fin cas
Itération (répétition)Répétition d’une séquence un nombre de fois déterminé ou non.
n peut être connu ou inconnu
Séquence(s)
Répéter n fois
Pour Variable1 de début à finPour Variable de [début] à [fin]
Séquence 1Séquence 2
Répéter
Remarque : les variables [Début] et [fin] doivent être déterminée avant l’itération.
Faire… jusqu’àFaire
Séquence 1Séquence 2 …
jusqu’à (condition = vraie)
Remarque : les séquences sont réalisées au moins une fois.
Structures algorithmiques possibles :
Tant que … faireTant que (condition = vraie) Répéter Séquence 1 Séquence 2…Fin tant que
Remarque : les séquences peuvent ne pas être réalisées. Le Fin tant que n’est pas obligatoire.
Représentation sous forme d’algorigramme
Début
Instruction...
Sous programme
test Test d'une condition
1 Renvoi
Début, fin, interruption
Traitement, Instruction, opération...
Sous programme
oui
non
2 Renvoi
Représentation sous forme d’algorigramme
Sortie
Opérations sur des entrées/sorties avec ou sans
Commentaire
test
Entrée
Fin
DEL
Bp
Instruction...
non
oui
1
Renvoi
Test d'une condition
2 Renvoi
xxx
Début
Sous programme
Instruction 2
Fin
Instruction 1
Test ?
Sous programme Instruction
oui
non
Sous programme
test
Algorithme Algorigramme Q Basic
Séquence linéaire
Début :Instruction 1Instruction 2Séquence
Fin :
Exemple de programme
Y=Y+1X=X*3+2CALL trace
Choix ou Alternative
SI (condition vraie) Alors faire Séquence Sinon faire InstructionFin SI
Exemple de programme
IF touche = 1 THEN CALL clavier ELSE tmp=tmp+1END IF
Itération Faire…jusqu’à
Faire SéquenceJusqu’à (condition=vraie)
Exemple de programme
DO CALL encodageLOOP UNTIL res=1
Algorithme Algorigramme Q Basic
test
Instruction
Sous programme
oui
non
ItérationTant que…faire
Tant que (condition=vraie) Répéter Instruction SéquenceFin Tant que
Exemple de programme
WHILE test=1 X=X+1 CALL tempoWEND
ItérationPour variable de début à fin
Pour variable CNT de [début] à [fin] instruction
…Répéter
Exemple de programme
FOR CNT=0 TO 100 Y=CNT*12+3NEXT CNT
Incrémenter CNT
CNT ç début
Y ç CNT*12+3
CNT > fin ?
non
oui
•Réaliser le programme suivant : Initialisez une variable « compteur » à 0. Sortir la variable « compteur » sur le port B Incrémenter la variable « compteur » Attendre 200ms. Recommencer à l’infini.
DébutTant que 1 Répéter
Compteur = 0Pour boucle de 0 à 255
Sortir compteur sur port BIncrémenter CompteurAttendre 200 ms
RépéterFin Tant Que
Fin
Début
Fin
Incrémenter boucle
boucle >255 ?
non
oui
1
Compteur ← 0
oui
non
Compteur
boucle ← 0
Incrémenter compteur
Attendre 200ms
Port B
•Réaliser le programme suivant : Initialisez une variable « compteur » à 0. Sortir la variable « compteur » sur le port B Incrémenter la variable « compteur » Attendre 200ms. Recommencer à l’infini.
DÉBUT
compteur= 0
Calcul
Boucle255 fois
compteur-> PORT B
Sortie
compteur = compteur + 1
Calcul
200 ms
Pause
Boucle
Boucle
Tant que1
Boucle
Boucle
FIN
Algorigramme type Flowcode
DébutTant que 1 Répéter
Compteur = 0Pour boucle de 0 à 255
Sortir compteur sur port BIncrémenter CompteurAttendre 200 ms
RépéterFin Tant Que
Fin
void main(){
COMPTEUR = 0 ;while( 1 ){for (LOOP1=0; LOOP1<255; LOOP1++)
{trisb = 0x00;portb = COMPTEUR;COMPTEUR = COMPTEUR + 1 ;delay_ms(200);}
}mainendloop: goto mainendloop;
}
DÉBUT
compteur= 0
Calcul
Boucle255 fois
compteur-> PORT B
Sortie
compteur = compteur + 1
Calcul
200 ms
Pause
Boucle
Boucle
Tant que1
Boucle
Boucle
FIN
program compteurdim compteur as bytedim boucle as byte
main:
trisb = $00 'Le port B est en sortie
While true compteur = $0 For boucle = 0 to 255 PortB = compteur compteur = compteur + 1 Delay_ms(200) Next boucle Wendend. 'Fin de programme
DÉBUT
compteur= 0
Calcul
Boucle255 fois
compteur-> PORT B
Sortie
compteur = compteur + 1
Calcul
200 ms
Pause
Boucle
Boucle
Tant que1
Boucle
Boucle
FIN
label2BCF STATUS, RP0CLRF gbl_COMPTEURCLRF gbl_LOOP1
label6MOVLW 0xFFSUBWF gbl_LOOP1, WBTFSC STATUS,CGOTO label2BSF STATUS, RP0CLRF gbl_trisbBCF STATUS, RP0MOVF gbl_COMPTEUR, WMOVWF gbl_portbINCF gbl_COMPTEUR, WMOVWF gbl_COMPTEURMOVLW 0xC8MOVWF delay_ms_00000_arg_delCALL delay_ms_00000INCF gbl_LOOP1, FGOTO labe6
; } main function end
DÉBUT
compteur= 0
Calcul
Boucle255 fois
compteur-> PORT B
Sortie
compteur = compteur + 1
Calcul
200 ms
Pause
Boucle
Boucle
Tant que1
Boucle
Boucle
FIN
Alimentation 9V
Support ZIF
Points blancs = broche 1
A1
A0 A2
A3
B0
B7RA7/OSC1/CLKIN16
RB0/INT6
RB1/RX/DT7
RB2/TX/CK8
RB3/CCP19
RB410
RB511
RB6/T1OSO/T1CKI12
RB7/T1OSI13
RA0/AN017
RA1/AN118
RA2/AN2/VREF1
RA3/AN3/CMP12
RA4/T0CKI/CMP23
RA6/OSC2/CLKOUT15
RA5/MCLR4
PIC16F628A
PROGRAM=Exemple_1.hex
CLOCK=4MHz
CFGWORD=0x3F10
OFF ON 12
43
I2_I3DIPSW_2
D7
I0
I1
2 3 4 5 6 7 8 91
RP2 47k
D0LED-RED
12345678
161514131211109
RN
127
0
main: CMCON=7 'Configure le portA en entrées/sorties numériques
trisa = $FF 'le port A est en entrée
trisb = $00 'Le port B est en sortie
portb = $00 'Met les sortie du port B à 0
While (bp=1 'Tant que bp non appuyé faire la boucle
Wend del=1 'Sortie b0 à 1 Del allumée
Delay_ms(2000) 'Attendre 2s
del=0 'Sortie b0 à 0 Del éteinte
end. 'Fin de programme
Programme 0Eteindre toutes les DEL.Attendre que BP soit à 1Allumer la DEL 0 durant 200ms.Eteindre la DEL 0.Terminé.
Début
Port A en numériquePort A en entréePort B en sortie
BP=1 ?
0
Tempo 200ms
Fin
Port B
Port B.0
Port B.00
1
main: CMCON=7 'Configure je portA en entrées/sorties numériques
trisa = $FF 'le port A est en entrée
trisb = $00 'Le port B est en sortie
portb = $0 'Met les sortie du port B à 0
PortB = $FF 'Sortie b0 à 1 Del allumée
Delay_ms(1000) 'Attendre 1s
PortB = 0 'Sortie b0 à 0 Del éteinte
Delay_ms(1000) 'Attendre 1s
end.
Programme 1
Allumer toutes les DEL.Attendre 1s.Eteindre toutes les DEL.Attendre 1s.Terminé.
Début
Port A en numériquePort A en entréePort B en sortie
Tempo 200ms
Fin
Tempo 200ms
Tempo 200ms
0 Port B
$FF Port B
0 Port B
main: CMCON=7 'Configure je portA en entrées/sorties numériques
trisa = $FF 'le port A est en entrée
trisb = $00 'Le port B est en sortie
portb = $0 'Met les sortie du port B à 0
while true PortB = $FF 'Sortie b0 à 1 Del allumée
Delay_ms(1000) 'Attendre 1s
PortB = 0 'Sortie b0 à 0 Del éteinte
Delay_ms(1000) 'Attendre 1s
Wendend.
Programme 2
Allumer toutes les DEL.Attendre 1s.Eteindre toutes les DEL.Attendre 1s.Le programme se répète à l’infini.
Début
Port A en numériquePort A en entréePort B en sortie
Tempo 200ms
Tempo 200ms
1
OUI
NON
Fin
0 Port B
0 Port B
$FF Port B
dim compteur as byte ‘Définition de la variable compteur comme un octet
main:… compteur = $0 While true ‘Faire tant que’
do ‘Faire
PortB = compteur Delay_ms(200) compteur = compteur +1 loop until compteur = $FF ‘Jusqu’à
Wend ‘Répéter
end.
Programme 3On va compter … :Initialisez une variable « compteur » à 0.Sortir la variable « compteur » sur le port BIncrémenter la variable « compteur » compteur = compteur +1Attendre 200ms.Et recommencer à l’infini.
Début
Tempo 200ms
1
OUI
NON
Fin
Compteur ç 0
Incrémenter compteur
Compteur = 255 ?
OUI
NON
initialisation PIC
compteur Port B
dim port as byte
main:… While true Port = portA port= NOT Port PortB = port Wendend.
Programme 5
Lire le port A en entrée, le stocker dans une variable « port » on veut sur le port de sortie, l’inverse de portSortir sur le port B la variable « /port ».Et recommencer à l’infini.
Début
1
OUI
NON
Fin
Port ç NOT port
Port Port B
PortPort A
initialisation PIC
main:While true chenille = $01 for compteur = 0 to 6 PortB = chenille delay_ms(200) chenille = chenille << 1 Next compteur for compteur = 0 to 6 PortB = chenille delay_ms(200) chenille = chenille >> 1 Next compteurWendend
Programme 6 – 7 Un petit chenillard …Initialiser une variable « chenille » à 01Sortir sur le port B la variable « chenille ».Attendre 200ms.Décaler à gauche d’un bit la variable « chenille »Recommencer 7 fois.on veut que la DEL fasse un allez retour perpétuel
Début
initialisation PIC
1
OUI
NON
Fin
Chenille ç 1Compteur ç 0
OUI
Tempo 200ms
Compteur ç 0
Décaler chenille de 1 bit à droite
Compteur > 6
Incrémenter compteur
NON
OUI
Chenille Port B
Tempo 200ms
Décaler chenille de 1 bit à gauche
Compteur > 6
Incrémenter compteur
NON
OUI
Chenille Port B
main: … While true port = portA.0 IF port = 1 then chenille = $01 for compteur = 0 to 7 PortB = chenille delay_ms(200) chenille = chenille << 1 Next compteur else chenille = $80 for compteur = 0 to 7 PortB = chenille delay_ms(200) chenille = chenille >> 1 Next compteur End IF Wendend.
Programme 8Variante du programme 6, on veut que la DEL fasse un allez ou retour dans le sens de l’interrupteur A0.
Début
initialisation PIC
Tempo 200ms
1
OUI
NON
Fin
Chenille ç 1Compteur ç 0
Décaler chenille de 1 bit à gauche
Compteur > 7OUI
NON
Chenille ç $80Compteur ç 0
Incrémenter compteur
Port = 1 NONOUI
PortPort A.0
Chenille Port B
Tempo 200ms
Décaler chenille de 1 bit à droite
Compteur > 7OUI
NON
Incrémenter compteur
Chenille Port B
Début
Initialiser l'écran en mode graphique 640x480 16 couleurs
Tracer l'axe des tensions à 10 pts du bord gauche
Tracer l'axe de temps à mi-hauteur
Générer la fonction sinus à partir de NB (sinus en radian, sortie comprise
entre 0 et 480)
Variable x ç 10
Fin
Incrémenter NB
Oui
NON
Afficher le point de coordonné (x, sin)
x = 640
Réalisez le programme en Qbasic permettant de dessiner une courbe sinusoïdale.
0,0 640,0
0,480 640,480
0 π 2π
10,240 315,240 640,240
...,10
...,470
210
210
top related