ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
173635 Топик полностью
koyodza (26.11.2009 22:23 - 22:28, просмотров: 87) ответил Silver на Обьясните пожалуйста подробнее, почему программа должна из-за этого виснуть! И как лучше делать задержку? Флаг busy почему-то не срабатывает. От таймера?
попытаюсь по-порядку 1. рассмотрим void LCD_busy() { unsigned char i,j; for(i=0;i<500;i++) //A simple for loop for delay for(j=0;j<255;j++); } здесь i и j описаны как unsigned char, т.е. могут принимать значения от 0 до 255. Т.е. цикл for(i=0;i<500;i++) будет вечным, поскольку i никогда не достигнет 500 2. не знаю какая у Вас тактовая, но выполнение LCD_en=1; LCD_en=0; создаст импульс Е длительностью всего 2 такта. При тактовой 24МГц это будет около 80 нсек, а индикатору нужно не меньше 500 нсек 3. В LCD_init() тайминги вообще не выдержаны, посмотрите например рисунок на стр.5 http://www.melt.ah …cs/file2087%5B1%5D.pdf там всё очень хорошо видно 4. Флаг busy в принципе не является необходимым. Я его не использую. 5. До более сложных реализаций Вам пока далеко, для начала лучше сделайте работоспособным простой алгоритм