Admin مدير المنتدى


عدد المساهمات : 18045 التقييم : 32929 تاريخ التسجيل : 01/07/2009 الدولة : مصر العمل : مدير منتدى هندسة الإنتاج والتصميم الميكانيكى
 | موضوع: كتاب Les Microcontroleurs الإثنين 20 يونيو 2022, 5:16 pm | |
| 
أخواني في الله أحضرت لكم كتاب Les Microcontroleurs وسام الزعفراني Wissem Zaafrani
 و المحتوى كما يلي :
1) Qu’est ce qu’un microcontrôleur : C’est un ordinateur monté dans un circuit intégré. Les avancées technologiques en matière d’intégration, ont permis d’implanter sur une puce de silicium de quelques millimètres carrés la totalité des composants qui forment la structure de base d’un ordinateur. Leur prix varie de quelques Euros à une dizaine d'Euros pour les plus complexes. Comme tout ordinateur, on peut décomposer la structure interne d’un microprocesseur en trois parties : -Les mémoires -Le processeur -Les périphériques C’est ce qu’on peut voir sur la figure 1 : figure 1 les mémoires sont chargées de stocker le programme qui sera exécuté ainsi que les données nécessaires et les résultats obtenus le processeur est le cœur du système puisqu’il est chargé d’interpréter les instructions du programme en cours d’exécution et de réaliser les opérations qu’elles contiennent .Au sein du processeur, l’unité arithmétique et logique interprète, traduit et exécute les instructions de calcul. les périphériques ont pour tâche de connecter le processeur avec le monde extérieur dans les deux sens . Soit le processeur fournit des informations vers l’extérieur (périphérique de sortie ), soit il en reçoit (périphérique d’entrée ).2) Intérêt des microcontrôleurs : Les microcontrôleurs sont de taille tellement réduite qu’ils peuvent être sans difficulté implantés sur l’application même qu’ils sont censés piloter. Leur prix et leurs performances simplifient énormément la conception de système électronique et informatique. L’utilisation des microcontrôleurs ne connaît de limite que l’ingéniosité des concepteurs, on les trouve dans nos cafetières, les magnétoscopes, les radios …..Une étude menée en l’an 2004 montre qu’en moyenne, un foyer américain héberge environ 240 microcontrôleurs.II PRESENTATION GENERALE DU PIC 16F84 1) Classification du PIC 16F84 Le PIC 16F84 est un microcontrôleur 8 bits. Il dispose donc d'un bus de données de huit bits. Puisqu’il traite des données de huit bits, il dispose d’une mémoire de donnée dans laquelle chaque emplacement (défini par une adresse) possède huit cases pouvant contenir chacune un bit. 2) Architecture interne La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2 : -Mémoire de programme -Mémoire de données -Processeur -Ressources auxiliaires ( périphériques ) figure 2 La mémoire de programme contient les instructions pilotant l’application à laquelle le microcontrôleur est dédié. Il s’agit d’une mémoire non volatile ( elle garde son contenu, même en l’absence de tension ), elle est de type FLASH c’est à dire qu’elle peut être programmée et effacée par l’utilisateur via un programmateur et un PC. La technologie utilisée permet plus de 1000 cycles d’effacement et de programmation. Pour le PIC 16F84 cette mémoire est d’une taille de 1024*14 bits, c’est à dire qu’elle dispose de 1024 emplacements ( de000h à 3FFh ) contenant chacun 14 cases car dans le cas du PIC, les instructions sont codées sur 14 bits. On peut donc stocker 1024 instructions. La mémoire de donnée est séparée en deux parties : -une mémoire RAM de 68 octets puisque le bus de donnée est de huit bits. Cette RAM est volatile (les données sont perdues à chaque coupure de courant). On peut y lire et écrire des données. -une mémoire EEPROM de 64 octets dans laquelle on peut lire et écrire des données ( de huit bits soit un octet ) et qui possède l’avantage d’être non volatile ( les données sont conservées même en l’absence de tension ). La lecture et l’écriture dans cette mémoire de données sont beaucoup plus lentes que dans la mémoire de données RAM.Le processeur est formé de deux parties : -une unité arithmétique et logique ( UAL ) chargée de faire des calculs. -un registre de travail noté W sur lequel travail l’UAL. les ressources auxiliaires qui sont dans le cas du PIC16F84 -ports d’entrées et de sorties. -temporisateur. -interruptions -chien de garde -mode sommeil Ces ressources seront analysées dans la suite du cours. III STRUCTURE INTERNE DU PIC 16F84 1) Brochage et caractéristiques principales Le PIC16F84 est un circuit intégré de 18 broches ( figure 3) : figure 3 L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles permettent à l’ensemble des composants électroniques du PIC de fonctionner. Pour cela on relie VSS (patte 5) à la masse ( 0 Volt ) et VDD (patte 14 ) à laborne positive de l’alimentation qui doit délivrer une tension continue comprise entre 3 et 6 Volts. Le microcontrôleur est un système qui exécute des instructions les unes après les autres à une vitesse ( fréquence ) qui est fixée par une horloge interne au circuit. Cette horloge doit être stabilisée de manière externe au moyen d’un cristal de quartz connecté aux pattes OSC1/CLKIN (patte 16) et OSC2/CLKOUT ( patte 15 ) . Nous reviendrons en détail sur l’horloge au paragraphe 3. La patte 4 est appelée MCLR. Elle permet lorsque la tension appliquée est égale à 0V de réinitialiser le microcontrôleur. C’est à dire que si un niveau bas ( 0 Volt ) est appliqué sur MCLR le microcontrôleur s’arrête, place tout ses registres dans un état connu et se redirige vers le début de la mémoire de programme pour recommencer le programme au début ( adresse dans la mémoire de programme :0000 ).A la mise sous tension, la patte MCLR étant à zéro, le programme démarre donc à l’adresse 0000,( MCLR=Master Clear Reset ). Les broches RB0 à RB7 et RA0 à RA4 sont les lignes d’entrées/sorties numériques. Elles sont au nombre de 13 et peuvent être configurées en entrée ou en sortie. Ce sont elles qui permettent au microcontrôleur de dialoguer avec le monde extérieur (périphériques). L’ensemble des lignes RB0 à RB7 forme le port B et les lignes RA0 à RA4 forment le port A. Certaines de ces broches ont aussi d’autres fonctions (interruption, timer ). 2) Structure interne La structure interne du PIC16F84 est donnée figure 4 : ( structure HARVARD : la mémoire de programme et la mémoire de données sont séparées contrairement à l'architecture Von Neuman qui caractérise d'autres fabricants de microcontrôleurs )figure 4 On retrouve sur ce schéma la mémoire de programme, la mémoire RAM de données, la mémoire EEPROM, les ports A et B, ainsi que la partie processeur avec l’UAL et le registre de travail W ( work ). Nous allons étudier à présent plus en détail le fonctionnement du PIC.3) Principe de fonctionnement du PIC Un microcontrôleur exécute des instructions. On définit « le cycle instruction » comme le temps nécessaire à l’exécution d’une instruction. Attention de ne pas confondre cette notion avec le cycle d’horloge qui correspond au temps nécessaire à l’exécution d’une opération élémentaire ( soit un coup d'horloge ). Une instruction est exécutée en deux phases : la phase de recherche du code binaire de l’instruction stocké dans la mémoire de programme la phase d’exécution ou le code de l’instruction est interprété par le processeur et exécuté. Chaque phase dure 4 cycles d’horloge comme le montre la figure 5 : figure 5 On pourrait donc croire qu’un cycle instruction dure 8 cycles d’horloge mais l’architecture particulière du PIC lui permet de réduire ce temps par deux. En effet, comme les instructions issues de la mémoire de programme circulent sur un bus différent de celui sur lequel circulent les données, ainsi le processeur peut effectuer l a phase de recherche d’une instruction pendant qu’il exécute l’instruction précédente ( Voir figure 6 et 7 ).figure 6figure 7 4) Déroulement d’un programme Le déroulement d’un programme s’effectue de façon très simple. A la mise sous tension, le processeur va chercher la première instruction qui se trouve à l’adresse 0000 de la mémoire de programme, l’exécute puis va chercher la deuxième instruction à l’adresse 0001 et ainsi de suite ( sauf cas de saut ou d’appel de sous programme que nous allons voir plus loin ). On parle de fonctionnement séquentiel. La figure 8 va nous permettre de mieux comprendre le fonctionnement :figure 8On constate sur cette figure que la mémoire de programme contient 1024 emplacements ( 3FF en hexadécimale ) contenant 14 bits ( de 0 à 13 ). Une instruction occupe un emplacement qui est défini par une adresse. Le processeur peut alors sélectionner l'emplacement souhaité grâce au bus d’adresse et il peut lire son contenu ( ici l’instruction ) grâce à son bus d’instruction ( voir figure 7 ). Cet adressage s’effectue à l’aide d’un compteur ordinal appelé PC qui lors de la mise sous tension démarre à zéro puis s’incrémente de 1 tous les quatre coups d’horloge, on exécute bien ainsi les instructions les unes à la suite des autres. Mais il arrive que dans un programme on fasse appel à un sous programme dont l’adresse de l’instruction ne se trouve pas juste après celle qui est en train d’être exécutée. C’est le rôle de la pile qui sert à emmagasiner de manière temporaire l’adresse d’une instruction. Elle est automatiquement utilisée chaque fois que l’on appelle un sous programme et elle permet une fois que l’exécution du sous programme est terminée de retourner dans le programme principal juste après l’endroit où l’on a appelé le sous programme. On constate que cette pile possède huit niveaux, cela signifie qu’il n’est pas possible d’imbriquer plus de huit sous programmes, car au-delà de huit, le processeur ne sera plus capable de retourner à l’adresse de base du programme principal. L’adresse 0000 est réservée au vecteur RESET, cela signifie que c’est à cette position que l’on accède chaque fois qu’il se produit une réinitialisation ( 0 volts sur la patte MCLR ). C’est pour cette raison que le programme de fonctionnement du microcontrôleur doit toujours démarrer à cette adresse. L’adresse 0004 est assignée au vecteur d’interruption et fonctionne de manière similaire à celle du vecteur de Reset. Quand une interruption est produite et validée, le compteur ordinal PC se charge avec 0004 et l’instruction stockée à cet emplacement est exécutée. 5) La mémoire de données RAM Si l’on regarde la mémoire de donnée RAM, on s’aperçoit que celle-ci est un peu particulière comme le montre la figure 9 : On constate en effet que cette mémoire est séparée en deux pages ( page 0 et page 1 ). De plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octetssont réservés ( SFR pour Special File Register ). Ces emplacements sont en effet utilisés par le microcontrôleur pour configurer l’ensemble de son fonctionnement. On les appelle registres spécifiques et nous verrons au chapitre suivant leurs rôles. Le bus d’adresse qui permet d’adresser la RAM est composé de 7 fils ce qui veut dire qu’il est capable d’adresser 128 emplacements différents. Or, chaque page de la RAM est composée de 128 octets, le bus d’adresse ne peut donc pas accéder aux deux pages, c’est pourquoi on utilise une astuce de programmation qui permet de diriger le bus d’adresse soit sur la page 0, soit sur la page 1. Cela est réalisé grâce à un bit d’un registre spécifique ( le bit RP0 du registre STATUS ) dont nous verrons le fonctionnement plus loin. La RAM de données proprement dite se réduit donc à la zone notée GPR (Registre à usage générale ) qui s’étend de l’adresse 0Ch ( 12 en décimale ) jusqu’à 4Fh ( 79 en décimale ) soit au total 68 registres en page 0 et autant en page 1, mais on constate que les données écrites en page 1 sont redirigées en page 0 cela signifie qu’au final l’utilisateur dispose uniquement de 68 registres ( donc 68 octets de mémoire vive) dans lesquels il peut écrire et lire à volonté en sachant qu’à la mise hors tension, ces données seront perdues.figure 9 STAT US STAT US6) Les registres Nous avons vu au chapitre précédent que la mémoire de données RAM contenait des registres spécifiques qui permettent de configurer le PIC, nous allons les détailler un à un et voir comment on peut accéder à la page 0 ou la page 1. Afin de faciliter la compréhension, les registres les plus utilisés sont encadrés. adresse 00 et 80 ,INDF . Cette adresse ne contient pas de registre physique, elle sert pour l’adressage indirect. (non utilisée dans le projet de cette année ) adresse 01 , TMR0 . Contenu du Timer (8 bits). Il peut être incrémenté par l’horloge (fosc/4) c'est à dire tous les 4 coups d'horloge ou par la broche RA4. adresse 02 et 82 , PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (13-8) bits de poids forts sont dans PCLATH. adresse 03 et 83 , STATUS Registre d’état . les cinq bits de poids faible de ce registre sont en lecture seule , ce sont des témoins (drapeaux ou flag en anglais) caractérisant le résultat de l’opération réalisée par l’UAL. Le bit RP0 est lui en lecture /écriture et c’est lui qui permet de sélectionner la page dans la mémoire RAM . Si RP0=0 on accède à la page 0 et si RP0=1 on accède à la page 1 . Au reset, seul le bit RP0 de sélection de page est fixé ( RP0=0 : page 0 ) TO/ (Time Out) : débordement du timer WDT PD/ : (Power Down) caractérise l’activité du chien de garde WDT Z (zéro) résultat nul pour une opération arithmétique et logique. DC (digit carry) retenue sur un quartet ( 4 bits ) C (carry) retenue sur un octet ( 8 bits ). RP0 TO/ PD/ Z DC Cadresse 04 et 84 , FSR . Registre de sélection de registre : contient l’adresse d’un autre registre (adressage indirect, non utilisé dans le projet ) adresse 05 , PORTA . Ce registre contient l’état des lignes du port A ( voir chapitre sur les ports ). adresse 06 , PORTB . Ce registre contient l’état des lignes du port B ( voir chapitre sur les ports ). adresse 08 , EEDATA .Contient un octet lu ou à écrire dans l’EEPROM de données. adresse 09 , EEADR . Contient l’adresse de la donnée lue ou écrite dans l’EEPROM de données. adresse 0A et 8A, PCLATH . Voir l’adresse 02 PCL.adresse 0B et 8B , INTCON . Contrôle des 4 interruptions Masques : GIE : (Global Interrupt Enable) : masque global d’inter. EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM. T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoquée par le débordement du TIMER0 INTE: ( Interrupt Enable) autorise l’interruption provoquée par un changement d'état sur broche RB0/INT RBIE: (RB Interrupt Enable) autorise les interruptions provoquées par un changement d'états sur l'une des broches RB4 à RB7. Si ces bits sont mis à 1 , ils autorisent les interruptions pour lesquels ils sont dédiés . Drapeaux : T0IF : (Timer 0 Interrupt Flag) débordement du timer INTF ( Interrupt Flag) interruption provoquée par la broche RB0/INT RBIF ( RB Interrupt Flag) interruption provoquée par les broches RB4-RB7. adresse 81 , OPTION 8 bits (tous à 1 au RESET) affectant le comportement des E/S et des timers. RBPU/ (RB Pull Up) Résistances de tirage à Vdd des entrées du port B ( voir le détail du fonctionnement au chapitre port ).Si RBPU/=0 les résistances de pull-up sont connectées en interne sur l'ensemble du port B. GIE EEI E T0I E INT E RBIE T0I F INTF RBI F RBPU/ INTEDG RTS RTE PSA PS2 PS1 PS0INTEDG (Interrupt Edge) sélection du front actif de l’interruption sur RB0/INT ( 1 pour front montant et 0 pour front descendant ). RTS (Real Timer Source) sélection du signal alimentant le timer 0 : 0 pour horloge interne, 1 pour RA4/T0CLK RTE (Real Timer Edge) sélection du front actif du signal timer ( 0 pour front montant). PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT. PS2..0 (Prescaler 210 ) sélection de la valeur du diviseur de fréquence pour les timers. adresse 85 , TRISA . Direction des données pour le port A : 0 pour sortir et 1 pour entrer ( voir chapitre sur les ports ). adresse 86 , TRISB . Direction des données pour le port B : 0 pour sortir et 1 pour entrer ( voir chapitre sur les ports ).adresse 88 , EECON1 Contrôle le comportement de l’EEPROM de données. EEIF (EEProm Interrupt Flag) passe à 1 quand l’écriture est terminée. WRERR (Write Error) 1 si erreur d’écriture. WREN (Write Enable) : 0 pour interdire l’écriture en EEPROM de données. WR (Write) 1 pour écrire une donnée. Bit remis automatiquement à 0 RD (Read) : 1 pour lire une donnée. Bit remis automatiquement à 0 adresse 89 , EECON2 . Registre de sécurité d’écriture en EEPROM de données. Une donnée ne peut être écrite qu’après avoir écrit successivement 0x55 et 0xAA dans ce registre. 7) Les ports d’entrées/sorties Le PIC16F84 est équipé de 13 lignes d’entrées/sorties réparties en deux ports : -le port A : RA0 à RA4 -le port B : RB0 à RB7 Chaque ligne peut être configurée soit en entrée, soit en sortie, et ceci indépendamment l’une de l’autre. Pour cela on utilise les registres TRISA et TRISB . Le bit de poids faible ( b0 ) du registre TRISA correspond à la ligne RA0, le bit b1 de TRISA correspond à RA1 et ainsi de suite. Il en est de même pour le port B et le registre TRISB ( b0 de TRISB correspond à RB0 b7 correspond à RB7 ). Si l’on veut placer une ligne en sortie il suffit de mettre le bit correspond dans TRISA ou TRISB à 0 (retenez 0 comme Output=sortie ) . Si l’on veut placer une ligne en entrée, il suffit de placer le bit correspondant dans TRISA ou TRISB à 1 (retenez 1 comme Input=entrée ) . EEIF WRERR WRE N WR R DLes bits des deux registres PORTA et PORTB permettent soit de lire l’état d’une ligne si celle-ci est en entrée, soit de définir le niveau logique d’une ligne si celle-ci est en sortie. Lors d’un RESET, toutes les lignes sont configurées en entrées. particularité du portA : les bits b7 à b5 des registres TRISA et PORTA ne correspondent à rien car il n’y a que 5 lignes ( b0 à b4 ) . RA4 est une ligne à collecteur ouvert, cela veut dire que configurée en sortie cette broche assure 0Volt à l’état bas, mais qu’à l’état haut, il est nécessaire de fixer la valeur de la tension grâce à une résistance de tirage (pull up en anglais) particularité du portB :il est possible de connecter de façon interne sur chaque ligne une résistance de tirage ( pull up ) dont le rôle consiste à fixer la tension de la patte (configuré en entrée ) à un niveau haut lorsque qu’aucun signal n’est appliqué sur la patte en question. Pour connecter ces résistances, il suffit de placer le bit RBPU/ du registre OPTION à 0 .8) Le Timer Dans la majeure partie des applications, il est nécessaire de contrôler le temps; afin de ne pas occuper le microcontrôleur qu'à cette tâche ( boucle de comptage qui monopolise le micro ), on le décharge en utilisant un timer. Le pic 16F84 dispose de deux timers, un à usage général ( le TMR0 ) et un autre utilisé pour le chien de garde ( watch dog WDG ). Le TMR0 est un compteur ascendant (qui compte) de 8 bits qui peur être chargé avec une valeur initiale quelconque. Il est ensuite incrémenté à chaque coup d'horloge jusqu'à ce que le débordement ait lieu ( passage de FF à 00 ); Le principe est représenté figure 10 : figure 10 Le TMR0 peut remplir deux fonctions: -Temporisateur ou contrôle du temps. Son entrée d'incrémentation est alors l'horloge qui correspond au cycle instruction ( Fosc/4). Il est possible d'utiliser un pré-diviseur de fréquence que nous verrons plus loin. -Compteur d'événements. Dans ce cas les d'impulsions d'entrées du timer sont fournies par la patte RA4/TOCK1 le choix s'effectue grâce au bit RTS du registre OPTION. Le pic 16F84 dispose d'un diviseur de fréquence qui peut être assigné soit au chien de garde, soit au TMR0 ( uniquement un à la fois ). L'assignation du pré diviseur se faitgrâce au bit PSA du registre OPTION. La structure interne du TMR0 est donc la suivante ( figure 11 ): figure 11 du registre intcon il se produit un retard de deux cycles avant que le timer ne commence à compter après un chargement RTS RTESuivant que le pré-diviseur est assigné au chien de garde ou au TMR0, la valeur de la pré-division n'est pas la même, il faut donc être vigilant lors de la programmation comme le montre la figure 12 : figure 12 Enfin, vu que le timer ne peut que compter, cela oblige à une petite gymnastique lors de l'introduction de la valeur de pré chargement : exemple : On veut que le timer nous indique par la mise à un du drapeau T0IF l'écoulement d'une durée de 20ms ( la fréquence d'horloge étant de 4MHz ) d'où Fosc/4=1μs si on choisit une pré division de 256 , on aura donc 20000 μs / 256 =78 Il ne faut pas charger le TMR0 avec 78 mais avec le complément à deux de cette valeur ( car le timer compte et ne décompte pas ) d'où 256-78=178 RPBU/ INTEDG RTS RTE RTS RTEsoit en hexadécimale la valeur B2h à charger dans le registre TMR0.9) Mise en oeuvre L’utilisation et la mise en œuvre très simple des PICs les a rendus extrêmement populaire au point que la société qui les fabrique ( MICROCHIP ) est en passe de devenir le leader mondial dans le domaine des microcontrôleurs devant MOTOROLA et INTEL. Il suffit d’alimenter le circuit par ses deux broches VDD et VSS, de fixer sa vitesse de fonctionnement à l’aide d’un quartz ( figure13) et d’élaborer un petit système pour permettre de réinitialiser le microcontrôleur sans avoir à couper l’alimentation ( figure 14 ). figure 13 figure 14Il suffit ensuite d’écrire le programme en langage assembleur ou en C sur un ordinateur grâce au logiciel MPLAB de MICROCHIP ( logiciel gratuit ) puis de le compiler pour le transformer en langage machine et le transférer dans le PIC grâce à un programmateur. Lors de la mise sous tension, tous les registres spécifiques sont placés dans un état déterminé comme le montre la figure 15u=unchanged ; x=unknown ; -=unimplemented ( read as 0 ) ; q=value depends on condition figure 15 Il ne nous reste plus qu’à voir le jeu d’instruction de programmation en assembleur du PIC et c’est là que réside tout l’intérêt puisqu’il ne dispose que de 35 instructions qui lui permettent de réaliser toutes les tâches.IV JEU D’INSTRUCTIONS Afin de comprendre la fonction de chaque instruction, la notation adoptée pour les données et adresses manipulées par les instructions est fort simple et est la suivante : -f représente un registre -b représente un numéro de bit en sachant que 0 correspond toujours au bit de poids faible ( le plus à droite dans le registre ) -k représente une donnée aussi appelé littéral Un certain nombre d’instructions ( ADDWF , ANDWF , etc.. ) utilise une notation spéciale présentée sous la forme : ADDWF f,d Où f indique le registre et où d peut prendre deux valeurs (0 ou 1), ce qui change le comportement de l’instruction . Si d est à 0, le résultat est placé dans le registre de travail W, la valeur dans le registre f est alors inchangée, alors que si d est à 1, le résultat est placé dans le registre f. Un autre type d’instruction mérite quelques éclaircissements, ce sont les instructions de branchement conditionnel. Prenons comme exemple : BTFSC f,b Qui va vouloir dire ( Bit Test File Skip if Clear ) qui signifie que l’on va tester le bit b du registre f ( b peut prendre une valeur de 0 à 7 pour un registre 8 bits ) .Il peut alors y avoir deux solutions : -Soit le bit testé est à 1, donc la condition testée n’est pas réalisée, le programme continue alors son déroulement normalement en séquence avec l’instruction juste en dessous. -Soit le bit testé vaut 0, donc la condition testée est réalisée et le programme saute l’instruction qui suit le BTFSC dans le programme.Cette façon de programmer peut paraître étrange, mais avec de l’habitude, elle s’avère très pratique et permet de réaliser des programmes compacts et performants. Les 35 instructions sont donc les suivantes : ADDLW ( Add Literal to W ) syntaxe : ADDLW k Opération : W+kW Bits d’état du registre STATUS affectés : C,DC,Z on ajoute au registre de travail la valeur k et on place le résultat dans le registre de travail W durée : 1 cycle instruction ( 4 cycles d’horloge )ADDWF (Add W to F ) syntaxe : ADDWF f,d Opération : W+ff si d=1 ou W+fW si d=0 Bits d’état du registre STATUS affectés : C,DC,Z on ajoute le contenu de W et le contenu de f et on place le résultat dans f si d=1 ou dans W si d=0 durée : 1 cycle instruction ( 4 cycles d’horloge ) ANDLW ( And Literal and W ) syntaxe : ANDLW k Opération : W ET kW Bit d’état du registre STATUS affecté : Z on effectue un ET logique entre le contenu de W et le littéral k , on place le résultat dans W durée : 1 cycle instruction ( 4 cycles d’horloge ) ANDWF ( And W with F ) syntaxe : ANDWF f,d Opération : W ET ff si d=1 ou W ET fW si d=0 Bit d’état du registre STATUS affecté :Zon effectue un ET logique entre le contenu de W et le contenu de f , on place le résultat dans W si d=0 ou dans f si d=1 durée : 1 cycle instruction ( 4 cycles d’horloge ) BCF ( Bit Clear F ) syntaxe : BCF f,b Opération : 0b(f) Bits d’état du registre STATUS affectés :aucuns on met à 0 le bit b du registre f durée : 1 cycle instruction ( 4 cycles d’horloge )BSF ( Bit Set F ) syntaxe : BSF f,b Opération : 1b(f) Bits d’état du registre STATUS affectés :aucuns on met à 1 le bit b du registre f durée : 1 cycle instruction ( 4 cycles d’horloge ) BTFSC ( Bit Test , Skip if Clear ) syntaxe : BTFSC f,b Opération : saut de l’instruction qui suit si b(f)=0 Bits d’état du registre STATUS affectés :aucuns Si le bit b de f est nul, l’instruction qui suit celle-ci est ignorée et traitée comme un NOP. Dans ce cas et dans ce cas seulement, l’instruction BTFSC demande deux cycle s pour s’exécuter. durée : 1 cycle instruction ( 4 cycles d’horloge ) ou 2 cycles BTFSS ( Bit Test , Skip if Set ) syntaxe : BTFSS f,b Opération : saut de l’instruction qui suit si b(f)=1 Bits d’état du registre STATUS affectés :aucunsSi le bit b de f est à 1, l’instruction qui suit celle-ci est ignorée et traitée comme un NOP. Dans ce cas et dans ce cas seulement, l’instruction BTFSS demande deux cycles pour s’exécuter. durée : 1 cycle instruction ( 4 cycles d’horloge ) ou 2 cycles CALL (subroutine Call) syntaxe : CALL label Bits d’état du registre STATUS affectés :aucuns On sauvegarde l’adresse de retour dans la pile puis on appelle le sous programme définit avec l’étiquette label durée : 2 cycles instruction ( 8 cycles d’horloge )CLRF ( Clear F ) syntaxe : CLRF f Opération : 0F Bit d’état du registre STATUS affecté :Z On met le contenu du registre f à 0 et on positionne Z durée : 1 cycle instruction ( 4 cycles d’horloge ) CLRW ( Clear W ) syntaxe : CLRW Opération : 0W Bit d’état du registre STATUS affecté :Z On met le contenu du registre W à 0 et on positionne Z durée : 1 cycle instruction ( 4 cycles d’horloge ) CLRWDT ( Clear WatchDog Timer ) syntaxe : CLRWDT Opération : 0WDT et 0pré diviseur du Timer On met le contenu du registre du timer chien de garde à 0 ainsi que le pré diviseur durée : 1 cycle instruction ( 4 cycles d’horloge )COMF ( Complement F ) syntaxe : COMF f,d opération :/ff si d=1 ou /fW si d=0 Bit d’état du registre STATUS affecté :Z On complémente le contenu du registre f bit à bit , le résultat est placé dans f si d=1 , dans W si d=0 . durée : 1 cycle instruction ( 4 cycles d’horloge )DECF ( Decrement F ) syntaxe : DECF f,d opération :f-1f si d=1 ou f-1W si d=0 Bit d’état du registre STATUS affecté :Z On diminue le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0 ( dans ce cas f reste inchangé ). durée : 1 cycle instruction ( 4 cycles d’horloge ) DECFSZ ( Decrement F ,Skip if Zero ) syntaxe : DECFSZ f,d opération :f-1f si d=1 ou f-1W si d=0 et saut si f-1=0 Bit d’état du registre STATUS affecté :aucun On diminue le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0 (dans ce cas f reste inchangé).Si le résultat est nul, l’instruction suivante est ignorée et dans ce cas, cette instruction dure deux cycles. durée : 1 cycle instruction ( 4 cycles d’horloge ) ou 2 cycles GOTO ( branchement inconditionnel ) syntaxe : GOTO label Bit d’état du registre STATUS affecté :aucunOn effectue un saut dans le programme pour aller à l’adresse pointé par le label précisé dans GOTO Durée : 2 cycles ( 8 cycles d’horloge ) INCF (Increment F) syntaxe : INCF f,d opération :f+1f si d=1 ou f+1W si d=0 Bit d’état du registre STATUS affecté :Z On augment le contenu du registre f d’une unité, le résultat est placé dans f si d=1 , dans W si d=0 ( dans ce cas f reste inchangé ). durée : 1 cycle instruction ( 4 cycles d’horloge )INCFSZ ( Increment F , Skip if Zero ) syntaxe : INCFSZ f,d opération :f+1f si d=1 ou f+1W si d=0 et saut si f-1=0 Bit d’état du registre STATUS affecté :aucun On augmente le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0 (dans ce cas f reste inchangé).Si le résultat est nul, l’instruction suivante est ignorée et dans ce cas, cette instruction dure deux cycles. durée : 1 cycle instruction ( 4 cycles d’horloge ) ou 2 cycles IORLW ( Inclusive Or Literal with W ) syntaxe: IORLW k opération: W OU k W Bit d’état du registre STATUS affecté :Z On effectue un OU logique entre le contenu de W et le littéral k , le résultat est placé dans W . durée : 1 cycle instruction ( 4 cycles d’horloge ) IORWF ( Inclusive Or W with F ) syntaxe : IORWF f,d opération :W OU ff si d=1 ou W OU fW si d=0 Bit d’état du registre STATUS affecté :ZOn effectue un OU entre le contenu de W et le contenu de f , on place le résultat dans f si d=1, dans W si d=0 durée : 1 cycle instruction ( 4 cycles d’horloge ) MOVF ( Move F ) syntaxe : MOVF f,d opération :ff si d=1 ou fW si d=0 Bit d’état du registre STATUS affecté :Z On déplace le contenu de f dans f si d=1 ou de f dans W si d=0 . Attention, le déplacement de f dans f semble à priori inutile, mais il permet en fait de tester le contenu de f par rapport à 0 et de positionner le bit Z durée : 1 cycle instruction ( 4 cycles d’horloge )MOVLW ( Move Literal to W ) syntaxe : MOVLW k opération :kW Bit d’état du registre STATUS affecté :aucun On charge le contenu de W avec le littéral k durée : 1 cycle instruction ( 4 cycles d’horloge ) MOVWF ( Move W to F ) syntaxe : MOVWF f opération :Wf Bit d’état du registre STATUS affecté :aucun On charge le contenu de f avec le contenu de W durée : 1 cycle instruction ( 4 cycles d’horloge ) NOP ( No Operation ) syntaxe: NOP opération: néant Bit d’état du registre STATUS affecté :aucun On ne fait que consommer du temps machine ( un cycle dans ce cas )durée : 1 cycle instruction ( 4 cycles d’horloge ) RETFIE ( Return From Interrupt ) syntaxe : RETFIE opération :Pile PC Bit d’état du registre STATUS affecté :aucun On charge le compteur ordinal avec la valeur qui se trouve au sommet de la pile pour revenir au programme principal lorsque l’exécution du sous programme est terminée. durée : 2 cycles instruction ( 8 cycles d’horloge )RETLW ( Return Literal to W ) syntaxe : RETLW k opération :kW , PilePC Bit d’état du registre STATUS affecté :aucun On charge le contenu de W avec le littéral k puis on charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme . durée : 2 cycles instruction ( 8 cycles d’horloge ) RETURN ( Return from subroutine ) syntaxe : RETURN opération :PilePC Bit d’état du registre STATUS affecté :aucun On charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme. C’est un RETLW simplifié . durée : 2 cycles instruction ( 8 cycles d’horloge ) RLF ( Rotate Left F through carry ) syntaxe : RLF f,d opération : 7 6 5 4 3 2 1 0 C Registre fBit d’état du registre STATUS affecté :C On effectue une rotation à gauche de un bit du contenu du registre f en passant par le bit de retenu C . Si d=1 le résultat est placé dans f , si d=0 , le résultat est placé dans W durée : 1 cycle instruction ( 4 cycles d’horloge )RRF ( Rotate Right F through carry ) syntaxe : RRF f,d opération : Bit d’état du registre STATUS affecté :C On effectue une rotation à droite de un bit du contenu du registre f en passant par le bit de retenu C. Si d=1 le résultat est placé dans f , si d=0, le résultat est placé dans W durée : 1 cycle instruction ( 4 cycles d’horloge ) SLEEP ( Sleep ) syntaxe : SLEEP opération :0PD, 1T0, 0WDT , 0 pré diviseur On place le circuit en mode sommeil avec arrêt de l’oscillateur. Cette commande est à utiliser avec précaution, elle nécessite la connaissance du mode sommeil. SUBLW ( Substract W from Literal ) syntaxe : SUBLW k opération :k-WW Bits d’état du registre STATUS affectés :C,DC,Z 7 6 5 4 3 2 1 0 C Registre fOn soustrait le contenu du registre W du littéral k et on place le résultat dans W ( soustraction par la méthode du complément à 2 ). durée : 1 cycle instruction ( 4 cycles d’horloge ) SUBWF ( Substract W from F ) syntaxe : SUBWF f,d opération :f-WW si d=0 ou f-Wf si d=1 Bits d’état du registre STATUS affectés :C,DC,Z On soustrait le contenu du registre W du contenu du registre f et on place le résultat dans W si d=0, ou dans f si d=1 ( soustraction par la méthode du complément à 2 ). durée : 1 cycle instruction ( 4 cycles d’horloge )SWAPF ( Swap F ) syntaxe : SWAPF f,d opération :f(0-3)f(4-7) et f(4-7)f(0-3) résultat dans W ou f selon d Bit d’état du registre STATUS affecté :aucun On échange les quatre bits de poids forts avec les quatre bits de poids faibles et on place le résultat dans W si d=0 , ou dans f si d=1 durée : 1 cycle instruction ( 4 cycles d’horloge ) XORLW ( Exclusive Or Literal with W ) syntaxe : XORLW k opération :W OU EXCLUSIF kW Bit d’état du registre STATUS affecté :Z On effectue un OU Exclusif entre W et le littéral k, le résultat est placé dans W durée : 1 cycle instruction ( 4 cycles d’horloge ) XORWF ( Exclusive Or W with F) syntaxe : XORWF f,d opération :W OU EXCLUSIF fW si d=0 ou W OU EXCLUSIF ff si d=1 Bit d’état du registre STATUS affecté :Z On effectue un OU Exclusif entre W et le contenu de f , le résultat est placé dans W si d=0, sinon il est placé dans f .durée : 1 cycle instruction ( 4 cycles d’horloge )JEU D'INSTRUCTIONV Petite application Afin de mettre en pratique des notions encore toutes fraîches, il peut être intéressant de clôturer ce cours par une séance de travaux dirigés. Commençons par le commencement avec un petit exemple qui n'a d'autre intérêt que d'appréhender de façon simple un premier programme écrit en assembleur. Voici donc un exemple de programme dont la seule fonction et de recopier sur l a patte RA0 (donc programmée en sortie) l'état de la patte RB0 ( donc programmée en entrée). Sur ce petit exemple, on peut alors aborder les notions d'algorithme et de structure de programmation avec les instructions spécifique aux logiciels de compilation (org, equ, end , les étiquettes, etc…). ;définition des différentes étiquettes ;pour une structure de programme plus claire ;equ n'est pas une instruction PIC mais sert ;au compilateur statusequ h'0003' ;adresse du registre (page 0) portaequ h'0005';adresse porta (page0) portbequ h'0006';adresse port b (page 0) trisa equ h'0085';adresse trisa (page 1) trisb equ h'0086';adresse trisb (page 1) RA0 equ h'0000';rang du bit RA0 dans porta RB0 equ h'0000';rang du bit RB0 dans portb RP0 equ h'0005';rang du bit RP0 dans status ;début du programme indiqué par l'instruction ;org qui est nécessaire au compilateur org 0000 ;début du programme ;nécessairement à l'adresse ;0000 pour tous les PICs ;initialisation de RA0 en sortie bsf status,RP0;passage en page 1 de début initialisation de RA0 en sortie initialisation du portB en entrée RB0=0? non oui RA0=0 RA0=1 Algorithme du programme;la mémoire de données bcf trisa,RA0 ;mise à 0 de RA0 (sortie) ;initialisation de RB0 en entrée bsf trisb,RB0 ;mise à 1 de RB0 (entrée) ,mais inutile en pratique ;car réalisé après un RESET ;programme principal ;test de RB0 et recopie en RA0 bouc bcf status,RP0;retour en page 0 btfss portb,RB0 ;test RB0 saute l'instruction si RB0=1 goto eteind ;va à l'étiquette eteint goto allum ;va à l'étiquette allum ;mise à 0 de RA0 eteintbcf porta,RA0 ;mise à 0 de RA0 goto bouc ;retour à la boucle de test ;mise à 1 de RA0 allumbsf porta,RA0 ;mise à 1 de RA0 goto bouc ;retour à la boucle de test ;fin du programme ;utilisé par le compilateur End16 RA7/OSC1/CLKIN RB0/INT 6 RB1/RX/DT 7 RB2/TX/CK 8 RB3/CCP1 9 RB4 10 RB5 11 RB6/T1OSO/T1CKI 12 RB7/T1OSI 13 RA0/AN0 17 RA1/AN1 18 RA2/AN2/VREF 1 RA3/AN3/CMP1 2 RA4/T0CKI/CMP2 3 15 RA6/OSC2/CLKOUT 4 RA5/MCLR U1 PIC16F628A 0 0 D1 D2 D3 LED D4 D5 LED-GREEN D6 LED-GREEN D7 D8 R1 220 R2 220 R3 R4 220 220 R5 220 R6 220 R7 R8 220 LES MICROCONTRÔLEURS
Activité de découverte: La signalisation lumineuse d’un robot est assurée par une série de 8 diodes LED de couleur rouge, ces diodes permettent à l’utilisateur de connaitre l’état de robot : Le fonctionnement des diodes est le suivant : À l’arrêt les diodes sont toutes éteintes. En fonctionnement le robot allume les diodes l’une après l’autre (chenillard). Lorsque sa batterie est à la limite de la décharge, le robot effectue un clignotement des diodes. Durant la charge de la batterie toutes les diodes sont constamment allumées. On peut mettre en œuvre la fonction signalisation lumineuse du robot en utilisant un microcontrôleur comme suit :Tableau résumant le fonctionnement des diodes Qu’appelle t-on le circuit U1 ? : Microcontrôleur PIC 16F628A Le nombre de broches d'entrée/sortie est : 16 PORTA RA1 RA0 Etat du robot Etat des diodes 0 0 0 Arrêt Eteintes 1 0 1 Batterie à la limite de décharge Clignotent 2 1 0 Fonctionne chenillard 3 1 1 Charge de la batterie Allumées Quelles sont les broches qui sont utilisées comme entrée ? : RA0 et RA1 Quelles sont les broches qui sont utilisées comme sorties ? : RB0 ,RB1,RB2,RB3,RB4,RB5,RB6,RB7 Les registres TRIS ont pour fonction de configurer les broches d'entrées/sorties des ports. Chaque broche de chaque port peut être utilisée en entrée ou en sortie : Un bit à 0 programme la broche correspondante en sortie. Un bit à 1 programme la broche correspondante en entrée. Exemple : Remplir le tableau suivant : Déduire alors les valeurs des TRISA et TRISB du microcontrôleur pour l’exemple précédent : TRISA 1 1 1 1 1 1 1 1 = (111111111 .)Bin = (FF)HEX = ( 255 )10 TRISB 1 0 1 0 0 1 1 0 = (C6 )HEX = (198 )10 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 entrée sortie entrée sortie sortie entrée entrée sortieTRISB 0 0 0 0 0 0 0 0 = (00000000 .)Bin = (00)HEX = ( 0 )10 Mise en œuvre d’une application à base de microcontrôleur : Cette opération consiste à traduire un cahier des charges en un programme codé, puis à le transférer vers la mémoire programme du microcontrôleur. Divers outils de développement sont mis à la disposition du concepteur. Parmi ces outils, on cite : - La programmation graphique, elle est basée sur l’interconnexion graphique de symbole ou modules « algorigrammes, grafcet et autres… ». - La programmation mettant en œuvre un langage évolué tels que langage C, Basic, Pascal,… Que ce soit par la méthode graphique ou en langage évolué, l’écriture du programme ainsi que sa mise au point doivent suivre le diagramme suivant : I - PROGRAMMATION EN MIKROPASCAL : 1 - Structure d’un programme : Cahier des Charges Programmation graphique : Organigramme Compilateur Fichier.hex Simulation (ISIS) Transfert Ic prog, Winpic Programmation en langage évolué : PascalUn programme est un texte que le compilateur va traduire en fichier hexadécimal. Le texte d'un programme contient au moins trois parties. a- L'entête : commence par le mot réservé " Program " suivi par le nom du projet. b- Les déclarations : On déclare les variables, les Procédures et les fonctions utilisées dans le programme. c- Le corps du programme : Commence par " Begin " et se termine par "End " suivi d'un point final. Entre "Begin" et "End" se trouvent les instructions à effectuer par le programme. 2 - Les règles de bases : a- Toutes instructions ou actions se terminent par un point virgule ; b- Une ligne de commentaires doit commencer par "{" et se terminer par "}" ou commence par "//". c- Un bloc d'instructions commence par "Begin" et se termine par "End". 3 - Les types de variables utilisées en Mikropascal : Algorithmique Langage PASCAL Commentaires Algoritme Nom Algorithme ; Variables Nom variable : Type ; Constantes Nom constante : Type =valeur ; Début …….. …….. Fin. Program Nom programme ; Var Nom variable : Type ; Const Nom constante : Type =valeur ; Begin …….. …….. End. // Entête // Déclaration // Programme principal4 - Les bases du compilateur Mikropascal : Le décimal A = 12 L’hexadécimal A = $0C ou A = 0x0C Le binaire A = %0001100 5 - les opérateurs arithmétiques et logiques : 6 - Les structures usuelles : a- L'affectation : C'est l'action d'attribuer une valeur à une variable. Type Désignation Taille Rang Bit bit 1 bit 0 ou 1 Bit registre sbit 1 bit 0 ou 1 octet byte 8 bits 0 - 255 Caractère ASCII char 8 bits 0 - 255 mot word 16 bits 0 - 65535 Octet signé short 8 bits -128 à +127 Entier integer 16 bits -32768 à +32767 Entier long longint 32 bits -2147483648 à +214783647 Réel real 32 bits ±1.17549435082 * 10-38 à ±6.80564774407 * 1038 Tableau Array[n]of type n éléments Rang du type Chaîne de caractères String[N] N caractères 0 - 255 Opérateurs arithmétiques Opérateurs de comparaison Opérateurs logiques Opérateur opération Opérateur Opération Opérateur Opération + Addition = Egalité AND ET - Soustraction < > Différent OR OU * Multiplication > Supérieur XOR OU exclusif / Division < inférieur NOT NON div Division entière <= Inférieur ou égale SHL Décalage à gauche mod Reste de la division >= Supérieur ou égale SHR Décalage à droite Langage graphique Langage algorithmique Langage PASCAL a = b+c a b+c a : = b+cb- Les structures alternatives : c- Les structures itératives ou répétitives : Langage graphique Langage algorithmique Langage PASCAL i : entier ; POUR i variant de « valeur initiale » i : integer ; FOR i := « valeur initiale » i=valeur initiale Langage graphique Langage algorithmique Langage PASCAL SI condition Alors DEBUT traitement ; FINSI ; IF condition THEN BEGIN traitement ; END ; SI condition Alors DEBUT traitement 1 ; FIN SINON DEBUT traitement 2 ; FINSI ; IF condition THEN BEGIN Traitement 1 ; END ELSE BEGIN traitement 2 ; END; SELON expression Valeur 1 : action1 ; Valeur 2 : action2 ; ………………… ; Valeur n : action n ; Autrement : action 0 ; FINSELON ; CASE expression OF Valeur 1 : action1 ; Valeur 2 : action2 ; ………………… ; Valeur n : action n ; ELSE : action 0 ; END ; non Valeur 1 Action 1 non oui Valeur 2 non oui Action 2 Valeur 3 oui Action 3 Condition Traitement non oui Condition Traitement 1 Traitement 2 non ouiII – APPLICATIONS À BASE DE PIC : Activité N°1: Equations Objectif : L'objectif de cette activité est de traduire des équations logiques d’un système combinatoire en un programme en Mikropascal.16 OSC1/CLKIN RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 15 OSC2/CLKOUT 4 MCLR U1 PIC16F84A 0 ? ? ? ? ? A B D S1 S2 S3 S4 S5 0 0 Lancer le logiciel mikropascal pro et créez un nouveau projet : 1- Dans le menu principal cliquer sur «Project» par la suite sur «New project» 2- Une fenêtre «New Project Wizard» apparait, cliquer sur « Next ». 3- Dans le champ «Project Name» Saisir le nom du projet Par exemple : activite1, ce nom ne doit pas contenir des caractères accentués ou des espaces. 1 2 S1= A+B S2 = B.D S3 = A B S4 = A .B + D S5 = A B Affectation des entrées /sorties Entrées Sorties A RA0 S1 RB0 B RA1 S2 RB1 D RA2 S3 RB2 S4 RB3 S5 RB44- Cliquer sur le bouton « Browse » et sélectionner un répertoire sur le disque de votre PC, ce répertoire contiendra tous les fichiers de votre projet. 5- Sélectionner le type du microcontrôleur : P16F84A 6- Fixer la valeur de l’horloge du microcontrôleur : 4MHz. 7- Cliquer sur le bouton « Next » 8- Cliquer sur le bouton « Next » 9- Cocher la case « IncludeAll » cette option permet d’utiliserles fonctions prédéfinies de Mikropascal 8 9 10 3 5 6 7 P16F84A10- Cliquer sur le bouton « Next 11- Cocher la case « Open Edit Project window to set Configuration bits ». 12- Cliquer sur le bouton « Finish ». 11 1213- Assurer les réglages des bits de configurations comme indiqué dans la figure suivante. 14- Cliquer sur le bouton « OK ». 15- Compléter puis saisir le programme ci-contre program equations; // Nom du programme var // déclaration des variables 13 14A: sbit at RA0_bit; // La variable A est un bit affecté à la broche RA0 B: sbit at RA1_bit; // La variable B est un bit affecté à la broche RA1 D: sbit at RA2_bit; // La variable D est un bit affecté à la broche RA2 S1: sbit at RB0_bit; // La variable S1 est un bit affecté à la broche RB0 S2: sbit at RB1_bit; S3: sbit at RB2_bit; S4: sbit at RB3_bit; S5: sbit at RB4_bit; begin TRISA:= $FF; // Tout le portA est configuré en entrée TRISB:= 0; // Tout le portB est configuré en sortie PORTB:= 0; // Initialisation des sorties while true do // Boucle infinie begin S1:= A Or B; // equation de S1 S2:= B And D; S3:= A xor B ; S4:= (not A) and B or D; S5:= not (A xor B); end; end.16 OSC1/CLKIN RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 15 OSC2/CLKOUT 4 MCLR U1 PIC16F84A 0 ? ? ? ? ? A B D S1 S2 S3 S4 S5 0 0 16- Compiler le projet et vérifier que la compilation a réussi : 17-Message «Compiled Successfuly » dans l’onglet messages. 18- Lancer le logiciel de simulation et saisir le schéma de simulation. 19- Dans la fenêtre « Edit Component » indiquer le nom et le chemin du fichier.hex 16 1720- Régler l’horloge à 4MHz 21- Lancer la simulation et vérifier le fonctionnement des sorties. 22- Lancer le logiciel WinPic800. 23- Cliquer sur l’icône de détection du type du microcontrôleur. 19 20 22 23 24 2524- Dans le menu principal cliquer sur : Fichier … Ouvrir … equations.hex 25- Programmer le microcontrôleur PIC16F84A Activité N°2: Compteur à base de PIC16F876A On souhaite réaliser un compteur modulo 10 avec le PIC 16F876A suivant ce montage : Traduire l’algorigramme suivant en un programme micropascal. R1 1k 7 A QA 13 1 B QB 12 2 C QC 11 6 D QD 10 4 BI/RBO QE 9 5 RBI QF 15 3 LT QG 14 U2 7447 2 RA0/AN0 3 RA1/AN1 4 RA2/AN2/VREF-/CVREF 6 RA4/T0CKI/C1OUT 7 RA5/AN4/SS/C2OUT 9 OSC1/CLKIN 10 OSC2/CLKOUT RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD RB6/PGC RB5 RB4 28 27 26 25 RB3/PGM RB0/INT RB2 RB1 24 23 22 21 RC4/SDI/SDA RC7/RX/DT RC6/TX/CK RC5/SDO 18 17 16 15 5 RA3/AN3/VREF+ RC0/T1OSO/T1CKI 11 1 MCLR/Vpp/THV U1 PIC16F876A Q1 2N2222 program ACTIVITE2; Var N:byte; // N est une variable de type octet beginActivité N° 3: Affichage multiplexéR3 1k R2 1k R1 1k 7 A QA 13 1 B QB 12 2 C QC 11 6 D QD 10 4 BI/RBO QE 9 5 RBI QF 15 3 LT QG 14 U4 7447 T1 2N2222 T2 2N2222 T3 2N2222 16 OSC1/CLKIN RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 15 OSC2/CLKOUT 4 MCLR U1 PIC16F84A Vcc Afficheurs à anodes communes Afficheurs 3 Afficheurs 2 Afficheurs 1 Décodeur On désire afficher un nombre formé de 3 chiffres exemple 932 en utilisant 3 afficheurs à 7 segments et un seul décodeur, pour cela on utilise un microcontrôleur 16F84A qui réalise le multiplexage de l’affichage. Le décodeur utilisé est le 7447 dont les sorties sont activées à niveau bas donc les afficheurs sont à anodes communes. Les bornes communes des afficheurs « anodes » sont commandées à travers des transistors NPN de telle sorte que lorsque un transistor est saturé, la borne commune de l’afficheur est alors reliée au +Vcc donc l’afficheur correspondant fon ctionne. Le principe est de placer le nombre à afficher sur le décodeur puis commander le transistor correspondant pour l’afficher. Schéma du montage : Si B=1 le transistor est saturé Si B=0 le transistor est bloqué Les transistors utilisés pour la commande des afficheurs sont de type NPN. C B E C E C E1°) Compléter le tableau suivant : 2°) Compléter puis saisir le programme ci-contre puis simuler et vérifier le fonctionnement : program affichage_multiplexe; begin trisb:=$F0 ; // RB0,RB1,RB2,RB3 sorties trisa:=$18 ; // RA0,RA1,RA2 sorties, RA3,RA4 entrées porta:=0; // état initial du porta While true do begin porta:=%000 ; // aucun afficheur delay_ms(1); portb:=2; // placer le nombre de l’unité porta:=%001; // Commander le 1er afficheur Transistor : bloqué ou saturé Afficheur commandé : oui ou non Temporisation Nombre à afficher T1 T2 T3 Afficheur 1 Afficheur 2 Afficheur 3 bloqué bloqué bloqué non non non 1ms 2 saturé bloqué bloqué oui non non 10ms bloqué bloqué bloqué non non non 1ms 3 bloqué saturé bloqué non oui non 10ms bloqué bloqué bloqué non non non 1ms 9 bloqué bloqué saturé non non oui 10ms porta:=%000; // aucun afficheur delay_ms(1); portb:=3 ; // placer le nombre de dizaine porta:=%010 ; // Commander le 2éme afficheur delay_ms(10) ; porta:=%000; // aucun afficheur delay_ms(1); portb:=9 ; // placer le nombre de centaine porta:=%100; // Commander le 3 éme afficheur delay_ms(10); end; end.delay_ms(10); Activité N°4: Compteur modulo 1000 avec affichage multiplexé Compléter puis saisir le programme ci-contre puis simuler et vérifier le fonctionnement : program compteur_modulo1000_affichage_multiplexe; var i:word; var j:byte; var unite,dizaine,centaine:byte; begin trisb:=$F0 ; // RB0,RB1,RB2,RB3 sorties trisa:=$18 ; // RA0,RA1,RA2 sorties RA3,RA4 entrées porta:=0 ; // état initial du porta While true do begin for i:=0 to 999 do begin unite:= i mod 10 ; // identifier le chiffre de l’unité dizaine:= (i div 10) mod 10 ; // identifier le chiffre de dizaine centaine:= i div 100 ; // identifier le chiffre de centaine for j:=1 to 28 do begin Comment identifier les chiffres unité, dizaine, centaine et millier d’un nombre ? Exemple :N=9573 N=9573 Unité de N 3 N mod 10 Dizaine de N 7 (N div 10) mod 10 Centaine de N 5 (N div 100) mod 10 Millier de N 9 N div 1000porta:=%000; delay_ms(1); portb:=unite; porta:=%001; // Commander le premier afficheur delay_ms(10); porta:=%000; delay_ms(1); portb:=dizaine; porta:=%010; // Commander le 2éme afficheur delay_ms(10); porta:=%000; delay_ms(1); portb:=centaine; porta:=%100; delay_ms(10); end; end; end; end. Activité N°5: signalisation lumineuse d’un robot (voir activité de découverte) Compléter puis simuler le programme suivant : program activité5;var i:byte; // declaration d’une variable i de type octet begin TRISB:= 0 ; // Configuration du port B comme sortie TRISA:=$FF; // Configuration du port A comme entrée PORTB:=0; // initialisation du port B CMCON:=$07; // Désactivation du comparateur, PORTA numérique While true do // Boucle infinie begin if PORTA = 0 then PORTB:= 0; // Arrêt toutes les diodes sont éteintes if PORTA = 3 then PORTB:=$ FF; // Charge de la batterie toutes sont allumées if PORTA = 1 then // Batterie à la limite de décharge clignotement des diodes begin PORTB:=$ FF;delay_ms(100) ; PORTB:=$00 ; delay_ms(100) ; end; if PORTA = 2 then // fonctionnement normal chenillard begin PORTB:=%10000000; for i:=1 to 8 do // Boucle pour begin delay_ms(100); PORTB:=PORTB shr 1 ; // décalage à droite de 1 bit du PORTB end; end; end; end. Activité N°5 bis : signalisation lumineuse d’un robot (Utilisation des procédures)program Activite 5bis; var diodes: byte at portB; // On déclare une variable diodes de type octet affecté au PORTB pour les sorties entrees: byte at portA; // On déclare une variable entrées de type octet affecté au PORTA pour les entrées procedure marche(const etat:byte); // déclaration d’une procédure qui porte le nom marche begin // la procédure marche reçoit du programme principal une constante etat de type octet diodes:=etat; end; procedure chenillard(); // déclaration d’une procédure qui porte le nom chenillard var i:byte; // On déclare une variable i de type octet begin diodes:=%10000000; // cette procédure allume les diodes l’une après l’autre (chenillard)for i:=1 to 8 do begin delay_ms(100); diodes:=diodes shr 1 ; end; end; procedure clignotant(); // déclaration d’une procédure qui porte le nom clignotant begin marche($FF);delay_ms(100); // tous les diodes sont allumées pendant 100ms marche($00);delay_ms(100); // tous les diodes sont éteintes pendant 100ms end; begin trisb:=$00;TRISA:=$FF; // Configuration du PORTB en sortie et PORTA en entées cmcon:=$07; // PORTA numérique désactivation du comparateurs analogiques while true do // boucle infinie begin Programme principalif entrees=0 then marche(0); // Appel de la procédure marche qui reçoit la valeur 0 « diodes éteintes » if entrees=1 then clignotant(); // Appel de la procédure clignotant if entrees=2 then chenillard(); // Appel de la procédure chenillard if entrees=3 then marche($FF); //Appel de la procédure marche qui reçoit la valeur 255 « diodes allumées » end; end.
ActivitéN°6 (Grafcet1) Objectif : L 'objectif de cette activité est de traduire un grafcet d’un point de vue partie commande en un algorithme puis le traduire en programme en Mikropascal. GRAFCET d’un point de vue P.C On vous donne le tableau d’affectation des entrées /sorties Pour le microcontrôleur PIC 16F84A : Entrées Sorties Capteurs microcont Broche du rôleur Préactionneurs microcontrôleur Broche du Dcy RB0 KM1 RA0 L11 RB1 KM2 RA1 a RB2 KM3 RA2 L10 RB3 0 1 2 3 Dcy KM1 L11 KM2 a KM3 L10 Compléter l’algorithme. Compléter le programme en Mikropascal. Ecrire le programme, le compiler et vérifier le fonctionnement : Algorithme Programme Algorithme grafcet_1; Variables : Dcy :un bit affecté à RB0 ; L11 :un bit affecté à RB1 ; a : un bit affecté à RB2 ; L10 :un bit affecté à RB3 ; KM1 :un bit affecté à RA0 ; KM2 :un bit affecté à RA1 ; KM3 :un bit affecté à RA2 ; X0, X1, X2, X3:bit ; début trisa $00; trisb $FF; KM1 0 ; KM2 0 ;KM3 0 ; X0 1; X1 0; X2 0; X3 0; Tant que (vrai) faire début si (X0=1) ET (Dcy=1) alors début X0 0; X1 1; finsi; si (X1=1) ET ( L11 =1) alors début X1 0; X2 1; finsi; si (X2=1) ET ( a =1) alors début X2 0; X3 1; finsi; si (X3=1) ET ( L10 =1) alors début X3 0; X0 1; finsi; si (X1=1) alors KM1 1 sinon KM1 0 si (X2=1) alors KM2 1 sinon KM2 0 si(X3=1) alors KM3 1 sinon KM3 0 finfaire; fin. program grafcet_1; var Dcy : sbit at RB0_bit ; L11 : sbit at RB1_bit ; a : sbit at RB2_bit ; L10 : sbit at RB3_bit ; KM1 :sbit at RA0_bit ; KM2 :sbit at PORTA.1 ; KM3 :sbit at PORTA.2; X0, X1, X2, X3:bit; begin trisa := $00; trisb := $FF; KM1 := 0 ; KM2 := 0 ;KM3 := 0 ; // initialisation des sorties X0 :=1; X1 := 0; X2 := 0; X3 := 0; // initialisation des étapes while true do // boucle infinie begin if (X0=1) and (Dcy=1) then begin // désactivation: étape 0 X0 := 0; X1 := 1; // activation: étape1 end; if (X1=1) and ( L11 =1) then begin X1 := 0; X2 :=1; end; if (X2=1) and ( a=1 ) then begin X2 := 0; X3 :=1; end; if (X3=1) and ( L10=1 ) then begin X3 := 0; X0 :=1; end; if (X1=1) then KM1:= 1else KM1:= 0; // sortie: KM1 if (X2=1) then KM2:= 1else KM2:= 0; // sortie: KM2 if (X3=1) then KM3:= 1else KM3:= 0; // sortie: KM3 end; end.16 OSC1/CLKIN RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 15 OSC2/CLKOUT 4 MCLR U1 PIC16F84A +5V RAZ X1 CRYSTAL FREQ=4MHz C11 15pF C2 15pF R2 10k +5V DCY SW-SPST-MOM L11 L10 10k 10k 10k 10k ? KM1 ? KM2 ? KM3 a
Activité N° 7 (Grafcet2) On vous donne le tableau d’affectation des entrées /sorties Pour le microcontrôleur PIC 16F876A : Entrées Sorties Capteurs microcontrôleur Broche du Préactionneurs microcontrôleur Broche du m RA0 KM1 RB0 a RA1 KM2 RB1 b RA2 AV RB2 AR RB3 0 1 2 3 m KM1 a T t / 2 / 5s b KM2 AV KM1 KM2 AR+5V 10k 10k 10k ? KM1 ? KM2 ? AV a 2 RA0/AN0 3 RA1/AN1 4 RA2/AN2/VREF-/CVREF 6 RA4/T0CKI/C1OUT 7 RA5/AN4/SS/C2OUT 9 OSC1/CLKIN 10 OSC2/CLKOUT RC1/T1OSI/CCP2 12 RC2/CCP1 13 RC3/SCK/SCL 14 RB7/PGD 28 RB6/PGC 27 RB5 26 RB4 25 RB3/PGM 24 RB2 23 RB1 22 RB0/INT 21 RC7/RX/DT 18 RC6/TX/CK 17 RC5/SDO 16 RC4/SDI/SDA 15 5 RA3/AN3/VREF+ RC0/T1OSO/T1CKI 11 1 MCLR/Vpp/THV U1 PIC16F876A m b ? AR Compléter le programme en Mikropascal. Algorithme Programme program grafcet_2; var m: sbit at RA0_bit ; a: sbit at RA1_bit ; b: sbit at RA2_bit ; KM1 Algorithme grafcet_2; variables m: un bit du registre PORTA affecté à RA0 ; a: un bit du registre PORTAaffecté à RA1 ; b: un bit du registre PORTA affecté à RA2 ; Activité 8: GRAFCET3 (séquences multiples) : Chariot de soudage mobile sur rail fixePrésentation : Un appui sur le bouton poussoir «m» provoque le déplacement du chariot et active la torche de soudage. Le chariot effectue 4 cycles de va et vient puis s’arrête. Entrées Sorties Désignation microcontrôleur Broche du Désignation Préactionneurs microcontrôleur Broche du Mise en marche m RA0 Translation du chariot KM1 RB0 Fin de course droite a1 RA1 Torche de soudage KM2 RB1 Fin de course gauche a0 RA2 Sens avant pour la translation du chariot AV RB2 Sens arrière pour la translation du chariot AR RB3 0 1 2 3 m KM1 a1 KM2 AV KM1 CT=0 AR a0 CT= CT + 1 CT=4 CT<4 10k +5V ? KM1 ? KM2 ? AV m ? AR a a 16 OSC1/CLKIN RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 15 OSC2/CLKOUT 4 MCLR U2 PIC16F84A 1 0Traduire le GRAFCET d’un point de vue partie commande cidessous en un GRAFCET codé microcontrôleur puis le traduire en programme en Mikropascal. program Grafcet_soudure; var m : sbit at RA0_bit ; a0: sbit at RA2_bit; a1: sbit at RA1_bit ; Grafcet codé PIC 0 1 2 3 RA0 CT=0 CT= CT + 1 CT=4 CT<4 RB0 RB1 RB2 Not RA1 RB0 RB3KM1:sbit at RB0_bit ; KM2:sbit at RB1_bit ; AV:sbit at RB2_bit ; AR: sbit at RB0_bit ; X0,X1,X2,X3:bit; CT:byte; begin trisa := $1F; trisb := $00; KM1:= 0 ;KM2 := 0 ;AV := 0 ;AR := 0 ; X0 :=1; X1 := 0; X2 := 0; X3 := 0; while true do begin if (X0=1) and (m=1) then begin X0 := 0; X1 := 1; end; if (X1=1) and ( a1 = 0) then begin X1 := 0; X2 :=1; end; if (X2=1) and ( a0 = 0 ) then begin X2 := 0; X3 :=1;CT:=CT +1 ;end; if (X3=1) and (CT < 4 ) then begin X3 := 0; X1 :=1; end; if (X3=1) and (CT = 4 ) then begin X3 := 0; X0 :=1;CT:=0; end; if (X1=1) or (X2=1) then KM1:= 1 else KM1:= 0; if (X1=1) then KM2:= 1 else KM2:= 0; if (X1=1) then AV:= 1 else AV:= 0; if (X2=1) then AR:= 1 else AR:= 0; end; end. LE TIMER TMR0 Le registre TMR0 est un compteur programmable de 8 bits (de 0 à 255). La configuration du TMR0 est assurée par le registre OPTION « OPTION_REG » Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RBPU INTEDG TOCS TOSE PSA PS2 PS1 PSOLe TMR0 est incrémenté en permanence soit par : L’horloge interne (fosc/4) « mode TIMER » L’horloge externe appliquée à la broche RA4 du portA « mode compteur » Le choix de l’horloge se fait à laide du bit 5 du registre OPTION_REG « TOCS » TOCS = 0 Horloge interne « mode TIMER » TOCS = 1 Horloge externe « mode COMPTEUR» Dans le cas de l’horloge externe ,le bit 4 « TOSE » du registre OPTION_REG permet de choisir le front sur lequel le TIMER0 s’incrémente : TOSE = 0 incrémentation sur fronts montants TOSE = 1 incrémentation sur fronts descendants
كلمة سر فك الضغط : books-world.net The Unzip Password : books-world.net أتمنى أن تستفيدوا من محتوى الموضوع وأن ينال إعجابكم رابط من موقع عالم الكتب لتنزيل كتاب Les Microcontroleurs رابط مباشر لتنزيل كتاب Les Microcontroleurs 
|
|