سلام.اول دو تا تابع زیر رو فراخانی کنید:

void write_epr(unsigned char data2,unsigned char addr)
{
    EEDR=data2;
    EEAR=addr;
    EECR=0x04;
    EECR=0x02;
while( EECR && 0x02 );
}
unsigned char read_epr (int a)
{
EEAR=a;
EECR=0x01;
return EEDR;
}

اولی مینویسه دومی میخونه.تابع اول پارامتر اولش برای داده مورد نظرتون هست.پرامتر دوم برای مکان هست.

تابع دومی یه کاراکتر بیرون میده بعد پارامتر اولشم مکانی که میخوای بخونی رو میدی.مثلا کد زیر :

a=read_epr(99);

مکان ۹۹ رو میخونه بعدشم توی متغییر a میریزه.

مثال:

#include <mega16a.h>
#include <stdio.h>

char a;
void write_epr(unsigned char data2,unsigned char addr)
{
    EEDR=data2;
    EEAR=addr;
    EECR=0x04;
    EECR=0x02;
while( EECR && 0x02 );
}
unsigned char read_epr (int a)
{
EEAR=a;
EECR=0x01;
return EEDR;
}
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 2400
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
write_epr('1',60);
a=read_epr(60);
putchar(a);

write_epr('2',60);
a=read_epr(60);
putchar(a);

write_epr('3',60);
a=read_epr(60);
putchar(a);
while (1)
      {
      // Place your code here

      }
}

توضیح:

ابتدا با تابع اول توی مکان ۶۰ مینویسیم.بعد میخونیم و به پورت سریال میکرو میفرستیم.اگه مدارو توی عمل ببندید یه ۱۰ ثانیه طول میکشه جواب بده.باورد میکرو هم ۲۴۰۰بیت بر ثانیه هستش.

دل نوشته:

میگم من چرا ایقدر منتظر نظرم؟ خودم هیچی نظر نمیدم بعد نظر برای وبلاگم میخوام!البته نظرم بدید بدک نیستا!(خسته!)راستی این مطلب ۸۹ مین مطلب منه