Knopka bosib turilganda o’ngdan chapga 8ta svetadiod ketma-ket yonib borishi va qo’yib yuborilganda teskari yo’nalishda xuddi shunday ishlashi kerak


Download 1.47 Mb.
bet3/4
Sana10.01.2023
Hajmi1.47 Mb.
#1087429
1   2   3   4
Bog'liq
13 var arduiono

Ko'rsatilganidek, 7-bit zaif tortishish qarshiligi bilan bog'liq. Uni faollashtirish uchun uni nolga aylantirish kerak. Bu OPTION_REG<7>=0 tomonidan amalga oshiriladi . Bu, ayniqsa, 7-bit bilan bog'liq bo'lib, boshqa bitlarni standart qiymatlariga qo'yadi. Bu bilan biz while tsikliga kiramiz, u yerda if (RB0==0) tugmasi yordamida tugma bosilishini tekshiradi. Agar shart bajarilsa, biz 1, 3, 7 va 15 parametrlari bilan funksiyamizni chaqiramiz. sblink(1); //FUNCTION CALL 1 parametri bilan sblink(3); //FUNCTION CALL 3 parametri bilan 3 sblink(7); //FUNCTION CALL 7 7 parametr bilan sblink(15); //FUNCTION CALL 4 parametri 15

  • Funktsiyalar bizning kodimizdagi satrlar sonini kamaytirish uchun ishlatiladi. Bu ko'pchiligimiz bilar edi. Lekin nima uchun biz qatorlar sonini kamaytirishimiz kerak, ayniqsa MCU dasturlash haqida gap ketganda. Sababi , dastur xotiramizdagi cheklangan joy . Agar biz kodni to'g'ri optimallashtirmasak, xotirada bo'sh joy qolmasligi mumkin. Bu kodlarning uzun sahifalarini yozganimizda foydali bo'ladi.
  • Har qanday funksiyada Definition ( bizning holatda sblink(int get)) funksiyasi va Call ( bizning holatda sblink(1)) funksiyasi bo‘ladi. Funktsiya deklaratsiyasiga ega bo'lish ixtiyoriy, uni oldini olish uchun funktsiyani asosiy funktsiyamga chaqirishdan oldin o'z funksiya ta'rifimni joylashtirdim.
  • Funktsiya parametrlari - bu funktsiya chaqiruvidan funktsiya ta'rifiga o'tadigan qiymat. Bizning holatda butun son qiymatlari (1, 3, 7, 15) funksiya chaqiruvidan uzatiladigan parametrlar va "get" o'zgaruvchisi ularni qayta ishlash uchun funksiya ta'rifiga parametrlarning qiymatini oladi. Funktsiya bir nechta parametrlarga ega bo'lishi mumkin. 
  • Funktsiya chaqirilgandan so'ng, funktsiya ta'rifidagi quyidagi satrlar bajariladi.
  • for (int i=0; i<=7 && RB0==0; i++)
  • {
  • PORTD = get << i; //LED move Left Sequence
  • __delay_ms(50);
  • }
  • for (int i=7; i>=0 && RB0==0; i--)
  • {
  • PORTD = get << i; //LED move Left Sequence
  • __delay_ms(50);
  • }
  • Endi bu qator g'alati ko'rinadi: PORTD = get << i . Men bu erda nima sodir bo'layotganini tushuntiraman.
  • "<<" chapga siljish operatori bo'lib, barcha bitlarni chap holatiga o'tkazadi. Endi biz "1" parametrli sblink(int get) funksiyasini sblink(1) deb chaqirsak, u "get" qiymatini 1 ga aylantiradi, bu ikkilik tizimda 0b00000001 bo'ladi. Demak, bu qator PORTD = 0b00000001<< i kabi bo'ladi .
  • "i" qiymati 0 dan 7 gacha o'zgaradi, chunki biz "for loop" for (int i=0; i<=7 && RB0==0; i++) dan foydalanganmiz. "I" ning 0 dan 7 gacha bo'lgan qiymati natijani quyidagicha o'zgartiradi:

Download 1.47 Mb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling