Смекни!
smekni.com

Особенности разработки микропроцессорной системы и устройства для чтения электронных книг (стр. 10 из 13)

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