Цитата(allsettingsdone @ Jan 31 2013, 16:35)

И, кстате, скажите кто знает: что значит "UL" после частоты?
Это значит, что константа имеет тип unsigned long. Этот суффикс имеет смысл приписывать, если код может использоваться на системах с 16-битным типом int (когда 8000000 не помещается в int), что для приведённого примера не актуально.
Цитата(allsettingsdone @ Jan 31 2013, 16:35)

И когда обьявляем переменную "uint16_t" - что значит _t ?
Ничего это не значит. Тип uint16_t, как и многие другие подобные типы, объявлен в файле stdint.h в соответствии со стандартом C99. Просто кто-то так назвал эти типы.
Цитата(allsettingsdone @ Jan 31 2013, 16:35)

И всегда ли эта переменная занимает одну ячейку памяти или под неё выделяется целые 32 бита?
Что есть ячейка памяти? Бит? Байт? 2 байта? 4 байта? 16 байт? И т.д. Так или иначе, ответ зависит от контекста: если переменная размещается в регистре или стеке, то скорее всего она занимает 32 бита. Статические переменные могут занимать меньше памяти.
Цитата(allsettingsdone @ Jan 31 2013, 16:35)

И что просходит с переменной обьявленной таким способом, если мы записываем в неё например 1млн?
Если в uint16_t записать 1000000, то скорее всего там окажется 16960 (то есть срежутся старшие биты).
Цитата(allsettingsdone @ Jan 31 2013, 16:35)

Что плохого/хорошего скажите про всё это?
Код хорош тем, что прост, но плох тем, что время исполнения зависит от версии компилятора, уровня оптимизации, скорости процессора и т.д.
Кстати, вам совсем не помешает почитать учебник по языку Си.