one-shot astable

It’s probably just that one-shots are not that commonly needed in firmware. Even switch debouncing can be done inside a standard timed main() loop.

Here is pseudocode for a (retriggerable) one shot:

timer = 0
triggered = false
oneShotActive = false

LOOP:
    if (triggered)
    {
        triggered = false;
        timer = ONE_SHOT_TIMEOUT
        oneShotActive = true
    }
    else if (timer > 0)
    {
        timer--
    }
    else if (timer == 0)
    {
        oneShotActive = false
    }
ENDLOOP:

[edit: fixed a bug]