Ateliers de programmation en PicBasic avec Ronald VE2ESX

Ateliers printemps 2013  

Ronald nous invite à écrire quelques programmes
Partie 2 : Les Variables Chnes ( Strings)
 
 
 
Exercice 2-1        Réponse 2.1
 

Dim Variable as String*21

- ici 20 caractères maximums sont réservés dans la chaîne nommé Variable

- la dernière position ici 21 ième position est réservée en Proton pour la valeur 0 qui détermine la fin de la chaîne.

Concaténation de Variables

Right$ ,  Left$ , Mid$  , Len

Exercice 2-1 :

-Déclarez une variable Prenom de longueur appropriée.

-Déclarez une variable Nom de longueur appropriée.

-Déclarez une variable Prenom_Nom de longueur appropriée

- Chargez votre Variable Nom avec votre nom. Idem avec votre prénom

- Concaténation de  votre prénom et nom dans la variable Prenom_Nom en utilisant les variables Prenom et Nom pour ce faire.

- À partir seulement de la variable Prenom_Nom :

- Imprimer sur une ligne votre Prénom et Nom

Imprimer sur une autre ligne votre  Nom et Prénom

Imprimer à la verticale sur l'écran en première colonne votre prénom et nom et dans la deuxième colonne la même chose mais en commençant à la fin.

Imprimez votre prénom et nom , à la verticale cette fois à la diagonale.

Imprimez votre prénom et nom à l'horizontale avec 1 espace entre chaque lettre.

 
 
 
Exercice 2-2     Réponse 2.2
 

ToUpper ( majescules)  , ToLower ( minuscules )

 

- Peuttre utilisé avec des caractères directement à l'intérieur de guillemets.

- Peuttre utilisé avec des variables chaînes.

- Peuttre utilisé avec  l'adresse d'une variable chaîne.

-  Peuttre utilisé avec les données enregistrées en mémoire Flash

Suite à des tests récents, il appert que les variables sources soient modifiées suite à l'exécution de cette fonction. Une demande de correction a été logée au concepteurPrenez vos précautions.

Exercice 2-2 :

- À la suite de l'exercice précédant et en utilisant les variables chaînes Prénom et Nom , imprimez sur l'écran votre prénom et votre nom. Le prénom doit

être en caractères minuscules et le nom en majuscules.

 
 
 
 
Partie 3 : Diverses instructions.
 
 
Exercice 3-1    Réponse 3-1
 

Array (un Ensemble ou un Tampon ( buffer) : Dim Var1[nombre d'éléments] as Byte

Dim Var1[nombre d'élements] as Word

ex. : Dim Var1[2] as byte

 

pour limiter un nombre de d'éléments : ex. : 5 elements : Hrsout Str Var1\5  même si l'ensemble est prévu pour 10 éléments.

Exercice 3-1

-Créez un tampon du nom de Var1 de 4 éléments de 1 octet

- la première cellule contient la valeur 200

- la deuxième cellule contient la valeur 50

- la troisième cellule contient la valeur 6

- la quatrième cellule contient la somme des trois autres.

- Sur votre écran imprimez les valeurs des 4 cellules en les identifiant.

- sautez 2 lignes

- la troisième cellule contient plutôt 5

- refaites le même calcul à la suite et réimprimez comme à la première partie. Quels sont vos conclusions?

 
 
Excercice 3-1a   Réponse 3-1a
 

Exercice 3-1a

Même programme que 3-1 , mais on change Var1 pour être une variable mot ( Word )

 
 
Exercice 3-2  Réponse 3-2
 

Str   :   modificateur  de type chaîne pour Array ( ensemble )

 

Str$ :   convertir une valeur numérique décimal, hex , binaire ou flottant en Chne

 

ex. : Str Ensemble_octet = Str$ (Modificateur , Variable)

ou

String = Str$ (Modificateur Variable)

 

 

 

Strn :   charger et convertir un Array ( Ensemble ) à une pseudo Chne terminée par 0. ex. :  Strn Ensemble_octet = Item

Ensemble_octet est un array

Item : une commande Strn ou commande Str ou commande Str$ ou "Chaîne"

Exercice 3-2

 

- Créez un ensemble Var1 de 10 éléments de 1 octet. ( Dim Var1[10] as byte )

- Créez un ensemble Var2 de 10 éléments de 1 octet  ( Dim Var2[10] as byte  )

- Set Var1 et Var2

- Créez un pseudo chaîne avec Var1 qui contiendrait « Salut » et qui n'utiliserait pas

Strn.

 
 
Exercice 3-2a   Réponse 3-2a
 

- Créez un pseudo chaîne avec Var2 qui contiendrait « Bonjour » et qui utiliserait

Strn.

- Imprimez le contenu des deux variables

- Imprimez la valeur numériques de chacun des octets de Var1 et Var2 , en séparant les valeurs par des virgules ou une espace.

Exercice 3-2a

- 2 ensembles Var1 et Var2 de 10 élements chacun

-  Set Var1 et Var2

- Charger la valeurs de 125 dans dans la première cellule de Var1

- Convertir en pseudo chaîne dans Var2

-Imprimez Var1 et Var2

-Ensuite imprimez  la valeur numérique de chacune des cellules Var1 et Var2 , en séparant les valeurs par une virgule.

-Que remarquez-vous, vos conclusions? Note 1 : les valeurs 255  viennent de Set

Note 2 : la valeur 125 requiert 1 octet , la chaîne 125 requiert 4 octets incluant le 0.

 
 
Exercice 3-3   Réponse 3-3
 

VarPtr

- Pour lire l'adresse d'une variable en Sram ou l'adresse d'une étiquette pour le

Data en Flash C'est souvent utilisé pour faire des copies par indirection.

Ex  Origine et Destination : 2 variables chaînes et Addr : variable numérique Word

Addr = VarPtr (Origine)

Destination = Addr   ;  Indirection : Addr contient l'adresse de Origine

Exercice 3-3

- Soit 1 variable Addr d'un octet qui contiendra l'adresse de Var1

- Soit 2 variables chaînes Var1 et Var2 de 10 éléments chacun qui contiennent respectivement les données « Salut » et « Bonjour ».

- Imprimez  le contenu de Var1 et Var2

- Copier le contenu de Var1 vers Var2 en utilisant l'adressage indirect pour pointer vers Var1 au lieu de son nom.

Imprimez de nouveau le contenu de Var1 et Var2

Note : Voir l'exemple dans l'exercice, en utilisant la variable chaîne accompagnée d'un indice, on peut examiner chacun des octets de la chaîne Var1 et Var2

 
 
Exercice 3-3a   Réponse 3-3a
 

Exercice 3-3a  Démonstration seulement : Avec 2 ensembles déclarées :

On essait de copier un pseudo Chaîne à un autre par adressage indirect.

 

Copie d'un ensemble pseudo chaîne à un autre à l'aide de l' addressage indirect..

; **********Ça ne FONCTIONNE PAS****************** donc

; *******en addressage indirect n'utilisez que des chaînes********

; ******* la copie direct en pseudo Chaîne fonctionne très bien cependant **********

 

 
 
Exercice 3-4   Réponse 3-4
 

HRSIN

- 2 formats

- Var1 HRSIN , { temps de dépassement , Étiquettes de temps de dépassement}

 HRSIN { temps de dépassement , Étiquettes de temps de dépassement} , Modificateur , Variable

- temps de dépassement

- Modificateurs :  Dec(n)  Hex(n) Bin(n) Skip (n) Str Array , Wait (" recherché ")

- Variables : Byte , Byte en Array, Word

 

Exercice 3-4 :

- Créer un tampon de 10 éléments.

- À partir du clavier, vous tapez un certain nombre de caractères qui seront imprimés à l'écran . Cependant aucun caractère ne sera enregistré tant que le mot de passe « coco » ne soit tapez au clavier. Le mot de passe ne doit pas s'afficher à l'écran. Mettre le terminal en mode Half Duplex au début. Cliquez dans l'écran noir pour transmettre les caractères.

 
 
Exercice 3-5  Réponse 3-5
 

Val : conversion d'un digit alphanumérique en numérique

 

Variable = Val (Ensemble variable ou chaîne, modificateur) variable  ==> variable  ensemble ou chaîne modificateur ==> Dec ou Hex ou Bin

Exercice 3-5 :

Soit 2 variables Chaînes : Var1 = "36"  et Var2 = "64" et une variable numérique

Var3

On veut voir apparaître à l'écran :   36 + 64 = 100

La valeur 100 doit être calculée et provient de Var3

 
 
Exercice 3-6  Réponse 3-6
 

Break et Goto : Sortie prématurée d'une boucle en exécution.

Sound

Select      Case …. Endselect

  

Exercice 3-6

Entrez un chiffre au clavier et faites un son au nombre de fois représenté par le chiffre entré au clavier. Il faut rejeter, les entrées non acceptables. Il faut transformer le code ascii dans le but d'obtenir une valeur numérique réelle pour utilisation dans le programme.

 
 
Exercice 3-7  Réponse 3-7
 

Exercice 3-7

Biscuits de fortune Proton

En utilisant des chiffres ou des lettres sélectionnés sur le clavier que vous aurez préparés et annoncés sur l'écran. Demandez à l'utilisateur de faire un choix . Si un choix est judicieux selon ce que vous avez annoncé en préambule alors imprimez sur l'écran la phrase type «  Biscuit de fortune » .

Préparez au moins 4 phrases en utilisant obligatoirement l'instruction  Select        Case

…. Endselect.

 
 
 

Écriture en mémoire Flash et EEPROM

 

Écriture en Flash

Ldata (utilisant le mnémonique Retlw en assembler)

- Bien positionner Ldata mettre à la fin du programme ou sauter par dessus.

Etiquette:  Ldata "Bonjour"

Lread , Lread8 , Lread16 , Lread32

 

Cdata

- Bien positionner Cdata : mettre à la fin du programme ou sauter par dessus.

Ex :     Etiquette:

Cdata "Bonjour"

 

Cwrite , Cread , Cread8 , Cread16 , Cread32

Attention à ne pas écrire un nombre de fois exagéré avec Cwrite , car pas bon pour la santé de votre micro.

 

 

Edata

Écriture en EEPROM ( 256 octets max pour le 18F4550 )

- À placer au début du programme , n'est pas affecté par le code en Flash car le code généré est placé en EEPROM.

- EtiquettEdata "Bonjour"

Ewrite , Eread

Attention à ne pas écrire un nombre de fois exagéré avec Ewrite , car pas bon pour la santé de votre micro.

 

 
 
Exercice 3-D Réponse 3-D
 
Swap

Exercice 3-D

Vous avez en mémoire Flash à ltiquette « Chiffres » les données suivantes ( mettre dans l'ordre proposé) :  51 33 65 44 89 01  . Imprimez sur écran dans l'ordre croissant ces mêmes chiffres.  Proposition : Array , Swap , technique Bubble Sort

 

 
 
Exercice 3D-a Réponse 3D-a
 
Exercice 3-D-a

Objectif: Placez des nombres en EEPROM , les copier dans un tampon ( array) en Sram , les trier par buble sort , et imprimer les nombres avant et après le TRI.

 

 
 
Exercice 3-E révision 1 Réponse 3-E révision 1
 

Exercice 3-E révision 1

 

Faire un tri par nombre de caractères et ensuite un tri alphabétique.

Il est intéressant de comparer les deux tris au niveau des résultats. Une sortie de quelques caractéristiques a été prévue vers le LCD 4X20. Cependant le terminal donne tous les résultats et caractéristiques. Fait intéressant l’ajout du tri par nombre de caractère a nécessité que peu de code supplémentaire mais plutôt un réajustement du code. Il y a toujours le même nombre de sous routines que la version précédente. Comme toujours après compilation et programmation , il reste 10 secondes pour connecter le terminal ( Serial Com) et de l’ouvrir plein la fenêtre. Le programme  attendra une action subséquente de l’utilisateur pour passer au prochain tri. Si on manque notre coup , Connecter le terminal et pesez reset sur le Olimex et attendre 10 secondes comme à l’habitude.

 

Note 1: On peut modifier à sa guise les mots ou en ajouter à sa guise en autant que les critères décrites au programme sont respectés.
Note 2:  Il est tout à fait plausible que tout ce programme avec peu de modifications devienne une sous routine à être subordonnée à un autre programme principal.

 

 
 
 
Problème avec AVAST