Hi all, I am using Timer0 as interrupt for display time on LCD. But when the interrupt occurs, it won't come back to the last executed command of interrupted. It is repeating the ISR. I am using embedded C. I don't know what is happening. I did my best. Please help me.
here is my ISR
void timer0() interrupt 1 { TH0 = 0xFC; TL0 = 0x17; time_display(); }
/*------------------------------------void EWEN ()-----------------------------------------*/ void EWEN ()
{ uchar i; uint Data; CS = 0; SCK = 0; CS = 1; //Data = 0x98; Data = 0x260; Data <<= 6; for (i = 0; i <10; i ++){ SDI = Data &0x8000; SCK = 1; SCK = 0; Data <<= 1; } CS = 0; } /*------------------------------------void EWDS ()-----------------------------------------*/ void EWDS () { uchar i; uint Data; CS = 0; SCK = 0; CS = 1; //Data = 0x80; Data = 0x200; Data <<= 6; for (i = 0; i <10; i ++){ SDI = Data &0x8000; SCK = 1; SCK = 0; Data <<= 1; } CS = 0; } /*------------------------------------uint Read (uchar Address)-----------------------------------------*/ uint Read (uchar Address) { uchar i,pack; uint TmpData,m_data;
for(pack=0;pack<2;pack++){ EWEN (); CS = 0; SCK = 0; CS = 1; TmpData = (Address & 0x7F) | 0x0300; TmpData <<= 6; for (i = 0; i < 10; i ++) { SDI = TmpData &0x8000; SCK = 1; SCK = 0; TmpData <<= 1; } SDO = 1; for (i = 0; i <8; i ++) { CS = 1; SCK = 1; m_data <<= 1; m_data |= SDO;
SCK = 0; } CS = 0; EWDS (); Address++; } return m_data; } /*------------------------------------void Write (uchar Address, uint Data)-----------------------------------------*/ void Write (uchar Address, uint Data)
{ uchar i,pack,lsb_dat,msb_dat; uint TmpData; TmpData = Data; lsb_dat = TmpData; TmpData >>= 8; msb_dat = TmpData; for(pack=0;pack<2;pack++) { EWEN (); CS = 0; SCK = 0; CS = 1; TmpData = (Address & 0x7F) | 0x0280; TmpData <<= 6; for (i = 0; i <10; i ++){ SDI = TmpData &0x8000; SCK = 1; SCK = 0; TmpData <<= 1; } if(pack==0)TmpData = msb_dat; else TmpData = lsb_dat; for (i = 0; i <8; i ++){ SDI = TmpData &0x80; SCK = 1; SCK = 0; TmpData <<= 1; } CS = 0; SDO = 1; CS = 1; SCK = 1; while (SDO == 0) { SCK = 0; SCK = 1; } SCK = 0; CS = 0; EWDS (); Address++; } } /*------------------------------------void ERASE (uchar Address)-----------------------------------------*/ void ERASE (uchar Address) { uchar i; uint TmpData; EWEN (); CS = 0; SCK = 0; CS = 1; TmpData = (Address & 0x3F) | 0x0380; TmpData <<= 6; for (i = 0; i <10; i ++){ SDI = TmpData &0x8000; SCK = 1; SCK = 0; TmpData <<= 1; } CS = 0; SDO = 1; CS = 1; SCK = 1; while (SDO == 0) { SCK = 0; SCK = 1; } SCK = 0; CS = 0; EWDS (); } /*------------------------------------void ERAL ()-----------------------------------------*/ void ERAL () { uchar i; uint TmpData; EWEN (); CS = 0; SCK = 0; CS = 1; TmpData = 0x240; TmpData <<= 6; for (i = 0; i <10; i ++){ SDI = TmpData &0x8000; SCK = 1; SCK = 0; TmpData <<= 1; } CS = 0; SDO = 1; CS = 1; SCK = 1; while (SDO == 0) { SCK = 0; SCK = 1; } SCK = 0; CS = 0; EWDS (); } /*------------------------------------void WRAL (uint Data)-----------------------------------------*/ void WRAL (uint Data)
{ uchar i; uint TmpData; EWEN (); ; CS = 0; SCK = 0; CS = 1; TmpData = 0x220; TmpData <<= 6; for (i = 0; i <10; i ++){ SDI = TmpData &0x8000; SCK = 1; SCK = 0 ; TmpData <<= 1; } TmpData = Data; for (i = 0; i <16; i ++){ SDI = TmpData &0x8000; SCK = 1; SCK = 0; TmpData <<= 1; } CS = 0; SDO = 1; CS = 1; SCK = 1; while (SDO == 0) { SCK = 0; SCK = 1; } SCK = 0; CS = 0; EWDS (); } /*------------------------------------END-----------------------------------------*/