Точно, зацикливается наверно бесконечно. У меня 2 варианта из-за чего зацикливается. Приведу программу:
1: static void delay(unsigned long int i)
2: {
3:
4: unsigned long int ii;
5: for(ii=1000; ii›=0; ii--)
6: {
7: while(i--) /*nop*/;
8: }
9:
10:}
Вариант 1. Зацикливается в строке 7, потому что переменная i беззнаковая и она всегда будет больше 0.
Вариант 2. Зацикливается в строке 5, потому что переменная ii тоже беззнаковая и она всегда будет больше 0.
Лечение в обоих вариантах: убрать слово "unsigned" в каждой переменной.
Лирическое отступление. Я вообще программировал на C++Builder 6 и в IAR для AVR. В Билдере там это разные типы long и int. А здесь что-то намешали: "unsigned long int". Хочу только сказать еще, что в Билдере это одинаковые типы.