12. Борьба с шумом на производстве: Справочник / Е.Я. Юдин, Л.А. Борисов;
Под общ. ред. Е.Я. Юдина – М.: Машиностроение, 1985. – 400с., ил.
13. Зинченко В.П. Основы эргономики. – М.: МГУ, 1979. – 179с.
14.Методичні вказівки до виконання дипломної роботи для учнів спеціальності «Оператор комп’ютерного набору; оператор комп’ютерної верстки»/ Упоряд.: Д.О. Дяченко, К.О. Ізмалкова, О.Г. Меркулова. – Сєверодонецьк: СВПУ, 2007. – 40 с.
15. Н. Заец. Многофункциональные часы. — Схемотехника, 2006, № 2,с. 41,42.
16. Н. Заец. Термометр - часы с датчиками фирмы Dallas Semiconductor. — Схемотехника, 2005, № 5, с. 52 - 55.
17. Н. Заец. Радиолюбительские конструкции на Р1С-микроконтроллерах. Книга 3. — М.: СОЛОН-Пресс, 2005, с. 248.
18. Н. Заец. Отечественные жидкокристаллические индикаторы TIC9162 с драйверами по технологии COG. - Схемотехника, 2005, №9, с. 9-11.
19. Н. Заец. Таймеры десятичного счета. — Электрик, 2006, № 7-8, с. 36 -39.
20. Мощные полевые переключательные транзисторы фирмы International Rectifier. — Радио, 2001, № 5, с. 45.
21. А. Долгий. Разработка и отладка устройств на микроконтроллерах. — Радио, 2001 ,№ 5-12, 2002, № 1.
22. А. Долгий. Программаторы и программирование микроконтроллеров. — Радио, 2004, № 1-12.
23. Н. Заец. Универсальный таймер. — Схемотехника, 2003, № 1, с. 53.
24. Н. Заец. Электронные самоделки для быта, отдыха и здоровья.— М.: СОЛОН-Пресс, 2009, 423 с.
Приложение А
Файл reader.asm
;Описание и распиновка.
;Порт B это данные индикатора и памяти.
;D0 -RxD, D1 - TxD, D6 - RS, D5 - R/W, D4 - E, D2 - adr. latch,
;D3 - общий #OE,D7 - общий #WE
;Порт С - адресный порт
;Порт А: А0-А2 - старшие линии адреса, А3 - #СЕ1, А4 - #СЕ2
;А5 - красная кнопка, А6 - зелёная кнопка "вниз", А7 - зелёная кнопка "вверх"
;-----------------------------------------------------------------------
.include "d:\Program Files\Atmel\AVR Studio\Appnotes\8515def.inc"
.include "d:\seagull\Depot\AVR\reader\rus.inc"
;-----------------------------------------------------------------------
.def rsym=r0
.def storel=r1
.def storeh=r2
.def book=r3
.def storead0=r4
.def storead1=r5
.def all_book=r6
.def rus=r14
.def store=r15
.def work=r16
.def data=r17
.def char=r18
.def pauseh=r19
.def pausel=r20
.def count=r21
.def address0=r22
.def address1=r23
.def address2=r24
.def flag=r25
.def key=r26
.def loz=r30
.def hiz=r31
;-----------------------------------------------------------------------
;flag: бит0 = 1-переполнение адреса; бит1 =1-команда ко 2-й памяти; бит2 =1 -питание только подано
;бит3 = 1-нужен pop
;-----------------------------------------------------------------------
.set E=4
.set RW=5
.set RS=6
.set C = 2
.set WE=7
.set OE=3
.set CE1=3
.set CE2=4
.equ TSYM=80;Всего символов на экране
;-----------------------------------------------------------------------
.org 0x000
;.org 0x007
;rjmp RXcomplete
.org 0x010
main:
bclr 7;неразрешение прерываний
ldi work, 0x5f;загрузка адреса стека
out spl,work
ldi work, 0x02;загрузка старшего адреса стека
out sph,work
ldi work,0b11111110
out ddrd, work
ldi work,0b10001011
out portd, work
ser work
out ddrb, work;выходы индикатора
ldi work, 0b00011000;8-битный режим, приём/передача, RX-~прерывание
out ucr, work
ldi work, 4
out ubrr, work;115200 при кварце 9,216 МГц
ser work
out ddrc, work;выходы порта С
ldi work, 0b00011111
out ddra, work;выходы порта A
clr work
out portc,work
ldi work, 0b11111000
out porta,work
clr address0
clr address1
clr address2
ser count
ldi flag,0b00000100
clr book
;-----------------------------------------------------------------------
;модуль инициализации индикатора
;rjmp tst_loop
rcall precharge
ldi char, 0b00111000;8-разр. шина,2 строки,5х8
rcall write_cmd
ldi char, 0b00001100;вкл. изобр., курсор-подчерк. выкл, курсор-блок выкл
rcall write_cmd
ldi char, 0b00000110;сдвиг курсора вправо.
rcall write_cmd
ldi char, 0b00000001
rcall write_cmd
in char,udr
in char,udr
in char,udr
;-----------------------------------------------------------------------
;Тестовый участок
tst_loop:
;ldi char,0x55
;out eedr,work
;clr work
;out eearl,work
;rcall write_flash
;rcall module_write
;rcall inc_addr
;rcall wait_busy
;rjmp read_begin
;rjmp tst_loop
;rjmp command
;----------------------------------------------------------------------
ldi hiz,(high(hello*2))
ldi loz,(low(hello*2))
rcall message
rcall push_button
main_menu:
rcall menu;Ответ: 0-начать читать, 1- закладку, 2- связь с компом, 3- кто сделал
cpi count,0
breq read_begin
cpi count,1
breq pre_goto_bookmark
cpi count,2
breq pre_comp_mes
ldi hiz,(high(about_develop*2))
ldi loz,(low(about_develop*2))
rcall message
rcall push_button
rjmp main_menu
pre_goto_bookmark:
rjmp goto_bookmark
read_begin:
cbr flag,0x04
rcall choose_text
rcall get_address_text_begin
continue_read:
rcall blank_screen
rcall show_to_screen
menu_2:
rcall menu
rcall sub_string
cpi count,0
breq continue_read
cpi count,1
breq pre_goto_bookmark
cpi count,2
breq set_bookmark
listing_subreturn:
rcall listing
push_list_page:
push count
list_page:
rcall blank_screen
ser count
read_page:
rcall read_flash
mov rus,data
mov char,data
rcall write_char
rcall inc_addr
cpi count,TSYM-1
brne read_page
pop count
rcall push_button
cpi key,3
breq sub_page
cpi key,2
breq add_page
rjmp menu_2
add_page:
push count
lsl count
lsl count
add address1,count
brcc no_add_adr2
inc address2
cpi address2,0x10
brlo no_add_adr2
ser address0
ser address1
ldi address2,0x0f
no_add_adr2:
pop count
rjmp push_list_page
pre_comp_mes:
rjmp comp_mes
sub_page:
push count
lsl count
lsl count
sub address1,count
brsh no_sub_adr2
dec address2
brpl no_sub_adr2
clr address2
clr address1
clr address0
no_sub_adr2:
pop count
rjmp push_list_page
read_current:
rcall show_to_screen
rjmp read_current
set_bookmark:
push work
write_current:
clr work
out eearh,work
rcall wait_write_internal_eeprom
mov work,book
lsl work
lsl work
inc work
out eearl,work
out eedr,address2
rcall write_internal_eeprom
rcall wait_write_internal_eeprom
inc work
out eearl,work
out eedr,address1
rcall write_internal_eeprom
rcall wait_write_internal_eeprom
inc work
out eearl,work
out eedr,address0
rcall write_internal_eeprom
pop work
rjmp continue_read
goto_bookmark:
sbrc flag,2
rcall choose_text
push work
clr work
out eearh,work
mov work,book
lsl work
lsl work
inc work
out eearl,work
rcall read_internal_eeprom
push work
in work,eedr
cpi work,0xff
brne no_return_from_gtb
ldi hiz,(high(no_bookmark*2))
ldi loz,(low(no_bookmark*2))
rcall message
rcall push_button
pop work
pop work
sbrc flag,0x02
rjmp main_menu
rjmp continue_read
no_return_from_gtb:
mov address2,work
pop work
inc work
out eearl,work
rcall read_internal_eeprom
in address1,eedr
inc work
out eearl,work
rcall read_internal_eeprom
in address0,eedr
pop work
cbr flag,0x04
rjmp continue_read
;-----------------------------------------------------------------------
read_internal_eeprom:
sbic eecr,eewe;Жду, пока не закончится цикл записи
rjmp read_internal_eeprom
sbi eecr,eere
ret
wait_write_internal_eeprom:
sbic eecr,eewe
rjmp wait_write_internal_eeprom
ret
write_internal_eeprom:
sbi eecr,eemwe
sbi eecr,eewe
ret
;-----------------------------------------------------------------------
comp_mes:
ldi hiz,(high(i_love_my_computer*2))
ldi loz,(low(i_love_my_computer*2))
rcall message
loop:
sbis usr,rxc
rjmp loop
rcall blank_screen
rcall RXcomplete
cpi data,0xe5
breq loop_ex
cpi data,0x5e
breq command
rjmp loop
;-----------------------------------------------------------------------
loop_ex:
sbis usr,rxc
rjmp loop_ex
rcall RXcomplete
rcall write_char
rcall confirm
rjmp loop_ex;зацикливание
;-----------------------------------------------------------------------
write_char:
push work
inc count
cpi count,TSYM/2
breq next_row
cpi count,TSYM
breq new_screen
send:
sbrc char,7
rcall decode
rcall write_data
pop work
ret
next_row:
mov store,char
ldi char, 0b11000000
rcall write_cmd
mov char,store
rjmp send
new_screen:
clr count
mov store,char
ldi char, 0b00000001
rcall write_cmd
mov char,store
rjmp send
recognize:
;inc count
;cpi char,0xa
;brge nodig
;ldi work,0x30
;add char,work
;rcall write_char
;ret
nodig:
;ldi work,0x37
;add char,work
;rcall write_char
;ret
;-----------------------------------------------------------------------
command:
sbis usr,rxc
rjmp command
rcall RXcomplete
cpi data,0x10
breq _module_erase1
cpi data,0x20
breq _module_erase2
cpi data,0x30
breq _module_write
cpi data,0x40
breq _module_read
cpi data,0x50
breq _module_address_set
rjmp command
_module_erase1:
cbr flag,0x02
rcall module_erase
rjmp command
_module_erase2:
sbr flag,0x02
rcall module_erase
rjmp command
_module_write:
rcall module_write
rjmp command
_module_read:
rcall blank_screen
rcall module_read
rjmp command
_module_address_set:
rcall module_address_set
rjmp command
;-----------------------------------------------------------------------
;индикаторные модули чтения/записи
write_cmd:
push work
rcall wait_busy
cbi portd,RS
cbi portd,RW
out portb,char
rcall latch
pop work
ret
write_data:
push work
rcall wait_busy
sbi portd,RS
cbi portd,RW
out portb,char
rcall latch
pop work
ret
wait_busy:
push char
clr work
out ddrb, work;входы
ser work;Включил подтяжку к единице
out portb,work
cbi portd,RS
sbi portd,RW
busy:
nop
sbi portd,E
rcall nop_wait
in char,pinb
cbi portd,E
sbrc char,7
rjmp busy
ser work
out ddrb, work;выходы
cbi portd,RS
pop char
ret
latch:
rcall nop_wait
sbi portd,E
rcall nop_wait
cbi portd,E
ret
nop_wait:
ldi work, 0x1f
_wait:
dec work
brne _wait
ret
precharge:;Подпрограмма начальной предустановки
ser work
out ddrb, work;выходы
cbi portd,RS
cbi portd,RW
rcall pause
rcall pause
rcall pause
rcall pause
rcall pause
rcall ldi30
rcall pause
rcall pause
rcall ldi30
rcall pause
rcall pause
rcall ldi30
rcall pause
ldi30:
ldi work,0x30
out portb,work
rcall latch
ret
;-----------------------------------------------------------------------
pause:
clr pauseh
clr pausel
_pauseh:
rcall pause_1
dec pauseh
brne _pauseh
ret
pause_1:
dec pausel
brne pause_1
ret
;-----------------------------------------------------------------------
RXcomplete:
in char,udr
mov rus,char
mov data,char
ret
;-----------------------------------------------------------------------
decode:
cpi char,0xa8
breq yob
cpi char,0xb8
breq yol
cbr char,0xc0;два старших бита не нужны
ldi hiz,(high(rus_letters*2))
ldi loz,(low(rus_letters*2))
add loz,char
brcc read_code
inc hiz
read_code:
lpm
mov char,rsym
ret
yob:
ldi char,0xa2
ret
yol:
ldi char,0xb5
ret
.cseg
rus_letters:
;Большие буквы
.db 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,0xa5,0xa6,0x4b,0xa7,0x4d,0x48
.db 0x4f,0xa8,0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae
.db 0x62,0xaf,0xb0,0xb1
;Маленькие буквы
.db 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd
.db 0x6f,0xbe,0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3
.db 0xc4,0xc5,0xc6,0xc7
;-----------------------------------------------------------------------
confirm:
;sbi usr,txc
wait_txc:
sbis usr,udre
rjmp wait_txc
out udr,rus
ret
;-----------------------------------------------------------------------
adr_latch:
sbis portd,WE;либо запись
out portb,data
out portc,address0
sbi portd,C
nop
cbi portd,C
out portc,address1
push work
in work,porta;считали с защёлок порта А
cbr work,0x07
or work,address2
sbrc address2,3
rjmp ce2_set
sbr work,0x10;CE2
cbr work,0x08;CE1
rjmp ce1_set
ce2_set:
sbr work,0x08
cbr work,0x10
ce1_set:
out porta,work
pop work
nop
sbic portd,WE
in data,pinb;либо чтение
sbi porta,CE1;операция завершена
sbi porta,CE2
ret
;-----------------------------------------------------------------------
inc_addr:
clz
inc address0
brne ret_inc
inc address1
brne ret_inc
inc address2
cpi address2,0x10
brlo ret_inc
sbr flag,0x01
ret_inc:
ret
;-----------------------------------------------------------------------
erase_flash:
cbi portd,WE
sbi portd,OE
push work