Уважаемые коллеги.
В первых строках своего "циркулярного письма", сообщаю Вам приятную новость: наша
летающая корова не сдохла и чувствует себя прекрасно!
Мало того, она полна сил, здоровья и ждет не дождется своего желанного быка.
В дальнейшей, заманчивой перспективе, мысль рисует целое стадо, мирно щиплющее
травку на благодатном лужку.
Соответственно, и молочка, и мясца будет, по-русски говоря, завались.
В переводе на более понятный язык, это означает то, что Александр Милевский
предложил универсальный, "прыжковый" алгоритм.
Примечание: на мой взгляд, памятник за это ему ставить не нужно (как-никак, живой
человек. Некрасиво получится), но соответствующее звание ("виртуальное" или
реальное. Это с какого бока глянуть) присвоить обязательно нужно.
В переводе на еще более понятный язык, это означает то, что имеет место быть
универсальный способ "борьбы" с "прыжковыми бяками".
И он должен быть "прописан в скрижалях", а заодно и в мозгах конструкторов,
страждущих спокойной и толковой жизни.
Из этого следует жизненнопрофессиональное правило:
......................
movlw high ABCD ; Установка в PCH числового значения старшего
movwf PCLATH ; байта адреса (в PC) первой команды ПП ABCD.
Ответ: для того чтобы сохранить эти "куски" от уничтожения, их нужно обойти, но
обойти по-умному, с выгодой.
"Секторы" такого "обхода" выделены желтым цветом.
Выгода заключается в том, что "оптово прихватываются" ("за компанию") все байты
данных с нулевым содержимым, "примыкающие" к матрицам 8х8 (как слева, так и
справа. На сколько возможно).
Это уменьшает и количество команд, и увеличивает скорость отработки полного цикла
вывода данных на индикацию (начиная от 2-го "витка" полного цикла программы и
далее).
Выводы:
- Для того чтобы не допустить "убийства" нижней половины солнца, нужно закончить
цикл заполнения байтами данных 2-й страницы, 2-го кристалла, сразу же после
вывода на индикацию байтов данных самой правой "птички" 2-й страницы.
- Для того чтобы, с учетом необходимости дальнейшего формирования самой правой
"птички" 3-й страницы, 2-го кристалла, не допустить "убийства" боеголовки ракеты,
нужно обойти столбцы этой страницы, начиная от столбца, который расположен
правее правого крыла левой птички и заканчивая столбцом, расположенным левее
левого крыла правой птички.
4
Перечитал написанное. М-да … Тяжелый случай.
Уважаемые коллеги, я нормальный, а не псих, находящийся на последней стадии их
беды! Клятвенно заверяю.
Против нижней половины реального солнца я не имею ничего против.
Пускай светит на здоровье.
Дай Бог, чтобы оно светило в течение ближайшей пары миллиардов лет.
И я не сторонник разукомплектования ракет.
Тем более, когда речь идет о такой серьезной "штуковине", как боеголовка.
К тому же, ракета без боеголовки это все-равно что телега без колес.
И т.д.
Просто предмет разговора таков, что если я начну изъясняться формально, то
"тяжелый случай" приключится не со мной, а с Вами.
В мои планы это не входит.
Так что, терпите. Это для Вашей же пользы.
; * * * * * Chars 160..175: * * * * *
Кристалл1, 3-я страница
0x00,0x00,0x21,0x42,0x42,0x42,0x42,0x42
0x41,0x3F,0x00,0x00,0x00,0x00,0x7F,0x00
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
0x00,0x00,0x7F,0x02,0x02,0x02,0x02,0x02
0x02,0x7F,0x00,0x00,0x00,0x00,0x3F,0x40
0x40,0x40,0x40,0x40,0x40,0x30,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40
Кристалл2, 3-я страница
0x40,0x40,0x40,0x40,0x3F,0x00,0x00,0x00
0x00,0x00,0x04,0x0C,0x1C,0x3C,0x7F,0xFF
0xFF,0x7F,0x3C,0x1C,0x0C,0x04,0x00,0x00
5
0x01,0x01,0x02,0x04,0x02,0x01,0x01,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x04,0x04,0x08,0x04,0x04,0x00
; * * * * * Chars 208..223: * * * * *
Кристалл1, 3-я страница
0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
0x30,0x08,0x04,0x02,0x01,0x3F,0x01,0x02
0x04,0x08,0x30,0x00,0x00,0x3F,0x01,0x01
0x01,0x01,0x3F,0x00,0x00,0x00,0x00,0x3F
0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20
0x20,0x1F,0x00,0x00,0x1F,0x20,0x20,0x20
0x20,0x10,0x00,0x00,0x21,0x12,0x0A,0x06
Кристалл2, 3-я страница
0x02,0x3F,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F
0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00
0x10,0x10,0x08,0x04,0x08,0x10,0x10,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x10,0x10,0x08,0x10,0x10,0x00
2-я страница
6
0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00
0x00,0xFE,0x00,0x00,0x00,0x00,0xFE,0x02
0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00
0x00,0x00,0xE0,0x10,0x08,0x04,0x02,0x02
0x02,0xFE,0x00,0x00,0x00,0x00,0xFC,0x02
0x02,0x02,0x02,0x02,0x02,0x0C,0x00,0x00
0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02
0x02,0x02,0x00,0x00,0x00,0x00,0xFE,0x40
3-я страница
0x00,0x00,0x21,0x42,0x42,0x42,0x42,0x42
0x41,0x3F,0x00,0x00,0x00,0x00,0x7F,0x00
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
0x00,0x00,0x7F,0x02,0x02,0x02,0x02,0x02
0x02,0x7F,0x00,0x00,0x00,0x00,0x3F,0x40
0x40,0x40,0x40,0x40,0x40,0x30,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40
2-й кристалл
2-я страница
0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8
0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x08,0x08,0x10,0x08,0x08,0x00,0x00
0x04,0x04,0x08,0x10,0x08,0x04,0x04,0x00
0x00,0x00,0x08,0x08,0x10,0x08,0x08,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
3-я страница
0x40,0x40,0x40,0x40,0x3F,0x00,0x00,0x00
0x00,0x00,0x04,0x0C,0x1C,0x3C,0x7F,0xFF
0xFF,0x7F,0x3C,0x1C,0x0C,0x04,0x00,0x00
0x01,0x01,0x02,0x04,0x02,0x01,0x01,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x04,0x04,0x08,0x04,0x04,0x00
2-я страница
0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00
0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x00
0x0C,0x10,0x20,0x40,0x80,0xFC,0x80,0x40
0x20,0x10,0x0C,0x00,0x00,0xE0,0x10,0x08
0x04,0x04,0xFC,0x00,0x04,0x04,0x04,0xFC
0x04,0x04,0x04,0x00,0xFC,0x40,0x40,0x40
0x40,0x80,0x00,0x00,0xF8,0x04,0x04,0x04
0x04,0x08,0x00,0x00,0xF8,0x04,0x04,0x04
3-я страница
0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
0x30,0x08,0x04,0x02,0x01,0x3F,0x01,0x02
0x04,0x08,0x30,0x00,0x00,0x3F,0x01,0x01
0x01,0x01,0x3F,0x00,0x00,0x00,0x00,0x3F
0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20
7
0x20,0x1F,0x00,0x00,0x1F,0x20,0x20,0x20
0x20,0x10,0x00,0x00,0x21,0x12,0x0A,0x06
2-й кристалл
2-я страница
0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x20,0x30,0x38,0x3C,0xFE,0xFF
0xFF,0xFE,0x3C,0x38,0x30,0x20,0x00,0x00
0x00,0x20,0x20,0x10,0x20,0x20,0x00,0x00
0x40,0x40,0x20,0x10,0x20,0x40,0x40,0x00
0x00,0x00,0x20,0x20,0x10,0x20,0x20,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
3-я страница
0x02,0x3F,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F
0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00
0x10,0x10,0x08,0x04,0x08,0x10,0x10,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x10,0x10,0x08,0x10,0x10,0x00
;********************************************************************************
; 12864_1a.asm Учебное устройство вывода на индикацию, в графический
; модуль МT-12864.., динамически изменяющейся картинки.
; (ЗАГОТОВКА)
; "Дочь" базовой программы Милевского А.З. mazr@bk.ru
;********************************************************************************
; "Практикум по конструированию устройств на PIC контроллерах"
; (http://ikarab.narod.ru)
; Корабельников Евгений Александрович karabea@Lipetsk.ru
;********************************************************************************
; Используются операторы high и low.
;================================================================================
; Функции выводов порта С:
; RC0...RC7 - выводы данных.
; Функции выводов порта В:
; RB0 - Е2 ; управление правым (2-м) кристаллом,
; RB1 - Е1 ; управление левым (1-м) кристаллом,
; RB2 - E ; на этом выводе формируются стробирующие импульсы,
; RB3 - A0 ; управление режимами "данные/команды",
; остальные выводы порта В не задействованы.
; Выводы порта С не используются.
; Кварц 4000 Кгц (1 м.ц.= 1 мкс.).
; Используется PIC16F873A.
;================================================================================
LIST p=16F873A ; Задание типа микроконтроллера.
__CONFIG 3F71H ; Включено: XT-генератор, PWRT, сброс BOR,
; Выключено: защита, WDT, LVP, DEBUG.
;================================================================================
; Регистры специального назначения.
;================================================================================
PCLATH equ 0Ah ; Регистр PCLATH (используется при работе
8
; с PCH).
PCL equ 02h ; Регистр младшего байта счетчика команд.
Status equ 03h ; Регистр Status.
PortB equ 06h ; Регистр защелок порта B.
PortC equ 07h ; Регистр защелок порта C.
TrisB equ 06h ; Регистр выбора направлений работы
; выводов порта B (банк 1).
TrisC equ 07h ; Регистр выбора направлений работы
; выводов порта С (банк 1).
;================================================================================
; Регистры общего назачения.
;================================================================================
Temp equ 20h ; Регистр количества проходов.
Reg equ 21h ; Регистр выбора сценария
; вычисляемого перехода.
Reg_1 equ 22h ; Регистры
Reg_2 equ 23h ; задержки
Reg_3 equ 24h ; ----"----
;================================================================================
; Присвоение битам названий.
;================================================================================
C equ 0 ; Флаг переноса-заема.
RP0 equ 5 ; Бит выбора банка.
E2 equ 0 ; Бит выбора 2-го кристалла.
E1 equ 1 ; Бит выбора 1-го кристалла.
E equ 2 ; Бит стробирования.
A0 equ 3 ; Бит выбора режима "команды/данные".
;================================================================================
org 0 ; Начать выполнение программы с 0-го адреса PC
goto START ; Переход в ПП START.
;********************************************************************************
;================================================================================
; Подпрограммы выбора страниц (1...8) кристалла.
;================================================================================
; ПП установки адреса 1-й страницы.
;------------------------------------
STRANICA_1 movlw b'10111000' ; Выбор адреса 1-й страницы.
movwf PortC ; Вывод команды выбора адреса страницы
; на линии DB7...DB0.
call STROB ; Строб ("запуск в работу").
;---> Возврат по стеку из ПП STROB ;
return ; Возврат по стеку в то место, откуда
; произошел вызов подпрограммы.
;------------------------------------
; ПП установки адреса 2-й страницы.
;------------------------------------
STRANICA_2 movlw b'10111001' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 2-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 3-й страницы.
;------------------------------------
STRANICA_3 movlw b'10111010' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 3-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 4-й страницы.
;------------------------------------
STRANICA_4 movlw b'10111011' ; ----"----
movwf PortC ; Аналогично
9
call STROB ; (для 4-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 5-й страницы.
;------------------------------------
STRANICA_5 movlw b'10111100' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 5-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 6-й страницы.
;------------------------------------
STRANICA_6 movlw b'10111101' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 6-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 7-й страницы.
;------------------------------------
STRANICA_7 movlw b'10111110' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 7-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;------------------------------------
; ПП установки адреса 8-й страницы.
;------------------------------------
STRANICA_8 movlw b'10111111' ; ----"----
movwf PortC ; Аналогично
call STROB ; (для 8-й страницы).
;---> Возврат по стеку из ПП STROB ; ----"----
return ; ----"----
;================================================================================
; Подпрограмма записи данных.
;================================================================================
WRITE_D bsf PortB,A0 ; Установка признака записи данных {1}.
call STROB ; Строб ("запуск в работу").
;---> Возврат по стеку из ПП STROB
bcf PortB,A0 ; Снятие признака записи данных {0}.
return ; Возврат по стеку в то место, откуда
; произошел вызов подпрограммы.
;================================================================================
; ЗАДЕРЖКА (0,8 сек.)
;================================================================================
PAUSE movlw .241 ;
movwf Reg_1 ;
movlw .15 ;
movwf Reg_2 ;
movlw .5 ;
movwf Reg_3 ;
;********************************************************************************
; НАЧАЛО ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
START bsf Status,RP0 ; Переход в 1-й банк.
clrf TrisB ; Все выводы портов В и С
clrf TrisC ; работают на выход.
bcf Status,RP0 ; Переход в 0-й банк.
;================================================================================
; Инициализация графического модуля.
;================================================================================
bsf PortB,E1 ; Включение обеих
bsf PortB,E2 ; кристаллов.
;################################################################################
; РАБОТА С ЛЕВЫМ (1-м) КРИСТАЛЛОМ.
;################################################################################
; Включение 1-го кристалла.
;-------------------------------------
bcf PortB,E2 ; Выключение 2-го кристалла.
;================================================================================
11
; Заполнение страниц 1-го кристалла.
;================================================================================
; Запись в 1-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
; Подготовительные операции.
;--------------------------------------
call STRANICA_1 ; Выбор 1-й страницы.
call STOLB_1 ; Выбор 1-го столбца страницы.
movlw .64 ; Назначение
movwf Temp ; числа проходов.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Циклическая ПП заполнения байтами данных столбцов страницы.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
WR_1 movf Temp,W ; Число проходов --> в W.
sublw .64 ; .64 - Temp = ... (результат --> в W).
movwf Reg ; В регистр Reg записывается номер текущего
; сценария вычисляемого перехода.
;-------------------------------------
; Отработка ПП, в состав которой
; входит вычисляемый переход.
;-------------------------------------
call TEXT_1 ; Переход в ПП TEXT_1.
;---> Возврат по стеку из ПП TEXT_1
;-------------------------------------
; Вывод на индикацию текущего байта
; данных ("лежит" в W).
;-------------------------------------
movwf PortC ; Установка на линиях DB7...DB0 числового
; значения текущего байта данных.
movlw high WRITE_D; Установка в PCH числового значения старшего
movwf PCLATH ; байта адреса (в PC) первой команды
; ПП WRITE_D (через W).
call WRITE_D ; Переход в ПП WRITE_D (с предустановленным
; значением PCH).
;---> Возврат по стеку из ПП WRITE_D
decfsz Temp,F ; Число проходов уменьшается на 1.
goto WR_1 ; Если результат не=0, то переход на
; обработку следующего байта данных.
; Если =0, то запись в 1-ю страницу
; заканчивается и программа исполняется
; далее.
;--------------------------------------------------------------------------------
; Запись во 2-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 3-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 4-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 5-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 6-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 7-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 8-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
;################################################################################
; РАБОТА С ПРАВЫМ (2-м) КРИСТАЛЛОМ.
;################################################################################
12
; Включение 2-го кристалла.
;-------------------------------------
bcf PortB,E1 ; Выключение 1-го кристалла.
bsf PortB,E2 ; Включение 2-го кристалла.
;================================================================================
; Заполнение страниц 2-го кристалла.
;================================================================================
; Запись в 1-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись во 2-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 3-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 4-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 5-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 6-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 7-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Запись в 8-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
;================================================================================
; Задержка, обеспечивающая комфортное, визуальное восприятие того,
; что выведено на индикацию.
;================================================================================
movlw high PAUSE ; "Плавающая" коррекция
movwf PCLATH ; содержимого PCH.
;################################################################################
; СЦЕНАРИЙ "УПАСТЬ..." (№1).
;################################################################################
; Запись 1-го сценария во 2-ю страницу 2-го кристалла
;--------------------------------------------------------------------------------
DINAM call STRANICA_2 ;
call STOLB_1 ;
movlw .47 ;
movwf Temp ;
;################################################################################
; СЦЕНАРИЙ "ОТЖАТЬСЯ..." (№2).
;################################################################################
; Запись 2-го сценария во 2-ю страницу 1-го кристалла
;--------------------------------------------------------------------------------
call STRANICA_2 ;
call STOLB_1 ;
movlw .64 ;
movwf Temp ;
;================================================================================
; Переход на начало нового цикла программы.
;================================================================================
movlw high DINAM ; "Плавающая" коррекция
movwf PCLATH ; содержимого PCH.
;################################################################################
; Таблицы данных, предназначенных для записи.
;################################################################################
; Фиксированные элементы картинки (1-й "кадр").
;################################################################################
; Данные 1-й страницы 1-го кристалла
;;-------------------------------------------------------------------------------
TEXT_1 movlw high STR_1 ; Установка в PCH числового значения старшего
movwf PCLATH ; байта адреса (в PC) первой команды
; (retlw ...) табличного перехода
; (помечена меткой STR_1).
;--------------------------------------
; Анализ выхода или нет за пределы
; текущего блока памяти программ.
;--------------------------------------
movf Reg,W ; Номер сценария вычисляемого перехода --> W.
addlw low STR_1 ; Суммирование номера сценария и числового
; значения младшего байта адреса (в PC)
; ПП STR_1 (через W).
;---------------------------------------------
; Проверка на наличие или отсутствие переноса
; (PCH+1 или этого делать не нужно?).
;---------------------------------------------
btfsc Status,C ; Перенос был или нет?
incf PCLATH,F ; Если был, то PCLATH+1 (PCH+1=...).
movf Reg,W ; Если не был, то инкремента содержимого PCH
; не происходит и номер сценария вычисляемого
; перехода (в любом случае) копируется в W.
;--------------------------------------
; Табличный, вычисляемый переход.
;--------------------------------------
addwf PCL,F ; Приращение PCL на величину содержимого W.
STR_1 dt 0x00,0x00,0xFE,0x02,0x02,0xFE,0x00,0x00
dt 0x00,0x00,0xFC,0x24,0x24,0x18,0x00,0x00
dt 0x00,0x00,0x78,0x84,0x84,0x78,0x00,0x00
dt 0x00,0x00,0xFC,0x94,0x94,0x64,0x00,0x00
dt 0x00,0x00,0xF8,0x24,0x24,0xF8,0x00,0x00
dt 0x10,0x38,0x54,0x92,0x10,0x10,0x10,0x10
dt 0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81
dt 0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00
;--------------------------------------------------------------------------------
; Данные 2-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 3-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 4-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
17
;--------------------------------------------------------------------------------
; Данные 5-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 6-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 7-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 8-й страницы 1-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 1-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 2-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 3-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 4-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 5-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 6-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 7-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; Данные 8-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
;********************************************************************************
; Динамические элементы картинки.
;********************************************************************************
; Сценарий "УПАСТЬ..." (№1).
;================================================================================
; Данные 2-й страницы, 1-го кристалла.
;--------------------------------------------------------------------------------
TEXT121 movlw high STR121 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR121 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR121 dt 0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00
dt 0x00,0xFE,0x00,0x00,0x00,0x00,0xFE,0x02
dt 0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00
dt 0x00,0x00,0xE0,0x10,0x08,0x04,0x02,0x02
dt 0x02,0xFE,0x00,0x00,0x00,0x00,0xFC,0x02
dt 0x02,0x02,0x02,0x02,0x02,0x0C,0x00,0x00
dt 0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02
dt 0x02,0x02,0x00,0x00,0x00,0x00,0xFE,0x40
;--------------------------------------------------------------------------------
; Данные 3-й страницы, 1-го кристалла.
;--------------------------------------------------------------------------------
TEXT131 movlw high STR131 ;
movwf PCLATH ;
18
movf Reg,W ;
addlw low STR131 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR131 dt 0x00,0x00,0x21,0x42,0x42,0x42,0x42,0x42
dt 0x41,0x3F,0x00,0x00,0x00,0x00,0x7F,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
dt 0x00,0x00,0x7F,0x02,0x02,0x02,0x02,0x02
dt 0x02,0x7F,0x00,0x00,0x00,0x00,0x3F,0x40
dt 0x40,0x40,0x40,0x40,0x40,0x30,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40
;--------------------------------------------------------------------------------
; Данные 2-й страницы 2-го кристалла.
;--------------------------------------------------------------------------------
TEXT122 movlw high STR122 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR122 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR122 dt 0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8
dt 0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x08,0x08,0x10,0x08,0x08,0x00,0x00
dt 0x04,0x04,0x08,0x10,0x08,0x04,0x04,0x00
dt 0x00,0x00,0x08,0x08,0x10,0x08,0x08
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; НЕ ВЫВОДИТСЯ.
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;--------------------------------------------------------------------------------
; Данные 3-й страницы 2-го кристалла
;--------------------------------------------------------------------------------
TEXT132 movlw high STR132 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR132 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR132 dt 0x40,0x40,0x40,0x40,0x3F,0x00,0x00,0x00
dt 0x00,0x00,0x04,0x0C,0x1C,0x3C,0x7F,0xFF
dt 0xFF,0x7F,0x3C,0x1C,0x0C,0x04,0x00,0x00
dt 0x01,0x01,0x02,0x04,0x02,0x01,0x01
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; НЕ ВЫВОДИТСЯ.
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;;; dt 0x00,
;---------------------------------------------------
; Продолжение (формирование самой правой "птички").
;---------------------------------------------------
TEXT132_1 movlw high STR132_1;
movwf PCLATH ;
movf Reg,W ;
addlw low STR132_1;
19
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR132_1 dt 0x00,0x04,0x04,0x08,0x04,0x04
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00 ; НЕ ВЫВОДИТСЯ.
;================================================================================
; Сценарий "ОТЖАТЬСЯ..." (№2).
;================================================================================
; Данные 2-й страницы, 2-го кристалла
;--------------------------------------------------------------------------------
TEXT222 movlw high STR222 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR222 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR222 dt 0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x20,0x30,0x38,0x3C,0xFE,0xFF
dt 0xFF,0xFE,0x3C,0x38,0x30,0x20,0x00,0x00
dt 0x00,0x20,0x20,0x10,0x20,0x20,0x00,0x00
dt 0x40,0x40,0x20,0x10,0x20,0x40,0x40,0x00
dt 0x00,0x00,0x20,0x20,0x10,0x20,0x20
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; НЕ ВЫВОДИТСЯ.
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;--------------------------------------------------------------------------------
; Данные 3-й страницы, 2-го кристалла
;--------------------------------------------------------------------------------
TEXT232 movlw high STR232 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR232 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR232 dt 0x02,0x3F,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F
dt 0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x10,0x10,0x08,0x04,0x08,0x10,0x10
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; НЕ ВЫВОДИТСЯ.
;;; dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;;; dt 0x00,
;---------------------------------------------------
; Продолжение (формирование самой правой "птички").
;---------------------------------------------------
TEXT232_1 movlw high STR232_1;
movwf PCLATH ;
movf Reg,W ;
addlw low STR232_1;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
20
STR232_1 dt 0x00,0x10,0x10,0x08,0x10,0x10
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ,0x00 ; НЕ ВЫВОДИТСЯ.
;--------------------------------------------------------------------------------
; Данные 2-й страницы, 1-го кристалла.
;--------------------------------------------------------------------------------
TEXT221 movlw high STR221 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR221 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR221 dt 0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00
dt 0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x00
dt 0x0C,0x10,0x20,0x40,0x80,0xFC,0x80,0x40
dt 0x20,0x10,0x0C,0x00,0x00,0xE0,0x10,0x08
dt 0x04,0x04,0xFC,0x00,0x04,0x04,0x04,0xFC
dt 0x04,0x04,0x04,0x00,0xFC,0x40,0x40,0x40
dt 0x40,0x80,0x00,0x00,0xF8,0x04,0x04,0x04
dt 0x04,0x08,0x00,0x00,0xF8,0x04,0x04,0x04
;--------------------------------------------------------------------------------
; Данные 3-й страницы, 1-го кристалла.
;--------------------------------------------------------------------------------
TEXT231 movlw high STR231 ;
movwf PCLATH ;
movf Reg,W ;
addlw low STR231 ;
btfsc Status,C ;
incf PCLATH,F ;
movf Reg,W ;
addwf PCL,F ;
STR231 dt 0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00
dt 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
dt 0x30,0x08,0x04,0x02,0x01,0x3F,0x01,0x02
dt 0x04,0x08,0x30,0x00,0x00,0x3F,0x01,0x01
dt 0x01,0x01,0x3F,0x00,0x00,0x00,0x00,0x3F
dt 0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20
dt 0x20,0x1F,0x00,0x00,0x1F,0x20,0x20,0x20
dt 0x20,0x10,0x00,0x00,0x21,0x12,0x0A,0x06
;********************************************************************************
end ; Конец программы.
Темно – синим цветом выделено то, о чем было рассказано ранее (вывод на
индикацию фиксированных элементов картинки).
Темно – красным цветом выделены "нововведения" (вывод на индикацию динамических
элементов картинки).
Серым цветом выделены части кодов, вывод на индикацию которых игнорируется.
Темно – зеленым цветом выделено то, что относится к задержкам, определяющим
интервалы времени смены сценариев.
Красным цветом выделен переход на новый цикл программы.
Черным цветом выделена "обслуга", обеспечивающая "жизнедеятельность"
графического модуля во всех его мыслимых и немыслимых режимах работы.
Цветом хаки выделены комментарии.
Вместо "мертвяка" (goto $-1), "врезана" достаточно "массивная" группа команд работы с
1-м и 2-м сценариями.
Все это "великолепие" заканчивается переходом на начало исполнения все той же
группы команд.
21
Это означает то, что фиксированные элементы картинки выводятся на индикацию
только на первом "витке" полного цикла программы, а далее, начиная от 2-го "витка"
полного цикла программы, происходит банальная, последовательная смена сценариев.
Сначала исполняется сценарий типа "Упасть…" (№1), а затем - "Отжаться…" (№2),
что глубинно отражает воспитательный аспект военной службы.
Кстати, этот "аспект" совсем не идиотский, так как, в процессе упомянутых действий, в
рекордно короткие сроки, очень эффективно понимается то, чего понимать не
хочется/лень/хлопотно/мамка не велит (и т.д.).
Это очень напоминает "борьбу со строптивым, вычисляемым переходом", которая была
начата ранее, и "кульминацию" которой Вы сейчас наблюдаете.
Кто после этого скажет, что наука типа "упасть/отжаться" есть однозначный "негатив"?
Итоги классификации "негатив/позитив" сильно зависят от справедливости
предъявляемых требований.
"Механизм" реализации сценариев №1 и №2, по своей сути, ничем не отличается от
рассмотренного ранее, вывода на индикацию фиксированных элементов картинки.
Разница только в тактике.
Во-первых, на индикацию выводится не весь массив байтов (1024 штуки), а только та
их часть, которая "дислоцируется" во 2-й и 3-й страницах обеих кристаллов.
Во-вторых, массивы байтов, которые выводятся на индикацию во 2-ю и 3-ю страницу
2-го кристалла, выводятся на индикацию не в полном объеме (не 64 байта, а
меньше).
А при работе с 3-й страницей 2-го кристалла, вдобавок к этому, массив байтов
выводится на индикацию не за один прием, а за два приема (дробится на две части).
Вывод байтов на индикацию не в полном объеме есть не что иное, как обход, ранее
выведенных на индикацию, фиксированных элементов картинки (с целью их
сохранения).
Вывод байтов на индикацию в 2 приема есть и обход, ранее выведенных на
индикацию, фиксированных элементов картинки, и обеспечение, после этого,
формирования оставшегося, динамического элемента картинки (самой правой "птички").
"Технология" обхода достаточно проста:
1. При работе во 2-й странице 2-го кристалла, сразу же после формирования самой
правой "птички", нужно закончить цикл вывода байтов данных во 2-ю страницу.
2. При работе в 3-й странице 2-го кристалла, после вывода на индикацию заданного
количества байтов данных (после окончания формирования левой "птички"), нужно
"перепрыгнуть", через "мертвую зону" (в ней - боеголовка. "Убивать" ее нельзя) в
другой столбец, после чего продолжить формирование картинки самой правой
"птички".
Это делается с помощью инструкции "Set Address" (выбор адреса столбца).
Ничего мудреного в ней нет (см. подраздел 1/1).
На "стыках" сценариев, отрабатываются фиксированные задержки, которые задают
скорость их смены.
Обращаю Ваше внимание на то, что объем программы "зашкаливает" за цифру 2048
(2121 слово в памяти программ).
То есть, нижняя часть программы "лежит" на 2-й странице памяти программ.
Значит, перед переходом в ПП TEXT231, которая "дислоцируется" на второй странице
памяти программ ПИКа, нужно применить ту "волшебную" комбинацию команд, которая
была упомянута выше.
Это и имеет место быть.
В противном случае à "Гитлер капут".
"Полноценная" программа под все это "безобразие" называется 12864_2.asm.
Она прилагается.
Принципиальная схема устройства - см. рис. 1 подраздела 1/4.
Нужно отметить то, что в динамике, результат работы смотрится достаточно забавно.
На первый взгляд, практического смысла в такой "забаве" маловато.
А если вместо птичек вывести на индикацию, например, цифирки или эпюру (или все
вместе) и "заложить" в них этот самый "практический смысл"?
То-то и оно …
Но следует отдавать себе отчет в том, что найти практический смысл гораздо проще,
чем его реализовать.
22
На мой взгляд, любой уважающий себя КОНСТРУКТОР должен классно уметь делать и
то, и другое.
А это предполагает весьма не слабую учебу, причем, учебу в ее "глубинном", и если
хотите, в ее душевном понимании (не ради "корочки" и прочих фетишей).
У кого такое понимание есть, тот и будет КОНСТРУКТОРОМ не по должности, а по
призванию.
И это, при любом "раскладе", очень дорогого стоит.
Вернусь к своим "птичкам".
Медленно, но верно, выясняются основные приемы практической работы с
графическими модулями.
Предполагаю, что их детали знают совсем не многие.
Но со временем, мы будем об этом знать больше остальных.
На данный момент, сделано совсем не мало.
На индикацию выведены фиксированные элементы
картинки.
По факту, в части касающейся 2-й и 3-й страниц
обеих кристаллов, организована трехсценарная
работа.
Фото всех трех сценариев Вы видите (извините за
качество. Фотограф из меня плохой).
Продолжение следует.
23