آموزش روشن کردن ۸ LED در AVR

در این پروژه قصد داریم  هشت LED را به ترتیب روشن کنیم برای این کار از پورت A میکروکنترلر ATMEGA 16 استفاده کرده ایم. فرکانس کاری میکرو ۸ مگاهرتز در نظر گرفته شده است. در عکس زیر شماتیک مدار را می‌توانید مشاهده کنید.

آموزش AVR

#include <mega16.h>
#include <delay.h>

void main(void)
{
int i;
DDRA=0xff;
PORTA=0x00;
while (1)
      {
      for(i=1;i<256;i=i*2)
      {
      PORTA=i;
      delay_ms(1000);
      }
}
}

در این برنامه از حلقه تکرار For برای مقدار دهی به رجیستر PORT استفاده شده است. در این حلقه متغیر i از مقدار ۱ شروع می‌شود و تا زمانی که مقدار آن از ۲۵۶ کمتر باشد دستور i=i*2 با هر بار تکرار حلقه اجرا می‌شود. i=i*2 به این معنی است که مقدار i در ۲ ضرب شود و در خود i ذخیره شود. اما این دستور از کجا آمده است؟

در داخل حلقه for دستور PORTA=i قرار دارد. این دستور یعنی رجیستر PORT مقدار i را می‌گیرد. به جدول زیر دقت کنید.

PB0PB1PB2PB3PB4PB5PB6PB7کد هگزدهدهیشماره LED
100000000X011LED0
010000000X022LED1
001000000X044LED2
000100000X088LED3
000010000X1016LED4
000001000X2032LED5
000000100X4064LED6
000000010X80128LED7

ملاحظه می‌کنید که برای روشن شدن LED ها به ترتیب می‌بایست رجیستر PORT به ترتیب جدول مقدار دهی شود. اگر به معادل دهدهی کدها دقت کنید خواهید دید که هر مقدار ۲ برابر مقدار قبلی است. دستور i=i*2 در واقع سازنده‌ی این کدها است زیرا هر بار که دستور i=i*2 اجرا می‌شود، مقدار قبلی i دو برابر شده و پس از آن این مقدار در رجیستر PORT ریخته می‌شود.

اطلاعات دانلود

  • حجم فایل: 20 کیلوبایت
  • فرمت:RAR

فیسبوک توییتر گوگل + لینکداین تلگرام واتس اپ کلوب

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *