;: Программа отображающая v1.04 ;: ;: Предназначена для замены ЖК модулей со ;: встроенным контроллером типа HT1611, HT1613 ;: и им подобных. ;: ;: Можно применить как к готовому устройству ;: чтобы была возможность наблюдать показания ;: прибора в темноте, или к разрабатываемому ;: устройству. ;: ;: Применен алгоритм коррекции данных при ;: возникновении помех по входу clk. ;: Загрузка данных на индикацию производится в ;: промежутки между поступлениями кодов на ;: вход, что позволило устранить подсветку ;: при загрузке новых данных. Но это наложило ;: небольшие дополнительные временные ограни- ;: чения: 1. простой между регенерациями >50мс ;: 2. паузы между символами < 2мс ;: (даны не точные значения, они зависят от ;: кварца) ;: ;: кварц =4 МГц ;: PA0 -clk (через инвертор на транзисторе) ;: PA1 -dta (через инвертор на транзисторе) ;: PA2 не поюзан ;: PA3 не поюзан ;: PA4 не поюзан ;: PB0 clk (выход на 555ИР8 -образ символа) ;: PB1 dta (выход на 555ИР8 -образ символа) ;: PB0 d1 (выход1 на 555ИД10-номер разряда) ;: PB1 d2 (выход2 на 555ИД10-номер разряда) ;: PB2 d4 (выход4 на 555ИД10-номер разряда) ;: PB3 d8 (выход8 на 555ИД10-номер разряда) ;: PB4 не поюзан ;: PB5 не поюзан ;: PB6 не поюзан ;: PB7 не поюзан ;: ;: Автор: Измайлов Александр sanchos_iz@mail.ru ;: ;############################################################################# ;# область векторов прерываний процессора # ;############################################################################# jmp start ;<0> Начальный пуск программы jmp count_wdt ;<1> Сторожевой таймер rst ;<2> выход за границу стека jmp count ;<3> Таймер A nop ;<8> не используется nop ;<5> не используется nop ;<6> Порт A nop ;<7> Порт B (прерывания не используются) nop ;<8> nop ;<9> nop ;<10> nop ;<11> nop ;<12> nop ;<13> nop ;<14> rst ;<15>Завершение записи в флэш ;############################################################################# ;# Таблица кодов знакогенератора # ;############################################################################# code: .byte 000h ; 0 space .byte 006h ; 1 1 .byte 05bh ; 2 2 .byte 04Fh ; 3 3 .byte 066h ; 4 4 .byte 06Dh ; 5 5 .byte 07Dh ; 6 6 .byte 007h ; 7 7 .byte 07Fh ; 8 8 .byte 06Fh ; 9 9 .byte 03fh ; 10 0 .byte 00011000b ; 11 right .byte 00001100b ; 12 left .byte 01110001b ; 13 F .byte 01110011b ; 14 P .byte 01000000b ; 15 - .even ; ; ;############################################################################# ;# Точка старта # ;############################################################################# start: ; jsr init ;инициализация портов и таймера jsr delay ; jsr delay ; ldr #c,40h ; ldr #a,50h ;загрузка movl c3,0 ;высокий уровень loop: ; stie ; nop ;ожидание прерывания nop ; nop ; nop ; nop ; clie ; ldr #c,40h ; ldr #a,50h ; bttl d1,0010b ; jeq $100 ;если высокий cmpl c3,128 ; jnz loop ; jsr zagruz ; movl c3,0 ; jmp loop ; $100: movl c3,128 ; jmp loop ; ; ;############################################################################# ;# Подпрограмма загрузки кода символа # ;############################################################################# zagruz: ; ldr #a,50h ; ldr #c,40h ; dec c0 ; bttl d1,0001b ; jne $10 ; stc ; $10: rlc c1 ; cmpl c0,0 ; jz $2 ;если 0 jmp $3 ; $2: ; bich c1,1111b ; mdal c5,code ;грузим указатель mdah c4,code ; add c5,c1 ;+ (смещение) mtpr #6,c5 ;непосредственная адресация к памяти mtpr #7,c4 ; mov c1,d7 ; ; ldr #c,58h ; clr c2 ;счет mov c1,c0 ; mov c0,a7 ; ldr #c,40h ;загрузка в буфер mov a7,a6 ; mov a6,a5 ;и сдвиг влево mov a5,a4 ; mov a4,a3 ; mov a3,a2 ; mov a2,a1 ; mov a1,a0 ; mov a0,c1 ; movl c0,4 ; clr c1 ; $3: rts ; ; ;############################################################################# ;# Загрузка из буфера в сегмент индикации # ;############################################################################# zagruz1: ; ldr #a,50h ; ldr #c,60h ; mov c0,a0 ; mov c1,a1 ; mov c2,a2 ; mov c3,a3 ; mov c4,a4 ; mov c5,a5 ; mov c6,a6 ; mov c7,a7 ; ldr #a,58h ; ldr #c,68h ; mov c0,a0 ; mov c1,a1 ; ldr #c,40h ; rts ; ; ;############################################################################# ;# Таймер # ;############################################################################# count: ; bich d4,1110b ;обнуляeм для следующего счета rti ;выходим ; ;############################################################################# ;# По срабатыванию WDT сканируем индикатор # ;############################################################################# count_wdt: ; clie ; ldr #d,18h ; movl d5,0aah ;wdt movl d5,01010110b ;1/x ldr #d,00h ; push #a ; ldr #a,58h ; ldr #c,40h ; inc a2 ; cmpl a2,127 ; jnz $100 ; clr a2 ; movl c0,4 ; clr c1 ; jsr zagruz1 ; $100: ; jsr led_scan_s ; pop #a ; ldr #c,40h ; stie ; rti ; ; ;############################################################################# ;# Задержка # ;############################################################################# delay: ; push #c ; ldr #c,68h ; movl c5,255 ; $1: nop ; dec c5 ;уменьшение -1 jnz $1 ;переход 1 pop #c ; rts ; ;############################################################################# ;# Инилка # ;############################################################################# init: ldr #b,18h ;сегмент регистров конфигурации портов ldr #d,0 ;сегмент порты ;формирование конфигурации порта A movl b1,00011011b ;заполнение регистра управления порта для ;формирования конфигурации порта в ;автоинкрементном режиме movl b1,00000000b ;3-сканирующие на вход/выход movl b1,00000000b ;4-активный выход movl b1,00011111b ;5-резисторы отключены movl b1,00000000b ;6-прерывания / movl b1,00000000b ;7-прерывания запрещены ;формирование конфигурации порта B movl b2,00011011b ;заполнение регистра управления порта для ;формирования конфигурации порта в ;автоинкрементном режиме movl b2,00001111b ;3-все вход/выход movl b2,00001111b ;4-активный выход movl b2,11110000b ;5-резисторы отключены movl b2,00000000b ;6-прерывания запрещены movl b2,00000000b ;7-прерывания запрещены ; movl b5,0aah ;wdt movl b5,01010110b ;1/x rts ;возврат ; ;############################################################################# ;# Led scan for 1533IR8 # ;############################################################################# led_scan_s: ; ldr #a,068h ;грузим ldr #5,0c0h ;указатели ; bicl d2,0001b ; bisl d2,1110b ; ; inc a7 ;переключаем сканирующую cmpl a7,10 ;10 разрядов jne $10 ; clr a7 ; $10: movl a6,060h ;вычисляем где add a6,a7 ;лежат данные mtpr #4,a6 ; mov a3,d6 ; ; movl a4,8 ; $3: bicl d2,0001b ; nop ; shl a3 ; jc $1 ; bicl d2,0010b ; $1: jnc $2 ; bisl d2,0010b ; $2: nop ; bisl d2,0001b ; dec a4 ; jnz $3 ; ; mov d2,a7 ;загоняем номер разряда rts ;выход ; ;############################################################################# ;# # ;############################################################################# sanchos: ; 87654321b ; ldr #c,060h ;обращение к адресу movl c7,01000110b ;-| movl c6,00111001b ;С movl c5,01110111b ;А movl c4,01110110b ;Н movl c3,01100110b ;Ч movl c2,00111111b ;О movl c1,00111001b ;С movl c0,01110000b ;|- rts ;возврат .END ;