การตรวจสอบการเขียนข้อมูลลง EPPROM ด้วย Interrupt
 
     
  - ปกติแล้วเราจะใช้วิธีหน่วงเวลาหลังจากที่เขียนข้อมูลลง EEPROM แล้ว เพื่อให้แน่ใจว่าการเขียนเป็นไปอย่างสมบรูณ์  
  - แต่เพื่อความเร็วสูงสุดในการเขียนข้อมูลเราสามารถใช้การ Interrupt ที่เกิดขึ้นหลังจาก การเขียนข้อมูลลง EEPROM เสร็จสิ้น  
  โดยใช้ re-processor #INT_EEPROM ไว้หน้าฟังก์ชั่นที่ใช้ในการตรวจสอบ  
     
  ตัวอย่างโปรแกรม EEPROM3.C  
 
//EEPROM4.C
//EEPROM Interrupt Demo
//PIC16F628   EEPROM size 128  00-7Fh
//PIC16F648A  EEPROM size 256  00-FFh
//#include <16F628.h>
#include <16F648A.h>
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT,MCLR,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600, xmit=PIN_A0, rcv=PIN_A1)

int EEPROMflag;

#INT_EEPROM
void EEPROM_done(void)
{
  EEPROMflag=1;
}

void DumpEEPROM(void)
{
int vol,i,j,k;

    k=0;
    for(i=0; i<8; ++i)
    {
     printf("%4X: ",k);       //EEPROM in hex
     for(j=0;j<=15;++j)
     {
      printf( "%2X ",read_eeprom(i*16+j));
      if(j==7)
        printf("- ");
     }
     printf("\r\n");
     k+=16;
    }
 printf("\r\n");
}
//*** MAIN ***
main()
{
int i,Err;
long Cn;

     delay_ms(200);                         //Delay for Hardware ready
     printf("*** EEPROM DEMO4***\r\n");

     enable_interrupts(GLOBAL);
     enable_interrupts(INT_EEPROM);

     for(i=0;i<128;i++)
     {
       Cn=0;
       Err=0;
       EEPROMflag=0;
       write_eeprom(i,i);
       while(EEPROMflag==0)
       {
        Cn++;
        if(Cn==3)
        {
         Err=1;
         break;
        }
       }
       if(Err==1)
       {
        printf("write EEPROM Error address %2X\r\n",i);
        break;
       }
     }
     DumpEEPROM();
     while(1);                              //Loop here
}

                
 
     
  เมื่อโปรแกรมเริ่มทำงาน  
 
*** EEPROM DEMO4***
0000: 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F
0010: 10 11 12 13 14 15 16 17 - 18 19 1A 1B 1C 1D 1E 1F
0020: 20 21 22 23 24 25 26 27 - 28 29 2A 2B 2C 2D 2E 2F
0030: 30 31 32 33 34 35 36 37 - 38 39 3A 3B 3C 3D 3E 3F
0040: 40 41 42 43 44 45 46 47 - 48 49 4A 4B 4C 4D 4E 4F
0050: 50 51 52 53 54 55 56 57 - 58 59 5A 5B 5C 5D 5E 5F
0060: 60 61 62 63 64 65 66 67 - 68 69 6A 6B 6C 6D 6E 6F
0070: 70 71 72 73 74 75 76 77 - 78 79 7A 7B 7C 7D 7E 7F
 
     
  หลักการทำงานของโปรแกรม  
  -เขียนข้อมูล 00-7Fh ลงใน EEPROM  
  - ตรวจสอบการเขียนแต่ละไบท์เสร็จสิ้น จากการ Interrupt  
  -เพื่อไม่ให้โปรแกรม hang เมื่อมีการเขียน EEPROM ไม่ได้
จึงต้องมีการนับจำนวนลูป ในการรอแล้วออกจากลูปเมื่อครบกำหนด
 
  - แสดง (dump) EEPROM ที่เขียนไว้ออกทาง PC