60 likes | 184 Views
Langage C :acquisition des connaissances sous forme de TP. Les différents programmes sont à réaliser avec le logiciel WinAvr afin de programmer le composant ATmeg16 présent sur les cartes stk 500. TP1. Début. #include <90S8535.h> #include <stdio.h> void main() { DDRC=0xFF; PORTC=0xFF;
E N D
Langage C :acquisition des connaissances sous forme de TP. Les différents programmes sont à réaliser avec le logiciel WinAvr afin de programmer le composant ATmeg16 présent sur les cartes stk 500 TP1 Début #include <90S8535.h> #include <stdio.h> void main() { DDRC=0xFF; PORTC=0xFF; } Initialisation PortC en sortie Ecrire $F0 sur le portc Fin 1. Après avoir créé un nouveau projet , créer un nouveau fichier source et saisir le programme ci-dessus.Ssauvegarder ce fichier source, choisir « configure » dans l ’onglet Projet afin d ’associer votre fichier au projet, de choisir le composant 90S8535, et de cocher l ’option programmer après avoir fait le projet. Vous pouvez maintenant cliquer sur l ’icône « make the projet » puis programmer si il n ’y a pas d ’erreur. 2. Quelle est la valeur à mettre dans le registre de direction DDR afin que le port soit configuré en sortie ? En déduire la valeur à mettre dans DDRA afin de positionner ce port en entrée. 3. Quelle est la valeur affichée sur les leds (Sachant que le bit de poids fort est visualisé sur la led qui se trouve à coté des bornes d ’alimentation. En déduire le niveau logique a appliquer sur le bit n du portc afin d ’allumer la led n correspondante ? 4. Sur le programme, entourer en bleu les directives de Headers, en rouge le programme principal.
TP2 : programme qui permet d ’afficher sur les leds la valeur présente sur les boutons poussoirs. Début #include <90S8535.h> #include <stdio.h> void main(void) { DDRC=0xFF; DDRA = ……; PORTA=…….; while(1) { PORTC=PINA; } } Initialiser le port C en sortie Initialiser le port A en entrée avec R pull-up PortC <= PinA Fin? Fin 1. Compléter le programme ci-dessus. Saisir ce programme, le compiler et programmer le composant. 2. Vous remarquez que les leds et les boutons poussoirs ne sont pas coordonnés. Modifier le programme de manière à ce que le 1er bouton de gauche commande l ’allumage de la 1ère led de gauche etc…; Pour cela vous pourrez utiliser : PORTC.i qui pointe le bit i du port C ( i étant une constante comprise entre 0 et 7. 3. Vous constatez que 4 leds sont toujours allumées. Vous allez utiliser une opération logique de manière à les éteindre. Après avoir déterminé la valeur à mettre à la place des pointillés, ajouter la ligne suivante au programme. PORTC= PORTC | ……..;
TP3 : Chenillard #include <90s8535.h> #include <stdio.h> #include <delay.h> void init() { DDRC=0x…..; PORTC=0x …; DDRA=0x….; PORTA=0x…;} void main () { char i =0x01; init; while(1) {PORTC= ~i; delay_ms(1000); i=………….; if (i==0) ………; } } début Initialiser les ports I<=1 Portc<= inverse de i I<= i décaler à gauche I=0? I<=1 1. Compléter le programme, le saisir, le compiler et programmer le composant. 2.Repérer en rouge le programme principal et en bleu la procédure init. 3. Recopier la ligne du programme qui déclare la variable i; Quel est l ’espace mémoire réservé pour cette variable? 4. Recopier la ligne du programme qui correspond au losange de l ’algorigramme. 5. Pourquoi y a t-il deux fois le symbole = écrit successivement dans la dernière ligne du programme?
TP4 : programme qui réalise un chenillard jusq ’à l ’appuie sur le bouton poussoir de gauche #include <90S8535.h> #include <stdio.h> #include <delay.h> void init (void) { DDRC=0xff; DDRA=0x00; PORTA=0xFF; } void main() { char a; init; while(1) {a=0x01; while (a!=0) {PORTC=~a; delay_ms(500); a=a<<1; if (PINA.7==0) goto end; } } end: ; } 1. Tracer l ’alogorigramme correspondant au programme C ci-dessus. 2. Saisir,compiler le programme puis,programmer le composant. TP5 :Ce programme affiche sur les leds la somme de deux valeurs .Chaque valeur est saisie avec les 3 boutons poussoirs de droite lorsque le bouton gauche (validation) est appuyé. 1. Réaliser l ’algorigramme d ’un programme qui saisie la valeur présente sur les 3 boutons poussoirs lorsque le 4ème bouton est appuyé. Faire valider par le professeur. 2.Ecrire le programme C qui réalise l ’algorigramme tracé au 1. Faire valider par le professeur. 3. Saisir et tester ce programme. Puisqu’il va valoir saisir deux valeurs, le plus simple est de créer une fonction (voir cours sur langage C) 4. Modifier le programme ci-dessus afin que la saisie de la valeur s ’effectue dans la fonction : char saisie(void) Faire valider par le professeur. 5. Tracer l ’algorigramme du programme qui réalise la saisie successive de deux nombres puis affiche la somme sur les leds (la saisie sera faite par le « sous programme » ci-dessus. 6. Modifier le programme source afin de réaliser cet algorigramme.
TP6 : Mise en œuvre de l ’afficheur LCD Début #include <90S8535.h> #include <stdio.h> #include <lcdjms.h> void main() { lcd_init(); lcd_gotoxy(12,1); lcd_putchar(‘ b ’); } Initialiser l ’afficheur Mettre le curseur sur la colonne 12, ligne2 Ecrire la lettre « b » Fin 1. Saisir, et tester ce programme . 2. Modifier ce programme afin d ’écrire la lettre A au centre de la première ligne. 3.Ecrire un programme qui permet d ’écrire « salut » sur la seconde ligne en utilisant uniquement les instructions décrites ci-dessus. 4. Ouvrir le fichier lcdjms.h qui se trouve dans le répertoire INC et relever la liste des différentes fonctions définies dans ce fichier, puis fermer ce fichier. 5. Modifier le programme de la question 3 afin d ’écrire « bonjour » en utilisant une seule instruction. TP7 : Commande de l ’afficheur par un bouton poussoir 1.Faire l ’algorigramme correspondant à l ’algorithme suivant, le faire valider : Début tp7 PORTA en entrée Initialisation de l ’afficheur Aller colonne 6, ligne 0 Ecrire « a » tant que PINA.7 0 fin de tant que effacer l ’afficheur aller colonne 2 , ligne 0 écrire « bonjour » aller colonne 5 , ligne 1 ecrire « vous ! » Fin TP7 2. Ecrire et tester le programme C correspondant ; le faire valider par le professeur .
TP8 : Affichage du contenu d ’une variable qui est incrémenté ou décrémenté par les boutons poussoirs L ’afficheur va afficher le contenu de « variable »; si l ’utilisateur appuie sur le bouton de gauche , la variable s ’incrémente (une seule fois par appuie); si l ’utilisateur appuie sur le bouton droite , la variable est décrémentée (une seule fois par appuie). Chaque nouvelle valeur est affichée à l ’écran à la place de l ’ancienne. Voici l ’algorithme du programme à réaliser: Début TP8 Variable du type char = 50 PORTA en entrée initialisation du LCD aller colle 0, ligne 0 écrire « variable =« tant que vrai si PINA.7 = 0 incrémenter variable tant que PINA.7=0 fin tant que fin de si si PINA.4=0 décrémenter variable tant que PINA.4=0 fin tant que fin de si aller colonne12, ligne 0 écrire le contenu de variable attendre 0,5s fin de tant que Ecrire le programme correspondant et le faire valider par le professeur : Conseil à suivre :Pour afficher le contenu d ’une variable du type INT , il est nécessaire de la convertir en chaîne de caractères (déclarée par char *chaine) en utilisant l ’instruction itoa(variable,chaine) ; vous transférerez cette chaîne en tapant lcd_puts(chaine)