با تشکر از شما. توی برنامه من همیشه زمان در حال شمارش هست و وقفه روی میده و در زیر برنامه اصلیم هم از حافظه خارجی عمل خواندن رو انجام میده. من حتی عمل نوشتن توی eeprom رو پاک کردم از کتابخونه حافظه. دستور نوشتن در eeprom هم در زیر میزارم
کد:
BYTE read_ext_eeprom(long int address) {
BYTE data;
while(!ext_eeprom_ready());
i2c_start();
i2c_write((0xa0|(BYTE)(address>>7))&0xfe);
i2c_write(address);
i2c_start();
i2c_write((0xa0|(BYTE)(address>>7))|1);
data=i2c_read(0);
i2c_stop();
return(data);
}
هرچقدر هم زمان وقفه کمتر میکنم عمل نوشتن توی حافظه سریعتر انجام میشه. توی کل حافظه نمینویسه ها توی بعضی از جاهاش اطلاعات غلط مینویسه.
اینم برنامه ای که باهاش تستش کردم و فهمیدم زمانی که وقفر فعال میکنم عمل نوشتن جای خوندن توش اجرا میشه.
کد:
#int_timer2
void timer2_isr() {
if(++tick>=50&&shasyz==0){
tick=0;
output_toggle(led);}}
void main(){output_b(0b0);
setup_timer_2 ( T2_DIV_BY_16,55,16);
enable_interrupts(INT_timer2);
enable_interrupts(GLOBAL);
set_tris_b(0b00000101);
set_tris_a(0b0000011);
int16 i;
int8 r3,r2,r1,byte1,byte2,byte3;
int1 gg=0;
while(true){
for (i=0;i<1023;i+=2){ i++;
r3=read_ext_eeprom(i);delay_us(850);
r2=read_ext_eeprom(i+1);delay_us(850);
r1=read_ext_eeprom(i+2);delay_us(850);
if (byte3==r3&&byte2==r2&&byte1==r1){i=1024;gg=1;}}
}}
راستی فقط از پایه های scl , sda میکرو میتونم باهاش ارطباط برقرار کنم.