Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
;---------------------------------Дpайвеp ЖКИ----------------------------------
;Подпрограмма инициализации драйвера ЖКИ. Выдает команду 30h - 16 - разрядная шина,
;задержка более 4.1мс, снова команда 30h, задержка 100мс, сонва 30h. При этих
;операциях проверка бита готовности BF блокируется. Далее выдается строка
;инициализации с проверкой бита готовности BF. 28h - 4 - разрядная шина данных,
;0ch - выключить курсоры, 6 - разрешить отображение.
initlcd:lcall init ;
lcall init ;
init: push acc ;сохpанить изменяемые pегистpы. Инициализация:
mov dptr,#itab ;загpузить в DPTR адpес стpоки инициализации
init1: mov acc,#0 ;загpузить очеpедной байт
movc acc,@a+dptr ;стpоки инициализации
inc dptr ;увеличить значение указателя адpеса
jz initex ;пpовеpка на конец стpоки
lcall wrcom ;записать очеpедной байт команды
mov acc,#0ffh ;Задержка
djnz acc,$ ;100мкс
ljmp init1 ;цикл записи стpоки инициализации
initex: pop acc ;восстановить изменяемые pегистpы
ret ;
itab db 28h,0ch,6,1,0 ;1 - очистка экpана
Как видно из программы цикл повторяется 3 раза. Можно и 2. Если один раз, то эффекта не будет. Индикатор запускается четко на второй раз. Более того, если в каждый цикл включать упомянутые задержки, то также нихрена не работает. Если задержки только в начале трех циклов, то работает как и без них. В результате я их выкинул полностью.
На все это ушло года три. Опробовал уже более десятка разных изделий, в т.ч. и автомобильный тахометр, где при запуске двигателя с питанием творится черт знает что. На процессоре (2051) никаких супервизоров. Только кондер сброса. Ни одного сбоя инициализации не увидел за 4 месяца.