Différence entre la lecture du PORT et du PIN

9

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
Hanna
la source
Sommes-nous censés utiliser nos boules de cristal pour savoir quel microcontrôleur (et pour le code: quel langage de programmation) vous utilisez ??
Wouter van Ooijen
Désolé, il a été modifié.
Hanna
Est-ce votre propre code ou est-ce un exemple? S'il s'agit d'un exemple, d'où vient-il? Pourquoi dites-vous que "lire la broche n'est pas utile ici"?
angelatlarge
Je l'ai déjà testé dans AVR studio. Pensez-vous qu'en R17, PINB est correct?
Hanna

Réponses:

13

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).

entrez la description de l'image ici

En partant du carré le plus à gauche (qui représente la connexion physique avec le monde extérieur), vous pouvez voir trois chemins:

  1. Le chemin le plus haut est la résistance de pull-up sélectionnable par logiciel
  2. Le chemin du milieu est utilisé lorsque la broche est configurée comme sortie
  3. Le chemin le plus bas est utilisé lorsque la broche est configurée comme entrée

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).

DrFriedParts
la source
+1 Il convient également de noter que lorsque les ports sont configurés en entrées, l'écriture de 1 sur n'importe quel bit de PORT active la résistance de rappel interne sur cette broche.
Matt Young
Quand devrais-je lire PORT?
Hanna
Vous lisez à partir du code PIN. La lecture de PORT ne vous donnera rien d'utile.
Matt Young
@user - La lecture de PORT vous donnera l'état des résistances de pull-up (que le pull-up soit activé pour cette broche ou non), mais comme le mentionne Matt Young, ce n'est pas du tout utile.
DrFriedParts
J'ai ajouté un extrait de la lecture de PORT
Hanna
4

Je suis entièrement d'accord avec la réponse de DrFriedParts , cependant, je veux ajouter que, vous pouvez en effet lire PORTpour savoir si le port / broche est configuré comme OUTPUT haut ou bas (quand DDR= 1, le port / broche configuré comme sortie) ou si l'interne la résistance de rappel est activée (lorsque DDR= 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 suivant

Peut-ê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 PORTpour savoir comment il est configuré. Lire PORTimmédiatement après avoir écrit PORTn'a pas de sens: après avoir écrit PORT, vous savez quelle est la valeur de PORT.

angelatlarge
la source
Pouvez-vous me donner un meilleur code? Et pourquoi dans R17, PINB ne répond pas là-bas?
Hanna
D'après votre question, ce que vous essayez de faire n'est pas clair ... pouvez-vous clarifier cela dans votre question: quel est le but de cet extrait de code? Êtes-vous simplement en train d'essayer de basculer un port à une fréquence et un rapport cyclique particuliers?
angelatlarge
oui !!! juste ça
Hanna
1

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.

microtherion
la source
Alors pourquoi lire le code PIN est incorrect?
Hanna
La valeur que vous obtenez du code PIN dépend, en principe, de ce qui est attaché à la broche en externe, et dans votre application particulière, vous n'êtes intéressé que par la valeur que vous avez précédemment écrite vous-même (c'est, bien sûr, plutôt atypique de I / O broches). Dans la pratique, je m'attendrais cependant à ce que les valeurs de PORT et PIN soient identiques ici (l'avez-vous essayé?).
microtherion le
Oui, je l'ai déjà testé dans AVR studio.Je pense que ce que vous avez dit est vrai.Nous avons juste besoin de compléter la valeur du port ...
Hanna