You are on page 1of 47

Evaluation programmation Partie 1 : questionnement écrit (9 pages) Partie 2 : questionnement TP (10 pages) Partie 3 : document ressource (4 pages) Partie 4 : extrait

documentation constructeur PIC16F877

Evaluation programmation Partie 1 Questionnement écrit

Siège 406 – Evaluation programmation Questionnement de la partie écrite I Analyse de la version en langage assembleur I.1 Sous programme INIT
Question1 A partir du schéma structurel du PIC16F877, indiquer dans le tableau du document réponse 1, les configurations des différents ports d’entrées/sorties. Indiquer également quel est le signal affecté à chacune des broches. Question2 Par défaut et d’une manière générale, comment sont configurées les broches d’entrées/sorties du PIC16F877 ? Configuration du PORTD : Question3 Ecrire les instructions assembleurs permettant d’accéder à la banque0. Justifier votre réponse. Compléter alors la partie intitulée « sélection de la banque 0 par défaut » du document réponse 2. Question4 Quel est le nom du registre de configuration du PORTD ? Quelle doit être la valeur stockée dans ce registre pour configurer correctement le PORTD. Justifier votre réponse. Question5 Ecrire les instructions assembleurs permettant de configurer le PORTD correctement. Compléter alors la partie intitulée « Configuration du PORTD » du document réponse 2. Question6 En considérant les signaux affectés aux broches du PORTD, indiquer quels devront être leurs états logiques lorsque le système est mis sous tension. Justifier votre réponse. Ecrire les instructions assembleurs permettant d’initialiser correctement ces broches. Compléter la partie intitulée « Configuration du PORTD » du document réponse2. Configuration du PORTA et du PORTD : La particularité de ces entrées est qu’elles peuvent être configurées soit en analogique soit en numérique. Question7 Dans le cas de notre système technique, doit on utiliser ces broches en numériques ou en analogiques. Justifier votre réponse. Question8 D’après la documentation constructeur, quel est le registre permettant de configurer l’utilisation des entrées en analogique ou en numérique. Dans quelle banque se trouve ce registre ?

G BERTHOME

Page 1/9

Siège 406 – Evaluation programmation Questionnement de la partie écrite
Question9 En supposant que le bit ADFM=1, indiquer quelle devra être la valeur de ce registre. Justifier votre réponse. Question10 Ecrire les instructions assembleurs permettant de configurer correctement le PORTA et le PORTE. Compléter la partie intitulée « configuration du PORTA et du PORTE » du document réponse 2.

I.2 Programme principal
On souhaite écrire en langage assembleur, le programme correspondant à l’algorigramme du programme principal (voir document ressource). On utilisera les déclarations du fichier Decla.h pour une lisibilité du programme. Test FC_AV=0 : Dans le fichier de déclarations on a la ligne suivante :
#DEFINE FC_AV PORTE,1

Test VAR_GV=1 : VAR_GV est le bit0 de la variable 8 bits VAR_GRANDE_VIT :
#DEFINE VAR_GV VAR_GRANDE_VIT,0

Test BP_MVT_SENS actifs On décomposera ce test de cette manière.

W=$FF BP_MVT_SENS actifs ? OUI Z=0 ? OUI NON NON PORTC-W

Z est un bit du registre STATUS. Pour tester ce bit on pourra utiliser la syntaxe suivante : « STATUS,Z » Action sur VAR_DEP : VAR_DEP est une variable sur 8 bits.

G BERTHOME

Page 2/9

BP_CONDUCT1=0 et BP_CONDUCT2=0 : Dans le fichier de déclarations on a les lignes suivantes : #DEFINE #DEFINE #DEFINE BP_M BP_CONDUCT1 BP_CONDUCT2 PORTB. -a+1. Question14 En déduire quelle est l’opération à réaliser avec DIR pour mettre à 1 la variable DIR_GLI sans modifier les autres variables.Siège 406 – Evaluation programmation Questionnement de la partie écrite Test IMA_ACC : Dans le fichier de déclarations on a la ligne suivante : #DEFINE IMA_ACC PORTE. II Analyse de la version en langage C II.2 PORTB. Compléter le document réponse 3.3 Question11 Ecrire le programme principal en langage assembleur correspondant à l’algorigramme du programme principal. Justifier toutes vos instructions par des commentaires. -a•1.0 Test BP_M=0. -a+0.3.1 PORTB. Sachant que a correspond à une variable sur 1 bit. Question15 Quelle est l’opération à réaliser avec DIR pour mettre à 0 la variable DIR_GLI sans modifier les autres variables. G BERTHOME Page 3/9 . Question13 Rappeler le résultats des opérations suivantes : -a•0.1 Etude du sous programme « detect_sens » Question12 Définir la sortie DIR (voir description de F1.3 « Détecter le sens de rotation des moteurs »).

Les opérateurs logiques : Opérateur && || ! Fonction ET logique OU logique NON logique Question16 En s’aidant de ce qui a été réalisé jusqu’à présent. DIR_SITE et DIR_DOS. Le résultat de ces tests est binaire : vrai(=« 1 ») ou faux(= « 0 »). Justifier les mises à 1 ou à 0 des variables DIR_GLI.Siège 406 – Evaluation programmation Questionnement de la partie écrite On rappelle les instructions suivantes du langage C : Les opérateurs logiques bit à bit : Ces opérateurs agissent sur des mots binaires. G BERTHOME Page 4/9 . Ils effectuent entre deux mots une opération logique sur les bits de même rang. Opérateur & | ^ ~ >> << Fonction ET OU OU exclusif NON Décalage à droite des bits Décalage à gauche des bits Notation Z=X&Y Z=X|Y Z=X^Y Z=~Y Z=X>>4 (Z prend la valeur de X après le décalage à droite de 4 bits) Z=X<<4 (Z prend la valeur de X après le décalage à gauche de 4 bits) Les opérateurs de tests conditionnels : Ces opérateurs s’adressent uniquement aux opérations de test conditionnel. écrire le sous programme « detect_sens » en langage C. DIR_REHA.

Nous pouvons agir uniquement sur les variables POS_GLI_H et POS_GLI_L. II. G BERTHOME Page 5/9 . Question18 Définir les variables POS_GLI_H et POS_GLI_L.3 « Calculer la position courante »). Question19 Dessiner un tableau montrant la variable POS_GLI s’incrémentant de $7FFD à $8002 ainsi que les variables POS_GLI_H et POS_GLI_L correspondantes. Question20 Proposer un algorigramme permettant de réaliser le sous programme « inc_pos_gli ».Siège 406 – Evaluation programmation Questionnement de la partie écrite II. Question23 Ecrire le programme en langage C correspondant à l’algorigramme « dec_pos_gli ».3 Etude du sous programme « dec_pos_gli » Le sous programme « dec_pos_gli » permet de décrémenter une seule fois la variable POS_GLI. En supposant que POS_GLI=$8153. Nous ne pouvons agir uniquement sur les variables POS_GLI_H et POS_GLI_L. Il faut s’aider des questions précédentes.2 Etude du sous programme « inc_pos_gli » Le sous programme « inc_pos_gli » permet d’incrémenter une seule fois la variable POS_GLI. Question22 Proposer un algorigramme permettant de réaliser le sous programme « dec_pos_gli ». indiquer les valeurs prises par POS_GLI_H et POS_GLI_L. Question17 Définir la variable POS_GLI (voir description de F1. Question21 Ecrire le programme en langage C correspondant à l’algorigramme « inc_pos_gli ».

Siège 406 – Evaluation programmation Questionnement de la partie écrite DOCUMENT REPONSE 1 Nom de la broche RA0 RA1 RA2 RA3 RA4 RA5 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 RE0 RE1 RE2 Configuration (E. S ou NU (Non Utilisé)) Nom du signal G BERTHOME Page 6/9 .

*********************************************************************** .*********************************************************************** RETURN G BERTHOME Page 7/9 .* Ce sous programme permet d' initialiser toutes les variables.* Initialisation des variables * .* A compléter : sélection banque 0 (par défaut) * .*********************************************************************** .* sous programme initialisation (init) partiel * .*********************************************************************** .*********************************************************************** .*********************************************************************** .* du PIC16F877 * .* partie à compléter : configuration du PORTA et PORTE * .*********************************************************************** BCF DEP_RAP1 BCF DEP_RAP2 BCF DEP CLRF DIR CLRF VAR_TEMPO CLRF VAR_GRANDE_VIT CLRF POS_GLI_PREC_L .*********************************************************************** . et les registres * .*********************************************************************** init .Siège 406 – Evaluation programmation Questionnement de la partie écrite DOCUMENT REPONSE 2 .* partie à compléter : configuration du PORTD * .*********************************************************************** .*********************************************************************** .

*********************************************************************** G BERTHOME Page 8/9 .inc> ORG GOTO 0x0000 DEBUT .Siège 406 – Evaluation programmation Questionnement de la partie écrite DOCUMENT REPONSE 3 . adresse de départ après Reset DEBUT ORG 0x060 .* PROGRAMME PRINCIPAL * .*********************************************************************** LIST p=16F877 #include <p16F877.* Il faut écrire tout le programme principal en langage assembleur * .*********************************************************************** .* Partie à compléter : on débute par l’appel du sous programme « init » * .*********************************************************************** .

Siège 406 – Evaluation programmation Questionnement de la partie écrite G BERTHOME Page 9/9 .

Evaluation programmation Partie 2 Questionnement TP .

h. Une fois le projet compilé correctement appeler le professeur pour valider votre travail en lui expliquant les différentes étapes.2 : détecter les erreurs PMC2.4 : choisir le microcontrôleur PMC1.c. Question1 Copier les trois fichiers fournis dans le nouveau répertoire.2 : choisir l’outil de construction PMC1. Ces fichiers sont stockés dans votre répertoire de travail. Créer le projet permettant d’utiliser les fichiers fournis.1 : lancer la compilation PMC2. On désire créer un projet nommé 406 dans un autre répertoire nommé 406_TPx (x=1 si vous passez en premier. G BERTHOME Page 1/10 .3 : configurer les paramètres de constructions PMC1. -pic1687x. Ce répertoire sera à créer. x=2 si vous passez en second).1 : ouvrir ou créer un projet PMC1. -Decla. Compiler votre projet.3 : corriger les erreurs On dispose de trois fichiers : -406.7 : ajouter le fichier source et les fichiers include au projet PMC2 : compiler le projet PMC2.Siège 406 – Evaluation programmation Questionnement de la partie TP I Création du projet Critères d’évaluations : PMC1 : mettre à jour un projet existant ou créer un projet PMC1.

5 : conclure sur la validité du programme testé Le programme 406. rappeler quelle est la procédure de rappel d’une position mémorisée. -de rappeler la position de conduite mémorisée n°1. Que se passe-t-il à la fin du rappel.3 : proposer une méthode de test Proposer une méthode de test par l’observation sur le système « siège 406 » pour vérifier que le programme permet bien : -de mémoriser la position de conduite n°1.Siège 406 – Evaluation programmation Questionnement de la partie TP II Programmation et test de la mémorisation sur le siège 406 Critères d’évaluations : PMC4 : programmer le microcontrôleur PMC4.5 : charger le fichier de programmation PMC4. vous pouvez passer à la question suivante. -mémoriser une position d’un conducteur.c permet de : -calculer la position courante du siège. Question2 A partir du dossier technique.6 : programmer le composant PMC5 : rédiger le compte rendu PMC5.3 : placer correctement le microcontrôleur PMC4.4 : traduire les résultats observés PMC5. G BERTHOME Page 2/10 .2 : mettre en œuvre le programmateur PMC4. -rappeler les positions mémorisées Ce programme ne gère pas la grande vitesse.1 : enregistrer le fichier de programmation PMC4.4 : sélectionner le composant à programmer à l’aide d’un logiciel PMC4. -tester le programme par une observation sur le système « siège 406 ». On souhaite : -programmer le PIC16F877.3 : proposer une méthode de tests du programme PMC5. Que se passe-t-il à la fin de la mémorisation ? Question3 A partir du dossier technique. Une fois la méthode trouvée et rédigée. Question4 : critère PMC5. rappeler quelle est la procédure de mémorisation.

4 : traduire les résultats des tests observés et PMC5. Rédiger l’observation de vos tests.5 : conclure sur la validité du programme testé Placer correctement le PIC16F877 sur la carte « PIC ». Procéder aux tests et valider le fonctionnement du programme. Si la place est occupée ne perdez pas de temps et passez à la 3° partie « Test du sous programme « memo » grâce au logiciel MPLAB. G BERTHOME Page 3/10 . Question5 : critère PMC4 : programmer le microcontrôleur Programmer le PIC16F877 avec le fichier adéquat. Vous devez faire valider le fonctionnement par le professeur. Insérer la carte « PIC » dans le rack. Question6 : critère PMC5.Siège 406 – Evaluation programmation Questionnement de la partie TP La question suivante se fait sur le poste de programmation et sur le siège 406.

1 : montrer le déroulement du programme quand rien ne se passe PMC3. -les niveaux logiques de toutes les entrées du PIC16F877 lorsque le siège est au repos.4. III.4 : traduire les résultats observés PMC5. Question10 : critère PMC3.2 : créer une fenêtre de visualisation PMC3. Il faut s’aider de la description de la fonction F12 « Acquérir les consignes » Question8 : critère PMC3.4.1 Initialisation des entrées Question7 Compléter le document réponse 1 en indiquant : -les correspondances des broches d’entrées du PIC16F877 avec les noms des signaux. configurer les entrées du PIC16F877 correspondant à un fonctionnement du siège au repos : Lancer la simulation du programme (touche F9).2 : montrer le déroulement du programme lorsque l’on agit sur certaines entrées et/ou certaines variables PMC3. -PORTB.Psti.1 : créer les stimuli Créer trois stimuli différents à sauvegarder dans le répertoire du projet intitulés : -PORTC.5 : conclure sur la validité du programme testé Dans cette partie on souhaite valider par la simulation la mémorisation de la position de conduite 1.4. Ouvrir le stimulus PORTB.3 : montrer l’action du programme sur les sorties et/ou les variables et/ou le contenu des mémoires….4.Psti Question9 En procédant de la manière suivante.3 : proposer une méthode de tests du programme PMC5.1 : créer des stimuli PMC3. G BERTHOME Page 4/10 .Siège 406 – Evaluation programmation Questionnement de la partie TP III Test du sous programme « memo » grâce au logiciel MPLAB Critères d’évaluations : PMC3 : simuler le programme en mode pas à pas PMC3. -PORTE. Fermer le stimulus PORTB.Psti Recommencer pour les ports C et E.Psti.4 : faire défiler le programme pour différents cas de fonctionnement PMC3. PMC3.3 : observer le contenu des mémoires du microcontrôleur PMC3.Psti Configurer les niveaux logiques des entrées du port B (siège au repos).2 : créer une fenêtre de visualisation Vérifier que les entrées du PIC16F877 sont configurées correctement.4 : conclure sur le fonctionnement du programme PMC5 : rédiger le compte rendu PMC5.

2. -les nom des adresses. Justifier votre réponse. POS_REHA_MEM1_H=0x03.2 Test du sous programme « memo » III. III. Question15 Nommer les adresses où seront stockées les variables représentant la position courante.h » : static static static static static static static static unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char POS_GLI_MEM1_L=0x00. G BERTHOME Page 5/10 . POS_DOS_MEM1_H=0x07. POS_GLI_MEM1_H=0x01. dans quel type de mémoire est stockée la position courante du siège ? Question13 Indiquer le nombre de variables qui composent la position courante du siège (voir F13 « Calculer la position courante ») Nommer ces variables. POS_DOS_MEM1_L=0x06. Si vous êtes bloqué vous pouvez passer à la suite et revenir ensuite à cette partie.1 Définition du cahier des charges du sous programme « memo » Il faut s’aider de la description des fonctions F13 « Calculer la position courante » et F14 « Mémoriser la position » Cette partie vise à exploiter le dossier technique afin de mieux comprendre le rôle du sous programme « memo ». Faire valider par le professeur. Est-elle suffisante ?(on suppose qu’il faut stocker 2 positions de conduite plus la position courante). Ne perdez pas de temps sur cette partie Question12 A votre avis.Siège 406 – Evaluation programmation Questionnement de la partie TP Question11 : critère PMC3.4. -les valeurs des adresses. Déterminer alors le nombre d’octets nécessaires pour avoir une information sur la position courante du siège. déterminer la capacité de la mémoire utilisé pour stocker la position courante du siège. POS_REHA_MEM1_L=0x02. On donne un extrait du fichier « Decla. Indiquer les valeurs de ces adresses. Question16 Représenter partiellement la mémoire où seront stockées les variables représentant la position courante en indiquant : -les noms des variables. POS_SITE_MEM1_H=0x05. POS_SITE_MEM1_L=0x04. Question14 A partir de l’extrait de la documentation constructeur du PIC16F877.1 : montrer le déroulement du programme quand rien ne se passe En simulant le programme en pas à pas vérifier que son exécution correspond bien à l’évolution de l’algorigramme du programme principal lorsque le siège est au repos.

On se fixe 4 valeurs à fixer qui sont les suivantes : -POS_GLI=$8150. Pour en sortir il faudra faire un reset et exécuter de nouveau le programme principal lorsque le siège est au repos.3 : proposer une méthode de test du programme Question17 Proposer une procédure de test pour vérifier que l’on stocke correctement les variables en mémoire. Tests : critères d’évaluation : PMC3 : simuler le programme en mode pas à pas PMC3. -POS_DOS=$7E6A -méthode pour exécuter le sous programme « memo ». -méthode pour mémoriser le position. -POS_REHA=$7F32.3 : montrer l’action du programme sur les sorties et/ou les variables et/ou le contenu des mémoires….2. Attention : le sous programme « prod_sign_sonore » utilise des temporisations vous resterez bloqué dedans. -observation des variables représentant la position courante stockées en mémoire aux bonnes adresses. -POS_SITE=$80AB.2 : montrer le déroulement du programme lorsque l’on agit sur certaines entrées et/ou certaines variables PMC3.2 : créer une fenêtre de visualisation PMC3.1 : montrer le déroulement du programme quand rien ne se passe PMC3.4. Faire valider par le professeur G BERTHOME Page 6/10 .2 Test du sous programme « memo » Procédure de test : critère PMC5. On veut notamment voir dans cette procédure les étapes suivantes : -modification des variables représentant la position courante (on sait que la position initiale pour tous les mouvements est $7FFF).4 : faire défiler le programme pour différents cas de fonctionnement PMC3.3 : observer le contenu des mémoires du microcontrôleur PMC3.4.4. Question18 Effectuer les tests en vérifiant que le programme fonctionne selon vos attentes.Siège 406 – Evaluation programmation Questionnement de la partie TP III.

5 : conclure sur la validité du programme testé Question19 On souhaite savoir ce que vous avez observez étape par étape. Transcrire alors les résultats observés.Siège 406 – Evaluation programmation Questionnement de la partie TP Transcription des résultats : critère PMC5. G BERTHOME Page 7/10 . Question20 Représenter le contenu de la mémoire (partiel : uniquement ce qui nous intéresse) en indiquant : -où se trouvent les adresses en notant leurs noms sur cette représentation -où se trouvent les données stockées en notant leurs noms sur cette représentation.

Siège 406 – Evaluation programmation Questionnement de la partie TP IV Validation que la position est mémorisée Dans cette partie on souhaite valider que l’on écrit réellement dans la mémoire du PIC16F877 par une lecture de son contenu. Faire valider par le professeur en expliquant la méthode et en commentant le contenu de la mémoire du PIC16F877. On sait que l’adresse de début de la mémoire du PIC16F877 est $4200. Question22 Vérifier que la position du siège est bien mémorisée en mémoire en appliquant votre méthode. Si ces postes sont occupés.5 : conclure sur la validité du programme testé Question21 Proposer une méthode pour vérifier que l’on stocke réellement les positions en mémoire.7 : lire le contenu du composant PMC5 : rédiger le compte rendu PMC5.3 : proposer une méthode de test du programme PMC5. -la conclusion. ne perdez pas de temps et passez à la 5° partie « Modification du programme pour mémoriser la position du conducteur2 ». La question suivante se fait sur le poste de programmation et sur le siège 406.4 : traduire les résultats observés PMC5. Etc… Critères d’évaluation : PMC4 : programmer le composant programmable PMC4. Que la deuxième adresses est $4202. Vous noterez notamment : -les actions réalisées sur le siège. G BERTHOME Page 8/10 . -les valeurs contenues dans la mémoire.

Siège 406 – Evaluation programmation Questionnement de la partie TP V Modification du programme pour mémoriser la position du conducteur2 On souhaite modifier l’algorigramme et le programme afin que l’on puisse mémoriser les deux positions de conduites. G BERTHOME Page 9/10 . Question23 Proposer un nouvel algorigramme. Question24 Modifier le sous programme « memo ». Question26 Tester votre programme sur le siège 406. Question25 Tester votre nouveau programme. Faire valider par le professeur. Faire valider par le professeur.

Siège 406 – Evaluation programmation Questionnement de la partie TP DOCUMENT REPONSE 1 Nom de la broche RB1 RB2 RB3 RB4 RB5 RB6 RB7 RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 RE0 RE1 RE2 Nom du signal Etat logique lorsque le siège est au repos CAPT_GLI CAPT_REHA CAPT_SITE CAPT_DOS 0 0 0 0 IMA_ACC FC_AV FC_AR 1 1 0 G BERTHOME Page 10/10 .

Evaluation programmation Partie 3 Document ressource .

COM_BUZ POS_MVT.1 Programme principal du siège 406 DEBUT init Système alimenté ? OUI NON NON FC_AV=0 ? OUI gv GR_VIT. COM_BUZ NON NON BP_CONDUCT1=0 ? OUI rappel1 COM_MVT_SENS. POS_MVT_MEM2. POS_MVT_MEM2. COM_GLI_AV. COM_BUZ FIN POS_MVT. POS_MVT_MEM1 NON BP_CONDUCT2=0 ? OUI rappel2 COM_MVT_SENS. COM_GLI_AR.Evaluation programmation – Document ressource 1. ALGORIGRAMMES 1. G BERTHOME Page 1/4 . COM_GLI_AV. VAR_GV NON VAR_GV=1 ? OUI gv GR_VIT. COM_GLI_AR. VAR_GV BP_MVT_SENS actifs ? OUI VAR_DEP=$01 detect_sens NON NON VAR_DEP=$01 ? OUI DIR mem_pos_cour VAR_DEP=$00 DIR OUI VAR_GV≠0 ? NON OUI IMA_ACC≠1 ? NON BP_M=0 ? OUI memo POS_MVT_MEM1.

2 Sous-programme « detect_sens » NON DEBUT BP_GLI_AV=0 ? OUI DIR_GLI=1 NON BP_GLI_AR=0 ? OUI DIR_GLI=0 NON BP_REHA_MONT =0? OUI DIR_REHA=1 NON BP_REHA_DESC =0? OUI DIR_REHA=0 NON BP_SITE_MONT =0? OUI DIR_SITE=1 NON BP_SITE_DESC =0? OUI DIR_SITE=0 NON BP_DOS_AV=0 ? OUI DIR_DOS=1 NON BP_DOS_AR=0 ? OUI DIR_DOS=0 DEBUT G BERTHOME Page 2/4 .Evaluation programmation – Document ressource 1.

3 Programme d’interruption « calculer_position_courante » DEBUT Sauvegarder les nouveaux états des capteurs dans CHANG_CAPT NON NON bit 4 de CHANG_CAPT ≠ bit 4 de MEM_CAPT ? OUI DIR_GLI=0 ? OUI dec_pos_gli NON 1 bit 7 de CHANG_CAPT ≠ bit 7 de MEM_CAPT ? OUI DIR_DOS=0 ? OUI dec_pos_dos NON inc_pos_dos inc_pos_gli Mémoriser les nouveaux états des capteurs MEM_CAPT=CHANG_CAPT NON bit 5 de CHANG_CAPT ≠ bit 5 de MEM_CAPT ? OUI DIR_REHA=0 ? OUI dec_pos_reha NON FIN inc_pos_reha NON bit 6 de CHANG_CAPT ≠ bit 6 de MEM_CAPT ? OUI DIR_SITE=0 ? OUI dec_pos_site NON inc_pos_site 1 G BERTHOME Page 3/4 .Evaluation programmation – Document ressource 1.

Evaluation programmation – Document ressource 1.4 Sous-programme « memo » partiel permettant de mémoriser uniquement une position de conduite DEBUT NON BP_M=0 ? OUI BP_M=0 ET BP_CONDUCT1=0 ? OUI mem1 FIN_MEMO=1 prod_sign_sonore NON BP_M=0 OU BP_CONDUCT1=0 ? NON OUI FIN G BERTHOME Page 4/4 .

Evaluation programmation Partie 4 Documentation constructeur PIC16F877 .

max. 4 MHz . 32 kHz . resolution is 200 ns . indirect and relative addressing modes • Power-on Reset (POR) • Power-up Timer (PWRT) and Oscillator Start-up Timer (OST) • Watchdog Timer (WDT) with its own on-chip RC oscillator for reliable operation • Programmable code protection • Power saving SLEEP mode • Selectable oscillator options • Low power. Compare.200 ns instruction cycle • Up to 8K x 14 words of FLASH Program Memory.20 µA typical @ 3V. max. can be incremented during SLEEP via external crystal/clock • Timer2: 8-bit timer/counter with 8-bit period register.PWM max.Capture is 16-bit. Up to 368 x 8 bytes of Data Memory (RAM) Up to 256 x 8 bytes of EEPROM Data Memory • Pinout compatible to the PIC16C73B/74B/76/77 • Interrupt capability (up to 14 sources) • Eight level deep hardware stack • Direct. with external RD. prescaler and postscaler • Two Capture. resolution is 10-bit • 10-bit multi-channel Analog-to-Digital converter • Synchronous Serial Port (SSP) with SPI™ (Master mode) and I2C™ (Master/Slave) • Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI) with 9-bit address detection • Parallel Slave Port (PSP) 8-bits wide.< 0.PIC16F87X 28/40-Pin 8-Bit CMOS FLASH Microcontrollers Devices Included in this Data Sheet: • PIC16F873 • PIC16F874 • PIC16F876 • PIC16F877 Pin Diagram PDIP MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 1 2 3 4 5 6 40 39 38 37 36 35 RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB1 RB0/INT VDD VSS RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2 Microcontroller Core Features: • High performance RISC CPU • Only 35 single word instructions to learn • All single cycle instructions except for program branches which are two cycle • Operating speed: DC .Compare is 16-bit. Industrial and Extended temperature ranges • Low-power consumption: . WR and CS controls (40/44-pin only) • Brown-out detection circuitry for Brown-out Reset (BOR) © 2001 Microchip Technology Inc.< 1 µA typical standby current PIC16F877/874 7 8 9 10 11 12 13 14 15 16 17 18 19 20 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Peripheral Features: • Timer0: 8-bit timer/counter with 8-bit prescaler • Timer1: 16-bit timer/counter with prescaler.20 MHz clock input DC . PWM modules .5 ns . high speed CMOS FLASH/EEPROM technology • Fully static design • In-Circuit Serial Programming™ (ICSP) via two pins • Single 5V In-Circuit Serial Programming capability • In-Circuit Debugging via two pins • Processor read/write access to program memory • Wide operating voltage range: 2.0V to 5.5V • High Sink/Source Current: 25 mA • Commercial. DS30292C-page 1 . resolution is 12.6 mA typical @ 3V.

PIC16F87X FIGURE 1-2: Device PIC16F874 PIC16F877 PIC16F874 AND PIC16F877 BLOCK DIAGRAM Program FLASH 4K 8K Data Memory 192 Bytes 368 Bytes 13 FLASH Program Memory 8 Level Stack (13-bit) Program Counter Data EEPROM 128 Bytes 256 Bytes Data Bus 8 PORTA RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS PORTB RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD PORTC RAM File Registers RAM Addr(1) Program Bus 14 Instruction reg Direct Addr 7 9 Addr MUX 8 Indirect Addr FSR reg STATUS reg 8 3 Power-up Timer Instruction Decode & Control Timing Generation OSC1/CLKIN OSC2/CLKOUT Oscillator Start-up Timer Power-on Reset Watchdog Timer Brown-out Reset In-Circuit Debugger Low-Voltage Programming 8 MUX ALU RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT PORTD RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PORTE W reg Parallel Slave Port MCLR VDD. VSS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS Timer0 Timer1 Timer2 10-bit A/D Data EEPROM CCP1.2 Synchronous Serial Port USART Note 1: Higher order bits are from the STATUS register. . DS30292C-page 6 © 2001 Microchip Technology Inc.

RP1:RP0 00 01 10 11 Bank 0 1 2 3 2. . Each bank extends up to 7Fh (128 bytes). Above the Special Function Registers are General Purpose Registers.1 GENERAL PURPOSE REGISTER FILE The register file can be accessed either directly. DS30292C-page 12 © 2001 Microchip Technology Inc. Note: EEPROM Data Memory description can be found in Section 4.0 of this data sheet.2. implemented as static RAM. Bits RP1 (STATUS<6>) and RP0 (STATUS<5>) are the bank select bits. All implemented banks contain Special Function Registers. Some frequently used Special Function Registers from one bank may be mirrored in another bank for code reduction and quicker access. or indirectly through the File Select Register (FSR).PIC16F87X 2.2 Data Memory Organization The data memory is partitioned into multiple banks which contain the General Purpose Registers and the Special Function Registers. The lower locations of each bank are reserved for the Special Function Registers.

read as ’0’. 2: These registers are reserved.7Fh Bank 3 1EFh 1F0h 1FFh Unimplemented data memory locations. Note 1: These registers are not implemented on the PIC16F876.(*) OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD(1) TRISE(1) PCLATH INTCON PIE1 PIE2 PCON File Address 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h General Purpose Register 80 Bytes accesses 70h-7Fh 7Fh Bank 0 Bank 1 General Purpose Register 80 Bytes accesses 70h-7Fh Bank 2 Indirect addr.(*) TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD(1) PORTE(1) PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON0 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h Indirect addr.PIC16F87X FIGURE 2-3: PIC16F877/876 REGISTER FILE MAP File Address Indirect addr. * Not a physical register. maintain these registers clear. DS30292C-page 13 . © 2001 Microchip Technology Inc.(*) TMR0 PCL STATUS FSR PORTB File Address 100h 101h 102h 103h 104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch 10Dh 10Eh 10Fh 110h 111h 112h 113h 114h 115h 116h 117h 118h 119h 11Ah 11Bh 11Ch 11Dh 11Eh 11Fh 120h Indirect addr.(*) OPTION_REG PCL STATUS FSR TRISB File Address 180h 181h 182h 183h 184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch 18Dh 18Eh 18Fh 190h 191h 192h 193h 194h 195h 196h 197h 198h 199h 19Ah 19Bh 19Ch 19Dh 19Eh 19Fh 1A0h PCLATH INTCON EEDATA EEADR EEDATH EEADRH PCLATH INTCON EECON1 EECON2 Reserved(2) Reserved(2) SSPCON2 PR2 SSPADD SSPSTAT TXSTA SPBRG General Purpose Register 16 Bytes General Purpose Register 16 Bytes ADRESL ADCON1 General Purpose Register 96 Bytes EFh F0h FFh 16Fh 170h 17Fh General Purpose Register 80 Bytes accesses 70h .

The Special Function Registers can be classified into two sets: core (CPU) and peripheral.PIC16F87X 2. PCLATH is a holding register for the PC<12:8> whose contents are transferred to the upper byte of the program counter. The upper byte of the program counter is not directly accessible. TABLE 2-1: Address Bank 0 00h(3) 01h 02h(3) 03h(3) 04h(3) 05h 06h 07h 08h(4) 09h(4) 0Ah(1.2. read as ‘0’. read as '0'.2 SPECIAL FUNCTION REGISTERS The Special Function Registers are registers used by the CPU and peripheral modules for controlling the desired operation of the device. BOR Details on page: Addressing this location uses contents of FSR to address data memory (not a physical register) Timer0 Module Register Program Counter (PC) Least Significant Byte IRP — RP1 — RP0 TO PD Z DC C Indirect Data Memory Address Pointer PORTA Data Latch when written: PORTA pins when read PORTB Data Latch when written: PORTB pins when read PORTC Data Latch when written: PORTC pins when read PORTD Data Latch when written: PORTD pins when read — — GIE PSPIF(3) — — — PEIE ADIF (5) — — T0IE RCIF — — INTE TXIF EEIF — RBIE SSPIF BCLIF RE2 T0IF CCP1IF — RE1 INTF TMR2IF — RE0 RBIF TMR1IF CCP2IF Write Buffer for the upper 5 bits of the Program Counter 0000 0000 xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx --0x 0000 xxxx xxxx xxxx xxxx xxxx xxxx ---. A list of these registers is given in Table 2-1. PORTE. Shaded locations are unimplemented. always maintain these bits clear. Bits PSPIE and PSPIF are reserved on PIC16F873/876 devices.= unimplemented. q = value depends on condition.-xxx ---0 0000 0000 000x 0000 0000 -r-0 0--0 xxxx xxxx xxxx xxxx 27 47 26 18 27 29 31 33 35 36 26 20 22 24 52 52 51 55 55 70. Those related to the operation of the peripheral features are described in detail in the peripheral features section. always maintain these bits clear. read as ‘0’. PIR2<6> and PIE2<6> are reserved on these devices. These registers are implemented as static RAM. TRISD. r = reserved. DS30292C-page 15 . and TRISE are not physically implemented on PIC16F873/876 devices. .3) 0Bh(3) 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh Legend: Note 1: 2: 3: 4: 5: INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PORTE PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H Name SPECIAL FUNCTION REGISTER SUMMARY Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on: POR. These registers can be addressed from any bank. © 2001 Microchip Technology Inc. PORTD. u = unchanged. 73 67 57 57 58 96 99 101 57 57 58 116 111 Holding register for the Least Significant Byte of the 16-bit TMR1 Register Holding register for the Most Significant Byte of the 16-bit TMR1 Register — — WCOL — T1CKPS1 T1CKPS0 TOUTPS1 CKP T1OSCEN TOUTPS0 SSPM3 T1SYNC TMR2ON SSPM2 TMR1CS TMR1ON Timer2 Module Register TOUTPS3 TOUTPS2 SSPOV SSPEN Synchronous Serial Port Receive Buffer/Transmit Register SSPM1 SSPM0 Capture/Compare/PWM Register1 (LSB) Capture/Compare/PWM Register1 (MSB) — SPEN — RX9 CCP1X SREN CCP1Y CREN CCP1M3 ADDEN CCP1M2 FERR CCP1M1 OERR CCP1M0 RX9D --00 0000 0000 0000 T2CKPS1 T2CKPS0 -000 0000 xxxx xxxx 0000 0000 xxxx xxxx xxxx xxxx --00 0000 0000 000x 0000 0000 0000 0000 xxxx xxxx xxxx xxxx CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON0 USART Transmit Data Register USART Receive Data Register Capture/Compare/PWM Register2 (LSB) Capture/Compare/PWM Register2 (MSB) — ADCS1 — ADCS0 CCP2X CHS2 CCP2Y CHS1 CCP2M3 CHS0 CCP2M2 GO/DONE CCP2M1 — CCP2M0 ADON A/D Result Register High Byte --00 0000 xxxx xxxx 0000 00-0 x = unknown. Those registers associated with the core functions are described in detail in this section.

PCLATH is a holding register for the PC<12:8> whose contents are transferred to the upper byte of the program counter.= unimplemented. These registers can be addressed from any bank. r = reserved.0000 x = unknown. PORTE. u = unchanged.PIC16F87X TABLE 2-1: Address Bank 1 80h(3) 81h 82h(3) 83h(3) 84h(3) 85h 86h 87h 88h(4) 89h(4) 8Ah(1. read as '0'. TRISD. BOR Details on page: Name 27 19 26 18 27 29 31 33 35 37 26 20 21 23 25 — — 68 55 73. PORTD.--qq SPECIAL FUNCTION REGISTER SUMMARY (CONTINUED) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on: POR. 74 66 — — — 95 97 — — — — 116 112 Unimplemented Unimplemented GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN Timer2 Period Register Synchronous Serial Port (I2C mode) Address Register SMP CKE D/A P S R/W UA BF Unimplemented Unimplemented Unimplemented CSRC TX9 TXEN SYNC — BRGH TRMT TX9D Baud Rate Generator Register Unimplemented Unimplemented Unimplemented Unimplemented A/D Result Register Low Byte ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0 — — 0000 0000 1111 1111 0000 0000 0000 0000 — — — 0000 -010 0000 0000 — — — — xxxx xxxx 0--. The upper byte of the program counter is not directly accessible. always maintain these bits clear. . read as ‘0’. . q = value depends on condition. DS30292C-page 16 © 2001 Microchip Technology Inc. always maintain these bits clear. read as ‘0’. Shaded locations are unimplemented. PIR2<6> and PIE2<6> are reserved on these devices. and TRISE are not physically implemented on PIC16F873/876 devices.3) 8Bh(3) 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh Legend: Note 1: 2: 3: 4: 5: INDF OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD TRISE PCLATH INTCON PIE1 PIE2 PCON — — SSPCON2 PR2 SSPADD SSPSTAT — — — TXSTA SPBRG — — — — ADRESL ADCON1 Addressing this location uses contents of FSR to address data memory (not a physical register) RBPU IRP — INTEDG RP1 — T0CS RP0 T0SE TO PSA PD PS2 Z PS1 DC PS0 C Program Counter (PC) Least Significant Byte Indirect Data Memory Address Pointer PORTA Data Direction Register PORTB Data Direction Register PORTC Data Direction Register PORTD Data Direction Register IBF — GIE PSPIE(2) — — OBF — PEIE ADIE (5) — IBOV — T0IE RCIE — — PSPMODE INTE TXIE EEIE — — RBIE SSPIE BCLIE — PORTE Data Direction Bits T0IF CCP1IE — — INTF TMR2IE — POR RBIF TMR1IE CCP2IE BOR Write Buffer for the upper 5 bits of the Program Counter 0000 0000 1111 1111 0000 0000 0001 1xxx xxxx xxxx --11 1111 1111 1111 1111 1111 1111 1111 0000 -111 ---0 0000 0000 000x 0000 0000 -r-0 0--0 ---. Bits PSPIE and PSPIF are reserved on PIC16F873/876 devices.

x000 ---. r = reserved.= unimplemented. These registers can be addressed from any bank. always maintain these bits clear. Bits PSPIE and PSPIF are reserved on PIC16F873/876 devices. Shaded locations are unimplemented. DS30292C-page 17 .3) 18Bh(3) 18Ch 18Dh 18Eh 18Fh Legend: Note 1: 2: 3: 4: 5: INDF OPTION_REG PCL STATUS FSR — TRISB — — — PCLATH INTCON EECON1 EECON2 — — Addressing this location uses contents of FSR to address data memory (not a physical register) RBPU IRP INTEDG RP1 T0CS RP0 T0SE TO PSA PD PS2 Z PS1 DC PS0 C Program Counter (PC) Least Significant Byte Indirect Data Memory Address Pointer Unimplemented PORTB Data Direction Register Unimplemented Unimplemented Unimplemented — GIE EEPGD — PEIE — — T0IE — Write Buffer for the upper 5 bits of the Program Counter INTE — RBIE WRERR T0IF WREN INTF WR RBIF RD 0000 0000 1111 1111 0000 0000 0001 1xxx xxxx xxxx SPECIAL FUNCTION REGISTER SUMMARY (CONTINUED) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on: POR. PCLATH is a holding register for the PC<12:8> whose contents are transferred to the upper byte of the program counter. The upper byte of the program counter is not directly accessible. PORTE. read as ‘0’. BOR Details on page: Name INDF TMR0 PCL STATUS FSR — PORTB — — — PCLATH INTCON EEDATA EEADR EEDATH EEADRH Addressing this location uses contents of FSR to address data memory (not a physical register) Timer0 Module Register Program Counter’s (PC) Least Significant Byte IRP RP1 RP0 TO PD Z DC C Indirect Data Memory Address Pointer Unimplemented PORTB Data Latch when written: PORTB pins when read Unimplemented Unimplemented Unimplemented — GIE — PEIE — T0IE Write Buffer for the upper 5 bits of the Program Counter INTE RBIE T0IF INTF RBIF 0000 0000 xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx 27 47 26 18 27 — 31 — — — 26 20 41 41 41 41 27 19 26 18 27 — 31 — — — 26 20 41. © 2001 Microchip Technology Inc. TRISD. PORTD. u = unchanged. PIR2<6> and PIE2<6> are reserved on these devices. read as '0'. read as ‘0’. q = value depends on condition. . always maintain these bits clear. and TRISE are not physically implemented on PIC16F873/876 devices.---0000 0000 0000 0000 EEPROM Control Register2 (not a physical register) Reserved maintain clear Reserved maintain clear x = unknown.3) 10Bh(3) 10Ch 10Dh 10Eh 10Fh Bank 3 180h(3) 181h 182h(3) 183h(3) 184h(3) 185h 186h 187h 188h 189h 18Ah(1.PIC16F87X TABLE 2-1: Address Bank 2 100h(3) 101h 102h(3) 103h(3) 104h(3) 105h 106h 107h 108h 109h 10Ah(1. 42 41 — — — xxxx xxxx — — — ---0 0000 0000 000x xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx EEPROM Data Register Low Byte EEPROM Address Register Low Byte — — — — EEPROM Data Register High Byte — EEPROM Address Register High Byte — 1111 1111 — — — ---0 0000 0000 000x x--.

" Note: The C and DC bits operate as a borrow and digit borrow bit. BSF. 3 (100h . DC or C bits. therefore.2. CLRF STATUS will clear the upper three bits and set the Z bit. If the STATUS register is the destination for an instruction that affects the Z. therefore.1FFh) 0 = Bank 0. This leaves the STATUS register as 000u u1uu (where u = unchanged). the polarity is reversed. It is recommended. REGISTER 2-1: STATUS REGISTER (ADDRESS 03h.SUBWF instructions) (for borrow.7Fh) Each bank is 128 bytes TO: Time-out bit 1 = After power-up. See the SUBLW and SUBWF instructions for examples. For rotate (RRF. RLF) instructions. 103h. 83h. A subtraction is executed by adding the two’s complement of the second operand. that only BCF. CLRWDT instruction.SUBLW.2. Furthermore. ADDLW. or low order bit of the source register. read as ‘0’ ’0’ = Bit is cleared x = Bit is unknown DS30292C-page 18 © 2001 Microchip Technology Inc. because these instructions do not affect the Z.n = Value at POR W = Writable bit ’1’ = Bit is set U = Unimplemented bit. C or DC bits from the STATUS register. respectively.SUBWF instructions) 1 = A carry-out from the Most Significant bit of the result occurred 0 = No carry-out from the Most Significant bit of the result occurred Note: For borrow.PIC16F87X 2. the result of an instruction with the STATUS register as destination may be different than intended. These bits are set or cleared according to the device logic.17Fh) 01 = Bank 1 (80h . then the write to these three bits is disabled.FFh) RP1:RP0: Register Bank Select bits (used for direct addressing) 11 = Bank 3 (180h .1 STATUS Register The STATUS register contains the arithmetic status of the ALU.FFh) 00 = Bank 0 (00h . ADDLW. the TO and PD bits are not writable. in subtraction.SUBLW. the polarity is reversed) 1 = A carry-out from the 4th low order bit of the result occurred 0 = No carry-out from the 4th low order bit of the result C: Carry/borrow bit (ADDWF. the RESET status and the bank select bits for data memory. For other instructions not affecting any status bits. this bit is loaded with either the high. For example. see the “Instruction Set Summary. SWAPF and MOVWF instructions are used to alter the STATUS register. bit 6-5 bit 4 bit 3 bit 2 bit 1 bit 0 Legend: R = Readable bit . 1 (00h . 183h) R/W-0 IRP bit 7 R/W-0 RP1 R/W-0 RP0 R-1 TO R-1 PD R/W-x Z R/W-x DC R/W-x C bit 0 bit 7 IRP: Register Bank Select bit (used for indirect addressing) 1 = Bank 2. or SLEEP instruction 0 = A WDT time-out occurred PD: Power-down bit 1 = After power-up or by the CLRWDT instruction 0 = By execution of the SLEEP instruction Z: Zero bit 1 = The result of an arithmetic or logic operation is zero 0 = The result of an arithmetic or logic operation is not zero DC: Digit carry/borrow bit (ADDWF. .1FFh) 10 = Bank 2 (100h . The STATUS register can be the destination for any instruction. as with any other register.

put the contents of the output latch on the selected pin).PIC16F87X 3. should be avoided. PORTC is multiplexed with several peripheral functions (Table 3-5).e. read-modifywrite instructions (BSF. © 2001 Microchip Technology Inc. 2: Port/Peripheral select signal selects between port data and peripheral output.. XORWF) with TRISC as destination.3 PORTC and the TRISC Register FIGURE 3-6: PORTC is an 8-bit wide. Some peripherals override the TRIS bit to make a pin an output. put the corresponding output driver in a Hi-Impedance mode). or with SMBus levels by using the CKE bit (SSPSTAT<6>). BCF. The corresponding data direction register is TRISC. bi-directional port. 3: Peripheral OE (output enable) is only activated if peripheral select is active. Since the TRIS bit override is in effect while the peripheral is enabled. DS30292C-page 33 . Setting a TRISC bit (= 1) will make the corresponding PORTC pin an input (i. The user should refer to the corresponding peripheral section for the correct TRIS bit settings. while other peripherals override the TRIS bit to make a pin an input. 3: Peripheral OE (output enable) is only activated if peripheral select is active. the PORTC<4:3> pins can be configured with normal I2C levels. PORTC pins have Schmitt Trigger input buffers.e. When the I2C module is enabled. care should be taken in defining TRIS bits for each PORTC pin. When enabling peripheral functions.. FIGURE 3-5: PORTC BLOCK DIAGRAM (PERIPHERAL OUTPUT OVERRIDE) RC<2:0>. PORTC BLOCK DIAGRAM (PERIPHERAL OUTPUT OVERRIDE) RC<4:3> Port/Peripheral Select(2) Peripheral Data Out Data Bus WR Port D CK Q Q 1 0 VDD P I/O pin(1) Data Latch WR TRIS D CK Q Q N Vss Schmitt Trigger Q D EN 0 Schmitt Trigger with SMBus levels TRIS Latch RD TRIS Peripheral OE(3) RD Port SSPl Input 1 CKE SSPSTAT<6> Note 1: I/O pins have diode protection to VDD and VSS. Clearing a TRISC bit (= 0) will make the corresponding PORTC pin an output (i. RC<7:5> Port/Peripheral Select(2) Peripheral Data Out Data Bus WR Port D CK Q Q 0 VDD P I/O pin(1) 1 Data Latch WR TRIS D CK Q Q N VSS Schmitt Trigger Q D EN TRIS Latch RD TRIS Peripheral OE(3) RD Port Peripheral Input Note 1: I/O pins have diode protection to VDD and VSS. 2: Port/Peripheral select signal selects between port data and peripheral output.

BOR xxxx xxxx 1111 1111 Name PORTC TRISC Value on all other RESETS uuuu uuuu 1111 1111 PORTC Data Direction Register Legend: x = unknown. . Input/output port pin or Capture1 input/Compare1 output/ PWM1 output. Input/output port pin or USART Asynchronous Receive or Synchronous Data. Input/output port pin or Synchronous Serial Port data output. u = unchanged DS30292C-page 34 © 2001 Microchip Technology Inc. Input/output port pin or Timer1 oscillator input or Capture2 input/ Compare2 output/PWM2 output.PIC16F87X TABLE 3-5: Name RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT PORTC FUNCTIONS Bit# bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 Buffer Type ST ST ST ST ST ST ST ST Function Input/output port pin or Timer1 oscillator output/Timer1 clock input. RC3 can also be the synchronous serial clock for both SPI and I2C modes. RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode). Legend: ST = Schmitt Trigger input TABLE 3-6: Address 07h 87h SUMMARY OF REGISTERS ASSOCIATED WITH PORTC Bit 7 RC7 Bit 6 RC6 Bit 5 RC5 Bit 4 RC4 Bit 3 RC3 Bit 2 RC2 Bit 1 RC1 Bit 0 RC0 Value on: POR. Input/output port pin or USART Asynchronous Transmit or Synchronous Clock.

read as ‘0’ ’0’ = Bit is cleared x = Bit is unknown The ADRESH:ADRESL registers contain the 10-bit result of the A/D conversion. . The analog input channels must have their corresponding TRIS bits selected as inputs. 0 = Left justified. 2: This column indicates the number of analog channels available as A/D inputs and the number of analog channels used as voltage reference inputs. the GO/DONE bit (ADCON0<2>) is cleared and the A/D interrupt flag bit ADIF is set. When the A/D conversion is complete. the selected channel must be acquired before the conversion is started. DS30292C-page 112 © 2001 Microchip Technology Inc. To determine sample time. After the A/D module has been configured as desired. Unimplemented: Read as '0' PCFG3:PCFG0: A/D Port Configuration Control bits: PCFG3: AN7(1) AN6(1) AN5(1) RE2 RE1 RE0 PCFG0 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 U-0 — R/W-0 — U-0 — R/W-0 PCFG3 R/W-0 PCFG2 R/W-0 PCFG1 R/W-0 PCFG0 bit 0 bit 6-4 bit 3-0 AN4 RA5 A A A A D D D A A A A A D D D AN3 RA3 A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ AN2 RA2 A A A A D D D VREFA A VREFVREFVREFD VREF- AN1 RA1 A A A A A A D A A A A A A D D AN0 RA0 A A A A A A D A A A A A A A A VREF+ VDD RA3 VDD RA3 VDD RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3 VREFVSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2 CHAN/ Refs(2) 8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1/2 A A D D D D D A D D D D D D D A A D D D D D A D D D D D D D A A D D D D D A A A A D D D D A = Analog input D = Digital I/O Note 1: These channels are not available on PIC16F873/876 devices.PIC16F87X REGISTER 11-2: ADCON1 REGISTER (ADDRESS 9Fh) U-0 ADFM bit 7 bit 7 ADFM: A/D Result Format Select bit 1 = Right justified. the A/D conversion can be started. The block diagram of the A/D module is shown in Figure 11-1. 6 Least Significant bits of ADRESL are read as ‘0’.n = Value at POR W = Writable bit ’1’ = Bit is set U = Unimplemented bit.1. the result is loaded into this A/D result register pair. 6 Most Significant bits of ADRESH are read as ‘0’. see Section 11. Legend: R = Readable bit . After this acquisition time has elapsed.

d = 1: store result in file register f. ’f’ represents a file register designator and ’d’ represents a destination designator. The PIC16F87X instruction set summary in Table 13-2 lists byte-oriented. Program Counter Time-out bit Power-down bit 0 f (FILE #) d PC TO PD 0 The instruction set is highly orthogonal and is grouped into three basic categories: • Byte-oriented operations • Bit-oriented operations • Literal and control operations 0 k = 11-bit immediate value A description of each instruction is available in the PICmicro™ Mid-Range Reference Manual. divided into an OPCODE which specifies the instruction type and one or more operands which further specify the operation of the instruction. d = 0: store result in W. All examples use the following format to represent a hexadecimal number: 0xhh where h signifies a hexadecimal digit. Default is d = 1. DS30292C-page 135 . The destination designator specifies where the result of the operation is to be placed. or the program counter is changed as a result of an instruction. ’k’ represents an eight or eleven bit constant or literal value. Note: To maintain upward compatibility with future PIC16F87X products. All instructions are executed within one single instruction cycle. bit-oriented. © 2001 Microchip Technology Inc.PIC16F87X 13. For literal and control operations. Figure 13-1 shows the general formats that the instructions can have. the result is placed in the W register. (DS33023). and literal and control operations. One instruction cycle consists of four oscillator periods. Table 13-2 lists the instructions recognized by the MPASMTM assembler. The file register designator specifies which file register is to be used by the instruction. while ’f’ represents the address of the file in which the bit is located. Destination select. It is the recommended form of use for compatibility with all Microchip software tools. For bit-oriented instructions.0 INSTRUCTION SET SUMMARY Each PIC16F87X instruction is a 14-bit word. the instruction execution time is 2 µs. The assembler will generate code with x = 0. ’b’ represents a bit field designator which selects the number of the bit affected by the operation. for an oscillator frequency of 4 MHz. If ’d’ is one. FIGURE 13-1: TABLE 13-1: Field f W b k x OPCODE FIELD DESCRIPTIONS Description GENERAL FORMAT FOR INSTRUCTIONS 0 Byte-oriented file register operations 13 8 7 6 OPCODE d f (FILE #) d = 0 for destination W d = 1 for destination f f = 7-bit file register address Bit-oriented file register operations 13 10 9 7 6 OPCODE b (BIT #) b = 3-bit bit address f = 7-bit file register address Literal and control operations General 13 OPCODE k = 8-bit immediate value CALL and GOTO instructions only 13 11 OPCODE 10 k (literal) 8 7 k (literal) Register file address (0x00 to 0x7F) Working register (accumulator) Bit address within an 8-bit file register Literal field. Thus. the result is placed in the file register specified in the instruction. constant data or label Don't care location (= 0 or 1). do not use the OPTION and TRIS instructions. Table 13-1 shows the opcode field descriptions. In this case. the normal instruction execution time is 1 µs. If a conditional test is true. If ’d’ is zero. For byte-oriented instructions. unless a conditional test is true or the program counter is changed as a result of an instruction. the execution takes two instruction cycles with the second cycle executed as a NOP.

d Add W and f AND W with f Clear f Clear W Complement f Decrement f Decrement f. b f. d f..PD C. Skip if Clear Bit Test f.2 2 1.DC. Operands PIC16F87X INSTRUCTION SET 14-Bit Opcode Description Cycles MSb BYTE-ORIENTED FILE REGISTER OPERATIONS LSb Status Affected Notes ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF f. . the data will be written back with a ’0’. b f.2 1. if the data latch is ’1’ for a pin configured as input and is driven low by an external device. d f. MOVF PORTB.2 1. d f. where applicable. d f. d f.2 1. the value used will be that value present on the pins themselves.2 1. d f.2. the prescaler will be cleared if assigned to the Timer0 module. d f.DC. d f. d = 1).2 BIT-ORIENTED FILE REGISTER OPERATIONS BCF BSF BTFSC BTFSS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW f.2 1. DS30292C-page 136 © 2001 Microchip Technology Inc. d f.PD Z LITERAL AND CONTROL OPERATIONS TO.3 1.Z Z Note 1: When an I/O register is modified as a function of itself ( e.2 1.2 1. Skip if 0 Inclusive OR W with f Move f Move W to f No Operation Rotate Left f through Carry Rotate Right f through Carry Subtract W from f Swap nibbles in f Exclusive OR W with f 1 1 1 1 1 1 1(2) 1 1(2) 1 1 1 1 1 1 1 1 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0111 0101 0001 0001 1001 0011 1011 1010 1111 0100 1000 0000 0000 1101 1100 0010 1110 0110 dfff dfff lfff 0xxx dfff dfff dfff dfff dfff dfff dfff lfff 0xx0 dfff dfff dfff dfff dfff ffff ffff ffff xxxx ffff ffff ffff ffff ffff ffff ffff ffff 0000 ffff ffff ffff ffff ffff C.2 3 3 C.PIC16F87X TABLE 13-2: Mnemonic. 1). d f. b k k k k k k k k k Bit Clear f Bit Set f Bit Test f. Skip if 0 Increment f Increment f. d f.2 1. d f f. d f f.Z Z 1. Skip if Set Add literal and W AND literal with W Call subroutine Clear Watchdog Timer Go to address Inclusive OR literal with W Move literal to W Return from interrupt Return with literal in W Return from Subroutine Go into standby mode Subtract W from literal Exclusive OR literal with W 1 1 1 (2) 1 (2) 1 1 2 1 2 1 1 2 2 2 1 1 1 01 01 01 01 11 11 10 00 10 11 11 00 11 00 00 11 11 00bb 01bb 10bb 11bb 111x 1001 0kkk 0000 1kkk 1000 00xx 0000 01xx 0000 0000 110x 1010 bfff bfff bfff bfff kkkk kkkk kkkk 0110 kkkk kkkk kkkk 0000 kkkk 0000 0110 kkkk kkkk ffff ffff ffff ffff kkkk kkkk kkkk 0100 kkkk kkkk kkkk 1001 kkkk 1000 0011 kkkk kkkk 1.Z Z TO. Note: Additional information on the mid-range instruction set is available in the PICmicro™ Mid-Range MCU Family Reference Manual (DS33023).DC. 3: If Program Counter (PC) is modified.Z Z Z Z Z Z Z Z Z 1.2. or a conditional test is true.2 1. b f. 2: If this instruction is executed on the TMR0 register (and. The second cycle is executed as a NOP.3 1.2 1.g. For example.2 C C C.DC. the instruction requires two cycles.

© 2001 Microchip Technology Inc. DC. in register 'f'.1] (W) + (f) → (destination) C.AND. Operation: Status Affected: Description: k BCF Syntax: Operands: Bit Clear f [label] BCF 0 ≤ f ≤ 127 0≤b≤7 0 → (f<b>) None Bit 'b' in register 'f' is cleared. f. The result is placed in the W register. making this a 2TCY instruction.b ADDWF Syntax: Operands: Operation: Status Affected: Description: Add W and f [label] ADDWF 0 ≤ f ≤ 127 d ∈ [0. If ’d’ is 0. Skip if Clear [label] BTFSC f. (f) → (destination) Z AND the W register with register 'f'. and a NOP is executed instead. Z The contents of the W register are added to the eight bit literal ’k’ and the result is placed in the W register. the result is stored back in register ’f’. is '0'. If bit 'b' is '1'. DS30292C-page 137 .d BTFSC Syntax: Operands: Operation: Status Affected: Description: Bit Test. If ’d’ is 1. DC.b ANDLW Syntax: Operands: Operation: Status Affected: Description: AND Literal with W [label] ANDLW 0 ≤ k ≤ 255 (W) . the result is stored back in register 'f'. f. the next instruction is discarded.b 0 ≤ f ≤ 127 0≤b≤7 skip if (f<b>) = 0 None If bit 'b' in register 'f' is '1'.d BSF Syntax: Operands: Operation: Status Affected: Description: Bit Set f [label] BSF 0 ≤ f ≤ 127 0≤b≤7 1 → (f<b>) None Bit 'b' in register 'f' is set. the result is stored in the W register.PIC16F87X 13.AND.1] (W) .b 0 ≤ f ≤ 127 0≤b<7 skip if (f<b>) = 1 None If bit 'b' in register 'f' is '0'. the next instruction is executed. making this a 2TCY instruction. If bit 'b'. f. Z Add the contents of the W register with register ’f’. the next instruction is executed. Skip if Set [label] BTFSS f. If 'd' is 1. then the next instruction is discarded and a NOP is executed instead. f. (k) → (W) Z The contents of W register are AND’ed with the eight bit literal 'k'. k BTFSS Syntax: Operands: Operation: Status Affected: Description: Bit Test f. If 'd' is 0. the result is stored in the W register.1 ADDLW Syntax: Operands: Operation: Status Affected: Description: Instruction Descriptions Add Literal and W [label] ADDLW 0 ≤ k ≤ 255 (W) + k → (W) C. ANDWF Syntax: Operands: Operation: Status Affected: Description: AND W with f [label] ANDWF 0 ≤ f ≤ 127 d ∈ [0.

the result is stored back in register ’f’. Zero bit (Z) is set. If ’d’ is 1.1] (f) .1] (f) → (destination) Z The contents of register ’f’ are complemented. (PCLATH<4:3>) → PC<12:11> None Call Subroutine. f COMF Syntax: Operands: Operation: Status Affected: Description: Complement f [ label ] COMF 0 ≤ f ≤ 127 d ∈ [0. Status Affected: Description: CLRF Syntax: Operands: Operation: Status Affected: Description: Clear f [label] CLRF 0 ≤ f ≤ 127 00h → (f) 1→Z Z The contents of register ’f’ are cleared and the Z bit is set. k → PC<10:0>. 1 → TO 1 → PD TO. . If ’d’ is 0. the result is stored back in register ’f’. The upper bits of the PC are loaded from PCLATH. the result is stored in W. the result is stored in the W register.d 0 ≤ f ≤ 127 d ∈ [0. Status Affected: Description: CLRWDT Syntax: Operands: Operation: Clear Watchdog Timer [ label ] CLRWDT None 00h → WDT 0 → WDT prescaler. CALL is a two-cycle instruction. If ’d’ is 0. Status bits TO and PD are set. First. DECF Syntax: Operands: Operation: Status Affected: Description: Decrement f [label] DECF f.1 → (destination) Z Decrement register ’f’. It also resets the prescaler of the WDT.d CLRW Syntax: Operands: Operation: Status Affected: Description: Clear W [ label ] CLRW None 00h → (W) 1→Z Z W register is cleared. DS30292C-page 138 © 2001 Microchip Technology Inc. f. The eleven-bit immediate address is loaded into PC bits <10:0>. PD CLRWDT instruction resets the Watchdog Timer.PIC16F87X CALL Syntax: Operands: Operation: Call Subroutine [ label ] CALL k 0 ≤ k ≤ 2047 (PC)+ 1→ TOS. return address (PC+1) is pushed onto the stack. If ’d’ is 1.

If ’d’ is 0.1 → (destination). skip if result = 0 None The contents of register ’f’ are incremented. IORWF Syntax: Operands: Operation: Status Affected: Description: Inclusive OR W with f [ label ] IORWF f. © 2001 Microchip Technology Inc.1] (f) . the result is placed back in register ’f’. If ’d’ is 0. Skip if 0 [ label ] DECFSZ f. a NOP is executed instead. If the result is 1. If the result is 0. The result is placed in the W register. If ’d’ is 1. IORLW Syntax: Operands: Operation: Status Affected: Description: Inclusive OR Literal with W [ label ] IORLW k 0 ≤ k ≤ 255 (W) . the result is placed in the W register. the result is placed in the W register. GOTO is a twocycle instruction.1] (W) .d 0 ≤ f ≤ 127 d ∈ [0. Skip if 0 [ label ] INCFSZ f. then a NOP is executed instead making it a 2TCY instruction. If the result is 0. skip if result = 0 None The contents of register ’f’ are decremented. DS30292C-page 139 . If ’d’ is 0. the result is placed back in register ’f’. making it a 2TCY instruction.1] (f) + 1 → (destination) Z The contents of register ’f’ are incremented. INCFSZ Syntax: Operands: Operation: Status Affected: Description: Increment f.OR. the next instruction is executed.d 0 ≤ f ≤ 127 d ∈ [0.d 0 ≤ f ≤ 127 d ∈ [0. If the result is 1. k → (W) Z The contents of the W register are OR’ed with the eight bit literal 'k'. If ’d’ is 1.d 0 ≤ f ≤ 127 d ∈ [0. If 'd' is 0 the result is placed in the W register. (f) → (destination) Z Inclusive OR the W register with register 'f'. the next instruction is executed. If 'd' is 1 the result is placed back in register 'f'. If ’d’ is 1. GOTO Syntax: Operands: Operation: Status Affected: Description: Unconditional Branch [ label ] GOTO k 0 ≤ k ≤ 2047 k → PC<10:0> PCLATH<4:3> → PC<12:11> None GOTO is an unconditional branch. The upper bits of PC are loaded from PCLATH<4:3>.PIC16F87X DECFSZ Syntax: Operands: Operation: Status Affected: Description: Decrement f. INCF Syntax: Operands: Operation: Status Affected: Description: Increment f [ label ] INCF f.1] (f) + 1 → (destination). The eleven-bit immediate value is loaded into PC bits <10:0>.OR. the result is placed back in register ’f’. the result is placed in the W register.

DS30292C-page 140 © 2001 Microchip Technology Inc. 1 → GIE None RETFIE MOVWF Syntax: Operands: Operation: Status Affected: Description: Move W to f [ label ] (W) → (f) None Move data from W register to register 'f'. the destination is file register f itself. TOS → PC None The W register is loaded with the eight bit literal 'k'. destination is W register. . since status flag Z is affected.d 0 ≤ f ≤ 127 d ∈ [0. If d = 0. The program counter is loaded from the top of the stack (the return address). This is a two-cycle instruction. NOP Syntax: Operands: Operation: Status Affected: Description: No Operation [ label ] None No operation None No operation. The don’t cares will assemble as 0’s.1] (f) → (destination) Z The contents of register f are moved to a destination dependant upon the status of d. If d = 1. MOVWF f 0 ≤ f ≤ 127 RETLW Syntax: Operands: Operation: Status Affected: Description: Return with Literal in W [ label ] RETLW k 0 ≤ k ≤ 255 k → (W). d = 1 is useful to test a file register. NOP MOVLW Syntax: Operands: Operation: Status Affected: Description: Move Literal to W [ label ] k → (W) None The eight bit literal ’k’ is loaded into W register.PIC16F87X MOVF Syntax: Operands: Operation: Status Affected: Description: Move f [ label ] MOVF f. MOVLW k 0 ≤ k ≤ 255 RETFIE Syntax: Operands: Operation: Status Affected: Return from Interrupt [ label ] None TOS → PC.

PIC16F87X RLF Syntax: Operands: Operation: Status Affected: Description: Rotate Left f through Carry [ label ] RLF 0 ≤ f ≤ 127 d ∈ [0. If 'd' is 0. f. C Register f SLEEP Syntax: Operands: Operation: [ label ] SLEEP None 00h → WDT. the result is placed back in register ’f’. the result is stored back in register 'f'.d Status Affected: Description: RETURN Syntax: Operands: Operation: Status Affected: Description: Return from Subroutine [ label ] None TOS → PC None Return from subroutine.(W) → (destination) C. If ’d’ is 1. If 'd' is 1. PD The power-down status bit.1] See description below C The contents of register ’f’ are rotated one bit to the left through the Carry Flag. DC. DC. If ’d’ is 1.(W) → (W) The W register is subtracted (2’s complement method) from the eight-bit literal 'k'. If ’d’ is 0. Z Subtract (2’s complement method) W register from register 'f'. the result is placed in the W register. PD is cleared. 1 → TO. Watchdog Timer and its prescaler are cleared. the result is stored back in register ’f’. 0 → PD TO. Z RRF Syntax: Operands: Operation: Status Affected: Description: Rotate Right f through Carry [ label ] RRF f. 0 → WDT prescaler. the result is stored in the W register. RETURN SUBLW Syntax: Operands: Operation: Description: Subtract W from Literal [ label ] SUBLW k 0 ≤ k ≤ 255 k . This is a two-cycle instruction.d 0 ≤ f ≤ 127 d ∈ [0. If ’d’ is 0. C Register f SUBWF Syntax: Operands: Operation: Status Affected: Description: Subtract W from f [ label ] SUBWF f. TO is set. the result is placed in the W register. Time-out status bit.1] (f) . The stack is POPed and the top of the stack (TOS) is loaded into the program counter. The processor is put into SLEEP mode with the oscillator stopped. © 2001 Microchip Technology Inc. Status Affected: C.d 0 ≤ f ≤ 127 d ∈ [0. The result is placed in the W register. DS30292C-page 141 .1] See description below C The contents of register ’f’ are rotated one bit to the right through the Carry Flag.

the result is stored in the W register. The result is placed in the W register.d 0 ≤ f ≤ 127 d ∈ [0. XORLW Syntax: Operands: Operation: Status Affected: Description: Exclusive OR Literal with W [label] XORLW k 0 ≤ k ≤ 255 (W) . If ’d’ is 1. the result is placed in register ’f’. XORWF Syntax: Operands: Operation: Status Affected: Description: Exclusive OR W with f [label] XORWF f. If ’d’ is 0.PIC16F87X SWAPF Syntax: Operands: Operation: Status Affected: Description: Swap Nibbles in f [ label ] SWAPF f.1] (W) . the result is placed in the W register. (f) → (destination) Z Exclusive OR the contents of the W register with register 'f'.1] (f<3:0>) → (destination<7:4>). k → (W) Z The contents of the W register are XOR’ed with the eight-bit literal 'k'. the result is stored back in register 'f'.XOR. If 'd' is 1. (f<7:4>) → (destination<3:0>) None The upper and lower nibbles of register ’f’ are exchanged. If 'd' is 0.XOR.d 0 ≤ f ≤ 127 d ∈ [0. . DS30292C-page 142 © 2001 Microchip Technology Inc.