Vérification d'entrée en ATmega8

N

nagsaver

Guest
bonjour ppl, je suis en utilisant un ATmega8 et pour le contrôle d'entrée sur n'importe quelle broche par exemple PIND0-je utiliser la ligne de code suivante ......... if (PIND & 0b00000001) {... } Si PD0 est élevée, le "si" bloc est exécuté en tant que la condition est évaluée à true ..... Mon doute pourquoi la pente i utiliser la ligne de code ci-dessous ..... Pourquoi ça ne marche pas ....? if (PIND == 0b00000001) Quel est le problème avec cette affirmation????
 
Vos chèques de deuxième ligne est égal à la valeur du port 0b00000001 ce qui signifie que b0 = 1, b1 = 0, b2 = 0 etc donc si un bit a une valeur différente, il échoue. La première condition utilise l'opérateur AND pour effacer les bits 07h01 si la valeur est 0 pour sûr, puis vérifie le résultat ce qui signifie qu'il ne se soucie que de bit0. Pensez à utiliser ces macros http://www.edaboard.com/entry861.html
 
bonjour ppl, je suis en utilisant un ATmega8 et pour le contrôle d'entrée sur n'importe quelle broche par exemple PIND0-je utiliser la ligne de code suivante ......... if (PIND & 0b00000001) {... } Si PD0 est élevée, le "si" bloc est exécuté en tant que la condition est évaluée à true ..... Mon doute pourquoi la pente i utiliser la ligne de code ci-dessous ..... Pourquoi ça ne marche pas ....? if (PIND == 0b00000001) Quel est le problème avec la déclaration ci-dessus
La différence entre les deux expressions est la suivante:????
Code:
 PIND & 0b00000001
Les opérateurs AND expression ci-dessus Pind avec 0b00000001, qui produisent une valeur non nulle (logique vrai) tant que résultat PIN0 est / élevée, quel que soit l'état des autres repères.
Code:
 PIND == 0b00000001
Bien que l'expression ci-dessus nécessite l'PIND à régler exactement comme 0b00000001 au produit un résultat logique vrai, en d'autres termes pas les autres broches peuvent être réglés / haute autre que PIN0. BigDog [COLOR = "argent"] --- Mise à jour --- [/COLOR] Alex me battre pour elle. : Lol:
 
Merci pour votre réponse BigDog ...... pas grave si je n'ai pas toucher les broches d'autres (par exemple) si je les laisse flottante et la broche que je veux faire est de vérifier la déclaration PD0 sera encore travailler??????
 
Peut-être, bien que peu probable que des entrées CMOS ne doit jamais être laissée flottante que leurs états deviennent imprévisibles, car ils sont sensibles au bruit, etc La meilleure politique est de ne jamais présumer de rien et gardez vos "tests" aussi précis que possible. C'est pourquoi le meilleur choix parmi les deux expressions pour tester l'état de PIN0 est la suivante:
Code:
 PIND & 0b00000001
La politique minimise également les problèmes lors de l'élaboration des routines de bibliothèque, on ne sait jamais dans quel état existe avant la routine est appelé. BigDog
 
bonjour ppl, je suis en utilisant un ATmega8 et pour le contrôle d'entrée sur n'importe quelle broche par exemple PIND0-je utiliser la ligne de code suivante ......... if (PIND & 0b00000001) {... } Si PD0 est élevée, le "si" bloc est exécuté en tant que la condition est évaluée à true ..... Mon doute pourquoi la pente i utiliser la ligne de code ci-dessous ..... Pourquoi ça ne marche pas ....? if (PIND == 0b00000001) Quel est le problème avec cette affirmation????
votre première ligne de code dit que si e e PD0 broches est élevé (1) seule cette condition if s'exécute, sinon pas . tandis que la deuxième instruction if est dit que si la valeur de tous si PD7 à PD1 sont comprises entre 0 et PD0 est 1, alors que cette affirmation est vraie sinon il ne sera pas exécuté. sa dépend pas seulement de PD0 mais aussi sur les autres bits. que suppose PD0 est 1, mais est également PD7 1 alors si ce sera faux et ne sera pas exécuté
 

Welcome to EDABoard.com

Sponsor

Back
Top