[an error occurred while processing this directive] [an error occurred while processing this directive]
Можно и быстрее, если памяти не жалко
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AK 03 апреля 2002 г. 16:31
В ответ на: Последовательный вывод вручную отправлено Игорь А. 03 апреля 2002 г. 16:06

Скажем, написать 16 подпрограмм для выплевывания любой возможной 4-битной комбинации:


; выводим b'0000'
_OUT_0000
bcf PORTOUT
bsf CLOCK
bcf CLOCK
bsf CLOCK
bcf CLOCK
bsf CLOCK
bcf CLOCK
bsf CLOCK
bcf CLOCK
return

; выводим b'0001'
_OUT_0001
bcf PORTOUT
bsf CLOCK
bcf CLOCK
bsf CLOCK
bcf CLOCK
bsf CLOCK
bcf CLOCK
bsf PORTOUT
bsf CLOCK
bcf CLOCK
return


... и т.д.
После этого пишем, скажем, такую подпрограммку (упрощенно, вообще-то надо о границе 256-байтной страницы и о PCLATH позаботиться, но это можно макросом):

_TX_4BIT
andlw 0Fh ; выделяем 4 бита
addwf PCL ; табличный переход
goto _OUT_0000
goto _OUT_0001
goto _OUT_0010
goto _OUT_0011
goto _OUT_0100
goto _OUT_0101
goto _OUT_0110
... и т.д.

Сама прграмма посылки байта будет примерно такая:

...
swapf OUTDATA,W ; меняем нибблы местами
call _TX_4BIT ; посылаем их
movf OUTDATA,W ; теперь младший ниббл
call _TX_4BIT ; посылаем их, байт готов
...


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru