Étape 5: La conception logicielle
C’est tout pour la conception du matériel, il nous faut concevoir le logiciel qui vous permettra à notre matériel devenu un dé.
Une chose que vous avez probablement remarqué était que la mise en œuvre matérielle a été fait de manière structurée, bloc de construction. Nous avons besoin d’aborder la conception de nos logiciels de la même manière.
Dans la conception de notre logiciel, permet de démarrer en divisant le système en blocs fonctionnels. Une division simple consiste à diviser le problème en une entrée (The Button), un traitement (en fait lancer le dé) et une sortie (les LEDs).
Permet de démarrer par la construction de la partie de la sortie de notre code d’abord. C’est la composante plus visuelle, et il nous permet de « mettre certains s’exécute sur le Conseil d’administration » au début. Avant de commencer bien, permet de parler un peu le jeu d’instructions de microprocesseur et de l’architecture.
La gamme PIC de microprocesseurs implémenter un ordinateur réduit de la valeur d’Instruction (RISC). Ayant un processeur RISC est un facteur qui rend ces CPU si vite. Un inconvénient d’avoir un processeur RISC est que la gamme PIC de microprocesseurs appliquer seulement environ 37 instructions, donc il faut parfois plus d’instructions de faire les choses, et souvent les solutions ne semblent toujours être aussi intuitive qu’ils sont sur, par exemple, un Z80 ou 6502.
Sur la photo, l’indicateur principal de travail est le registre de « W ». La plupart de nos opérations utilisent le registre de « W » en quelque sorte. Prenons, par exemple, un ensemble de commandes qui sortira un modèle binaire « 10101010 » au Port B.
MOVLW B « 10101010 »
MOVWF PortB
Tout d’abord, le mot que nous voulons écrire est chargé dans le registre de « W », puis le registre de « W » est écrit au Port B.
Nous pouvons utiliser la séquence d’opérations pour générer le modèle binaire pour afficher un lancer de dés de 6. Le diagramme schématique, nous pouvons voir que la première matrice est attachée au Port A, bits 0 – 3 de la manière suivante ;
Port A(0) - Centre LED
Le port a (1) - coin des LEDs (1) et (3).
Le port a (2) - coin des LEDs (2) et (4).
Port a 3 - milieu LEDs (5) et (6).
Pour afficher le modèle pour un 6, tous les voyants du coin et toutes les LEDs milieu sont sur, mais le centre voyant est éteint. Cela équivaut à modèle binaire des b « 00001110 ». Ainsi, pour afficher un 6, nous avons simplement exécuter les instructions ;
MOVLW B « 00001110 »
MOVWF PortA
De même, pour afficher un 1 (le centre LED), nous utiliserions ;
B MOVLW « 00000001 »
MOVWF PortA
Nous avons été référence à 6 comme 00001110 et 1 comme 00000001. Il peut être déroutant de composer des numéros comme ça, surtout quand ils ne sont pas vraiment des numéros, ils sont tout simplement les modèles binaires. Pour faciliter la confusion, la plupart des assembleurs permettent l’utilisation des « Constantes » pour fournir un mappage entre un nom de texte et un certain nombre. Dans le cas de notre écran de dice, nous pouvons utiliser le mot Die6 à la place de 00001110, ou Die1 à la place de 00000001.
Une liste des constantes que nous serions en mesure d’utiliser sur notre écran serait ;
Die1 B « 00000001 »
Die2 B « 00000100 »
Die3 B « 00000101 »
Die4 B « 00000110 »
Die5 B « 00000111 »
B Die6 « 00001110 »
B affectées "00000000"
DieTest B « 00001111 »
Les 2 dernières entrées (affectées et DieTest) sont utiles pour éteindre l’écran ou vérifier que tous les voyants sont opérationnelles au démarrage en allumant toutes les LEDs.
Maintenant que nous savons comment afficher un certain nombre, nous devrions produire la pierre angulaire qui nous permet de fournir un certain nombre, et le modèle binaire appropriée est chargé dans l’affichage.
Avant de discuter de cette routine d’affichage, il convient de mentionner que le logiciel est mieux écrit de manière modulaire, une routine à la fois. Cela permet de fonctionnalité à ajouter composant par composant. Nous pouvons ensuite nous concentrer sur l’écriture de chaque composant individuellement, permettant à des logiciels complexes à construire couche par couche.
Retour à notre bloc de construction pour l’affichage d’un lancer de dés. Une routine pour implémenter la fonctionnalité d’affichage pourrait ressembler à ceci ;
; Tout d’abord, définir les constantes nécessaires... Die1 EQU B « 00000001 » ; certaines constantes sont définies Die2 EQU B « 00000100 » ; pour les dés de LED divers Die3 EQU B « 00000101 » ; modèles de bits Die4 EQU B « 00000110 » Die5 EQU B « 00000111 » Die6 EQU B « 00001110 » Affectées EQU B « 00000000 » ; Toutes les LED éteint DieTest EQU B « 00001111 » ; Toutes les del sur ; Disp_Dice1 - provoque un certain nombre à être apposé sur une face de dé ; Entrée : Registre W ; Sortie : Un modèle de LED sur le dé. ; Commentaires : pour les valeurs de Registre « W » ; 0 = toutes les LED off ; 1 – 6 = afficher le modèle pour 1 – 6 ; 7 = toutes les LEDs ON (mode Test) ; DISP_DICEA APPEL DIE_LOOKUP MOVWF PortA RETOUR ; Il s’agit d’une ramification table de choix. Fondamentalement, quelle que soit la valeur est passée via le registre de W est ; ajouté au compteur de programme (PCL). Cette époque se traduit par la valeur appropriée pour la ; résultat de recherche chargée dans le registre W et contrôle étant retourné à l’appelant ; sous-routine. ; C’est à dire ; Si un 2 est passé par le biais du Registre W, le ADDWF PCL, opération f provoque 2 être ; on ajoute le compteur de programme courant provoquant l’instruction RETLW Die2 à exécuter. ; Il en résulte la constante Die2 (B « 00000100 ») doit être chargé dans le registre W, et ; commande retour au programme appelant. DIE_LOOKUP ADDWF PCL, f RETLW affectées RETLW Die1 RETLW Die2 RETLW Die3 RETLW Die4 RETLW Die5 RETLW Die6 RETLW DieTest |
La plus grande partie de la liste ci-dessus est commentaires (lignes précédées du caractère «; »), il devrait être en mesure de suivre.
La routine d’affichage peut être utilisée en exécutant le code suivant ;
MOVLW 4
APPEL DISP_DICEA