PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par...

26
Gé nie Electronique 2i è me anné e de formation Programmation Structuré e ProgStruct.doc JMT 1/26 PROGRAMMATION STRUCTUREE DES PIC 16F877 Ce document contient les informations concernant la pratique d une programmation structur é e pour un PIC 16F877.par l utilisation des fonctions des librairies Les points suivants successivement sont abord é s : Structure du fichier principal et du programme Dé finition des fonctions de test des modules p é riphé riques Dé finition des fonctions de librairie communes Dé finition des fonctions de librairie sp é cifiques aux modules p é riphé riques

Transcript of PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par...

Page 1: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 1/26

PROGRAMMATION STRUCTUREE DES PIC 16F877

Ce document contient les informations concernant la pratique d’uneprogrammation structuré e pour un PIC 16F877.par l’utilisation

des fonctions des librairies

Les points suivants successivement sont abordé s :

Ø Structure du fichier principal et du programme

Ø Dé finition des fonctions de test des modules pé riphé riques

Ø Dé finition des fonctions de librairie communes

Ø Dé finition des fonctions de librairie spé cifiques aux modules pé riphé riques

Page 2: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 2/26

STRUCTURE DU PROGRAMME

Toutes les fonctions appartiennent au projet 877ORG situés dans le répertoire D:\MPLAB\877org.

Le fichier principal est « 877org.asm ». il contient les déclarations des fonctions utilisés par le projet.

Pour installer une fonction, il faut déclarer son fichier d’ en-tê te « xxx.h » (s’ il existe)et son fichier de librairie « xxx.asm »

Fonctions communes : Certaines déclarations et fonctions sont communes à toutes les fonctions et sontdonc installées définitivement :

Fonctions communes Fichiers d’en-tête Fichier assembleurDéfinition des directives de compilation 877.hDéfinition des constantes pour les pics pic.hDéfinition des variables en RAM ram.hInitialisation du microprocesseur init.asmProgrammes des interruptions it.asmTableaux de messages mess.asmFonctions de temporisations tempo.asmFonctions de conversions diverses math.h convert.asmFonctions mathématiques math.h math.asmDéfinition des macros (simplification de l’ écriture) macros.h

Note : les fichiers « xxx.h » sont déclarés en haut du fichier principal, les fichiers « xxx.asm » en bas.

Fonctions spé cifiques : d’ autres fonctions sont spécifiques et sont donc installées selon le besoin.Pour tester une fonction, plusieurs programmes de test sont disponibles pour la fonction XXX

et regroupés dans un fichier « XXXtst.asm »Les fonctions spécifiques et leur fichier de test sont les suivantes :

Fonctions disponibles Fichier de tests Fichier utilisé s à dé clarerinterface convertisseur A/N cantst.asm can.asminterface pour affichage sur LCD lcdtst.asm lcd.asm, lcd.hvoltmè tre utilisant A/N et LCD voltst.asm can.asm, lcd.asm, lcd.hcommande de moteur en mode PWM pwmtst.asm (1à5) pwm.asm, can.asmasservissement de vitesse moteur (PWM) pwmtst.asm (6) asserv.asm, pwm.asm, can.asminterface circuit horloge DS1306/DS1302 hortst.asm hor.asm, hor.hinterface circuit mémoire DS1306/DS1302 memtst.asm mem.asm, mem.hinterface clavier 12 ou 16 touches keytst.asm key.asminterface pour 4 boutons poussoirs bptst.asm bp.asminterface affichage multiplexé 4 x 7 segments afftst.asm aff.asminterface EEPROM et PROM Flash promtst.asm prom.asm

Pour utiliser une fonction, il suffit de l’ invoquer dans le programme en insérant une ligne avec lacommande LIBcall :Exemple : movlw ‘C’ ; affecte le code ASCII du caractè re ‘C’ dans W

LIBcall LCDcar ; appel du sous-programme ‘LCDcar’ qui affiche; le caractè re contenu dans W sur le LCD.

Fonction : partie de logiciel (sous-programme ) qui exécute une ou plusieurs actions. Elle peut recevoirune ou des informations et fournir une ou des informations en retour.Déclaration : indication donnée au programme de compilation (MPLAB)afin d’ inclure un autre fichierdans le projet.

Page 3: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 3/26

STRUCTURE DU FICHIER PRINCIPAL

;*******************************************************************************; Fichier : 877org.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************;; Programme de test des pé riphé riques du pic 16F877;;*******************************************************************************; Avec l'utilisation de l'é mulateur, les adresses suivantes sont interdites:;; Mé moire Programme : 0x1F00 à 0x1FFF; Mé moire RAM : 0x70, 0xF0, 0x170, 0x1F0, 0x1EB à 0x1EF;*******************************************************************************

;-------------------------------------------------------------------------------; Fichiers de Dé finitions;-------------------------------------------------------------------------------

include "877.h" ; 1-Dé finition des directives de compilationinclude "pic.h" ; 2-Dé finition des constantes pour les picsinclude "ram.h" ; 3-Dé finition des variables en RAMinclude "math.h" ; 4-Dé finition des variables des fonctions mathé matiquesinclude "macros.h" ; 5-Dé finition des macros (Affichage LCD, ...)

; include "lcd.h" ; Dé finition pour le LCDinclude "aff.h" ; Dé finition pour l’affichage 7 SEGMENTS

;-------------------------------------------------------------------------------; Dé finition des Vecteurs IT et RESET;-------------------------------------------------------------------------------

ORG 0x0000 ; l'instruction qui suit est stocké e à l'adresse 0000Hgoto Main

;-------------------------------------------------------------------------------; Programme principal;-------------------------------------------------------------------------------Main ORG 00030h ; dé but du code en $0030

call init ; appel sous-prog initialisation gé né rale

Boucle

; LIBgoto tstXXXX ; test de pé riphé riques

goto Programme ; appel du programme de l‘objet technique (sans retour)

Page 4: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 4/26

;-------------------------------------------------------------------------------; Inclusions des Fichiers : pour dé clarer un fichier, enlever le point-virgule;; >>> LES FICHIERS MARQUES D'UNE ETOILE (*) NE DOIVENT PAS ETRE MASQUES <<<;-------------------------------------------------------------------------------; Nom du Fichier ; Page mé moire Contenu

;SETPAGE 0 ; origine du code en page 0 (macro) = 0x00xxinclude "init.asm" ; 0 * initialisation de base du microprocesseurinclude "it.asm" ; 0 * programmes des interruptions

;;

include "MonProg.asm" ; 0 Fichier Programme de l'objet technique;;

SETPAGE 1 ; origine du code en page 1 (macro) = 0x08xx;;

;***************** FONCTIONS DE TEST DES LIBRAIRIES ********************SETPAGE 2 ; origine du code en page 2 (macro)

; include "asserv.asm" ; 2 fonctions pour un asservissement de moteur; include "cantst.asm" ; 2 test du Convertisseur AN; include "lcdtst.asm" ; 2 test de l'afficheur LCD; include "afftst.asm" ; 2 fonctions d'affichage multiplexé à 7 segments; include "voltst.asm" ; 2 voltmè tre : exemple CAN et LCD; include "pwmtst.asm" ; 2 test du gé né rateur de PWM (MLI); include "hortst.asm" ; 2 test de l'horloge DS1302/06; include "memtst.asm" ; 2 test de la mé moire DS1302/06; include "keytst.asm" ; 2 test du clavier 12/16 touches

include "bptst.asm" ; 2 test des boutons poussoirs; include "afftst.asm" ; 2 test affichage multiplexé à 7 segments; include "promtst.asm" ; 2 test de l'EEPROM et de la PROM Flash

;;

;********************** FONCTIONS DES LIBRAIRIES ***********************SETPAGE 3 ; origine du code en page 3 (macro) = 0x18xxinclude "mess.asm" ; 3 * tableaux de messagesinclude "tempo.asm" ; 3 * fonctions de temporisationsinclude "convert.asm" ; 3 * fonctions de conversions diversesinclude "math.asm" ; 3 * fonctions mathé matiquesinclude "can.asm" ; 3 * fonctions de conversion Analogique-Numé rique

;; include "lcd.asm" ; 3 fonctions d'affichage sur le LCD (+ LCD.H !)

include "aff.asm" ; 3 fonctions d'affichage 4 x 7 segments (+ AFF.H !); include "pwm.asm" ; 3 fonctions de gestion de la PWM

include "hor.asm" ; 3 fonctions de gestion de l'horloge DS1302/06; include "mem.asm" ; 3 fonctions de gestion de la mé moire DS1302/06

;; include "key.asm" ; 3 fonctions de gestion du clavier 12/16 Touches include "bp.asm" ; 3 fonctions pour 4 boutons poussoirs; include "prom.asm" ; 3 fonctions de gestion de l'EEPROM et de la PROM Flash

;;

SETPAGE -1 ; fin du code, termine la pagination

;-------------------------------------------------------------------------------; Directive de fin de programme;-------------------------------------------------------------------------------

end

Page 5: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 5/26

LISTE DES FICHIERS DE TEST

; cantst.asm interface convertisseur A/N; lcdtst.asm interface pour LCD; afftst.asm interface affichage multiplexé à 7 segments; voltst.asm voltmè tre utilisant A/N et LCD; pwmtst.asm systè me de commande PWM

hortst.asm interface circuit horloge DS1306/DS1302; memtst.asm interface circuit mé moire DS1306/DS1302; keytst.asm interface clavier 12 touches; bptst.asm interface pour 4 boutons poussoirs; promtst.asm interface EEPROM et PROM Flash

DEFINITION DES FONCTIONS DE TEST

;*******************************************************************************; Fichier : lcdtst.asm; Date : 27.03.02; Version : V2.01;; né cessite : lcd.asm + lcd.h;*******************************************************************************; Programme de test des fonctions de l'afficheur LCD

; tstLCD1 : affiche un message contenu dans une table en ROM; tstLCD2 : affiche le contenu du port D (en entré e !); tstLCD3 : affiche des lines de '*', '-', '+' et '.'; tstLCD4 : affiche la valeur du convertisseur sur le LCD + le port D; La conversion est sous IT - né cessite "CAN.ASM"; L'affichage utilise le Buffer d'é cran et affiche sous IT;*******************************************************************************

;*******************************************************************************; Fichier : afftst.asm; Date : 27.04.02; Version : V2.01;; né cessite le fichier AFF.ASM;*******************************************************************************; Programme de test des fonctions d'un affichage multiplexé 7 segments;; tstAFF1 : test des sorties BCD; tstAFF2 : test des sorties de commande des afficheurs; tstAFF3 : Affiche 12h34 au rythme de une seconde par chiffre; tstAFF4 : Affiche 17h35 à la vitesse standard : 2 ms par chiffre;*******************************************************************************

Page 6: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 6/26

;*******************************************************************************; Fichier : cantst.asm; Date : 27.03.02; Version : V2.01;; né cessite le fichier CAN.ASM;*******************************************************************************; Programme de test des fonctions du convertisseur AN;; tstCAN1 : appels des fonctions de base.; tstCAN2 : appel de la fonction de conversion immé diate; tstCAN3 : utilise la conversion sous IT avec moyenne glissante.;; Ces fonctions affichent le ré sultat de conversion sur 8 leds du port D.; Selon l'é tat de l'entré e RB4, une led parmi 6 est allumé e; ou la valeur binaire est affiché e.;; ==> Voir le fichier volt.asm qui utilise la conversion sur 10 bits.;*******************************************************************************

;*******************************************************************************; Fichier : voltst.asm; Date : 27.03.02; Version : V2.01;; né cessite : can.asm + lcd.asm + lcd.h;*******************************************************************************; Programme de test des fonctions Conversion et Affichage LCD;; tstVolt1 : affiche la valeur du convertisseur sur le LCD + le port D; La conversion est sous IT.; L'affichage utilise le Buffer d'é cran et affiche sous IT;; tstVolt2 : mesure la tension broche RA0 et affiche sur le LCD; la conversion fonctionne sous IT (2ms) et fournit; une valeur moyenne du ré sultat en mode 8 bits et 10 bits;; volt8b : val 8 bits (val1) en val de ddp 3 digits --> 0.00 à 5.00; volt10b : val 10 bits (val1H + valL) en val de ddp 3 digits --> 0.00 à 5.00; volt3dig : val 16 bits (val1H + valL) en dé cimal 3 digits (X.YY) --> 0.00 à 5.00;*******************************************************************************

;*******************************************************************************; Fichier : pwmtst.asm; Date : 15.04.02; Version : V2.01;; né cessite le fichier PWM.ASM + CAN.ASM + ASSERV.ASM POUR test 6;*******************************************************************************; Programmes de test des fonctions PWM;; tstPWM1 : Lance la PWM à f=20kHz et Rapport Cyclique=50 %; tstPWM2 : fait varier le rapport cyclique de 50 à 100 % - f=20 kHz; tstPWM3 : permet de ré gler la fré quence et le rapport cyclique.; La tension sur l'entré e RA0 rè gle; si RB4=1: la fré quence si RB5=1: le rapport cyclique;; * tstPWM4 : Lance la PWM à f= 20kHz et RapCyc ré glable par U(RA0); * tstPWM5 : Sé quence de commande du sens de rotation de moteur; * tstPWM6 : Lance la PWM à f= 20kHz - RapCyc ASSERVI pour 2 volts sur RA0;*******************************************************************************

Page 7: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 7/26

;*******************************************************************************; Fichier : hortst.asm; Date : 16.04.02; Version : V2.01; né cessite : hortst.asm + hor.asm; pour les tests 6 et 7 : né cessite en plus : lcd.asm et lcd.h; pour les tests 8 et 9 : né cessite en plus : aff.asm et aff.h;*******************************************************************************; Programme de test des fonctions pour l'horloge DS1302/1306; tstHOR1 : permet de visualiser une lecture de l'horloge (oscilloscope); tstHOR2 : permet de visualiser une é criture vers l'horloge (oscilloscope); tstHOR3 : lit et affiche les secondes sur PORTD + sur LCD si connecté !; tstHOR4 : lit et affiche les secondes sur PORTD + sur LCD si connecté !; é crit 12s dans l'horloge si RB5=0 (bouton poussoir!); active la sortie 1Hz selon les dizaines de secondes (DS1306); tstHOR5 : lit et affiche les secondes sur PORTD + sur LCD si connecté !; ajoute 15 aux secondes si RB5=0 (bouton poussoir!); attends RB5=1 pour é crire dans l'horloge; enlè ve 10 aux secondes si RB4=0 (bouton poussoir!); attends RB4=1 pour é crire dans l'horloge; tstHOR6 : lit et affiche la date complè te sur le LCD (INDISPENSABLE!); tstHOR7 : utilise le tableau de donné es pour le transfert des informations; permet d'effectuer une mise à l'heure de l'horloge (voir hor.asm); tstHOR8 : lit et affiche heures et minutes sur le 7 SEGMENTS; tstHOR9 : utilise le tableau de donné es pour le transfert des informations;*******************************************************************************

;*******************************************************************************; Fichier : memtst.asm; Date : 16.04.02; Version : V2.01; né cessite : mem.asm;*******************************************************************************; Programme de test des fonctions pour la mé moire DS1302/1306; tstMEM1 : permet de visualiser une lecture de la mé moire (oscilloscope); tstMEM2 : permet de visualiser une é criture dans la mé moire (oscilloscope); tstMEM3 : pour visualiser une lecture/é criture de la mé moire à l'oscilloscope; tstMEM4 : Test de lecture - é criture par Boutons Poussoirs sur RB4 et RB5; tstMEM5 : é criture et lecture en rafale (burst) - LCD indispensable; tstMEM6 : idem tstMEM5 MAIS: remplissage de toute la mé moire;*******************************************************************************

;*******************************************************************************; Fichier : keytst.asm; Date : 28.04.02; Version : V2.01; né cessite le fichier KEY.ASM + LCD.ASM + LCD.H;*******************************************************************************; Programme de test des fonctions de lecture du clavier 12 touches; tstKEY1 : lit le clavier et affiche la touche appuyé e; tstKEY2 : attends une touche et affiche la touche appuyé e;*******************************************************************************

;*******************************************************************************; Fichier : bptst.asm; Date : 28.04.02; Version : V2.01; né cessite les fichiers : BP.ASM + AFF.ASM + AFF.H;*******************************************************************************; Programme de test des fonctions de lecture des boutons poussoirs; tstBP1 : lit les boutons et affiche le numé ro; tstBP2 : attends un bouton et affiche le numé ro; tstBP3 : incré mente les heures ou les minutes si BPplus et BPhrs ou BPmin;*******************************************************************************

Page 8: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 8/26

LISTE DES FICHIERS DES LIBRAIRIES

;************************ FICHIERS DE DEFINITION *************************include "877.h" ; Dé finition des directives de compilationinclude "ram.h" ; Dé finition des variables en RAMinclude "macros.h" ; Dé finition des macros (Affichage LCD, ...)

;********************* FICHIERS DES LIBRAIRIES COMMUNES *********************include "init.asm" ; 0 * initialisation de base du microprocesseurinclude "it.asm" ; 0 * programmes des interruptions

;********************** FICHIERS DES LIBRAIRIES SPECIFIQUES ******************include "mess.asm" ; 3 * tableaux de messagesinclude "tempo.asm" ; 3 * fonctions de temporisationsinclude "convert.asm" ; 3 * fonctions de conversions diversesinclude "math.asm" ; 3 * fonctions mathé matiquesinclude "can.asm" ; 3 * fonctions de conversion Analogique - Numé riqueinclude "math.h" ; Dé finition des variables des fonctions mathé matiques

;; include "lcd.asm" ; 3 fonctions d'affichage sur le LCD; include "lcd.h" ; Dé finition pour le LCD

include "aff.asm" ; 3 fonctions d'affichage 4 x 7 segmentsinclude "aff.h" ; Dé finition pour le 7 SEGMENTS

; include "pwm.asm" ; 3 fonctions de gestion de la PWM; include "asserv.asm" ; 2 fonctions pour un asservissement de moteur

include "hor.asm" ; 3 fonctions de gestion de l'horloge DS1302/06; include "hor.h" ; Dé finition pour l’horloge

; include "mem.asm" ; 3 fonctions de gestion de la mé moire DS1302/06; include "mem.h" ; Dé finition pour la mé moire

;; include "key.asm" ; 3 fonctions de gestion du clavier 12/16 Touches include "bp.asm" ; 3 fonctions pour 4 boutons poussoirs

LES FONCTIONS CONTENUES DANS CES FICHIERS

SONT DEFINIES DANS LES PAGES SUIVANTES

Page 9: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 9/26

FICHIERS DE DEFINITION

;*******************************************************************************; Fichier : 877.h; Date : 27.03.02; Version : V1.01;*******************************************************************************; Dé finition des directives de compilation

LIST P=16F877,F=INHX8M,X=OFF ; list directive to define processor

; ERRORLEVEL -301 ; supprime messages de changement de pagesERRORLEVEL -302 ; supprime messages de vé rification de bank

; ERRORLEVEL -306 ; supprime messages de vé rification de pagesERRORLEVEL -307 ; supprime messages d'affectation de pages

PROCESSOR 16F877 ; type de microprocesseur

RADIX HEX ; valeurs en hexadé cimal par dé faut !; RADIX DEC ; valeurs en dé cimal par dé faut !

#include <P16F877.INC> ; Fichier pour les dé finitions spé cifiques

__BADRAM 0x70,0xF0,0x170,0x1F0,0x1EB-0x1EF ; ré servé au programmateur

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC; __CONFIG H'3F31' ; ----- PIC 16F877 -----

; B13-12: code protection, 11=off; B11: mode debug, 1=off; B10: = 1; B9: Ecriture en Flash par EECON, 1=validé e; B8: EEPROM protection code, 0=validé e; B7: Programmation basse tension (RB3), 1=validé e; B6: Reset enable bit, 1=validé; B5-4: Code protection, 11=off; B3: Power Up timer, 0=validé; B2: Watchdog, 1=validé; B1-0: OSC SELECT, 01=XT, 11=RC, 10=HS, 00=LP;; 13 12 - 11 10 9 8 - 7 6 5 4 - 3 2 1 0; 1 1 1 1 1 1 - 0 0 1 1 - 0 0 0 1; 3 F 3 1

__IDLOCS H'1234' ; Octet d'identification

Page 10: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 10/26

;*******************************************************************************; Fichier : ram.h; Date : 27.03.02; Version : V2.01;*******************************************************************************; Dé finitions des variables par blocs

; Avec l'utilisation de l'é mulateur, les adresses suivantes sont interdites:; 0x70, 0xF0, 0x170, 0x1F0, 0x1EB à 0x1EF;*******************************************************************************

;-------------------------------------------------------------------------------; Zone de 15 octets communes à TOUTES les BANQUES :; bank 0 : 0x071 à 0x07F |; bank 1 : 0x0F1 à 0x0FF | au total,; bank 2 : 0x171 à 0x17F | 15 adresses; bank 3 : 0x1F1 à 0x1FF |;-------------------------------------------------------------------------------

CBLOCK 0x071 ; 15 variables : 0x071 à 0x07F; Variables temporaires pour manipulation d'adresses --- 4MemAdr:2 ; adresse (pour l'eeprom et la flash)MemDat:2 ; donné e (pour l'eeprom et la flash); pour les interruptions ----------------- 7Svg_WR ; Sauvegarde W lors d'une interruptionSvg_ST ; Sauvegarde Status lors d'une interruptionSvg_PC ; Sauvegarde PCLATH lors d'une interruptionCptrIt ; compteur des IT du timer 1SVGintcon ; sauvegarde la configuration des ITIT1per:2 ; pé riode des IT timer 1 (16 bits)

ENDCCBLOCK 0x071

MemAdrH,MemAdrL ; | Redé finition pour utilisationMemDatH,MemDatL ; | un seul octet à la fois !

ENDCCBLOCK 0x071

MemAdrH,MemAdrL ; | Redé finition pour utilisationindcar,indtxt ; | avec l'affichage de textes sur LCD !

ENDC

;-------------------------------------------------------------------------------; RAM BANK0 : 0x020 à 0x07F; 0x020 à 0x06F : 80 octets; 0x070 : 1 octet ré servé programmateur; 0x071 à 0x07F : 15 octets zone commune;-------------------------------------------------------------------------------

CBLOCK 0x020 ; 80 variables : 0x020 à 0x06F; pour les programmes de test ------------ 4TmpVal,TmpAff ; pour les testsTmpBP,SvgBP ; pour les tests; pour MON PROGRAMME --------------------- 15Commande ; Commande du superviseurOldcmde ; mé moire ancienne commandeCmdvit,Sens ; commandes pour le moteurOldsens ; mé moire ancienne commande moteurCourmax ; Valeur du courant maximalCourtmp ; Variable de calculCour1, Cour2 ; Valeurs de courant max selon la commandeCour3, Cour4 ; Valeurs de courant max selon la commandeTempocour ; tempo pour le test courantErrcour ; drapeau Erreur courant moteurK7deb, K7fin ; drapeaux dé but et fin de K7

ENDC

Page 11: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 11/26

;-------------------------------------------------------------------------------; RAM BANK1 : 0xA0 à 0x0FF; 0x0A0 à 0x0EF : 80 octets; 0x0F0 : 1 octet ré servé programmateur; 0x0F1 à 0x0FF : 15 octets zone commune;-------------------------------------------------------------------------------

CBLOCK 0x0A0 ; 80 variables : 0x0A0 à 0x0EF (25); pour les fonctions de conversions------- 16CnvVar:16 ; lcdsup.asm + math.asm + convert.asm; pour les Temporisations ---------------- 4Tempo1,Tempo2 ; compteurs etTempo3,Tempo4 ; variables temporaires; pour le Clavier ------------------------ 3KEYbcd ; valeur de la touche en BCDKEYascii ; valeur de la touche en AsciiKEYtmp ; variable temporaire (sauvegarde); pour les Boutons ----------------------- 2BPval ; valeur du port des boutons (1 si appuyé )BPbusy ; drapeau pour attendre bp relachéBPtmp ; variable temporaire (sauvegarde)

ENDC

;-------------------------------------------------------------------------------; RAM BANK02 : 0x110 à 0x17F; 0x110 à 0x16F : 96 octets; 0x170 : 1 octet ré servé programmateur; 0x171 à 0x17F : 15 octets zone commune;-------------------------------------------------------------------------------

CBLOCK 0x110 ; 96 variables : 0x110 à 0x16FENDC

;-------------------------------------------------------------------------------; RAM BANK3 : 0x190 à 0x1FF; 0x190 à 0x1EC : 80 octets; 0x1EB-0x1EF : 5 octets ré servé s programmateur; 0x1F0 : 1 octet ré servé programmateur; 0x1F1 à 0x1FF : 15 octets zone commune;-------------------------------------------------------------------------------

CBLOCK 0x190 ; 92 variables : 0x190 à 0x1EC (90); pour l'afficheur LCD sous IT ----------- 33LCDbuf:0x20 ; buffer de 32 octetsLCDbufptr ; pointeur sur le buffer; pour l'afficheur LCD ------------------- 5LCDtmp,LCDcpt ; variables temporairesLCDind,LCDbus ; index pour les textes, Test busyLCDvalit ; validation de l'affichage sous IT; pour l'affichage 7 segments ------------ 6AFFmin ; nombre de minutes à afficher (00-59)AFFhrs ; nombre d'heures à afficher (00-23)AFFnumdig ; mé moire du digit à afficherAFFtmp ; variable temporaire (calculs)CptritAff ; Compteur d'it pour l'affichage 7 segmentsTempoitAff ; Valeur de Temporisation pour l'affichage; pour le convertisseur AN --------------- 5CANtmp ; tempo pour la CANCANmoy8 ; valeur moyenne de la conversion sous IT ( 8 bits)CANmoy16:2 ; valeur moyenne de la conversion sous IT (16 bits)CANvalit ; validation de la conversion sous IT; pour la PWM ---------------------------- 6PWMfre ; valeur de la fré quence en 1/10° kHzPWMrap ; valeur du Rapport CycliquePWMpr2 ; valeur du registre PR2 (fré quence)PWMcc1 ; valeur du registre CCPR1L (rapport cyclique)PWMdiv ; sauvegarde du pré diviseur (TMR2div)PWMtmp ; variable temporaire

Page 12: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 12/26

; pour l'Asservissement ------------------ 5ASScon ; Consigne de l'asservissementASStmp ; variable temporaireASSval ; variable temporaire (valeurs)CptritAss ; Compteur d'it pour l'asservissementTempoitAss ; Valeur de Temporisation pour l'asservissement (ms); pour l'Horloge ------------------------- 3HORdata ; donné e à é crire ou lue dans l'horlogeHORtmp ; variable temporaireHORcpt ; compteur de bits; pour l'Horloge : Tableau de donné es ---- 15HORsec ; secondes (00-59)HORmin ; minutes (00-59)HORhrs ; heures (00-23)HORjour ; jours de semaine (01-07)HORdate ; dates (01-31)HORmois ; mois (01-12)HORanne ; anné es (00-99)HORsecAL0 ; alarme 0 : secondesHORminAL0 ; alarme 0 : minutesHORhrsAL0 ; alarme 0 : heuresHORjourAL0 ; alarme 0 : jour de la semaineHORsecAL1 ; alarme 1 : secondesHORminAL1 ; alarme 1 : minutesHORhrsAL1 ; alarme 1 : heuresHORjourAL1 ; alarme 1 : jour de la semaine; pour la Mé moire ------------------------ 12MEMdata ; donné e à é crire ou lue dans la mé moireMEMtmp ; variable temporaireMEMcpt ; compteur de bitsMEMsize ; taille du transfert en rafale (burst)MEMtab:8 ; Tableau de donné es pour le burst

ENDC

;*******************************************************************************; Fichier : macros.h; Date : 27.03.02; Version : V2.01;*******************************************************************************; Macros de programmation pour la simplification de l'é criture des programmes :;; LCDtxt NomMessage : Affichage d'une chaine de caractè res; LIBcall NomFonction : Appel d'une fonction de la librairie (au lieu de call); LIBgoto NomFonction : Appel d'une fonction de la librairie (au lieu de goto); Getval <Variable> : Charge dans W la valeur d'une variable; Setval <Variable> : Charge le contenu de W dans une variable;; Macros de pagination :;; SETPAGE NumPage : Change la page programme courante; et vé rifie les dé passements de page !;;*******************************************************************************

Page 13: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 13/26

FICHIERS DES LIBRAIRIES COMMUNES

;*******************************************************************************; Fichier : init.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Routines d'initialisation du microprocesseur;; Init : initialisation des ports et des registres; RazRam : initialisation des zones RAM (mise à zé ro); InitPorts : initialisation des ports et registres;*******************************************************************************

;*******************************************************************************; Fichier : it.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Programmes des interruptions à placer en page 0 !

; InitItT : initialisation des IT; Les autres fonctions sont appelé es de maniè re interne :; ProgIT : programme principal d'interruption; it_TIMER0 : Programme de l'interruption Timer 0; it_TIMER1 : Programme de l'interruption Timer 1; RunItTim1 : relance une pé riode du timer 1; IT1percal : calcule la pé riode des IT du timer 1;;*******************************************************************************; VARIABLES à dé finir dans le programme principal "dans le bloc commun" :;; Svg_WR ; Sauvegarde Registre W lors d'une interruption; Svg_ST ; Sauvegarde STATUS lors d'une interruption; Svg_PC ; Sauvegarde PCLATH lors d'une interruption; CptrIt ; compteur des IT du timer 1; SVGintcon ; sauve INTCON pour arrê t momentané des IT; IT1per:2 ; pé riode des IT timer 1 (16 bits);*******************************************************************************

;*******************************************************************************; Fichier : mess.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************;; Tableaux de messages texte ou de constantes en mé moire ROM,; Bienvenue : affiche un message de pré sentation au dé marrage; Mess0 : Message de bienvenue ligne 1; Mess1 : Message de bienvenue ligne 2; Mess2 : Message de bienvenue ligne 1; Mess3 : Message de bienvenue ligne 2; Mess4 : Texte de premiè re ligne du voltmè tre; Mess5 : Texte de base de 2eme ligne du voltmè tre;*******************************************************************************

Page 14: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 14/26

;*******************************************************************************; Fichier : tempo.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Routines offrant plusieurs temporisations;; Tempo10us : temporisation de W fois 10 µs; Tempo100us : temporisation de W fois 100 µs; Tempo1ms : temporisation de W fois 1 ms; Tempo10ms : temporisation de W fois 10 ms; Tempo100ms : temporisation de W fois 100 ms; Tempo1s : temporisation de W fois 1 s; Tempo5ms : temporisation de W fois 5 ms ( basé e sur le quartz );; Wait1s : attends 1 seconde; Wait2s : attends 2 secondes;*******************************************************************************; VARIABLES à dé finir dans le programme principal :; Tempo1,Tempo2,Tempo3 ; variables temporaires;*******************************************************************************

;*******************************************************************************; Fichier : convert.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Fonctions de conversions diverses;; Bin2BCD : Conversion Binaire (8 bits) en BCD (2 digits); BinBCD : Conversion Binaire (8 bits) en BCD (3 digits); Bin16BCD : Conversion Binaire (16bits) en BCD (5 digits);; B16toBCD : Conversion Binaire (16bits) en BCD (5 digits) (stockage 4 bits); BCDto16B : Conversion BCD (5 digits) en Binaire (16 bits) (stockage 4 bits);; Ascii : Conversion de W (en BDC) en son code ascii; Convdeci : Convertit W (binaire) en dé cimal (1 led parmi 5);*******************************************************************************

;*******************************************************************************; Fichier : math.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Fonctions de calculs mathé matiques;; B16add : Addition binaire (16+16->16 bits) : val1 = val1 + val2; B16sub : Soustraction binaire (16-16->16 bits) : val1 = val1 - val2;; mul816 : Multiplication ( 8 x 8 -> 16) : val1 = val1L x val2L; mul1616 : Multiplication (16 x 16 -> 16) : val1 = val1 * val2; mul1632 : Multiplication (16 x 16 -> 32) : val1(Hi) & val2(Lo) = val1 x val2;; div1616 : Division (16/16->16 bits) : val1 = val1 / val2 (reste);; BCDadd : Addition de deux nombres BCD : val2=val1+val2 (val1 = centaines); BCDsub : Soustraction de deux nombres BCD : val2=val2-val1 (val1=1 si né gatif);*******************************************************************************

Page 15: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 15/26

;*******************************************************************************; Fichier : math.h; Date : 27.03.02; Version : V1.01;*******************************************************************************; Dé finition des variables pour les fonctions contenues dans les fichiers :; lcdsup.asm math.asm convert.asm;*******************************************************************************

CBLOCK 0x0A0 ; 16 variables en bank 1 : 0x0A0 à 0x0AFval1:2 ; variable 16 bits pour conversions et calculsval2:2 ; variable 16 bits pour conversions et calculsreste:2 ; reste (16 bits) pour division sur 16 bitsresult:2 ; ré sultat (16 bits) pour calculs sur 16 bitsdixmil,mille ; ré sultat de conversion binaire --> BCDcent,dix,un ; ré sultat de conversion binaire --> BCDcnt ; compteur pour division et multiplication 16 bitscmpval ; variable pour les comparaisons

ENDCCBLOCK 0x0A0 ; 16 variables en bank 1 : 0x0A0 à 0x0AF

val1H ; variable 16 bits pour conversions et calculsval1L ; variable 16 bits pour conversions et calculsval2H ; variable 16 bits pour conversions et calculsval2L ; variable 16 bits pour conversions et calculsresteH ; reste (16 bits) pour division sur 16 bitsresteL ; reste (16 bits) pour division sur 16 bitsresultH ; ré sultat (16 bits) pour calculs sur 16 bitsresultL ; ré sultat (16 bits) pour calculs sur 16 bitsdixmil,mille ; ré sultat de conversion binaire --> BCDcent,dix,un ; ré sultat de conversion binaire --> BCDcnt ; compteur pour division et multiplication 16 bitscmpval ; variable pour les comparaisons

ENDCmath EQU 0x0A0 ; pour les banksel avant les calculs !

;*******************************************************************************; Fichier : can.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Fonctions pour la conversion anlogique - numé rique;; CANinit : initialisation du convertisseur; CANconv : effectue une conversion 8 bits et fournit le ré sultat dans W; CANstart : lance une nouvelle conversion; CANbusy : teste l'é tat de la conversion; CANwait : attend la fin de la conversion; CANread : renvoie (W) le ré sultat de la conversion sur 8 bits (MSB); CANreadl : renvoie (W) le ré sultat de la conversion : 2 LSB sup!;; Conversions avec moyenne glissante : utilisent le TIMER 1 sous IT; CANinitit : initialise la conversion sous IT (1 ms); CANit : calcule la valeur moyenne de conversion durant l'IT; CANvmoy8 : renvoie la valeur moyenne de conversion sur 8 bits (dans W);*******************************************************************************; VARIABLES à dé finir dans le programme principal :; CANmoy8 ; = valeur moyenne de la conversion sous IT ( 8 bits); CANmoy16:2 ; = valeur moyenne de la conversion sous IT (16 bits); CANtmp ; tempo pour la CAN; CANvalit ; validation de la conversion sous IT;*******************************************************************************; CABLAGE : RA0 = Entré e analogique; RA2 = Ré fé rence né gative (si dé fini par la commande CANinit); RA3 = Ré fé rence positive (si dé fini par la commande CANinit);*******************************************************************************

Page 16: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 16/26

FICHIERS DES LIBRAIRIES SPECIFIQUES;*******************************************************************************; Fichier : lcd.asm; Date : 27.03.02; Version : V2.01;*******************************************************************************; Fonctions pour un afficheur LCD 2 lignes de 16 car en mode 4 Bits.; Controleur de type KS0066.;; LCDinit : initialisation de l'afficheur; LCDcls : efface tout l'afficheur; LCDcar : é crit un caractè re ( contenu dans W ) sur l'afficheur; LCDcmd : envoie une commande ( contenue dans W) à l'afficheur; LCDhome : positionne le curseur en haut à gauche; LCDcls1 : efface la ligne 1 de l'afficheur et va au dé but; LCDcls2 : efface la ligne 2 de l'afficheur et va au dé but; LCDlin1 : positionne le curseur au debut de la ligne 1; LCDlin2 : positionne le curseur au debut de la ligne 2; LDCpos1 : dé place le curseur à la position W ligne 1; LDCpos2 : dé place le curseur à la position W ligne 2;; >> Pour les affichages avec dé codage et pour les textes, voir lcdsup.asm <<;; LCDwaitBusy : Attends la fin du Busy du LCD (si busy cablé !); LCDtstBusy : Teste le Busy du LCD (renvoie W=0 si LCD disponible);;*******************************************************************************; VARIABLES à dé finir dans le programme principal :;; LCDtmp,LCDcpt ; variables temporaires; LCDind,LCDbus ; index pour les textes, Test busy; LCDvalit ; validation de l'affichage sous IT;*******************************************************************************

;*******************************************************************************; Fichier : lcdsup.asm; Date : 27.03.02; Version : V2.01;********************************************************************************; Fonctions de conversions directes et d'affichage sur le LCD;; Pour des nombres bcd -----------------------; LCDAff2bcd : Affiche deux chiffres BCD : W<7-4>=dizaines - W<3-0>=unité s;; Pour des nombres binaires -----------------------; LCDbcd5 : binaire 16 bits ( val1 ) en decimal 5 digits --> 00000 à 65535; LCDbcd4 : binaire 16 bits ( val1 ) en decimal 4 digits --> 0000 à 9999; LCDbcd3 : binaire 8 bits ( W ) en decimal 3 digits --> 000 à 255; LCDbcd2 : binaire 8 bits ( W ) en decimal 2 digits --> 0 à 99; LCDbcd1 : binaire 4 bits ( W ) en decimal 1 digits --> 0 à 9; LCDaff5d : affiche 5 digits bcd contenus dans dixmil, mille, cent, dix, un; LCDaff4d : affiche 4 digits bcd contenus dans mille, cent, dix, un; LCDaff3d : affiche 3 digits bcd contenus dans cent, dix, un; LCDaff2d : affiche 2 digits bcd contenus dans dix, un; LCDaff1d : affiche 1 digit bcd contenu dans un; LCDbin8 : affiche valeur 8 bits ( W ) en binaire --> 00000000; LCDhex8 : affiche valeur 8 bits ( W ) en hexadecimal 2 digits --> 00 à FF;; Pour des textes ------------------------; GetTabTxtAdr : Cherche l'adresse du texte N° W dans un tableau de textes; LCDAffTxt : Affiche un texte sur le LCD (MemAdrH + MemAdrL = adresse); LCDtxt NomTxt : Affiche le texte 'NomTxt' (dé finie dans MACROS.H); LCDAffNomJour : Affiche le nom du jour ( W = numé ro du jour de 1 à 7 );;*******************************************************************************

Page 17: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 17/26

;*******************************************************************************; Fichier : lcd.h; Date : 27.03.02; Version : V1.01;*******************************************************************************; Dé finition de constantes et du câ blage pour l'afficheur LCD;; Fonctionne avec un PIC 16F84 ou un PIC 16F877;*******************************************************************************

; Câ blage de la connexion R/W;;LCD_RW_ON SET TRUE ; TRUE : contrô le installéLCD_RW_ON SET FALSE ; FALSE : contrô le PAS installé;*******************************************************************************

;-------------------------------------------------------------------------------; Signaux de contrô le et de donné es;-------------------------------------------------------------------------------LCD_DATA EQU PORTB; Port des donné es pour le LCD : <D4:D7> = RB<0:3>LCD_DATA_TRIS EQU TRISB ; Direction du port LCD : RB<3;0>

LCD_CNTL EQU PORTA; Port du bus de commande du LCD <RS,RW,E>LCD_CNTL_TRIS EQU TRISA ; Direction du port LCD de commande du LCD

LCD_RS EQU 4 ; LCD: Ligne de Sé lection de l'afficheurLCD_RW EQU 5 ; LCD: Ligne de Lecture/Ecriture de l'afficheurLCD_E EQU 1 ; LCD: Ligne de Synchronisation de l'afficheur;-------------------------------------------------------------------------------; Câ blage du module LCD pour PIC 16F877;-------------------------------------------------------------------------------; Pin LCD : 4 5 6 - 11 12 13 14; Signal : RS RW E - D0 D1 D2 D3; Port : RA4 RA5 RA1 - RB0 RB1 RB2 RB3; Pin Pic : 6 7 3 - 33 34 35 36

;*******************************************************************************; Codes de Commande pour le LCD;*******************************************************************************LINE1 EQU 0x80 ; Curseur au dé but de la ligne 1LINE2 EQU 0xC0 ; Curseur au dé but de la ligne 2DISP_ON EQU 0x0C ; Display onDISP_ON_C EQU 0x0E ; Display on, Cursor onDISP_ON_B EQU 0x0F ; Display on, Cursor on, Blink cursorDISP_OFF EQU 0x08 ; Display off

LCD_MODE EQU 0x28 ; Commande 4-bit, 2 lignes, Font 5x7LCD_MODE2 EQU 0x2C ; Commande 4-bit, 2 lignes, Font 5x10

CLR_LCD EQU 0x01 ; Efface l'é cranLCD_HOME EQU 0x02 ; Haut gauche de l'é cran

CURS_INC EQU 0x06 ; Avance curseurCURS_INC_S EQU 0x07 ; Avance curseur + insertionCURS_DEC EQU 0x04 ; Recul curseurCURS_DEC_S EQU 0x05 ; Recul curseur + insertion

Page 18: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 18/26

;*******************************************************************************; Fichier : aff.asm; Date : 27.04.02; Version : V1.01;*******************************************************************************; Fonctions pour un affichage 4 digits 7 segments;; AFFinit : Initialisation de l'affichage 7 segments multiplexé; AFFiche : Toutes les 4 ms, change le digit actif et affiche le code; AFFsetDigit : Active le digit selon AFFnumdig. é teint si W=0; AFFsetCode : Affecte W<3:0> sur les sorties BCD;*******************************************************************************; VARIABLES à dé finir dans le programme principal :;; AFFmin ; nombre de minutes à afficher (00-59); AFFhrs ; nombre d'heures à afficher (00-23); AFFnumdig ; mé moire du digit à afficher; AFFtmp ; variable temporaire (calculs); CptritAff ; Compteur d'it pour l'affichage 7 segments; TempoitAff ; Valeur de Temporisation pour l'affichage;*******************************************************************************; LES CONSTANTES ET LE CABLAGE sont dé finies dans le fichier <aff.h> :;*******************************************************************************

;*******************************************************************************; Fichier : aff.h; Date : 28.04.02; Version : V1.01;*******************************************************************************; Dé finition de constantes et du câ blage pour l'afficheur 7 segments

AFF_BCD EQU PORTC; Port des sorties du code BCDAFF_BCD_TRIS EQU TRISC ; Direction du port des sorties du code BCDAFF_BCD0 EQU 0 ; RC0 = bit 0 du code BCDAFF_BCD1 EQU 1 ; RC1 = bit 1 du code BCDAFF_BCD2 EQU 2 ; RC2 = bit 2 du code BCDAFF_BCD3 EQU 3 ; RC3 = bit 3 du code BCDAFF_BCDS EQU 0x0F ; masque pour les sorties du code BCD

AFF_DIGIT EQU PORTC; Port de sé lection de l'afficheurAFF_DIGIT_TRIS EQU TRISC ; Direction du port de sé lection de l'afficheurAFF_DH EQU 7 ; RC7 = afficheur des dizaines d'heuresAFF_UH EQU 6 ; RC6 = afficheur des unité s d'heuresAFF_DM EQU 5 ; RC5 = afficheur des dizaines de minutesAFF_UM EQU 4 ; RC4 = afficheur des unité s de minutesAFF_DIGITS EQU 0xF0 ; masque pour les sorties commande de digits;*******************************************************************************

Page 19: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 19/26

;*******************************************************************************; Fichier : pwm.asm; Date : 14.04.02; Version : V2.01;*******************************************************************************; Fonctions pour la sortie d'un signal PWM sur RC2 et la commande d'un moteur;; PWMinit : initialise la sortie PWM (RC=50%) (fré quence 10 kHz); PWMfin : mets la sortie PWM en haute impé dance et arrê te la PWM; PWMfreq : modifie la fré quence de la PWM (W en 1/10° kHz); PWMrapc : modifie le rapport cyclique (W en 1/2 %); PWMplus : aumente le rapport cyclique de la valeur de W (1/2 %); PWMmoins : diminue le rapport cyclique de la valeur de W (1/2 %); PWMmin : aumente le rapport cyclique à la valeur minimale; PWMmax : diminue le rapport cyclique à la valeur maximale; Ces fonctions permettent la commande directe du moteur :; MOTinit : initialise les sorties RC0-RC1 à 0 pour le moteur; MOTfin : mets les sorties RC0-RC1 en haute impé dance; MOTstop : arrê te le moteur RC0=0 - RC1=0; MOTsens1 : affecte les sorties RC0=0 - RC1=1 pour le sens de rotation 1; MOTsens2 : affecte les sorties RC0=1 - RC1=0 pour le sens de rotation 2; MOTsens : affecte les sorties RC0-RC1 pour dé finir le sens de rotation; W=0 : arrê t moteur W=1: sens 1 W=2: sens 2;;*******************************************************************************; VARIABLES à dé finir dans le programme principal :;; PWMfre ; valeur de la fré quence en 1/10° kHz; PWMpr2 ; valeur du registre PR2 (=pé riode); PWMrap ; valeur du rapport cyclique en %; PWMcc1 ; valeur du registre CCPR1L (=niveau haut); PWMdiv ; sauvegarde du pré diviseur (TMR2div); PWMtmp ; variable temporaire;;*******************************************************************************; CABLAGE :; RC0 = MOT_S1 : sortie 1 de commande du moteur; RC1 = MOT_S2 : sortie 2 de commande du moteur; RC2 = PWM_EN : sortie de validation du moteur;;*******************************************************************************; Dé finition des signaux de contrô leMOT_CTRL EQU PORTC; Port des donné es pour le MoteurMOT_CTRL_TRIS EQU TRISC ; Direction du port MoteurMOT_S1 EQU 0 ; sortie 1 de commande du moteurMOT_S2 EQU 1 ; sortie 2 de commande du moteurPWM_EN EQU 2 ; sortie de validation du moteur;*******************************************************************************

;*******************************************************************************; Fichier : asserv.asm; Date : 13.04.02; Version : V2.01;*******************************************************************************; Fonctions pour un asservissement de moteur en PWM; ASSinit : Initialise l'asservissement du moteur; ASSmot : Fonction d'asservissement; Fonctions internes (en mode 10 bits uniquement) :; PWMcor2LSB : corrige les 2 LSB pour le rapport cyclique; PWMget2LSB : lit (W) les 2 LSB pour le rapport cyclique; PWMset2LSB : affecte les 2 LSB pour le rapport cyclique;*******************************************************************************; VARIABLES à dé finir dans le programme principal :; ASScon ; Consigne de l'asservissement; ASStmp ; variable temporaire (calcul - signe); ASSval ; variable temporaire (mesure - é cart); CptritAss ; Compteur d'it pour l'asservissement; TempoitAss ; Valeur de Temporisation pour l'asservissement (ms);*******************************************************************************

Page 20: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 20/26

;*******************************************************************************; Fichier : hor.asm; Date : 16.04.02; Version : V2.01;*******************************************************************************; Fonctions pour une horloge temps ré el type DS1306/DS1302;; FONCTIONS DE BASE ---------------------------------------; HORinit : Initialisation de l'horloge; HOR1HzON : Valide la sortie 1Hz de l'horloge ==> DS1306 uniquement; HOR1HzOFF : Dé sactive la sortie 1Hz de l'horloge ==> DS1306 uniquement; HORsetdata : Sauve W dans la variable HORdata (donné e à envoyer); HORstart : initialise un é change avec l'horloge; HORstop : termine un é change avec l'horloge; HORread : lit le contenu de l'adresse W et le retourne dans W + HORdata; HORwrite : é crit le contenu de HORdata à l'adresse contenue dans W; HORrd8b : lit 8 bits dans l'horloge, renvoyé s dans W; HORwr8b : é crit 8 bits (W) dans l'horloge;; FONCTIONS DE LECTURE DIRECTE DE L'HORLOGE ---------------; HORgetSEC : lit les secondes W<7-4>=dizaines W<3-0>=unité s (00-59); HORgetMIN : lit les minutes W<7-4>=dizaines W<3-0>=unité s (00-59); HORgetHRS : lit les heures W<5-4>=dizaines W<3-0>=unité s (00-23); HORgetJOUR : lit le jour (L-D) W<7-4>= -- W<2-0>=unité s (01-07); HORgetDATE : lit la date W<5-4>=dizaines W<3-0>=unité s (01-31); HORgetMOIS : lit le mois W<5-4>=dizaines W<3-0>=unité s (01-12); HORgetANNE : lit l'anné e W<7-4>=dizaines W<3-0>=unité s (00-99);; FONCTIONS D'ECRITURE DIRECTE DANS L'HORLOGE -------------; ! ! !AUCUN CONTROLE DES VALEURS N'EST EFFECTUE ! ! !;; HORsetSEC : é crit les secondes W<7-4>=dizaines W<3-0>=unité s (00-59); HORsetMIN : é crit les minutes W<7-4>=dizaines W<3-0>=unité s (00-59); HORsetHRS : é crit les heures W<5-4>=dizaines W<3-0>=unité s (00-23); HORsetJOUR : é crit le jour (L-D) W<7-4>= -- W<2-0>=unité s (01-07); HORsetDATE : é crit la date W<5-4>=dizaines W<3-0>=unité s (01-31); HORsetMOIS : é crit le mois W<5-4>=dizaines W<3-0>=unité s (01-12); HORsetANNE : é crit l'anné e W<7-4>=dizaines W<3-0>=unité s (00-99);;*******************************************************************************; UTILISATION PREFERENTIELLE;; FONCTIONS UTILISANT LE TABLEAU DE DATES (mode burst) -----; HORlit : lit la date complè te et renseigne le tableau HORtab; HORecrit : é crit la date complè te du tableau HORtab dans l'horloge; ( NOTE : HORtab est dé fini ci-dessous );; FONCTIONS DE CALCULS SUR LES DONNEES ---------------------; HORinc : incré mente la valeur de W (en BCD); HORinc60 : incré mente la valeur de W et gè re le dé passement de 60; HORinc24 : incré mente la valeur de W et gè re le dé passement de 24; HORinc12 : incré mente la valeur de W et gè re le dé passement de 12; HORinc31 : incré mente la valeur de W et gè re le dé passement de 31; HORinc7 : incré mente la valeur de W et gè re le dé passement de 7;;*******************************************************************************;; LES CONSTANTES sont dé finies dans le fichier <hor.h>;;*******************************************************************************

Page 21: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 21/26

;*******************************************************************************; VARIABLES à dé finir dans le programme principal (RAM.H);; Variables communes aux fonctions ------------------------ 3; HORdata ; donné e à é crire ou lue dans l'horloge; HORtmp ; variable temporaire; HORcpt ; compteur de bits;; TABLEAU HORtab: ------------------------------------ 15; ** L'ORDRE NE DOIT PAS ETRE CHANGE A CAUSE DE L'ACCES EN BURST **; HORsec ; secondes (00-59); HORmin ; minutes (00-59); HORhrs ; heures (00-23); HORjour ; jours de semaine (01-07); HORdate ; dates (01-31); HORmois ; mois (01-12); HORanne ; anné es (00-99); HORsecAL0 ; alarme 0 : secondes; HORminAL0 ; alarme 0 : minutes; HORhrsAL0 ; alarme 0 : heures; HORjourAL0 ; alarme 0 : jour de la semaine; HORsecAL1 ; alarme 1 : secondes; HORminAL1 ; alarme 1 : minutes; HORhrsAL1 ; alarme 1 : heures; HORjourAL1 ; alarme 1 : jour de la semaine;*******************************************************************************; CABLAGE :; RA0 = HOR_CEN : sé lection du circuit horloge 'Chip Enable'; RA2 = HOR_CLK : horloge de sé quencement des transferts; RA3 = MOT_DAT : entré e/sortie des donné es;*******************************************************************************

;*******************************************************************************; Fichier : hor.h; Date : 16.04.02; Version : V1.01;*******************************************************************************; Dé finition de constantes pour l'horloge type DS1306 ou 1302;; Fonctionne avec un PIC 16F84 ou un PIC 16F877;*******************************************************************************; Choix du circuit horloge DS1302 ou DS1306;;DS13xx SET 1302 ; le circuit d'horloge est un DS1302 <<---DS13xx SET 1306 ; le circuit d'horloge est un DS1306 <<---;*******************************************************************************; Signaux de contrô le et de donné esHOR_PORT EQU PORTA; Port utilisé pour l'horlogeHOR_TRIS EQU TRISA ; Port de direction pour l'horloge

HOR_CEN EQU 0 ; Bit de sé lection 'Chip Enable'HOR_CLK EQU 2 ; Bit d'horloge 'Serial Clock'HOR_DAT EQU 3 ; Bit de donné es 'In-Out';*******************************************************************************; Câ blage de l'horloge pour PIC 16F877; DS1306 : 10 11 12; DS1302 : 5 7 6; Signal : CEN CLK DAT; Port : RA0 RA2 RA3; Pin Pic : 2 4 5

Page 22: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 22/26

;*******************************************************************************IF DS13xx == 1306 ; Dé finition des adresses des registres de l'horloge DS1306;-------------------------------------------------------------------------------HOR_SEC EQU 0x00 ; registre des secondes (00-59)HOR_MIN EQU 0x01 ; registre des minutes (00-59)HOR_HRS EQU 0x02 ; registre des heures (00-23)HOR_JOUR EQU 0x03 ; registre des jours de la semaine (01-07)HOR_DATE EQU 0x04 ; registre des dates dans le mois (01-31)HOR_MOIS EQU 0x05 ; registre des mois (01-12)HOR_ANNE EQU 0x06 ; registre des anné es (00-99)HOR_SECal0 EQU 0x07 ; registre d'alarme 0 : secondesHOR_MINal0 EQU 0x08 ; registre d'alarme 0 : minutesHOR_HRSal0 EQU 0x09 ; registre d'alarme 0 : heuresHOR_DAYal0 EQU 0x0A ; registre d'alarme 0 : jour de la semaineHOR_SECal1 EQU 0x0B ; registre d'alarme 1 : secondesHOR_MINal1 EQU 0x0C ; registre d'alarme 1 : minutesHOR_HRSal1 EQU 0x0D ; registre d'alarme 1 : heuresHOR_DAYal1 EQU 0x0E ; registre d'alarme 1 : jour de la semaine

; bits 7 6 5 4 3 2 1 0HOR_CTRL EQU 0x0F ; registre de contrô le 0 WP 0 0 0 1Hz Al1 Al0HOR_STATUS EQU 0x10 ; registre d'é tat 0 0 0 0 0 0 it1 it2HOR_CHARGE EQU 0x11 ; registre de charge TC TC TC TC DS DS RS RS

; TC: charge 1010=on xxxx=off; DS: diodes 01=1 - 10=2 - 00=11=off; RS: ré sist 01=2k - 10=4k - 11=8k - 00=off

HOR_CLKburst EQU 0x00 ; adresse de dé but du burst horlogeHOR_CLKsize EQU d'15' ; nombre d'octets pour le burst horloge

HOR_1Hz EQU 0x04 ; Validation de la sortie 1Hz (bit2=1: marche)HOR_WP EQU 0x40 ; Write Protect (bit6=1 : interdiction é criture)HOR_RW EQU 0x80 ; masque de lecture-é criture (bit7=1 : é criture) ENDIF ;************************************************************************

;******************************************************************************* IF DS13xx == 1302 ; Dé finition des adresses des registres de l'horloge DS1302;-------------------------------------------------------------------------------HOR_SEC EQU 0x80 ; registre des secondes (00-59)HOR_MIN EQU 0x82 ; registre des minutes (00-59)HOR_HRS EQU 0x84 ; registre des heures (00-23)HOR_JOUR EQU 0x8A ; registre des jours de la semaine (01-07)HOR_DATE EQU 0x86 ; registre des dates dans le mois (01-31)HOR_MOIS EQU 0x88 ; registre des mois (01-12)HOR_ANNE EQU 0x8C ; registre des anné es (00-99)

; bits 7 6 5 4 3 2 1 0HOR_CTRL EQU 0x8E ; registre de contrô le WP 0 0 0 0 0 0 0HOR_CHARGE EQU 0x90 ; registre de charge TC TC TC TC DS DS RS RS

; TC: charge 1010=on xxxx=off; DS: diodes 01=1 - 10=2 - 00=11=off; RS: ré sist 01=2k - 10=4k - 11=8k - 00=off

HOR_CLKburst EQU 0xBE ; adresse de dé but du burst horlogeHOR_CLKsize EQU d'8' ; nombre d'octets pour le burst horloge

HOR_HALT EQU 0x80 ; Arrê t de l'horloge (bit7=1 : arrê t) (secondes)HOR_WP EQU 0x80 ; Write Protect (bit7=1 : interdiction é criture)HOR_RW EQU 0x01 ; masque de lecture-é criture (bit0=1 : lecture)

jour1302 equ HORmoisdate1302 equ HORjour ; les jours, date et mois ne sont pas stocké smois1302 equ HORdate ; dans le mê me ordre que pour le DS1306 ! ENDIF ;************************************************************************

Page 23: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 23/26

;*******************************************************************************; Fichier : mem.asm; Date : 17.04.02; Version : V2.01;*******************************************************************************; Fonctions pour une mé moire type DS1306/DS1302;; FONCTIONS DE BASE ---------------------------------------; * MEMinit : Initialisation de l'accè s à la mé moire; MEMsetdata : Sauve W dans la variable MEMdata (donné e à envoyer); MEMstart : initialise un é change avec la mé moire; MEMstop : termine un é change avec la mé moire; * MEMread : lit le contenu de l'adresse W et le retourne dans W + MEMdata; * MEMwrite : é crit le contenu de MEMdata à l'adresse contenue dans W; MEMrd8b : lit 8 bits dans la mé moire, renvoyé s dans W; MEMwr8b : é crit 8 bits (W) dans la mé moire;; FONCTIONS UTILISANT LE MODE BURST -----------------------; MEMlitbloc : lit la mé moire par blocs en mode rafale (burst); MEMecritbloc : é crit la mé moire par blocs en mode rafale (burst); * MEMfill : remplit TOUTE la mé moire avec la valeur dans W;; ( NOTE : MEMtab est dé fini ci-dessous );;*******************************************************************************; LES CONSTANTES sont dé finies dans le fichier <mem.h>;;*******************************************************************************; VARIABLES à dé finir dans le programme principal (RAM.H);; MEMdata ; donné e à é crire ou lue dans la mé moire; MEMtmp ; variable temporaire; MEMcpt ; compteur de bits; MEMsize ; taille du transfert en rafale (burst); MEMtab:31 ; Tableau de donné es pour le burst;;*******************************************************************************; CABLAGE :; RA0 = MEM_CEN : sé lection du circuit mé moire 'Chip Enable'; RA2 = MEM_CLK : horloge de sé quencement des transferts; RA3 = MEM_DAT : entré e/sortie des donné es;;*******************************************************************************

;*******************************************************************************; Fichier : mem.h; Date : 16.04.02; Version : V1.01;*******************************************************************************; Dé finition de constantes pour la mé moire type DS1306 ou 1302;;;*******************************************************************************; Choix du circuit mé moire DS1302 ou DS1306;;DS13xx SET 1302 ; le circuit d'horloge est un DS1302 <<---DS13xx SET 1306 ; le circuit d'horloge est un DS1306 <<---;*******************************************************************************

Page 24: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 24/26

;-------------------------------------------------------------------------------; Signaux de contrô le et de donné es;-------------------------------------------------------------------------------MEM_PORT EQU PORTA; Port utilisé pour la mé moireMEM_TRIS EQU TRISA ; Port de direction pour la mé moire

MEM_CEN EQU 0 ; Bit de sé lection 'Chip Enable'MEM_CLK EQU 2 ; Bit d'horloge 'Serial Clock'MEM_DAT EQU 3 ; Bit de donné es 'In-Out';-------------------------------------------------------------------------------; Câ blage de la mé moire pour PIC 16F877;-------------------------------------------------------------------------------; DS1306 : 10 11 12; DS1302 : 5 7 6; Signal : CEN CLK DAT; Port : RA0 RA2 RA3; Pin Pic : 2 4 5

;******************************************************************************* IF DS13xx == 1306 ; Dé finition des adresses des registres de la mé moire DS1306;-------------------------------------------------------------------------------

; bits 7 6 5 4 3 2 1 0MEM_CTRL EQU 0x0F ; registre de contrô le 0 WP 0 0 0 1Hz Al1 Al0MEM_CHARGE EQU 0x11 ; registre de charge TC TC TC TC DS DS RS RS

; TC: charge 1010=on xxxx=off; DS: diodes 01=1 - 10=2 - 00=11=off; RS: ré sist 01=2k - 10=4k - 11=8k - 00=off

MEM_RAMdeb EQU 0x20 ; dé but de la zone RAM (0x00)MEM_RAMfin EQU 0x7F ; fin de la zone RAM (0x5F)

MEM_RAMburst EQU 0x20 ; adresse de dé but du burst RAMMEM_RAMsize EQU 0x60 ; 96 d'octets pour le burst RAM

MEM_WP EQU 0x40 ; Write Protect (bit6=1 : interdiction é criture)MEM_RW EQU 0x80 ; masque de lecture-é criture (bit7=1 : é criture) ENDIF ;************************************************************************

;******************************************************************************* IF DS13xx == 1302 ; Dé finition des adresses des registres de la mé moire DS1302;-------------------------------------------------------------------------------

; bits 7 6 5 4 3 2 1 0MEM_CTRL EQU 0x8E ; registre de contrô le WP 0 0 0 0 0 0 0MEM_CHARGE EQU 0x90 ; registre de charge TC TC TC TC DS DS RS RS

; TC: charge 1010=on xxxx=off; DS: diodes 01=1 - 10=2 - 00=11=off; RS: ré sist 01=2k - 10=4k - 11=8k - 00=off

MEM_RAMdeb EQU 0xC0 ; dé but de la zone RAM (0x00)MEM_RAMfin EQU 0xFC ; fin de la zone RAM (0x1E)

MEM_RAMburst EQU 0xFE ; adresse de dé but du burst RAMMEM_RAMsize EQU 0x20 ; Attention : 31 d'octets pour le burst RAM

MEM_WP EQU 0x80 ; Write Protect (bit7=1 : interdiction é criture)MEM_RW EQU 0x01 ; masque de lecture-é criture (bit0=1 : lecture) ENDIF ;************************************************************************

Page 25: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 25/26

;*******************************************************************************; Fichier : key.asm; Date : 28.04.02; Version : V2.01;*******************************************************************************; Fonctions pour un clavier de 12 touches;; KEYinit : Initialisation du clavier; KEYtst : Teste si une touche est appuyé e, renvoie W=0 si aucune; KEYlitnum : Renvoie W = numé ro de touche (sans tester clavier!); KEYwait : Attends une touche et renvoie W = numé ro de touche;; KEYlitval : si une touche est appuyé e, affecte les variables;; KEYsetBCD : transforme W (le numé ro de touche) en un code BCD; KEYsetAscii : transforme le numé ro de touche en un code Ascii; KEYtrancode : renvoie dans W l'octet numé ro W d'un tableau;;*******************************************************************************; VARIABLES à dé finir dans le programme principal :;; KEYbcd ; valeur de la touche en BCD; KEYascii ; valeur de la touche en Ascii; KEYtmp ; variable temporaire (sauvegarde);;*******************************************************************************; CABLAGE :; RC0 = KEY_DATA0 ; bit 0; RC0 = KEY_DATA1 ; bit 1; RC0 = KEY_DATA2 ; bit 2; RC0 = KEY_DATA3 ; bit 3; RC0 = KEY_RECU ; data available; RC0 = KEY_OE ; output enable;;*******************************************************************************; Dé finition des signaux de contrô le

KEY_PORT EQU PORTC; Port du clavierKEY_TRIS EQU TRISC ; Direction du port du clavier

KEY_DATA0 EQU 0 ; RC0 = bit 0 du code fourni par le clavierKEY_DATA1 EQU 1 ; RC1 = bit 1 du code fourni par le clavierKEY_DATA2 EQU 2 ; RC2 = bit 2 du code fourni par le clavierKEY_DATA3 EQU 3 ; RC3 = bit 3 du code fourni par le clavierKEY_DATAS EQU 0x0F ; masque pour les entré es du code clavier

KEY_OK EQU 4 ; RC4 = entré e touche appuyé eKEY_OE EQU 5 ; RC5 = sortie de sé lection du clavier (enable)

;*******************************************************************************

Page 26: PROGRAMMATION STRUCTUREE DES PIC 16F877 · programmation structuré e pour un PIC 16F877.par l’utilisation des fonctions des librairies Les points suivants successivement sont abordé

Gé nie Electronique – 2iè me année de formation Programmation Structurée

ProgStruct.doc JMT 26/26

;*******************************************************************************; Fichier : bp.asm; Date : 28.04.02; Version : V2.01;*******************************************************************************; Fonctions pour 4 boutons poussoirs;; BPinit : Initialisation du clavier; BPlitval : Renvoie le numé ro du bouton dans W = 1, 2, 4, 8 ou 0 si aucun; ==> attends que le bouton soit relâ ché avant de terminer; BPwait : Attends un bouton et renvoie W = 1, 2, 4 ou 8; BPisbps : renvoie W = bit du bouton si appuyé , sinon 0; BPishrs : renvoie W = bit du bouton heures appuyé (sinon 0); BPismin : renvoie W = bit du bouton minutes appuyé (sinon 0); BPispls : renvoie W = bit du bouton plus appuyé (sinon 0); BPismns : renvoie W = bit du bouton moins appuyé (sinon 0); BPtst : recoit = masque du bouton, renvoie W diffé rent de 0 si bp;*******************************************************************************; VARIABLES à dé finir dans le programme principal :;; BPval ; valeur du port des boutons (1 si appuyé ); BPbusy ; drapeau pour attendre bp relâ ché; BPtmp ; variable temporaire (sauvegarde);*******************************************************************************; CABLAGE :; tirage de 10K au + 5V, BP vers la masse : appuyé => 0V;; RB0 = BP_HRS; bouton pour les heures; RB1 = BP_MIN ; bouton pour les minutes; RB2 = BP_PLS ; bouton plus; RB3 = BP_MNS ; bouton moins;;*******************************************************************************; Dé finition des signaux de contrô le

BP_PORT EQU PORTB; Port des entré es pour les boutons poussoirsBP_TRIS EQU TRISB ; Direction du port

BP_HRS EQU 0 ; RB0 = bouton pour les heuresBP_MIN EQU 1 ; RB1 = bouton pour les minutesBP_PLS EQU 2 ; RB2 = bouton plusBP_MNS EQU 3 ; RB3 = bouton moinsBP_DATAS EQU 0x0F ; masque pour les entré es des boutonsBP_masqHRS EQU 0x01 ; masque pour le bouton heuresBP_masqMIN EQU 0x02 ; masque pour le bouton minutesBP_masqPLS EQU 0x04 ; masque pour le bouton plusBP_masqMNS EQU 0x08 ; masque pour le bouton moins

;*******************************************************************************