;;*********************************************************************************************** ; USART.asm РАБОТА "СВЯЗКИ" ПИК-КОМПЬЮТЕР ПРИ ДВУНАПРАВЛЕННОМ ОБМЕНЕ ДАННЫМИ. ; Учебная программа. ;*********************************************************************************************** ; Автор: Высочанский Пётр, Приднестровье. ; "Практикум по конструированию устройств на PIC контроллерах". ; http://ikarab.narod.ru karabea@lipetsk.ru ; Эта программа входит в состав 6-го раздела. ;----------------------------- ; Объем программы: 58 команд. ;*********************************************************************************************** LIST p=16F877A ; Определение типа микроконтроллера. __CONFIG b'11110101111110' ; HS генератор 20МГЦ, PWRTE включен, ; WDT отключен. ;=============================================================================================== ; Определение положений регистров специального назначения. ;=============================================================================================== OptionR equ 01h ; Option - банк1. Status equ 03h ; Status TrisC equ 07h ; Порт A. PortC equ 07h ; Порт A. PortD equ 08h ; Порт A. TrisD equ 08h ; Tris A - банк1. PortB equ 06h ; Порт B. TrisB equ 06h ; Tris B - банк1. IntCon equ 0Bh ; IntCon. PIE1 equ 0CH ; Регистр содержит биты разрешения прерываний от периферии. PIR1 equ 0Ch ; Регистр флагов прерываний от периферийных ; модулей. ;Adcon1 equ 9Fh ; для включения порта А EEData equ 10Ch ; 2 банк EECon1 equ 18Ch ; 3 банк EEAdr equ 10Dh ; 2 банк EECon2 equ 18Dh ; 3 банк Indf equ 00h ; Доступ к памяти через FSR FSR equ 04h ; Регистр косвенной адресации PC equ 02h ; Счетчик команд. Pclath equ 0Ah ; Регистр для вычесляемого перехода. ;======================================================================= ; Прописка регистров для записи MSSP ;======================================================================= SSPStat equ 14h ; Регистр статуса модуля MSSP (банк 1). SSPCon equ 14h ; Регистр управления модуля MSSP. SSPCon2 equ 11h ; Регистр управления модуля MSSP (банк 1). SSPAdd equ 13h ; Регистр управления скоростью обмена (банк 1). SSPBuf equ 13h ; Регистр приемо-передающего буфера. PIR1 equ 0Ch ; Регистр флагов прерываний от периферийных модулей. ;=============================================================================================== ; Определение названий и положений регистров общего назначения. ;=============================================================================================== pr_w equ 70h ; Регистр хранения содержимого W ЗАДЕЙСТВУЕТСЯ ПРИ ВНУТРИСХЕМНОМ МОДЕЛИРОВАНИИ!!! pr_stat equ 71h ; Регистр хранения содержимого Status. p_temp equ 72h ; Регистр временного хранения. REGZAGR equ 73h ; Регистр памяти строк буквы. mem equ 74h ; Регистор флага регистра Status,C Reg equ 75h ; Регистр количества сдвигов бита выводимого на строку. flag2 equ 76h ; Регистор флага регистра Status,C flag3 equ 77h ; Регистор флага регистра Status,C flag4 equ 78h ; Регистор флага регистра Status,C flag5 equ 79h ; Регистор флага регистра Status,C flag6 equ 7Ah ; Регистор флага регистра Status,C Temp7 equ 7Bh ; Регистор флага регистра Status,C REGstr equ 7Ch ; Счечик количества регистров строке. Temp2 equ 7Dh Temp3 equ 7Eh Temp4 equ 7Fh EPRread equ 33h ; Регистр номера ечейки ЕПРОМ для считывания. EPRread2 equ 34h ; Регистр номера ечейки ЕПРОМ для считывания. chbukva equ 35h ; Регистр количества букв. chbukva2 equ 36h ; Регистр количества букв. TRIG equ 37h ; Ригистр считоного из ЕПРОМ stb equ 38h ; Номер столбца буквы bukstr equ 39h nomstr equ 110h ; Регистр номера обрабатываемой строки. ; Номер строки буквы prohod equ 112h ; Регистр количества отображения строк. stop equ 3Ah ; Регистр бита остоновки строки во время набора букв. ; и говорящий о нажатии клавиши Shift бит 7 ; Бит 6 говорит что было число F0 от клавиатуры. regs equ 3Bh zader equ 3Ch ; Регистр задержки. ; Счечик битов данных с клавиатуры. zader2 equ 3Dh ; Регистр задержки. Temp equ 3Eh ; Count equ 3Fh ; Temp5 equ 40h ; Регистр сохранения FSR temp6 equ 41h Pclreg equ 42h ; Регистр хранения числа Pclath skorbeg equ 43h ; Регистр скорости бега строки. ;============================================================================================= ; Видео память первой строки ;============================================================================================= ddr1str0 equ 0A0h ; 1 банк ddr1str1 equ 0A1h ddr1str2 equ 0A2h ddr1str3 equ 0A3h ddr1str4 equ 0A4h ddr1str5 equ 0A5h ddr1str6 equ 0A6h ddr1str7 equ 0A7h ddr1str8 equ 0A8h ddr1str9 equ 0A9h ddr1str10 equ 0AAh ; 1 банк ddr1str11 equ 0ABh ddr1str12 equ 0ACh ddr1str13 equ 0ADh ddr1str14 equ 0AEh ddr1str15 equ 0AFh ddr1str16 equ .176 ddr1str17 equ .177 ddr1str18 equ 0B2h ddr1str19 equ 0B3h ;============================================================================================= ; Видео память второй строки ;============================================================================================= ddr2str0 equ 0B4h ; 1 банк ddr2str1 equ 0B5h ddr2str2 equ 0B6h ddr2str3 equ 0B7h ddr2str4 equ 0B8h ddr2str5 equ 0B9h ddr2str6 equ 0BAh ddr2str7 equ 0BBh ddr2str8 equ 0BCh ddr2str9 equ 0BDh ddr2str10 equ 0BEh ; 1 банк ddr2str11 equ 0BFh ddr2str12 equ 0C0h ddr2str13 equ 0C1h ddr2str14 equ 0C2h ddr2str15 equ 0C3h ddr2str16 equ 0C4h ddr2str17 equ 0C5h ddr2str18 equ 0C6h ddr2str19 equ 0C7h ;============================================================================================= ; Видео память третей строки ;============================================================================================= ddr3str0 equ 0C8h ; 1 банк ddr3str1 equ 0C9h ddr3str2 equ 0CAh ddr3str3 equ 0CBh ddr3str4 equ 0CCh ddr3str5 equ 0CDh ddr3str6 equ 0CEh ddr3str7 equ 0CFh ddr3str8 equ 0D0h ddr3str9 equ 0D1h ddr3str10 equ 0D2h ; 1 БАНК ddr3str11 equ 0D3h ddr3str12 equ 0D4h ddr3str13 equ 0D5h ddr3str14 equ 0D6h ddr3str15 equ 0D7h ddr3str16 equ 0D8h ddr3str17 equ 0D9h ddr3str18 equ 0DAh ddr3str19 equ 0DBh ;============================================================================================= ; Видео память четвертой строки ;============================================================================================= ddr4str0 equ 0DCh ; 1 БАНК ddr4str1 equ 0DDh ddr4str2 equ 0DEh ddr4str3 equ 0DFh ddr4str4 equ 0E0h ddr4str5 equ 0E1h ddr4str6 equ 0E2h ddr4str7 equ 0E3h ddr4str8 equ 0E4h ddr4str9 equ 0E5h ddr4str10 equ 0E6h ; 1 БАНК ddr4str11 equ 0E7h ddr4str12 equ 0E8h ddr4str13 equ 0E9h ddr4str14 equ 0EAh ddr4str15 equ 0EBh ddr4str16 equ 0ECh ddr4str17 equ 0EDh ddr4str18 equ 0EEh ddr4str19 equ 0EFh ;============================================================================================= ; Видео память пятой строки ;============================================================================================= ddr5str0 equ .288 ; 2 банк ddr5str1 equ 121h ddr5str2 equ 122h ddr5str3 equ 123h ddr5str4 equ 124h ddr5str5 equ 125h ddr5str6 equ 126h ddr5str7 equ 127h ddr5str8 equ 128h ddr5str9 equ 129h ddr5str10 equ 12Ah ; 2 банк ddr5str11 equ 12Bh ddr5str12 equ 12Ch ddr5str13 equ 12Dh ddr5str14 equ 12Eh ddr5str15 equ 12Fh ddr5str16 equ 130h ddr5str17 equ 131h ddr5str18 equ 132h ddr5str19 equ 133h ;============================================================================================= ; Видео память шестой строки ;============================================================================================= ddr6str0 equ 134h ; 2 банк ddr6str1 equ 135h ddr6str2 equ 136h ddr6str3 equ 137h ddr6str4 equ 138h ddr6str5 equ 139h ddr6str6 equ 13Ah ddr6str7 equ 13Bh ddr6str8 equ 13Ch ddr6str9 equ 13Dh ddr6str10 equ 13Eh ; 2 банк ddr6str11 equ 13Fh ddr6str12 equ 140h ddr6str13 equ 141h ddr6str14 equ 142h ddr6str15 equ 143h ddr6str16 equ 144h ddr6str17 equ 145h ddr6str18 equ 146h ddr6str19 equ 147h ;============================================================================================= ; Видео память седьмой строки ;============================================================================================= ddr7str0 equ 148h ; 2 банк ddr7str1 equ 149h ddr7str2 equ 14Ah ddr7str3 equ 14Bh ddr7str4 equ 14Ch ddr7str5 equ 14Dh ddr7str6 equ 14Eh ddr7str7 equ 14Fh ddr7str8 equ 150h ddr7str9 equ 151h ddr7str10 equ 152h ; 2 БАНК ddr7str11 equ 153h ddr7str12 equ 154h ddr7str13 equ 155h ddr7str14 equ 156h ddr7str15 equ 157h ddr7str16 equ 158h ddr7str17 equ 159h ddr7str18 equ 15Ah ddr7str19 equ 15Bh ;============================================================================================= ; Видео память восьмой строки ;============================================================================================= ddr8str0 equ 15Ch ; 2 БАНК ddr8str1 equ 15Dh ddr8str2 equ 15Eh ddr8str3 equ 15Fh ddr8str4 equ 160h ddr8str5 equ 161h ddr8str6 equ 162h ddr8str7 equ 163h ddr8str8 equ 164h ddr8str9 equ 165h ddr8str10 equ 166h ; 2 БАНК ddr8str11 equ 167h ddr8str12 equ 168h ddr8str13 equ 169h ddr8str14 equ 16Ah ddr8str15 equ 16Bh ddr8str16 equ 16Ch ddr8str17 equ 16Dh ddr8str18 equ 16Eh ddr8str19 equ 16Fh ;============================================================================================= ; Определение места размещения результатов операций. ;============================================================================================= W equ 0 ; Результат направить в аккумулятор. F equ 1 ; Результат направить в регистр. ;=============================================================================================== ; Присваивание битам названий. ;=============================================================================================== RP0 equ 5 ; Биты RP1 equ 6 ; банков. IRP equ 7 ; Бит выбора групп банков. Z equ 2 ; Флаг нулевого результата. TXIF equ 4 ; Флаг прерывания от передатчика USART. C equ 0 ; Флаг переноса заема. SCL equ 0 ; Бит регистра PortB, который формирует такт. SDA equ 1 ; Бит регистра PortB, который формирует данные. SSPIF equ 3 ; Флаг прерывания от модуля MSSP. SEN equ 0 ; Бит включения "Старта". PEN equ 2 ; Бит включения "Стопа". ACKSTAT equ 6 ; Бит подтверждения от ведомого. SMP equ 7 ; Бит управления длительностью фронта. RCEN equ 3 ; Бит разрешения/запрета приема. ACKEN equ 4 ; Бит подтверждения ведущим приема байта. ;=============================================================================================== org 0 ; Начать выполнение программы goto Start ; с подпрограммы START. ;*********************************************************************************************** ;*********************************************************************************************** ; Подпрограмма прерываний от клавиатуры. ;=============================================================================================== org 4 ; Точка входа в прерывание. clrwdt movwf pr_w ; Сохранение содержимого swapf Status,W ; регистров W и Status на movwf pr_stat ; момент ухода в прерывание. bcf Status,RP0 ; Переход в 0-й банк. (вернуть) bcf Status,RP1 ; Переход в 0-й банк. (вернуть) bcf Status,IRP ; Переход в 0-й банк. (вернуть) call nolpr ; Если 0 такта то идем дальше. btfss PortB,3 goto $+3 clrf p_temp goto vihod movlw .8 movwf regs ; Количество битов в байте. naza call odinpr ; Лог 1 такта идем дальше. call nolpr ; Если 0 такта то идем дальше. clrwdt bcf Status,C btfsc PortB,3 bsf Status,C rrf p_temp,F ; Сдвиг битов в регистор. decf regs,F btfss Status,Z goto naza ; Если загружено 8 бит то продолжение если нет загрузка следующего. call odinpr ; Лог 1 такта идем дальше. call nolpr ; Если 0 такта то идем дальше. call odinpr ; Лог 1 такта идем дальше. call nolpr ; Если 0 такта то идем дальше. ; btfsc PortB,3 ; C ; goto $+3 ; clrf p_temp ; goto vihod call odinpr ; Лог 1 такта идем дальше. clrwdt ;----------------------------------------------------------------------------- ; Здесь сформировалось число клавиатуры. ;------------------------------------------------------------------------------- btfsc stop,3 ; Если строка закончена то набор с клавиатуры запрещен. goto vihod btfsc chbukva2,5 ; Если записало 8192 буквы то выход из записи. goto vihod btfss stop,6 ; Проверка была ли прошлый раз отжата клавиша с номером F0. goto $+4 bcf stop,6 ; Если да то сброс тригера отжатой кнопки и выход из прерывания. clrf p_temp ; Сброс регистра чтобы команда не повторялась. goto vihod movlw .240 ; Проверка была ли отжата кнопка клавиатуры с номером F0. subwf p_temp,W btfss Status,Z goto $+3 bsf stop,6 ; Если да то запись в тригер что это было. goto vihod ; Выход из прерывания без записи в ЕПРОМ. movlw .78 ; Команда скорости бега строки уменьшение скорости. subwf p_temp,W btfss Status,Z goto sledf incf skorbeg,F movf skorbeg,W movwf p_temp movlw .255 movwf chbukva movlw .31 movwf chbukva2 call eprom ; Идет на запись команды в 0 ячейку. clrf chbukva2 clrf chbukva goto vihod sledf movlw .85 ; Команда скорости бега строки увелечение скорости. subwf p_temp,W btfss Status,Z goto sledd decf skorbeg,F movf skorbeg,W movwf p_temp movlw .255 movwf chbukva movlw .31 movwf chbukva2 call eprom ; Идет на запись команды в 0 ячейку. clrf chbukva2 clrf chbukva goto vihod sledd movlw .18 ; Проверка нажата ли клавиша Shift subwf p_temp,W btfss Status,Z ; goto $+3 bsf stop,7 ; если был нажат то сохранение бита о нажатии. goto vihod ; И выход из прирывания так как эту команду не нужно записывать в ЕПРОМ movlw .102 ; Команда под этим номером заменяет буквы. subwf p_temp,W btfss Status,Z ; goto dddd movlw .0 ; Проверка на то что в этом регистре не находится ноль. subwf chbukva2,W ; счечика букв. btfss Status,Z goto qqqs movlw .0 subwf chbukva,W btfsc Status,Z goto dddd ; Если 1 то пропуск этой команды. qqqs movlw .1 subwf chbukva,F ; Декремент двух битового числа. btfss Status,C decf chbukva2,F call sdvig ; Сдвиг букв табло для удаления. goto vihod dddd movlw .92 ; Ограничение числа ввода с клавиатуры буквы 5D. subwf p_temp,W btfsc Status,C ; Если число привышает то записи в ЕПРОМ не будет. goto vihod btfss stop,7 ; Проверка был ли прошлый раз нажат Shift. goto $+3 bsf p_temp,7 ; Если прошлый заход в прирыавние был связан с нажатием Shift bcf stop,7 ; то сохранение этого дела в ЕПРОМ через p_temp регистр ЕПРОМа. ; После обазначение Shift в регистре p_temp btfss stop,5 ; Выход из записи потому что идет чтение. goto $+3 bsf stop,4 ; Говорит о том что была попытка записи во время чтения 24С64 goto vihod ; это сохранилось в тригере stop,4 чтобы потом записать нажатую клавишу. call eprom ; Идет на запись буквы. viepr bsf stop,0 ; Запись лог 1 в регистр стоп говорящий о записи с компьютера в ЕПРОМ. ;-------------------------------------------------------------------------------- vihod bcf IntCon,0 ; Сброс флага для выхода из прирывания. swapf pr_stat,W ; Восстанавление movwf Status ; содержимого swapf pr_w,F ; регистров swapf pr_w,W ; W и Status. retfie ; Выход из ПП прерывания. nolpr movlw .255 movwf temp6 nolpr2 btfss PortB,4 return ; Ноль такта идет дальше. decfsz temp6,F ; Счечик сдвиговых операций. goto nolpr2 return odinpr movlw .255 movwf temp6 odinpr2 btfsc PortB,4 ; Один такта идет дальше. return ; Ноль такта идет дальше. decfsz temp6,F ; Счечик сдвиговых операций. goto odinpr2 return ;*********************************************************************************************** ; "Основное тело" программы. Начало программы. ;*********************************************************************************************** ; Подготовительные операции. ;=============================================================================================== Start bcf Status,RP0 ; "Двойная, штатная" команда bcf Status,RP1 ; перехода в 0-й банк. bcf Status,IRP bsf stop,6 ; Отмена загрузки буквы с клавиатуры при включении (временно) clrf stop ; Cброс регистра говорящего о записи клавиатуры. clrf TRIG movlw .255 movwf EPRread movlw .31 movwf EPRread2 clrf chbukva ; Сброс регистра количества букв clrf chbukva2 ; Сброс регистра количества букв START1 bsf Status,RP0 ; "Двойная, штатная" команда ; movlw b'00000111' ; Выключение АЦП Модуля для работы порта А ; movwf Adcon1 movlw b'00001111' movwf OptionR ; Включение подтягивающих резисторов (для кнопок). clrf TrisD ; Все выводы порта А работают на выход. movlw b'00011000' ; Выводы порта В c лог 1 работают на вход. movwf TrisB ; ; Инициализация модуля MSSP (работа по I2C, режим ведущего, скорость 100 Кгц). ;=============================================================================================== ; Все не задействованные модули отключены по умолчанию. ; Выводы всех портов, по умолчанию, работают на вход. По этой причине, не нужно подтверждать ; обязательную, в данном случае, настройку выводов RC3 (SCL) и RC4 (SDA) на работу "на вход". ; Все регистры SSP... , по умолчанию, сброшены в ноль. Прерывания запрещены. ; Обязательный, в данном случае, нулевой уровень отклика (сигнала АСК) на прием ПИКом байта, ; считанного из 24С64 (ACKDT=0), установлен по умолчанию. ;----------------------------------------------------------------------------------------------- movlw .49 ; Установка стандартной скорости обмена: 49 movwf SSPAdd ; Fosc/{4*(SSPAdd+1)}=4Мгц/40=100 Кгц. bsf SSPStat,SMP ; Управление длительностью фронта выключено, ; т.к. выбрана стандартная скорость (100 Кгц.). bsf SSPCon2,5 ; Включить проверку сигнала 24С64 == АСК bcf Status,RP0 ; Переход в 0-й банк. movlw b'00101000' ; Включение модуля MSSP (SSPEN=1), movwf SSPCon ; в режиме I2C-ведущего (SSPM3..SSPM0=1000). ;============================================================================================== bsf Status,RP0 ; "Двойная, штатная" команда movlw b'11111011' ; Выводы порта В c лог 1 работают на вход. movwf TrisC bcf Status,RP0 ; "Двойная, штатная" команда call EPRREAD ; Переход на чтение числа скорости бега строки clrf EPRread ; Сброс на начала ввода текста. clrf EPRread2 movlw .0 subwf TRIG,W btfss Status,Z ; Если первый проход отображения строк то переход на сдвиг ДДР. goto ST movlw .8 goto STA ST movf TRIG,W STA movwf skorbeg movlw b'00000000' ; movwf PortB ; movlw b'10001000' ; '10001000' Разрешение прерываний по входу портов ПОТОМ ВЕРНУТЬ 10001000 movwf IntCon ; ;B ПОТОМ РАЗРЕШИТЬ ГЛОБАЛЬНОЕ ПРИРЫВАНИЕ call sbross goto Nachal ;------------------------------------------------------------------------------- ; Отображение строк. ;------------------------------------------------------------------------------- otbrbait bcf Status,RP0 ; Выбор 0 банка. movlw .8 movwf Reg ; Запись количества сдвигов в этот регистр slbit bcf PortB,0 ; Устоновка такта в ноль. rlf REGZAGR,F ; Сдвиг регистра строк в внешние регистры устройства. bcf PortB,1 ; Если после сдвига 0 то данные на выходе 0. btfss Status,C bsf PortB,1 ; Если после сдвига 1то выход данных 1. nop bsf PortB,0 ; Такт сдвига в 1. decfsz Reg,F ; Счечик сдвиговых операций. goto slbit ; Возврат на вывод следующего бита. return ;------------------------------------------------------------------------------- ; Видео память и работа с ней. ;------------------------------------------------------------------------------- perv bcf Status,RP1 ; выбор 0 банка. btfsc stop,2 goto sledctr bcf Status,RP0 ; выбора 2 банка. bsf Status,RP1 ; выбор 2 банка. movf nomstr,W bsf Status,RP0 ; выбора 1 банка. bcf Status,RP1 ; выбор 1 банка. addwf PC,F ; Переход на сдвиг регистров строки- используется nop ; как задержка отображения строки. goto astr goto bstr goto cstr goto dstr goto estr goto fstr goto hstr DISPLAU clrwdt bcf Status,RP0 ; Выбор 2 банка. bsf Status,RP1 ; Выбор 2 банка. clrf nomstr clrf REGstr clrf REGZAGR clrf prohod bcf Status,C bcf Status,RP1 ; Выбор 1 банка. btfsc stop,2 goto sledctr ; Сдвиг отменяется вовремя набора букв. bsf Status,RP0 ; выбора 1 банка. rrf mem,F rrf ddr1str0,F rrf ddr1str1,F rrf ddr1str2,F rrf ddr1str3,F rrf ddr1str4,F rrf ddr1str5,F rrf ddr1str6,F rrf ddr1str7,F rrf ddr1str8,F rrf ddr1str9,F rrf ddr1str10,F rrf ddr1str11,F rrf ddr1str12,F rrf ddr1str13,F rrf ddr1str14,F rrf ddr1str15,F rrf ddr1str16,F rrf ddr1str17,F rrf ddr1str18,F rrf ddr1str19,F goto sledctr ; Переход на следующую строку. astr rrf mem,F rrf ddr2str0,F rrf ddr2str1,F rrf ddr2str2,F rrf ddr2str3,F rrf ddr2str4,F rrf ddr2str5,F rrf ddr2str6,F rrf ddr2str7,F rrf ddr2str8,F rrf ddr2str9,F rrf ddr2str10,F rrf ddr2str11,F rrf ddr2str12,F rrf ddr2str13,F rrf ddr2str14,F rrf ddr2str15,F rrf ddr2str16,F rrf ddr2str17,F rrf ddr2str18,F rrf ddr2str19,F goto sledctr ; Переход на следующую строку. bstr rrf mem,F rrf ddr3str0,F rrf ddr3str1,F rrf ddr3str2,F rrf ddr3str3,F rrf ddr3str4,F rrf ddr3str5,F rrf ddr3str6,F rrf ddr3str7,F rrf ddr3str8,F rrf ddr3str9,F rrf ddr3str10,F rrf ddr3str11,F rrf ddr3str12,F rrf ddr3str13,F rrf ddr3str14,F rrf ddr3str15,F rrf ddr3str16,F rrf ddr3str17,F rrf ddr3str18,F rrf ddr3str19,F goto sledctr ; Переход на следующую строку. cstr rrf mem,F rrf ddr4str0,F rrf ddr4str1,F rrf ddr4str2,F rrf ddr4str3,F rrf ddr4str4,F rrf ddr4str5,F rrf ddr4str6,F rrf ddr4str7,F rrf ddr4str8,F rrf ddr4str9,F rrf ddr4str10,F rrf ddr4str11,F rrf ddr4str12,F rrf ddr4str13,F rrf ddr4str14,F rrf ddr4str15,F rrf ddr4str16,F rrf ddr4str17,F rrf ddr4str18,F rrf ddr4str19,F goto sledctr ; Переход на следующую строку. dstr bcf Status,RP0 bsf Status,RP1 ; переход в 2 банк для сдвега регистров rrf mem,F rrf ddr5str0,F rrf ddr5str1,F rrf ddr5str2,F rrf ddr5str3,F rrf ddr5str4,F rrf ddr5str5,F rrf ddr5str6,F rrf ddr5str7,F rrf ddr5str8,F rrf ddr5str9,F rrf ddr5str10,F rrf ddr5str11,F rrf ddr5str12,F rrf ddr5str13,F rrf ddr5str14,F rrf ddr5str15,F rrf ddr5str16,F rrf ddr5str17,F rrf ddr5str18,F rrf ddr5str19,F ; rrf ddr5str19,F goto sledctr ; Переход на следующую строку. estr bcf Status,RP0 bsf Status,RP1 ; переход в 2 банк для сдвега регистров rrf mem,F rrf ddr6str0,F rrf ddr6str1,F rrf ddr6str2,F rrf ddr6str3,F rrf ddr6str4,F rrf ddr6str5,F rrf ddr6str6,F rrf ddr6str7,F rrf ddr6str8,F rrf ddr6str9,F rrf ddr6str10,F rrf ddr6str11,F rrf ddr6str12,F rrf ddr6str13,F rrf ddr6str14,F rrf ddr6str15,F rrf ddr6str16,F rrf ddr6str17,F rrf ddr6str18,F rrf ddr6str19,F goto sledctr ; Переход на следующую строку. fstr bcf Status,RP0 bsf Status,RP1 ; переход в 2 банк для сдвега регистров rrf mem,F rrf ddr7str0,F rrf ddr7str1,F rrf ddr7str2,F rrf ddr7str3,F rrf ddr7str4,F rrf ddr7str5,F rrf ddr7str6,F rrf ddr7str7,F rrf ddr7str8,F rrf ddr7str9,F rrf ddr7str10,F rrf ddr7str11,F rrf ddr7str12,F rrf ddr7str13,F rrf ddr7str14,F rrf ddr7str15,F rrf ddr7str16,F rrf ddr7str17,F rrf ddr7str18,F rrf ddr7str19,F goto sledctr ; Переход на следующую строку. hstr bcf Status,RP0 bsf Status,RP1 ; переход в 2 банк для сдвега регистров rrf mem,F rrf ddr8str0,F rrf ddr8str1,F rrf ddr8str2,F rrf ddr8str3,F rrf ddr8str4,F rrf ddr8str5,F rrf ddr8str6,F rrf ddr8str7,F rrf ddr8str8,F rrf ddr8str9,F rrf ddr8str10,F rrf ddr8str11,F rrf ddr8str12,F rrf ddr8str13,F rrf ddr8str14,F rrf ddr8str15,F rrf ddr8str16,F rrf ddr8str17,F rrf ddr8str18,F rrf ddr8str19,F goto sledctr ; Переход на следующую строку. sledctr clrwdt bcf Status,C ; Сброс переноса сдвигов с строки на строку. bcf Status,RP0 ; Выбор 2 банка. bsf Status,RP1 ; Выбор 2 банка. bsf Status,IRP ; Бит выбора груп банка. movlw .4 ; Числовой компоратор для загрузки нужного банка (ниже) subwf nomstr,W ; movf nomstr,W ; Загрузка номера обрабатываемой строки без влияния на регистр С. btfsc Status,C ; Определение банка в зависимости что сдвигалось 1 банк или 2 банк. goto $+2 ; 4 bcf Status,IRP ; Бит выбора груп банка для отображения с нужного групп банка. ; bsf Status,RP0 ; Выбор 1 банка. ; bcf Status,RP1 ; Выбор 1 банка. incf Pclath,F call vibrstr decf Pclath,F goto sledstr vibrstr addwf PC,F ; Загрузка начального адреса строки в FSR. retlw 0A0h ; 1 строка 1 банк retlw 0B4h ; ------- 1 банк retlw 0C8h ; ------- 1 банк retlw 0DCh ; ------- 1 банк retlw 020h ; 5 строка 2 банк retlw 034h ; ------- 2 банк retlw 048h ; ------- 2 банк retlw 05Ch ; ------- 2 банк sledstr movwf FSR ; Копирование содержимого регистра W ; в регистр FSR. movlw .20 movwf REGstr ; Запись кол-во регистров в строке. sled movf Indf,W movwf REGZAGR ; Загруженный регистр для отправки в внешние регистры строк 74НС595. clrwdt call otbrbait ; Переход на отображение регстра строки. incf FSR,F ; Переход на следующий регистр строки. decfsz REGstr,F ; Счечик сдвиговых операций. goto sled ; Возврат на вывод следующего бита. bcf Status,RP0 ; Выбор 2 банка. bsf Status,RP1 ; Выбор 2 банка. movf nomstr,W ; Копирование номера строки в порт D на дешефратор. incf Pclath,F call deschif decf Pclath,F bcf Status,RP1 ; Выбор 0 банка. movwf PortD goto popop deschif addwf PC,F ; Загрузка начального адреса строки в FSR. retlw b'11111110' retlw b'11111101' retlw b'11111011' retlw b'11110111' retlw b'11101111' retlw b'11011111' retlw b'10111111' retlw b'01111111' popop bsf PortB,2 ; Такт отображения внешних регистров на матрицы всей строки. nop nop bcf PortB,2 bsf Status,RP1 ; Выбор 2 банка. incf nomstr,F ; Переход на следующий номер строки. btfsc nomstr,3 incf prohod,F ; Увеличение количества проходо. btfsc nomstr,3 clrf nomstr movlw .0 subwf prohod,W btfsc Status,Z ; Если первый проход отображения строк то переход на сдвиг ДДР. goto perv bcf Status,RP1 movf skorbeg,W ; Опредиляет скорость строки. bsf Status,RP1 subwf prohod,W ; Если отобразило количества раз строки то выход из Дисплея btfss Status,C goto sledctr bcf Status,IRP ; Бит выбора груп банка. bcf Status,RP1 ; Выбор 0 банка. clrwdt return ;===================================================================================== ; Формирование букв и отправка информации для сдвига их на тобло отображения. ;==================================================================================== Nachal clrwdt bcf Status,RP1 ; перехода в 0-й банк. bcf Status,IRP clrf stb ; Счечик столбцов букв. clrf mem ; Регистр памяти строк букв qqq btfsc stop,1 bsf stop,2 ; Устоновка лог 1 для остоновки сдвигов бегущей строки ; после воспроизведенной буквы записанной с клавиатуры. movlw .90 ; Проверка есть ли команда subwf p_temp,W ; запуска строки. btfss Status,Z goto dall bcf stop,1 ; Если есть команда запуска сдвига строки то она выполняется. bcf stop,2 bcf stop,0 clrf p_temp ; Стирание команды. bsf stop,3 ; Указание что строка закончена чтобы потом обойти прирывание. dall btfss stop,0 ; Если была запись c клавиатуры то последняя записанная буква ; в ЕПРОМ будет считана из него и воспроизведена. goto ttt movf chbukva,W movwf EPRread movf chbukva2,W movwf EPRread2 bsf stop,1 ; лог 1 для остоновки сдвигов , бегущей строки. bcf stop,2 bcf stop,0 movlw .0 ; Сброс сдвиговых регистров во время начала набора текста. subwf chbukva2,W ; btfss Status,Z ; goto аааа movlw .0 ; subwf chbukva,W btfsc Status,Z call sbross аааа incf chbukva,F ; Инкремент двух битового числа. btfsc Status,Z incf chbukva2,F bsf PortC,2 ttt call EPRREAD ; Переход на чтение ЕЕПРОМ следующей буквы. clrwdt ;ttt movlw 0CAh ; movwf TRIG Vihepr movlw .255 subwf TRIG,W btfss Status,Z goto $+3 movlw .90 movwf TRIG movlw .90 subwf TRIG,W btfss Status,Z ; Если записана цифра 5A то сброс регистра счечика goto nhj ; букв на начало. movlw .0 ; Эта проверка нужна для замены (конца-20) строки на пробел для отображения. subwf EPRread2,W ; Чтобы можно было записать в 1 ячейку ото постояное чтение не дает. btfss Status,Z ; Проверка на то что в этом регистре не находится ноль. goto ghj movlw .0 ; Проверка на то что в этом регистре не находится ноль. subwf EPRread,W btfss Status,Z goto ghj movlw .41 movwf TRIG goto nhj ghj clrf EPRread clrf EPRread2 goto Nachal ; Конец строки. nhj btfsc stop,2 ; Если этим байтом остоновлин сдвиг строки то инкремента не будет. goto buk2 incf EPRread,F ; Инкремент номера буквы при чтении. btfsc Status,Z incf EPRread2,F ; Инкремент номера буквы при чтении. btfss EPRread2,5 ; Если прочитало 8192 буквы то на начало- сброс. Убрать goto buk2 clrf EPRread clrf EPRread2 buk2 btfsc TRIG,7 goto bukbol ; (НЕ ЗАБЫТЬ) переход на большие буквы. goto bukmal bukbol bcf TRIG,7 call bukbols ; Переход на большие буквы bsf TRIG,7 movwf mem ; Запись строки буквы в регистр для обработки. movlw .3 subwf Pclath,F goto ibukstr bukmal call bukmals ; Переход на маленькие буквы movwf mem ; Запись строки буквы в регистр для обработки. ibukstr decf Pclath,F decf Pclath,F decf Pclath,F devstb incf stb,F ; Увеличение столбца букв на следующий столбец. call DISPLAU ; Если уже загруженно 8 строк то уход на отображение ; Если нет то загрузка следующей строки буквы для выевления btfsc stb,3 ; Если перебрало 9 сталбцов то переход к следующей буквы. btfss stb,0 goto $+2 goto Nachal btfsc stb,3 ; Если перебрало 8 сталбцов то переход к 9 столбцу goto devstb ; следующей буквы 9 столбец нужен для пробела. ; новых столбцов. goto buk2 ; Переход на следующий круг. ;---------------------------------------------------------------------------------------- ;############################################################################################### ; ЧТЕНИЕ БАЙТОВ ИЗ ЯЧЕЕК 24С64 С АДРЕСАМИ 00h ... 04h. ;############################################################################################### ; Формирование условия "START". ;=============================================================================================== EPRREAD bcf Status,RP0 ; Переход в 0-й банк. bsf stop,5 ; Говорит о начале чтения для запрета записи в прерывании. call STARTbit ; Начало формирования условия "START". ;--->Возврат по стеку из ПП START ;=============================================================================================== ; Передача режимного байта. ;=============================================================================================== movlw b'10100000' ; Передача режимного байта: 1010 - код функциональности, call WR_I2C ; 000 - адрес м/схемы, 0 - режим записи. ;--->Возврат по стеку из ПП WR_I2C ;=============================================================================================== ; Передача байтов адреса той ячейки 24C64, из которой будет считан 1-й байт массива ; В данном случае, считывание начнется с 1-й ячейки (адрес 00h). ;=============================================================================================== movf EPRread2,W ; Передача старшего call WR_I2C ; байта адреса. ;--->Возврат по стеку из ПП WR_I2C ; movf EPRread,W ; Передача младшего movf EPRread,W call WR_I2C ; байта адреса. ;--->Возврат по стеку из ПП WR_I2C ;=============================================================================================== ; Формирование условия "STOP". ;=============================================================================================== call STOP ; Начало формирования условия "STOP". ;--->Возврат по стеку из ПП STOP ;=============================================================================================== ; Формирование условия "START". ;=============================================================================================== call STARTbit ; Начало формирования условия "START". ;--->Возврат по стеку из ПП START ;=============================================================================================== ; Передача режимного байта. ;=============================================================================================== movlw b'10100001' ; Передача режимного байта: 1010 - код функциональности, call WR_I2C ; 000 - адрес м/схемы, 1 - режим чтения. ;--->Возврат по стеку из ПП WR_I2C ;=============================================================================================== ; ПП приема байта и формирования отклика ведущего на принятый байт. ;=============================================================================================== ; Прием байта. ;------------------------------------- RD_I2C bsf Status,RP0 ; Переход в 1-й банк. bsf SSPCon2,RCEN ; Разрешение приема текущего байта ; от 24С64 (начало приема). bcf Status,RP0 ; Переход в 0-й банк. bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP. btfss PIR1,SSPIF ; Прием текущего байта завершен или нет? goto $-1 ; Если нет, то ожидание. ; Если завершен, то принятый байт аппаратно копируется ; в SSPBuf и программа исполняется далее. movf SSPBuf,W ; Копирование принятого байта movwf TRIG ; из SSPBuf в Temp. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; Принятый байт "лежит" в регистре TRIG. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;---------------------------------------------------- ; Формирование отклика ведущего. ;---------------------------------------------------- bsf Status,RP0 ; Переход в 1-й банк. bsf SSPCon2,ACKEN ; Формирование подтверждения (АСК) принятого байта. bcf Status,RP0 ; Переход в 0-й банк. bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP. btfss PIR1,SSPIF ; 9-й импульс закончился или нет? goto $-1 ; Если нет, то ожидание. ; Если закончился, то программа исполняется далее. ; Формирование условия "STOP". ;=============================================================================================== FINAL call STOP ; Начало формирования условия "STOP". ;============================================================================================= ; Завершение полного цикла программы. ;============================================================================================= btfsc stop,4 ; Если была нажата кнопка во время чтения, это отметилось в прерывании. ; Переход на первую страницу программ call eprom ; Переход на запись так как во время чтения была нажата клавиша. ; Переход на 0 страницу программ bcf stop,5 return ; Выход из чтения 24С64 ;=============================================================================================== ; movwf pr_w ; Сохранение содержимого ; swapf Status,W ; регистров W и Status на ; movwf pr_stat ; момент ухода в прерывание ; movf Pclath,W ; movwf Pclreg ; movlw .2 ; movwf Pclath eprom call STARTbit ; Начало формирования условия "START". ;--->Возврат по стеку из ПП START ;=============================================================================================== ; Передача режимного байта. ;=============================================================================================== movlw b'10100000' ; Передача режимного байта: 1010 - код функциональности, call WR_I2C ; 000 - адрес м/схемы, 0 - режим записи. ;--->Возврат по стеку из ПП WR_I2C ;=============================================================================================== ; Передача байтов адреса той ячейки 24C64, в которую будет записан 1-й байт массива ; В данном случае, запись начнется с ячейки с адресом 08h. ;=============================================================================================== movf chbukva2,W ; Передача старшего call WR_I2C ; байта адреса. ;--->Возврат по стеку из ПП WR_I2C movf chbukva,W ; Передача младшего call WR_I2C ; байта адреса. ;--->Возврат по стеку из ПП WR_I2C ;=============================================================================================== ; Запись массива байтов в 24С64. ;=============================================================================================== ; а за ним, в порядке увеличения числового movf p_temp,W ; значения адреса, и все остальные. call WR_I2C ; Запись в 24C64 текущего байта данных. ; Если не все, то переход на запись следующего байта. ; Если все, то программа исполняется далее. ;=============================================================================================== ; Формирование условия "STOP". ;=============================================================================================== call STOP ; Начало формирования условия "STOP". clrwdt movlw .255 ; movwf zader movlw .50 ; movwf zader2 zapis decfsz zader,F ; Задержка отображения строки. goto zapis clrwdt decfsz zader2,F ; Задержка отображения строки. goto zapis clrwdt ;--->Возврат по стеку из ПП STOP ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; "Закончен бал, погасли свечи". ;------------------------------------ bcf stop,4 return ;*********************************************************************************************** ; Подпрограммы, которые вызываются командой call. ;*********************************************************************************************** ; ПП передачи байта и анализа отклика ведомого. ;=============================================================================================== POVTOR bcf Status,RP0 ; Переход в 0-й банк. WR_I2C movwf SSPBuf ; Загрузка буфера байтом любой функциональности ; (начало передачи текущего байта). bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP. btfss PIR1,SSPIF ; Передача текущего байта завершена или нет? goto $-1 ; Если нет, то ожидание. ; Если завершено, то программа исполняется далее. ;------------------------------------ ; Анализ отклика ведомого. ;------------------------------------ bsf Status,RP0 ; Переход в 1-й банк. btfsc SSPCon2,ACKSTAT; Подтверждение от ведомого (ACK) принято или нет? goto POVTOR ; Если нет, то повтор передачи текущего байта. bcf Status,RP0 ; Если есть, то переход в 0-й банк, clrwdt return ; после чего - возврат по стеку. ;=============================================================================================== ; ПП формирования условия "START". ;=============================================================================================== STARTbit bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP. bsf Status,RP0 ; Переход в 1-й банк. bsf SSPCon2,SEN ; Начало формирования условия "START". bcf Status,RP0 ; Переход в 0-й банк. btfss PIR1,SSPIF ; Формирование условия "START" завершено или нет? goto $-1 ; Если нет, то ожидание. ; Если завершено, то программа исполняется далее. clrwdt return ; Возврат по стеку. ;=============================================================================================== ; ПП формирования условия "STOP". ;=============================================================================================== STOP bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP. bsf Status,RP0 ; Переход в 1-й банк. bsf SSPCon2,PEN ; Начало формирования условия "STOP". bcf Status,RP0 ; Переход в 0-й банк. btfss PIR1,SSPIF ; Формирование условия "STOP" завершено или нет? goto $-1 ; Если нет, то ожидание. clrwdt ; Если завершено, то программа исполняется далее. return ; Возврат по стеку. ;********************************************************************************************* ; ПРОЦЕДУРА ЗАПИСИ ;********************************************************************************************* ; Формирование старт-условия. ;============================================================================================= ;eprom btfsc stop,5 ; Выход из записи потому что идет чтение. ; return ; ; bcf PortB,SDA ; SDA=0. ; call pauza ; bcf PortB,SCL ; SCL=0. ; call pauza ; call pauza ;============================================================================================= ; "Администраторская" ПП (без названия), "рулящая" очередностью обработки байтов. ;============================================================================================= ; Задание числового значения режимного байта. ;--------------------------------------------------- ; movlw B'10100000' ; Запись в регистр Temp режимного байта (1010-код ; movwf Temp ; функциональности, 000–адрес м/схемы, 0–режим записи). ; call BAIT_WR ; Условный переход в ПП обработки байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;--------------------------------------------------- ; Задание числового значения старшего байта адреса. ;--------------------------------------------------- ; movf chbukva2,W ; Запись в регистр Temp ; movwf Temp ; старшего байта адреса. ; call BAIT_WR ; Условный переход в ПП обработки байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;--------------------------------------------------- ; Задание числового значения младшего байта адреса. ;--------------------------------------------------- ; movf chbukva,W ; Запись в регистр Temp ; movwf Temp ; младшего байта адреса. ; call BAIT_WR ; Условный переход в ПП обработки байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;--------------------------------------------------- ; Задание числового значения байта данных. ;--------------------------------------------------- ; movf p_temp,W ; Запись в регистр Temp байта данных, ; movwf Temp ; предназначенного для записи (2Fh). ; call BAIT_WR ; Условный переход в ПП обработки байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;============================================================================================= ; Формирование стоп-условия. ;============================================================================================= ; bcf PortB,SDA ; SDA=0. ; call pauza ; bsf PortB,SCL ; SCL=1 ; call pauza ; bsf PortB,SDA ; SDA=1. ; movlw .255 ; ; movwf zader ; movlw .32 ; ; movwf zader2 ;zapis decfsz zader,F ; Задержка отображения строки. ; goto zapis ; decfsz zader2,F ; Задержка отображения строки. ; goto zapis ; btfss stop,4 ; Если запись происходила сразу после чтения по причине ; goto $+4 ; нажатия кнопки то уход на ссылку завершение чтения return. ; bcf stop,4 ; Сброс тригера говорящего о нажатии кнопки во время чтения stop,4 ; bsf stop,0 ; Запись лог 1 в регистр стоп,0 говорящий о записи с клавиатуры в ЕПРОМ. ; return ; Клавиша записана! ;============================================================================================ ; Завершение полного цикла программы. ;============================================================================================ ; goto viepr ; Выход из записи ЕПРОМ ;******************************************************************************************** ; Подпрограмма обработки байта. ;******************************************************************************************** BAIT_WR bsf PortB,7 ; movlw .8 ; Запись в счетчик битов количества ; movwf Count ; битов в одном байте. ;============================================================================================ ; Обработка текущего бита ;============================================================================================ SNOVA rlf Temp,F ; Циклический сдвиг влево. Этим обеспечивается обработка ; битов байта, начиная с бита старшего разряда (№7...№0). ; bcf PortB,SDA ; SDA=0. ; btfsc Status,C ; Что "ушло" в бит С? ; bsf PortB,SDA ; Если в бите С 1, то SDA=1. ; call pauza ; bsf PortB,SCL ; SCL=1. (Если в бите С 0, то предыдущая команда не ; call pauza ; исполняется. Вместо нее - "виртуальный" NOP). ; bcf PortB,SCL ; SCL=0. ; call pauza ; call pauza ; decfsz Count,F ; Декремент счетчика битов (Count-1=...). ; goto SNOVA ; Если результат не=0, то переход на обработку ; следующего бита. ;******************************************************************************************** ; Группа команд формирования импульса 9-го такта и анализа состояний флага АСК. ;******************************************************************************************** ; Начало формирования импульса 9-го такта. ;-------------------------------------------------------------------------------------------- ; bsf PortB,SCL ; Формируется строб (перепад от 0 к 1) импульса 9-го такта. ; call pauza ;-------------------------------------------------------------------------------------------- ; Подготовка к анализу состояний флага АСК (перестройка направления работы вывода RB7). ;-------------------------------------------------------------------------------------------- ; bsf Status,RP0 ; Переход в 1-й банк. ; bsf TrisB,SDA ; Вывод SDA работает на вход. bcf Status,RP0 ; Переход в 0-й банк. ;============================================================================================ ; Анализ состояний флага АСК ("плавающая" задержка). ;============================================================================================ ACK btfsc PortB,SDA ; На линии SDA 0 или 1 ? S goto ACK ; Если 1, то снова анализ (задержка до появления 0). ;-------------------------------------------------------------------------------------------- ; Конец формирования импульса 9-го такта. ;-------------------------------------------------------------------------------------------- bcf PortB,SCL ; Если 0, то формируется спад импульса 9-го такта. call pauza call pauza ;-------------------------------------------------------------------------------------------- ; Обратная перестройка направления работы вывода RB7. ;-------------------------------------------------------------------------------------------- bsf Status,RP0 ; Переход в 1-й банк. bcf TrisB,SDA ; Вывод SDA работает на выход. bcf Status,RP0 ; Переход в 0-й банк. bcf PortB,7 return ; Возврат по стеку в "администраторскую" ПП. pauza goto $+1 nop return ; Задержка 0.6мкс ;*********************************************************************************************** ; "РАБОЧАЯ ЧАСТЬ" ПРОГРАММЫ. ;********************************************************************************************* ; ПРОЦЕДУРА ЧТЕНИЯ ;********************************************************************************************* ; Формирование старт-условия. ;============================================================================================= ;EPRREAD bsf stop,5 ; Говорит о начале чтения для запрета записи в прерывании. ; bcf PortB,SDA ; SDA=0. ; call pauza ; bcf PortB,SCL ; SCL=0. ; call pauza ;============================================================================================= ; "Администраторская" ПП (без названия), "рулящая" очередностью обработки байтов. ;============================================================================================= ; Задание числового значения режимного байта (для записи). ;--------------------------------------------------------- movlw B'10100000' ; Запись в регистр Temp режимного байта (1010-код movwf Temp ; функциональности, 000–адрес м/схемы, 0–режим записи). call BAIT_WR ; Условный переход в ПП передачи байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;--------------------------------------------------------- ; Задание числового значения старшего байта адреса. ;--------------------------------------------------------- movlw B'00000000' ; Запись в регистр Temp movwf Temp ; старшего байта адреса. call BAIT_WR ; Условный переход в ПП передачи байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;--------------------------------------------------------- ; Задание числового значения младшего байта адреса. ;--------------------------------------------------------- movlw B'00000001' ; Запись в регистр Temp movwf Temp ; младшего байта адреса. call BAIT_WR ; Условный переход в ПП передачи байта BAIT_WR. ;-----> Возврат по стеку из ПП BAIT_WR. ;============================================================================================= ; Формирование стоп-условия. ;============================================================================================= bcf PortB,SDA ; SDA=0. bsf PortB,SCL ; SCL=1. call pauza bsf PortB,SDA ; SDA=1. call pauza call pauza ;--------------------------------------------------------------------------------------------- ; Формирование старт-условия. ;============================================================================================= bcf PortB,SDA ; SDA=0. call pauza bcf PortB,SCL ; SCL=0. call pauza ;--------------------------------------------------------- ; Задание числового значения режимного байта (для чтения). ;--------------------------------------------------------- movlw B'10100001' ; Запись в регистр Temp режимного байта (1010-код movwf Temp ; функциональности, 000–адрес м/схемы, 1–режим чтения). bsf Pclath,3 ; Переход на первую страницу программ call BAIT_WR ; Условный переход в ПП передачи байта BAIT_WR. bcf Pclath,3 ; Переход на 0 страницу программ ;-----> Возврат по стеку из ПП BAIT_WR. ;********************************************************************************************* ; Подпрограмма приема байта (без названия. Можно как-нибудь назвать). ;********************************************************************************************* movlw .8 ; Запись в счетчик битов количества movwf Count ; битов в одном байте. bsf Status,RP0 ; Переход в 1-й банк. bsf TrisB,SDA ; Вывод SDA работает на вход. bcf Status,RP0 ; Переход в 0-й банк. ;============================================================================================= ; Прием текущего бита. ;============================================================================================= SNOVA_2 bcf Status,C ; Сброс в 0 флага переноса-заема (С). bsf PortB,SCL ; SCL=1 call pauza btfsc PortB,SDA ; На линии SDA 0 или 1? bsf Status,C ; Если 1, то С=1. bcf PortB,SCL ; Если 0, то С=0 (см. выше), а SCL=0. call pauza call pauza rlf TRIG,F ; Циклический сдвиг влево. Этим обеспечивается обработка ; битов байта, начиная с бита старшего разряда (№7...№0). decfsz Count,F ; Декремент счетчика битов (Count-1=...). goto SNOVA_2 ; Если результат не=0, то переход на чтение ; следующего бита. ;--------------------------------------------------------------------------------------------- ; Формирование сигнала АСК (вырабатывает "мастер"). ;--------------------------------------------------------------------------------------------- bcf PortB,SDA ; SDA=0 bsf Status,RP0 ; Переход в 1-й банк. bcf TrisB,SDA ; Вывод SDA работает на выход. bcf Status,RP0 ; Переход в 0-й банк. ;============================================================================================= ; Формирование стоп-условия. ;============================================================================================= bsf PortB,SCL ; SCL=1. call pauza bsf PortB,SDA ; SDA=1. call pauza call pauza ;============================================================================================= ; Завершение полного цикла программы. ;============================================================================================= btfsc stop,4 ; Если была нажата кнопка во время чтения, это отметилось в прерывании. ; Переход на первую страницу программ call eprom ; Переход на запись так как во время чтения была нажата клавиша. ; Переход на 0 страницу программ bcf stop,5 ; Говорит о конце чтения. ; Переход на первую страницу программ goto Vihepr ; Выход из чтения 24С64 ;=========================================================================================== ; Гашение табло ;=========================================================================================== sbross movlw 0A0h ; movwf FSR movlw .80 ; movwf Temp2 zero clrf Indf incf FSR,F decfsz Temp2,F goto zero bsf Status,IRP ; Бит выбора груп банка. movlw 020h ; movwf FSR movlw .80 ; movwf Temp2 zero2 clrf Indf incf FSR,F decfsz Temp2,F goto zero2 bcf Status,IRP ; Бит выбора груп банка. return ;===================================================================================== ; Сдвиг табло на право. ;===================================================================================== sdvig movf FSR,W movwf Temp5 movlw .2 ; movwf Temp7 ; Регистр подсчета двух банков 1 и 2. bsf Status,RP0 ; 1 Банк movlw 0EFh ; Сдвиг 1 банка movwf FSR bankc bcf Status,C movlw .9 ; На сколько столбцов сдвигается весь текст movwf Temp2 sdviga movlw .4 ; количество сдвигаемых строк movwf Temp4 sdvigs movlw .20 ; количество матриц в строке movwf Temp3 sdvigg rlf Indf,F decf FSR,F decfsz Temp3,F goto sdvigg bcf Status,C decfsz Temp4,F goto sdvigs movlw 0EFh ; Загрузка в FSR соответсвующего банка btfsc Temp7,0 movlw 06Fh bcf Status,C movwf FSR decfsz Temp2,F goto sdviga movlw 06Fh movwf FSR bcf Status,RP0 ; 2 Банк bsf Status,IRP ; Бит выбора груп банка. decfsz Temp7,F goto bankc ; Переход на сдвиг 2 банка. bcf Status,C bcf Status,RP1 ; 0 Банк bcf Status,IRP ; Бит выбора груп банка. movf Temp5,W ; Востоновление первоночального FSR movwf FSR return ;===================================================================================================================== nop nop nop nop nol movf stb,W ; 0 addwf PC,F retlw b'00000000' retlw b'01111110' retlw b'10000011' retlw b'10000101' retlw b'10011001' retlw b'10100001' retlw b'11000001' retlw b'01111110' odin movf stb,W ; 1 addwf PC,F retlw b'00000000' retlw b'00001000' retlw b'10000100' retlw b'11111111' retlw b'10000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' dva movf stb,W addwf PC,F ;2 retlw b'00000000' retlw b'11000110' retlw b'10100001' retlw b'10010001' retlw b'10010001' retlw b'10001001' retlw b'01000110' retlw b'00000000' bukmals movf TRIG,W ; Копирование закодированной буквы в регистр W. incf Pclath,F ; Переход на букву где есть над каждой буквой переход incf Pclath,F incf Pclath,F ; Переход на букву где есть над каждой буквой переход addwf PC,F ; для копирования нужной строки с помощью bukstr регистра ; в регистр mem retlw b'00000000' retlw b'00000000' ; Клавиши F retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' ; Клавиши F 13 goto eim ; ё 14 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' ; 19 retlw b'00000000' ; CTRL goto iim ; й goto odin ; 1 22 retlw b'00000000' retlw b'00000000' retlw b'00000000' ; 25 goto jm ; я 26 goto Igm ; ы goto fm ; ф 28 goto cem ; ц 29 goto dva ; 2 30 retlw b'00000000' retlw b'00000000' goto sm ; с goto chm ; ч 34 goto v ; в goto ym ; у 36 goto chetr ; 4 37 goto tri ; 3 38 retlw b'00000000' retlw b'00000000' retlw b'00000000' ; Пусто пробел 41 goto mm ; м 42 goto a ; а goto em ; е goto km ; к 45 goto piat ; 5 46 retlw b'00000000' retlw b'00000000' goto tm ; т 49 goto im ; и 50 goto rm ; р 51 goto pm ; п 52 goto nm ; н 53 goto schest ; 6 54 retlw b'00000000' retlw b'00000000' retlw b'00000000' goto mjgz ; ь 58 goto om ; о 59 goto gm ; г 60 goto sem ; 7 61 goto vos ; 8 62 retlw b'00000000' retlw b'00000000' goto bm ; б 65 goto Lm ; л 66 goto schm ; ш 67 goto schem ; щ 68 goto nol ; 0 69 goto dev ; 9 70 retlw b'00000000' retlw b'00000000' goto iym ; ю 73 goto toch ; точка 74 goto dm ; д 75 goto zgm ; ж 76 goto zm ; з 77 буква goto tire ; - 78 retlw b'00000000' retlw b'00000000' retlw b'00000000' goto Iem ; э 82 retlw b'00000000' goto hm ; х 84 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' goto tvz ; ъ 91 tri movf stb,W addwf PC,F ;3 retlw b'00000000' retlw b'01100110' retlw b'10000001' retlw b'10001001' retlw b'10001001' retlw b'01110110' retlw b'00000000' retlw b'00000000' chetr movf stb,W addwf PC,F ; 4 retlw b'00000000' retlw b'00110000' retlw b'00101000' retlw b'00100100' retlw b'10100010' retlw b'11111111' retlw b'10100000' retlw b'00000000' piat movf stb,W addwf PC,F ;5 retlw b'00000000' retlw b'01001111' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01110001' retlw b'00000000' schest movf stb,W addwf PC,F ;6 retlw b'00000000' retlw b'00111100' retlw b'01001010' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01110010' retlw b'00000000' sem movf stb,W addwf PC,F ;7 retlw b'00000000' retlw b'00000011' retlw b'00000001' retlw b'11100001' retlw b'00010001' retlw b'00001001' retlw b'00000111' retlw b'00000000' vos movf stb,W addwf PC,F ;8 retlw b'00000000' retlw b'01110110' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01110110' retlw b'00000000' dev movf stb,W addwf PC,F ; 9 retlw b'00000000' retlw b'01001110' retlw b'10010001' retlw b'10010001' retlw b'10010001' retlw b'10010001' retlw b'01101110' retlw b'00000000' a movf stb,W addwf PC,F ; а retlw b'00000000' retlw b'01100000' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'01111000' retlw b'10000000' bm movf stb,W addwf PC,F ; б retlw b'00000000' retlw b'01111000' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'01100100' retlw b'00000000' v movf stb,W addwf PC,F ; в retlw b'00000000' retlw b'11111100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'01101000' retlw b'00000000' gm incf Pclath,F call gms decf Pclath,F return gms movf stb,W addwf PC,F ; г retlw b'00000000' retlw b'10000100' retlw b'11111100' retlw b'10000100' retlw b'00000100' retlw b'00000100' retlw b'00001100' retlw b'00000000' dm incf Pclath,F call dms decf Pclath,F return dms movf stb,W addwf PC,F ; д retlw b'00000000' retlw b'11000000' retlw b'01111000' retlw b'01000100' retlw b'01000100' retlw b'01000100' retlw b'01111100' retlw b'11000000' em incf Pclath,F call ems decf Pclath,F return ems movf stb,W addwf PC,F ; е retlw b'00000000' retlw b'01111000' retlw b'10100100' retlw b'10100100' retlw b'10100100' retlw b'10100100' retlw b'10011000' retlw b'00000000' eim incf Pclath,F call eims decf Pclath,F return eims movf stb,W addwf PC,F ;ё retlw b'00000000' retlw b'01111000' retlw b'10100101' retlw b'10100100' retlw b'10100100' retlw b'10100101' retlw b'10011000' retlw b'00000000' zgm incf Pclath,F call zgms decf Pclath,F return zgms movf stb,W addwf PC,F ;ж retlw b'00000000' retlw b'11000100' retlw b'00101000' retlw b'00010000' retlw b'11111100' retlw b'00010000' retlw b'00101000' retlw b'11000100' nop zm incf Pclath,F call zms decf Pclath,F return zms movf stb,W addwf PC,F ;з retlw b'00000000' retlw b'10000100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'01101000' im incf Pclath,F call ims decf Pclath,F return ims movf stb,W addwf PC,F ;и retlw b'00000000' retlw b'11111100' retlw b'01000000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'11111100' retlw b'00000000' iim incf Pclath,F call iis decf Pclath,F return iis movf stb,W addwf PC,F ;й retlw b'00000000' retlw b'11111100' retlw b'01000001' retlw b'00100010' retlw b'00010001' retlw b'00001000' retlw b'11111100' retlw b'00000000' km incf Pclath,F call kms decf Pclath,F return kms movf stb,W addwf PC,F ;к retlw b'00000000' retlw b'11111100' retlw b'00010000' retlw b'00010000' retlw b'00101000' retlw b'00101000' retlw b'11000100' retlw b'00000000' Lm incf Pclath,F call Lms decf Pclath,F return Lms movf stb,W addwf PC,F ;л retlw b'00000000' retlw b'01000000' retlw b'10000000' retlw b'01111100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'11111100' mm incf Pclath,F call mms decf Pclath,F return mms movf stb,W addwf PC,F ;м retlw b'00000000' retlw b'11111100' retlw b'00001000' retlw b'00010000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'11111100' nm incf Pclath,F call nms decf Pclath,F return nms movf stb,W addwf PC,F ;н retlw b'00000000' retlw b'11111100' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'11111100' om incf Pclath,F call oms decf Pclath,F return oms movf stb,W addwf PC,F ;о retlw b'00000000' retlw b'01111000' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'01111000' pm incf Pclath,F call pms decf Pclath,F return pms movf stb,W addwf PC,F ;п retlw b'00000000' retlw b'11111100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'11111100' rm incf Pclath,F call rms decf Pclath,F return rms movf stb,W addwf PC,F ;р retlw b'00000000' retlw b'10000000' retlw b'11111100' retlw b'10100100' retlw b'00100100' retlw b'00100100' retlw b'00100100' retlw b'00011000' sm incf Pclath,F call sms decf Pclath,F return sms movf stb,W addwf PC,F ; с retlw b'00000000' retlw b'01111000' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'01001000' retlw b'00000000' tm incf Pclath,F call tms decf Pclath,F return tms movf stb,W addwf PC,F ;т retlw b'00000000' retlw b'00001100' retlw b'00000100' retlw b'10000100' retlw b'11111100' retlw b'10000100' retlw b'00000100' retlw b'00001100' ym incf Pclath,F call yms decf Pclath,F return yms movf stb,W addwf PC,F ;у retlw b'00000000' retlw b'01000100' retlw b'10001000' retlw b'01010000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'00000100' fm incf Pclath,F incf Pclath,F call fms decf Pclath,F decf Pclath,F return fms movf stb,W addwf PC,F ;ф retlw b'00000000' retlw b'00110000' retlw b'01001000' retlw b'01001000' retlw b'11111100' retlw b'01001000' retlw b'01001000' retlw b'00110000' hm incf Pclath,F incf Pclath,F call hms decf Pclath,F decf Pclath,F return hms movf stb,W addwf PC,F ;х retlw b'00000000' retlw b'10000100' retlw b'01001000' retlw b'00110000' retlw b'00110000' retlw b'01001000' retlw b'10000100' retlw b'00000000' cem incf Pclath,F incf Pclath,F call cems decf Pclath,F decf Pclath,F return cems movf stb,W addwf PC,F ;ц retlw b'00000000' retlw b'01111100' retlw b'01000000' retlw b'01000000' retlw b'01000000' retlw b'01000000' retlw b'01111100' retlw b'11000000' chm incf Pclath,F incf Pclath,F call chms decf Pclath,F decf Pclath,F return chms movf stb,W addwf PC,F ;ч retlw b'00000000' retlw b'00011100' retlw b'00100000' retlw b'00100000' retlw b'00100000' retlw b'00100000' retlw b'00100000' retlw b'11111100' schm incf Pclath,F incf Pclath,F call schms decf Pclath,F decf Pclath,F return schms movf stb,W addwf PC,F ;ш retlw b'00000000' retlw b'11111100' retlw b'10000000' retlw b'10000000' retlw b'11111100' retlw b'10000000' retlw b'10000000' retlw b'11111100' nop nop schem incf Pclath,F incf Pclath,F call schems decf Pclath,F decf Pclath,F return schems movf stb,W addwf PC,F ;щ retlw b'00000000' retlw b'01111100' retlw b'01000000' retlw b'01000000' retlw b'01111100' retlw b'01000000' retlw b'01000000' retlw b'11111100' tvz incf Pclath,F incf Pclath,F call tvzs decf Pclath,F decf Pclath,F return tvzs movf stb,W ; Твердый знак addwf PC,F retlw b'00000000' retlw b'00000100' retlw b'11111100' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'01100000' Igm incf Pclath,F incf Pclath,F call Igms decf Pclath,F decf Pclath,F return Igms movf stb,W ; Буква ы addwf PC,F retlw b'00000000' retlw b'11111100' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'01100000' retlw b'00000000' retlw b'11111100' mjgz incf Pclath,F incf Pclath,F call mjgzs decf Pclath,F decf Pclath,F return mjgzs movf stb,W ; Мягкий знак addwf PC,F retlw b'00000000' retlw b'11111100' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'10010000' retlw b'01100000' Iem incf Pclath,F incf Pclath,F call Iems decf Pclath,F decf Pclath,F return Iems movf stb,W ; Буква э. addwf PC,F retlw b'00000000' retlw b'10000100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'10010100' retlw b'01010100' retlw b'00111000' iym incf Pclath,F incf Pclath,F call iyms decf Pclath,F decf Pclath,F return iyms movf stb,W ; Буква ю addwf PC,F retlw b'00000000' retlw b'11111100' retlw b'00010000' retlw b'01111000' retlw b'10000100' retlw b'10000100' retlw b'10000100' retlw b'01111000' jm incf Pclath,F incf Pclath,F call Jms decf Pclath,F decf Pclath,F return Jms movf stb,W ; я addwf PC,F retlw b'00000000' retlw b'01001000' retlw b'10010100' retlw b'10010100' retlw b'01010100' retlw b'00110100' retlw b'00010100' retlw b'11111100' toch incf Pclath,F incf Pclath,F call tochs decf Pclath,F decf Pclath,F return tochs movf stb,W addwf PC,F ;Точка retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11000000' retlw b'11000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' tire incf Pclath,F incf Pclath,F call tires decf Pclath,F decf Pclath,F return tires movf stb,W addwf PC,F ; тирэ retlw b'00000000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' ;================================================================================== ;================================================================================== nop nop nop nop nop nop nop nop nop nop voscl2 incf Pclath,F goto voscl zap2 incf Pclath,F incf Pclath,F goto zap mjgzb2 incf Pclath,F incf Pclath,F goto mjgzb tvzb2 incf Pclath,F incf Pclath,F goto tvzb email2 incf Pclath,F incf Pclath,F goto email resch2 incf Pclath,F incf Pclath,F goto resch dol2 incf Pclath,F incf Pclath,F goto dol proc2 incf Pclath,F incf Pclath,F goto proc bukbols movlw .6 addwf Pclath,F ; Переход на букву где есть над каждой буквой переход movf TRIG,W ; Копирование закодированной буквы в регистр W. addwf PC,F ; для копирования нужной строки с помощью bukstr регистра ; в регистр mem retlw b'00000000' retlw b'00000000' ; Клавиши F retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' ; Клавиши F 13 goto EI ; Ё- ё 14 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' ; 19 retlw b'00000000' ; CTRL goto II ; Й -й goto voscl2 ; !восклицательный -1 22 retlw b'00000000' retlw b'00000000' retlw b'00000000' ; 25 goto Jb ; Я - я 26 goto igb ; Ы-ы goto Fb ; Ф-ф 28 goto Ceb ; Ц- ц 29 goto email2 ; @ email- 2 - 2 30 НЕТ! retlw b'00000000' retlw b'00000000' goto Sb ; С-с goto chb ; Ч-ч 34 goto V ; В-в goto Yb ; У-у 36 goto dol2 ; $ доллор - 4 37 НЕТУ goto resch2 ; # решотка - 3 38 retlw b'00000000' retlw b'00000000' retlw b'00000000' ; Пусто пробел 41 goto M ; М-м 42 goto A ; A-а goto E ; E-е goto K ; K-к 45 goto proc2 ; % процент -5 46 retlw b'00000000' retlw b'00000000' goto Tb ; T-т 49 goto I ; И-и 50 goto Rb ; Р-р 51 goto Pb ; П-п 52 goto N ; Н-н 53 goto dvtoch ; двоеточие - 6 54 retlw b'00000000' retlw b'00000000' retlw b'00000000' goto mjgzb2 ; ь 58 goto Ob ; O-о 59 goto G ; Г-г 60 goto vopros ; ? вопрос - 7 61 retlw b'00000000' ; 8 62 retlw b'00000000' retlw b'00000000' goto BB ; Б-б 65 goto L ; Л-л 66 goto schb ; Ш-ш 67 goto scheb ; Щ-щ 68 retlw b'00000000' ; 0 69 retlw b'00000000' ; 9 70 retlw b'00000000' retlw b'00000000' goto Iyb ; Ю-ю 73 goto zap2 ; запятая- точка 74 goto D ; Д-д 75 goto Zg ; Ж-ж 76 goto ZB ; З-з 77 буква retlw b'00000000' ; тирэ - 78 retlw b'00000000' retlw b'00000000' retlw b'00000000' goto Ieb ; Э-э 82 retlw b'00000000' goto Hb ; Х-х 84 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' goto tvzb2 ; ъ 91 A movf stb,W addwf PC,F ; А retlw b'00000000' retlw b'11111100' retlw b'00010010' retlw b'00010001' retlw b'00010001' retlw b'00010001' retlw b'00010010' retlw b'11111100' BB movf stb,W addwf PC,F ; Б retlw b'00000000' retlw b'11111111' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01110011' V movf stb,W addwf PC,F ; В retlw b'00000000' retlw b'11111111' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01110110' G movf stb,W addwf PC,F ; Г retlw b'00000000' retlw b'11111111' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'00000011' D movf stb,W addwf PC,F ; Д retlw b'00000000' retlw b'11000000' retlw b'01111100' retlw b'01000011' retlw b'01000001' retlw b'01000001' retlw b'01111111' retlw b'11000000' E movf stb,W addwf PC,F ; Е retlw b'00000000' retlw b'11111111' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'11000011' EI movf stb,W addwf PC,F ;Ё retlw b'00000000' retlw b'11111100' retlw b'10010100' retlw b'10010101' retlw b'10010100' retlw b'10010101' retlw b'10010100' retlw b'10000100' Zg movf stb,W addwf PC,F ;Ж retlw b'00000000' retlw b'11100011' retlw b'00010100' retlw b'00001000' retlw b'11111111' retlw b'00001000' retlw b'00010100' retlw b'11100011' ZB movf stb,W addwf PC,F ;З retlw b'00000000' retlw b'01000010' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001010' retlw b'01110100' I movf stb,W addwf PC,F ;И retlw b'00000000' retlw b'11111111' retlw b'01000000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'00000100' retlw b'11111111' II movf stb,W addwf PC,F ;Й retlw b'00000000' retlw b'11111110' retlw b'01000000' retlw b'00100001' retlw b'00010010' retlw b'00001001' retlw b'00000100' retlw b'11111110' K movf stb,W addwf PC,F ;К retlw b'00000000' retlw b'11111111' retlw b'00001000' retlw b'00001000' retlw b'00010100' retlw b'00100010' retlw b'11000001' retlw b'00000000' L movf stb,W addwf PC,F ;Л retlw b'00000000' retlw b'01000000' retlw b'10000001' retlw b'01111111' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'11111111' M movf stb,W addwf PC,F ;М retlw b'00000000' retlw b'11111111' retlw b'00000010' retlw b'00000100' retlw b'00001000' retlw b'00000100' retlw b'00000010' retlw b'11111111' N movf stb,W addwf PC,F ;Н retlw b'00000000' retlw b'11111111' retlw b'00001000' retlw b'00001000' retlw b'00001000' retlw b'00001000' retlw b'00001000' retlw b'11111111' nop nop nop nop nop nop nop nop nop Ob incf Pclath,F call Obs decf Pclath,F return Obs movf stb,W addwf PC,F ;О retlw b'00000000' retlw b'01111110' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'01111110' Pb incf Pclath,F call Pbs decf Pclath,F return Pbs movf stb,W addwf PC,F ;П retlw b'00000000' retlw b'11111111' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'00000001' retlw b'11111111' Rb incf Pclath,F call Rbs decf Pclath,F return Rbs movf stb,W addwf PC,F ;Р retlw b'00000000' retlw b'11111111' retlw b'00010001' retlw b'00010001' retlw b'00010001' retlw b'00010001' retlw b'00010001' retlw b'00001110' Sb incf Pclath,F call Sbs decf Pclath,F return Sbs movf stb,W addwf PC,F ;С retlw b'00000000' retlw b'00111100' retlw b'01000010' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'01000010' nop nop Tb incf Pclath,F call Tbs decf Pclath,F return Tbs movf stb,W addwf PC,F ;Т retlw b'00000000' retlw b'00000011' retlw b'00000001' retlw b'00000001' retlw b'11111111' retlw b'00000001' retlw b'00000001' retlw b'00000011' Yb incf Pclath,F call Ybs decf Pclath,F return Ybs movf stb,W addwf PC,F ;У retlw b'00000000' retlw b'01000011' retlw b'10000100' retlw b'01001000' retlw b'00110000' retlw b'00010000' retlw b'00001000' retlw b'00000111' Fb incf Pclath,F call Fbs decf Pclath,F return Fbs movf stb,W addwf PC,F ;Ф retlw b'00000000' retlw b'00011100' retlw b'00100010' retlw b'00100010' retlw b'11111111' retlw b'00100010' retlw b'00100010' retlw b'00011100' Hb incf Pclath,F call Hbs decf Pclath,F return Hbs movf stb,W addwf PC,F ;Х retlw b'00000000' retlw b'10000011' retlw b'01000100' retlw b'00101000' retlw b'00011000' retlw b'00101000' retlw b'01000100' retlw b'10000011' Ceb incf Pclath,F call Cebs decf Pclath,F return Cebs movf stb,W addwf PC,F ;Ц retlw b'00000000' retlw b'01111111' retlw b'01000000' retlw b'01000000' retlw b'01000000' retlw b'01000000' retlw b'01111111' retlw b'11000000' chb incf Pclath,F call chbs decf Pclath,F return chbs movf stb,W addwf PC,F ;Ч retlw b'00000000' retlw b'00001111' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'00010000' retlw b'11111111' schb incf Pclath,F call schbs decf Pclath,F return schbs movf stb,W addwf PC,F ;Ш retlw b'00000000' retlw b'11111111' retlw b'10000000' retlw b'10000000' retlw b'11111111' retlw b'10000000' retlw b'10000000' retlw b'11111111' scheb incf Pclath,F call schebs decf Pclath,F return schebs movf stb,W addwf PC,F ;Щ retlw b'00000000' retlw b'01111111' retlw b'01000000' retlw b'01000000' retlw b'01111111' retlw b'01000000' retlw b'01000000' retlw b'11111111' igb incf Pclath,F call igbs decf Pclath,F return igbs movf stb,W ; Буква Ы. addwf PC,F retlw b'00000000' retlw b'11111111' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'01110000' retlw b'00000000' retlw b'11111111' Ieb incf Pclath,F call Iebs decf Pclath,F return Iebs movf stb,W ; Буква Э. addwf PC,F retlw b'00000000' retlw b'01000010' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'10001001' retlw b'01001010' retlw b'00111100' Iyb incf Pclath,F call Iybs decf Pclath,F return Iybs movf stb,W ; Буква Ю addwf PC,F retlw b'00000000' retlw b'11111111' retlw b'00001000' retlw b'01111110' retlw b'10000001' retlw b'10000001' retlw b'10000001' retlw b'01111110' Jb incf Pclath,F call Jbs decf Pclath,F return Jbs movf stb,W ; Я addwf PC,F retlw b'00000000' retlw b'10001110' retlw b'01010001' retlw b'00110001' retlw b'00010001' retlw b'00010001' retlw b'00010001' retlw b'11111111' dvtoch incf Pclath,F call dvtochs decf Pclath,F return dvtochs movf stb,W addwf PC,F ; двоеточие retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11000011' retlw b'11000011' retlw b'00000000' retlw b'00000000' retlw b'00000000' vopros incf Pclath,F call vopross decf Pclath,F return vopross movf stb,W addwf PC,F ; Вопрос retlw b'00000000' retlw b'00000000' retlw b'00000110' retlw b'00000001' retlw b'11010001' retlw b'00010001' retlw b'00001110' retlw b'00000000' nop voscl incf Pclath,F call voscls decf Pclath,F decf Pclath,F return voscls movf stb,W addwf PC,F ; Восклицательный retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11011111' retlw b'11011111' retlw b'00000000' retlw b'00000000' zap call zaps decf Pclath,F decf Pclath,F return zaps movf stb,W addwf PC,F ;Запятая retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'10110000' retlw b'01110000' retlw b'00000000' retlw b'00000000' mjgzb call mjgzbs decf Pclath,F decf Pclath,F return mjgzbs movf stb,W ; Мягкий знак большой addwf PC,F retlw b'00000000' retlw b'11111111' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'01110000' tvzb call tvzbs decf Pclath,F decf Pclath,F return tvzbs movf stb,W ; Твердый знак большой addwf PC,F retlw b'00000000' retlw b'00000001' retlw b'11111111' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'10001000' retlw b'01110000' email call emails decf Pclath,F decf Pclath,F return emails movf stb,W ; @ Емайл addwf PC,F retlw b'01111110' retlw b'10000001' retlw b'10111101' retlw b'10100101' retlw b'10100101' retlw b'10111110' retlw b'10000000' retlw b'01100000' resch call reschs decf Pclath,F decf Pclath,F return reschs movf stb,W ; Решотка addwf PC,F retlw b'00100100' retlw b'00100100' retlw b'11111111' retlw b'00100100' retlw b'00100100' retlw b'11111111' retlw b'00100100' retlw b'00100100' dol call dols decf Pclath,F decf Pclath,F return dols movf stb,W addwf PC,F ;Долор retlw b'00000000' retlw b'10001110' retlw b'10010001' retlw b'11111111' retlw b'10010001' retlw b'11111111' retlw b'10010001' retlw b'01100001' proc call procs decf Pclath,F decf Pclath,F return procs movf stb,W addwf PC,F ;процент retlw b'00000000' retlw b'10000011' retlw b'01000011' retlw b'00100000' retlw b'00011000' retlw b'00000100' retlw b'11000010' retlw b'11000001' ;*********************************************************************************************** end ; Конец программы.