1
Вот Вам и вся "сермяжная" суть.
Вопрос: "Как ее реализовать на практике"?
Ответ: молча. Со знанием дела и спокойствием мамонта. В рабочем порядке.
Лучше всего "раздробить" решение этой задачи на этапы:
;********************************************************************************
; НАЧАЛО ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
START bsf Status,RP0 ; Переход в 1-й банк.
clrf TrisB ; Все выводы портов В и С
clrf TrisC ; работают на выход.
bcf Status,RP0 ; Переход в 0-й банк.
;-------------------------------------
; Установка текущей строки.
;-------------------------------------
SNOVA movf Line,W ; Выбор адреса строки дисплея, с которой
; начнется формирование картинки "кадра"
; (инструкция "Display StartLine").
movwf PortC ; Вывод команды выбора адреса строки
; на линии DB7...DB0.
call STROB ; Строб ("запуск в работу").
;---> Возврат по стеку из ПП STROB
;################################################################################
; РАБОТА С ЛЕВЫМ (1-м) КРИСТАЛЛОМ.
;################################################################################
..................................
..................................
goto WR_16 ;
;================================================================================
; ЗАДЕРЖКА (0,3 сек.)
;================================================================================
movlw .153 ;
movwf Reg_1 ;
movlw .134 ;
movwf Reg_2 ;
movlw .2 ;
movwf Reg_3 ;
;********************************************************************************
; Таблицы данных, предназначенных для записи.
;********************************************************************************
..................................
..................................
;-------------------------------------
; Установка текущей строки.
;-------------------------------------
SNOVA movf Line,W ; Выбор адреса строки дисплея, с которой
; начнется формирование картинки "кадра"
; (инструкция "Display StartLine").
movwf PortC ; Вывод команды выбора адреса строки
; на линии DB7...DB0.
call STROB ; Строб ("запуск в работу").
;---> Возврат по стеку из ПП STROB
;################################################################################
7
; РАБОТА С ЛЕВЫМ (1-м) КРИСТАЛЛОМ.
;################################################################################
..................................
..................................
goto WR_16 ;
;================================================================================
; ЗАДЕРЖКА (0,3 сек.)
;================================================================================
movlw .153 ;
movwf Reg_1 ;
movlw .134 ;
movwf Reg_2 ;
movlw .2 ;
movwf Reg_3 ;
;********************************************************************************
; Таблицы данных, предназначенных для записи.
;********************************************************************************
..................................
..................................
9
btfss Flag,0 ; Полный сдвиг "кадра" был или нет?
goto ADR_INCF ; Если нет, то производится вертикальное
; смещение "кадра" на одну строку.
; Если да, то программа исполняется далее.
;---------------------------------------------------------------
; Анализ содержимого регистра количества полных сдвигов N_KADR.
;---------------------------------------------------------------
clrf Flag ; Сброс указателя полного сдвига кадров (для
; обеспечения дальнейшей прокрутки в случае,
; если прокручены не все "кадры").
decf N_KADR,F ; N_KADR - 1 = ...
btfsc Status,Z ; Результат декремента =0 или не =0 ?
goto $ ; Если =0, то "СТОП-МАШИНА" (заданное
; количество "кадров" прокручено).
; Если не=0, то программа исполняется
; далее (прокрутка продолжается).
;---------------------------------------------------------------
; ПП подготовки к вертикальному смещению "кадра" на одну строку.
;---------------------------------------------------------------
ADR_INCF incf Line,F ; Подготовка к вертикальному смещению
; "кадра" на одну строку (адрес строки + 1).
btfsc Line,6 ; Line=0 (текущий "кадр" прокрутился)
; или не=0 (текущий "кадр" не прокрутился)?
goto $+4 ; Если не=0, то обход следующих 3-х команд.
; Если=0, то программа исполняется далее.
bsf Line,6 ; Обеспечение дальнейшего выполнения
bsf Line,7 ; инструкции "Display StartLine".
bsf Flag,0 ; Установка признака полного сдвига "кадра"
; (для обеспечения дальнейшей остановки
; прокручивания).
bsf PortB,E1 ; Включение 1-го кристалла
; (2-й кристалл включен ранее).
goto SNOVA ; Переход на следующий цикл вывода данных на
; индикацию (с "новым" адресом строки).
;********************************************************************************
; Таблицы данных, предназначенных для записи.
;********************************************************************************
..................................
..................................
10
Но после полной прокрутки кадра в сторону увеличения числовых значений адресов
строк дисплея, числовые значения битов №№7 и 6 сменятся с 11 на 00 (переход от .
255 к .0).
Для начала, сию "бяку" нужно обнаружить.
Вот Вам и смысл применения команды btfsc Line,6.
Вопрос: "А 7-й бит куда подевался"?
Ответ в виде вопроса на вопрос: а на кой ляд им заморачиваться, если биты №№ 7
и 6 сбрасываются в 0 "оптом"?
Достаточно "просканировать" состояния любого из этих битов, а оставшийся "выбросить
на помойку".
В данном случае, "сканируются" состояния бита №6.
В результате этих немудреных умозаключений, процедура анализа наличия или
отсутствия полной прокрутки "кадра" "весит" всего одну бит-ориентированную команду.
Проще просто не бывает.
Если бит №6 регистра Line в нуле, то делается вывод о том, что текущий кадр
прокручен (об этом - позже).
Если бит №6 регистра Line в единице, то делается вывод о том, что текущий кадр не
прокручен и его нужно "крутить" дальше.
В этом случае, происходит переход (goto $+4) на команду включения 1-го кристалла,
а затем - на начало "нового" цикла вывода на индикацию следующего "кадра" ("на
колу мочало, начинаем все с начала").
Теперь предположим, что "свершилась" полная прокрутка "кадра".
Значит, в бите №6 регистра Line установится 0.
В этом случае, для обеспечения дальнейшей "живучести" инструкции "Display
StartLine", нужно "принудительно" выставить нули в битах №№ 6 и 7 регистра Line
(bsf Line,6 и bsf Line,7) и установить признак полного сдвига "кадра"
(bsf Flag,0), что и имеет место быть.
Далее - "штатное" включение 1-го кристалла и дальнейшее "на колу мочало …".
Но далее, в части касающейся работы с регистром Flag, "мочало" имеет специфику.
На следующем "витке" полного цикла программы, единица в бите №0 регистра Flag
будет "засечена" (см. btfss Flag,0).
Это и есть "миссия" бита №0 регистра Flag (его "звездный час").
Проще говоря, единица в бите №0 регистра Flag есть разрешение последующего
декремента содержимого регистра N_KADR.
При этом, переход в ПП ADR_INCF (goto ADR_INCF) обходится до выяснения
"последующих обстоятельств".
Результат этого "выяснения" зависит от анализа (анализ состояния флага Z)
результата декремента содержимого регистра количества полных сдвигов (N_KADR).
Если этот результат не равен 0 (все "кадры" не прокрутились), то имеет место быть
"на колу мочало …" (исполнение ПП ADR_INCF).
Причем, "до победного конца".
"Победный конец" наступит тогда, когда, после декремента, содержимое регистра
N_KADR станет равным 0.
Это свидетельствует о том, что прокрутка заданного количества "кадров" осуществлена.
После этого - "СТОП-МАШИНА" (в виде goto $).
11
movlw b'11000000' ; Запись, в регистр выбора строки, инструкции
movwf Line ; "Display StartLine" с адресом 1-й строки
; (00h).
;********************************************************************************
; Таблицы данных, предназначенных для записи.
;********************************************************************************
..................................
..................................
13
Программа, в которой прокручивается содержимое 1-го кристалла (содержимое 2-го
кристалла не прокручивается), называется 12864_9.asm (прилагается).
Ниже Вы видите фото, которые иллюстрируют сказанное:
На этих фото,
осуществляется
прокрутка
содержимого 2-го
кристалла.
На этих фото,
осуществляется
прокрутка
содержимого 1-го
кристалла.
14