pulse sensor and ISR stops the rest of my code

Bytes (bool) have atomic access, no need for volatile here.

The volatile is absolutely needed there and it has little to do with atomic access. Volatile tells the compiler that the variable may be modified out of normal program flow and so its value must be loaded from RAM each time it is accessed, rather than relying on a cached copy in a register.