help using micros(); I have unwanted results

Hi, my goal is to manage different outputs with zero crossing, to drive leading edge dimmer. I'm using interrupts, when it occours I want to save the actual time in microseconds, and in the loop I'll check if that value+the desidered delay (more delay, more intensity of lamp) is exceeding the actual microseconds time. If so I switch off the mosfets and cut the wave.

It works if I'm using (for test purpuses) a delayMicroseconds(100*intensity), and the bulb is stable, works ideally. I'm using for test purposes 100 intensity levels, which multiplied for 100uS gives 10ms, which is about the time of the new zero crossing.

let's make easier as possibile, fixed value of 5ms, half bulb's light.

volatile unsigned long tempo2, tempo3; 

void setup() {

pinMode(19, INPUT_PULLUP); //zerocrossing optocoupler
pinMode(52, OUTPUT);  //gates driver optocoupler
digitalWrite(52,HIGH); //bulb off
attachInterrupt(digitalPinToInterrupt(19), zero, RISING);

void loop() {
tempo3=micros(); //to avoid use micros() inside routine I'm saving its value on loop, anyway it changes nothing in result, already tried
if ((tempo3-5000)>tempo2) {digitalWrite(52,HIGH); } // turning off after 5000uS from the zero, using minus to avoid problems when micros() cycles on zero again

  void zero() {
  digitalWrite(52,LOW); //turns on the bulb on zerocross

It produces a flickering bulb, like some half/waves are missing to be used. I'm wondering know why.. Thank you!

thanks to who can support me on this, maybe I've to check directly the timer counter?