Etape 11 : Lecture sorties de la LM3915
Sorties : entrées
LED1:RB7
LED2:RB6
LED3:RB5
LED4:RB4
LED5:RB3
LED6:RB2
LED7:RD7
LED8:RD6
LED9:RD5
LED10:RD4
Une fois de plus, si vous vous demandez pourquoi les entrées sont peu en arrière son dû au routage du PCB. Maintenant que nous avons les liens, je vais vous montrer comment nous stockons les données d’entrée.
La première chose que nous faisons est de déclarer une variable 16 bits. Nous utiliserons uniquement les 10 bits de poids faible parce que nous n’avons que 10 niveaux sonores différents.
niveau d’UInt16 ; Nous sommes déclarer un entier non signé de 16 bits qui permet de stocker le niveau sonore de LED1 - LED10
Étant donné que nous n’utilisons pas un PORT complet (RB0 - RB7 ou RD0 - RD7) pour apporter les données, nous allons avoir à masquer les bits non désirés. Les bits que nous ne devons sont RB0, RB1, RD0, RD1, RD2 et RD3. Les 4 premiers bits de données que nous allons apporter en est RD4 - RD7, donc nous allons masquer les bits bas (RD0 - RD3) et définir la variable « niveau » à Haut nibble (RD4 - RD7).
leNiveau = 0x00F0 & PORTD ; Masquer les bits bas et versent « niveau » équivalant à la nibble supérieure de PORTD
Maintenant que nous avons les valeurs stockées qui sont sorties LED7 - LED10, nous devons préparer notre variable « niveau » pouvoir stocker les 6 bits de données qui se trouvent sur RB2 - RB7. Pour faire place à ces 6 bits suivant, nous avons de décalage de bits gauche "niveau" de 2. Si juste maintenant « niveau » quelque chose comme ça se présente sous forme binaire :
xxxx = RD4 RD5 RD6, RD7 respectivement
leNiveau = 00000000xxxx0000 < = il n’y a seulement suffisamment d’espace pour 4 bits de données sur la fin. Nous avons besoin pour s’adapter à 6 bits de données
Donc pour bit shift "niveau" deux endroits, nous avons mis cela comme notre ligne de code suivante :
level = niveau << 2 ; Bit shift « niveau » deux endroits et prêt à accepter les données de RB2 - RB7
C’est maintenant comment « niveau » oeil après qu’il a été peu serait décalé gauche deux endroits :
leNiveau = 000000xxxx000000 < = maintenant, nous avons assez de place pour RB2 - RB7
Enfin, nous pouvons maintenant récupérer les finales 6 bits de données qui sont sorties de LED1 - LED6 et stockez-la dans « niveau ». Pour ce faire, voici la ligne de code suivante :
level = niveau | ((0xFC & PORTB) >> 2) ; Masquer les bits RB0 et RB1, puis le décalage de bits RB2 - RB7 deux places vers la droite et stockez-la dans le bas 6 bits de « niveau »
Cette ligne est un peu plus énigmatique, mais il fait exactement la même chose que nous avons fait avec PORTD sauf il déplace les deux endroits les données vers la droite. Dans l’intérieur supports nous masquer RB0 et RB1 et ensuite passer le résultat à droite deux places. Maintenant que les données que nous voulons soient dans les 6 bits le plus bas, nous le ferons ou il « niveau » qui placera simplement RB2 - RB7 dans les 6 bits le plus bas de « niveau ». Voici ce qu’elle finira par ressembler à :
xxxx = RD4 RD5 RD6, RD7 respectivement
yyyyyy = RB2, RB3, RB4, RB5, RB6, RB7 respectivement
leNiveau = 000000xxxxyyyyyy
Ensuite nous nous alignerons sur les valeurs de « niveau » avec le niveau sonore correspondant.