Bitdan biroz farqlashni taqqoslash

Oddiy savol, albatta, men uni to'g'ri tushunganimga ishonch hosil qilishni istayman. Buni albatta Arduinoga xos emasligini tushunaman.

ATmega2560 bilan bog'liq ravishda oldingi tugagandan so'ng darhol orqaga qarab 3 ta A/D ishlashini qilaman. Men buni har safar bitta konversiyani chaqirish bilan bajarmoqdaman.

O'tkazishni yakunlashni kutish uchun ushbu foydali kodning ustiga qoqildim:

while(ADCSRA & (1<

Konvertatsiyani yakunlashni kutmoqdaman va bu amalga oshganda ADSC 0 ​​ga o'rnatiladi. (Aksincha, ADIFni 1-raqamga qo'yishni kutishim mumkin). Buning aniqligini tushunmayapman. satr sharhlanadi.

Normally when I see something along the lines of (1< it means write a 1 to the ADSC bit.

Ammo, bu holda, bu shunday emas.

Nima uchun faqat:

while(ADSC);
3

1 javoblar

Quyidagi ma'nolarni noto'g'ri tushunasiz:

1 << ADSC

Bu, aslida, ADSC qiymatida ko'rsatilgan bit sonining chap qismidagi 1-bitni almashtirishni anglatadi.

ADSC in this case is 6:

#define ADSC    6

Agar shunday qilsangiz:

while(ADSC);

aslida:

while(6);

Albatta, u hech qachon tugamaydi, chunki 6 0 emas.

Buning o'rniga, ikkilik rejimda 6 marta chapga siljiydingiz:

00000001
    << 6
01000000

Albatta, bu oltinchi raqamda 64 yoki 0x40. Ushbu ro'yxatga kiritilgan bittadan bittani qaytarish uchun ADCSRA registrining qiymati bilan ANDED qilinadi. Buning natijasi va while bilan nazorat qilishingiz mumkin. Shunday qilib, quyidagilar tugaydi:

while(ADCSRA & 0x40);

Qaysi biri yoki unga tenglashtiriladi:

while(0x40);

agar 7 th bit o'rnatilgan bo'lsa yoki o'rnatilmagan bo'lsa:

while(0x00);

Va 0x00 0 bo'lgani uchun, bit belgilanmagan va while tugagach, bu tenglikka teng bo'ladi.

4
qo'shib qo'ydi
Men buni belgilashim kerak edi, chunki men buni o'zgartiraman deb o'ylayman, uzr so'rayman, ADSC ADCSRA reestrida bayroq.
qo'shib qo'ydi muallif Ambrose, manba
Men kunlik yangi narsalarni o'rganaman. Rahmat!
qo'shib qo'ydi muallif Ambrose, manba
Shuningdek, bu raqam uchun # -define hisoblanadi. Bu holatda, bu registrda ADSC bitining soni. Registrni boshqarish uchun uni ishlatasiz - bu bitni o'zingiz boshqara olmaysiz (osonlik bilan).
qo'shib qo'ydi muallif Majenko, manba
Buning uchun AVR kutubxonasida katta yordam mavjud. Iltimos, nongnu.org/avr-libc/user-manual/group__avr__sfr ga qarang. html . Bu shuningdek, AVR MCU registrlari va bit maydon belgilarini va ulardan foydalanishni tushuntirishga yordam beradi. loop_until_bit_clear (ADCSRA, ADSC);
qo'shib qo'ydi muallif Mikael Patel, manba