Aller au contenu

Utiliser les PIC 16F et 18F/Exercices/Les sous-programmes en assembleur

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Les sous-programmes en assembleur
Image logo représentative de la faculté
Exercices no4
Leçon : Utiliser les PIC 16F et 18F
Chapitre du cours : Les sous-programmes en assembleur

Exercices de niveau 15.

Exo préc. :Les structures de contrôle et l'Arithmétique
Exo suiv. :Introduction au langage C
En raison de limitations techniques, la typographie souhaitable du titre, « Exercice : Les sous-programmes en assembleur
Utiliser les PIC 16F et 18F/Exercices/Les sous-programmes en assembleur
 », n'a pu être restituée correctement ci-dessus.




Modifier le premier exemple du « suivant le cas faire ... » pour que ce que l’on doive faire se trouve dans des sous-programmes. On rappelle ce programme donné dans la partie cours :

	CBLOCK 0x00    ; début de la zone variables en ACCESS RAM
		w_temp :1       ; Zone de 1 byte 
		status_temp : 1 ; zone de 1 byte 
		Choix : 1  ; je déclare ma variable 
	ENDC            ; Fin de la zone 
	...
;si Choix=0 faire le sous programme spgm0 si Choix=1 faire spgm1
	; Choix contient ici une valeur <=N
	movlw 0x0
	subwf Choix,w		;Choix - W -> W
	btfsc STATUS,Z		;Z=1 si = 0 et on saute
	goto spgm0
	movlw 0x1
	subwf Choix,w		;Choix - W -> W
	btfsc STATUS,Z		;Z=1 si = 0 et on saute
	goto spgm1
	...
	movlw 0xN
	subwf Choix,w		;Choix - W -> W
	btfsc STATUS,Z		;Z=1 si = 0 et on saute
	goto spgmN
	; erreur ici !!!
suite
	....

spgm0		;code ici
	goto suite
	....

Le fait que les choix se font sur une instruction complique un peu la situation.

Modifier le programme en utilisant une technique similaire aux tableaux en mémoire programme.

Écrire un programme qui lit sans arrêt le PORTB pour le mettre dans Choix et qui suivant la valeur décimale (1, 2, 4, 8, 16, 32, 64, 128) appelle un des sous programme do, re, mi, fa, sol, la, si et do2. On ne vous demande pas de détailler les sous-programmes .

Écrire un programme qui, suivant la valeur présente en PORTB soit fait la somme des cases d'un tableau de 4 cases, soit calcule la moyenne de ces cases, soit cherche le maximum du tableau.

Exercice 4 (18F)

[modifier | modifier le wikicode]

On suppose qu'en PORTB se trouvent des valeurs positives (octets) provenant de l'extérieur du PIC (18FXXXX). Les détails sur la façon dont cela peut marcher ne nous intéressent pas ici. Faire un programme qui fait sans arrêt l'acquisition de 4 de ces valeurs, fait la somme et divise par 4 le résultat pour le ranger dans une variable moyenne.

1) On suppose qu'en PORTB se trouvent des valeurs (octets) provenant de l'extérieur du PIC (16F84). Les détails sur la façon dont cela peut marcher ne nous intéressent pas ici. Faire un programme qui fait l'acquisition de 4 de ces valeurs et les stocke dans un tableau. Ensuite on calculera la somme de ces 4 cases divisée par 4 et le résultat sera rangé à l'adresse $14.

2) Modifier ce programme pour qu’il calcule le maximum des 4 valeurs du tableau et le range en mémoire à la suite du tableau.

3) Modifier ce programme pour que le passage d'un tableau de 4 cases à un tableau de 10 (ou autre) cases se fasse seulement par la changement d'une seule valeur dans votre programme.