Quelle est la différence entre lire PORTA et PINA? Quelle est la relation entre un port et ses broches? Je suis vraiment confus !!! exemple de lecture PORT: (la lecture de la broche n'est pas utile ici)
Assemblage f = 1MHZ ATmega8 J'ai besoin de compléter PORTB toutes les 1ms. (Dutycycle = 50%)
LDI R16,$FF
OUT DDRB,R16
MAIN: LDI R16,00
DELAY:CPI R16,200
BREQ LOOP
INC R16
RJMP DELAY
loop:IN R17,PORTB
COM R17
OUT PORTB,R17
OUT R17,PORTB
RJMP MAIN
Réponses:
PORT est le tampon OUTPUT, PIN est le tampon INPUT.
Lorsque vous souhaitez régler la broche sur une tension "haute" ou "basse", écrivez dans le registre PORT.
Lorsque vous voulez savoir quelle tension est actuellement présentée à une broche, lisez le registre PIN.
Les bits de ces registres représentent les broches correspondantes du port d'entrée / sortie à usage général.
Voici un schéma simplifié de l'électronique à l'intérieur de l'AVR connecté à une seule broche (allez ici pour les fiches techniques complètes).
Ce bloc de circuit est répété pour chaque broche. Huit d'entre eux forment un port (port A, par exemple).
En partant du carré le plus à gauche (qui représente la connexion physique avec le monde extérieur), vous pouvez voir trois chemins:
Il convient de noter que certains ou tous ces circuits peuvent être contournés lorsque la broche est partagée avec un périphérique interne. Par exemple, le convertisseur analogique-numérique (ADC).
la source
Je suis entièrement d'accord avec la réponse de DrFriedParts , cependant, je veux ajouter que, vous pouvez en effet lire
PORT
pour savoir si le port / broche est configuré comme OUTPUT haut ou bas (quandDDR
=1
, le port / broche configuré comme sortie) ou si l'interne la résistance de rappel est activée (lorsqueDDR
=0
, le port / la broche est configuré comme entrée). De cette façon, un port peut être utilisé (de manière plutôt stupide) comme stockage général ou pour transmettre des informations sur l'état des pullups d'entrée / sortie, comme dans le scénario suivantPeut-être qu'une partie de votre programme écrit quelque chose sur les ports ou active / désactive les pullups, et l'autre partie du programme lit
PORT
pour savoir comment il est configuré. LirePORT
immédiatement après avoir écritPORT
n'a pas de sens: après avoir écritPORT
, vous savez quelle est la valeur dePORT
.la source
Pour vos besoins, la lecture à partir de PORT a du sens: les broches en question sont des broches de sortie, et vous voulez simplement lire la dernière valeur que vous avez écrite, la basculer et la réécrire. Vous utilisez donc le registre de port comme un octet de RAM observable de l'extérieur.
D'un autre côté, pour cette application particulière, vous pouvez simplement conserver la valeur dans un registre et vous n'aurez même pas à relire le registre PORT.
la source