Étape 3: logiciel
Le lien du logiciel est répertorié ci-dessous. Alors qu’il est visé pour le 16F688, il est facilement porté à d’autres versions de la photo. Vous devrez modifier la ligne qui identifie la version PIC (liste =) et le fichier INCLUDE, mais ceux sont les changements intuitives. La ligne __CONFIG devez également peaufiner tout simplement parce qu’un ou deux des étiquettes utilisées soient orthographiés différemment dans certains des fichiers INCLUDE.
La plupart des logiciels se rapporte à la manipulation de l’écran LCD et les routines de retard donc les parties devraient être familiers si vous avez regardé à certains des épisodes précédents. Une chose à noter dès le départ, c’est que la section de déclaration de variable (UDATA) est un peu différente. Parce que les registres de contrôle EEPROM sont tous en mémoire de la Banque 1, j’ai décidé de placer également les variables EE_Addr et EE_Data à la Banque 1. Cela exige l’utilisation d’étiquettes dans le cadre des déclarations UDATA début adresse. Données de la Banque 0 commencent à hex adresse 20 tandis que banque 1 données démarre à adresse A0 hexagonales. Il faut aussi garder à l’esprit tout au long du programme quant à quelle banque de mémoire nous sommes en lors de la lecture et l’écriture. Mon général, comme indiqué dans l’en-tête, doit toujours sortir une sous-routine dans Banque 0.
Parce que nous utilisons registres spécifiques de l’EEPROM pour lit et écrit, il n’y a aucune nécessité pour nous de s’inquiéter sur l’emplacement dans l’adresse de la carte l’EEPROM. Qui rend la vie un peu plus facile car nous fournissons essentiellement juste un indice de 00 à FF hex. Beaucoup des photos ont 256 octets d’EEPROM, mais certains ont seulement 128 octets (par exemple le 16F627/8) pour être conscient de cela pour vos applications.
Le code pour lire et écrire l’EEPROM est dérivé de ce qui est indiqué dans la fiche technique, mais il y a quelques différences importantes, en particulier dans la section de l’écriture. Pour une lecture, nous simplement mis en place l’adresse souhaitée dans EEADR, pointez sur la mémoire de données (par opposition à la mémoire de programme en flash), commande une lecture et puis lire les données du Registre EEDAT. Le processus d’écriture suit certaines des mêmes étapes, mais avec des différences notables dans le milieu de la séquence. Encore une fois, nous commençons en définissant l’adresse souhaitée dans EEADR et puis remplir EEDAT avec l’octet de données, que nous voulons écrire. Ensuite nous devons définir un indicateur « enable write ». Vous pouvez considérer cela comme la broche R/W sur des puces de mémoire ou de l’écran LCD. Comme mentionné précédemment, nous devons permettre le processus d’écriture se termine sans interruption si c’est le point auquel nous ouvrirait le drapeau GIE. Si vous regardez dans la feuille de données, il y a des code là qui efface réellement GIE et ensuite une boucle jusqu'à ce que le GIE est clair. Qui est mis là en raison de la possibilité qu’une interruption peut se produire avant le clair du GIE prend réellement effet (horloge quatre cycles ou cycle d’une seule instruction). Parce que le retour à partir du gestionnaire d’interruption réactive automatiquement GIE, notre commandement claire peut obtenir rendue caduque. Ce qui est recommandé consiste donc à simplement exécuter une boucle sur la commande clear jusqu'à ce que nous en fait effectuer une lecture du GIE et vérifier qu’il est clair.
Voici le code pour exécuter la poignée de main secrète nécessaire pour les écritures. Vraiment, ne nous est d’abord écrire 55 hex et puis écrire hex AA dans EECON2. Je vais le laisser comme exercice pour l’élève de calculer la probabilité de cette séquence qui passe par hasard. Après la poignée de main secrète, nous définir l’indicateur de commande d’écriture réelle et puis attendez que le commandant de bord effacer l’indicateur. Il le fera lorsque l’écriture est terminée. Étant donné que nous ne pouvons pas faire autre chose pendant le temps d’écriture, interrogation de cet indicateur est vraiment la meilleure façon d’accomplir cette tâche. L’exemple de feuille de données montre une commande de sommeil avec l’hypothèse étant que nous réveiller et nous continuerons quand nous obtenons une interruption (EEIR) à la fin de l’écriture. Ce qu’il ne montre pas, cependant, est la configuration pour cette interruption et la gestion de l’interruption avant de continuer l’exécution. Une fois de plus, le triomphe de manière paresseuse.
La routine Test_EEPROM envoie juste trois octets de données EEPROM et ensuite leur lit. Chaque octet qui est écrit ou lu est envoyé à l’écran LCD pour l’affichage. Rien de trop utile à ce point, mais il montre comment nous pouvons accéder à l’EEPROM pour de futurs projets.