آموزش روشن کردن ۸ 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 را می‌گیرد. به جدول زیر دقت کنید.

PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 کد هگز دهدهی شماره LED
1 0 0 0 0 0 0 0 0X01 1 LED0
0 1 0 0 0 0 0 0 0X02 2 LED1
0 0 1 0 0 0 0 0 0X04 4 LED2
0 0 0 1 0 0 0 0 0X08 8 LED3
0 0 0 0 1 0 0 0 0X10 16 LED4
0 0 0 0 0 1 0 0 0X20 32 LED5
0 0 0 0 0 0 1 0 0X40 64 LED6
0 0 0 0 0 0 0 1 0X80 128 LED7

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

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

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

باکس دانلود

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

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

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