Nie wiem od czego zacząć bo to jest złożone zagadnienie.
Czas jest odmierzany taktami procesora a licznik odmierzany w dół ma wartość dwubajtową czyli nie maks 255 do 0 a 65535 do 0. Do tego aby coś odjąć od wartości dwubajtowej w AVR służy rozkaz assemblera SBIW - Subtract Immediate from Word
Dlatego jest tam procedura _lcd_delay:
Będzie odejmować od słowa czyli dwóch bajtów dopóki to nie będzie miało zera. To akurat jest tu bardzo proste bo BRNE - Branch if Not Equal każe mu z powrotem skoczyć pod adres gdzie miał na początku odjąc jeden od całej dwubajtowej wartości. Czyli kręci się w kółko dopóki wartośc będzie miała zero i wtedy warunek dla BRNE nie jest spełniony i wykona się następny rozkaz czyli RET. Tym sposobem program "czeka" a tak naprawdę to odlicza w dół kręcąc się w kółko.
W tej bibliotece która powstała pewnie bardzo wcześnie czasy wyliczone są dla uC taktowanego 4MHz co jest w bibliotece jawnie opisane.
Tymczasem teraz każdy goni AVR`a minimum 16MHz, nowe AVRX 24MHz a Xmega 32MHz.
Czas wykonania jednego taktu się po prostu skraca i czasy wpisane "na sztywno" w bibliotece nie wystarczają by odczekać wymagany czas.
Teraz może opiszę coś co powinno być dla każdego programisty oczywiste. Jeśli odejmujemy np od wartości typu bajt to jeśli zejdziemy do zera i odejmiemy jeden to ten bajt otrzyma wartość 255... teraz jeśli używamy SBIW to odejmujemy od bajtu, ale jak ten bajt zejdzie do zera to odejmujemy jeden od tego drugiego i nasz bajt znów ma 255 do odliczenia.
Typ WORD zapisywany może być jako Little Endian lub Big Endian. To znaczy że bardziej znaczący bajt może być zapisany jako drugi, niekoniecznie intuicyjnie dla człowieka.
Tak więc widać na poprzednich obrazkach że dla odliczenia 5us R31 to w ogóle zero a odliczamy tylko pojedyncze takty z R30 a żeby odliczyć 20ms musimy odliczyć 78 razy 256 i jeszcze 28 razy te dwa takty

Przecież to proste
Tak więc to co jest w R30 to tylko precyzja a jeśli chcesz coś opóźnić dla uC taktowanego 16MHz to pomyśl jak zwiększyć wartośc ładowaną do R31 czterokrotnie (4x4=16) A jak trzeba to użyj _delay_LCD dwukrotnie.
Inna sprawa jest taka że Bascom od tego czasu już ma w innych bibliotekach coś co generuje opóźnienia w zalezności ot taktowania uC. To się nazywa _genus() ale to opowieśc na innego posta