This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

disabling external interrupt

i cant disable external interrupt,
i enabled exint0 in main, and in different function i want to use disable this interrupt and enable again
there is three bit related extrenal interrupt:
EX0=0 //disable exint0
EX0=1 //enable exint0
IT0=0 //level mode
IT0=1 //falling edge mode
IE0 : interrupt flag (automaticly cleared by hardware when interrupt serviced)
in main:

IT0=1;
EX0=1;
EA=1;//enable interrupts


in function:


EX0=0;//disable external interrupt
drawpic();// continue 5 second
IE0=0;
EX0=1;//enable external intrerrupt


but when drawing picture external interrupt continue to coming, where is the problem?

Parents
  • 80C51 Family 80C51 family architecture: page:14
    EA: Disables all interrupts. If EA = 0, no
    interrupt will be acknowledged. If EA = 1,
    each interrupt source is individually
    enabled or disabled by setting or clearing
    its enable bit.

    i think, im doing same things with instructions which was specified by 8051 datasheets, but i cant be success. anyway, thank you

Reply
  • 80C51 Family 80C51 family architecture: page:14
    EA: Disables all interrupts. If EA = 0, no
    interrupt will be acknowledged. If EA = 1,
    each interrupt source is individually
    enabled or disabled by setting or clearing
    its enable bit.

    i think, im doing same things with instructions which was specified by 8051 datasheets, but i cant be success. anyway, thank you

Children
  • what I GUESS you are missing is (per "the bible") if an event happens that normally would cause an interrupt while interrupts are disable, thhat interrupt will happen as soon as interrupts are enable.

    Look at the mechanism (using t0 as an example:
    t0 overflow, in itself, does NOT cause an interrupt it set TF0, nothing else. TF0 DOES cause an interrupt if and when the interrupt is enabled. Enabling T0 interrupt does NOT reset TF0. so, if TF0 is set, at the time you enable (all or) the T0 interrupt the T0ISR will be entered.

    Erik