Смекни!
smekni.com

Разработка электронного кодового замка (стр. 5 из 5)

Оптимизирующий кросс-компилятор C51

Язык C - универсальный язык программирования, который обеспечивает эффективность кода, элементы структурного программирования и имеет богатый набор операторов. Универсальность, отсутствие ограничений реализации делают язык C удобным и эффективным средством программирования для широкого разнообразия задач. Множество прикладных программ может быть написано легче и эффективнее на языке C, чем на других более специализированных языках.

C51 - полная реализация стандарта ANSI (Американского национального института стандартов), насколько это возможно для архитектуры Intel 8051. C51 генерирует код для всего семейства микроконтроллеров Intel 8051. Транслятор сочетает гибкость программирования на языке C с эффективностью кода и быстродействием ассемблера.

Использование языка высокого уровня C имеет следующие преимущества над программированием на ассемблере:

· не требуется глубокого знания системы команд процессора, элементарное знание архитектуры Intel 8051 желательно, но не необходимо;

· распределение регистров и способы адресации управляются полностью транслятором;

· обеспечивается лучшая читаемость программы, т.к. используются ключевые слова и функции, которые более свойственны человеческой мысли;

· сокращается время разработки и отладки программ в сравнении с программированием на ассемблере;

· наличие библиотечных файлов со стандартными подпрограммами, которые могут быть включены в прикладную программу;

· существующие программы могут многократно использоваться в новых программах, используя модульные методы программирования.

Макроассемблер A51

Ассемблер A51 совместим с ASM51 Intel для всего семейства микроконтроллеров Intel 8051. Ассемблер транслирует символическую мнемонику в перемещаемый объектный код, имеющий высокое быстродействие и малый размер. Макросредства ускоряют разработку и экономят время, поскольку общие последовательности могут быть разработаны только один раз. Ассемблер поддерживает символический доступ ко всем элементам микроконтроллера и перестраивает конфигурацию для каждой разновидности Intel 8051.

A51 транслирует исходный файл ассемблера в перемещаемый объектный модуль. При отладке или при включенной опции “Includedebugginginformation” этот объектный файл будет содержать полную символическую информацию для отладчика/имитатора или внутрисхемного эмулятора.

Компоновщик L51

Компоновщик объединяет один или несколько объектных модулей в одну исполняемую программу. Компоновщик размещает внешние и общие ссылки, назначает абсолютные адреса перемещаемым сегментам программ. Он может обрабатывать объектные модули, созданные транслятором C51, ассемблером A51, транслятором PL/M-51 Intel и ассемблером ASM51 Intel.

Компоновщик автоматически выбирает соответствующие библиотеки поддержки и связывает только требуемые модули из библиотек. Установки по умолчанию для L51 выбраны так, чтобы они подходили для большинства прикладных программ, но можно определить и заказные установки.

Отладчик/симулятор WinSim51

Отладчик/симулятор используется с транслятором C51, ассемблером A51, транслятором PL/M-51 Intel и ассемблером ASM51 Intel. Отладчик/симулятор позволяет моделировать большинство особенностей Intel 8051 без наличия аппаратных средств. Можно использовать его для проверки и отладки прикладной программы прежде, чем будут изготовлены аппаратные средства. При этом моделируется широкое разнообразие периферийных устройств, включая последовательный порт, внешний ввод - вывод и таймеры [6].

Внешний вид главного окна программы представлен на рисунке 5.1.

Рисунок 5.1 – Внешний вид главного окна ProView


Заключение

В данной работе была осуществлена разработка электронного кодового замка, предназначенного для установки на наружную дверь жилого дома.

В ходе выполнения работы был проведён анализ задачи, на основе которого были сформулированы требования к конечной системе. На основе требований была построена структурная схема. На основании структурной схемы были подобраны соответствующие устройства для реализации функций, возложенных на элементы системы. Исходя из экономических и эксплуатационных соображений, для данного устройства был выбран микроконтроллер AT89S51 фирмы Atmel. Особенностью данного замка является наличие звуковой сигнализации, оповещающей владельца о попытке подбора кода. Далее, с использованием выбранных устройств была построена функциональная схема. Разработка завершилась составлением блок-схемы алгоритма и написанием исходного кода программы для микроконтроллера.


Список использованных источников

1. Описания электронных компонентов в каталоге товаров оптовой базы комплектации электронных компонентов и приборов “ПЛАТАН”:

http://www.platan.ru/

2. Описание электромеханического замка ПОЛИС-13:

http://dialog-universal.ru/product_info.php?cPath=109&products_id=173

3. Описание клавиатуры AK-207 на сайте компании Accord: http://www.accordia.com.tw/html/general.htm

4. Описание микроконтроллера AT89S51 на сайте компании Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc2487.pdf

5. Описание микроконтроллера AT89S51: http://www.gaw.ru/html.cgi/txt/ic/Atmel/micros/mcs51/at89s51.htm

6. В.Б. Бродин. Микроконтроллеры: архитектура, программирование, интерфейс: – М.: ЭКОМ, 1999.

7. П. Хоровиц, У. Хилл. Искусство схемотехники М. Мир, 2003.


ПРИЛОЖЕНИЯ

Приложение А

Исходный код программы микроконтроллера

dseg

door_codeequr0 ;массив введённых значений

attemptsequ 38h ;переменная – число попыток ввода

cseg

org 00h

ajmp main

org 0bh

ajmp timer0

org 100h

main:

anlp2,#1h ;выключение светодиода и динамика

movie,#82h ;разрешаем прерывания от таймера

movtmod,#1h ;задаём режим таймера – 16 бит

movdoor_code,#30h ;задание адреса для вводимых цифр кода

movattempts,#3h ;количество попыток

sjmpent1 ;переход к началу главного цикла

enter_digit: ;обработка введённого значения

mov @door_code,a ;запоминаем цифру

incdoor_code ;переходим к след. адресу

mov a,door_code

call delay2

cjnea,#36h,ent1 ;проверяем,все ли цифры введены (из 6)

ajmpcompare ;переход к сравнению кодов

ent0: ;ввод 0

mov p0,#0f7h

jb p0.5,ent1

call delay2

mov a,#0h

wait0:

jnb p0.5,wait0

ajmp enter_digit

ent9: ;ввод 9

jb p0.6,ent0

call delay2

mov a,#9h

wait9:

jnb p0.6,wait9

ajmp enter_digit

ent1: ;ввод 1

movp0,#0feh ;устанавливаем 0 на выходе P0.0

jbp0.4,ent2 ;если не нажата кнопка, к след. кнопке

calldelay2 ;ждём, пока пройдёт дребезг контактов

mova,#1h ;запоминаем введённую цифру

wait1:

jnbp0.4,wait1 ; ждём, пока отпустят кнопку

ajmpenter_digit ;переход к обраб. введённого значения

ent2: ;ввод 2

jb p0.5,ent3

call delay2

mov a,#2h

wait2:

jnb p0.5,wait2

ajmp enter_digit

ent3: ;ввод 3

jb p0.6,ent4

call delay2

mov a,#3h

wait3:

jnb p0.6,wait3

ajmp enter_digit

ent4: ;ввод 4

mov p0,#0fdh

jb p0.4,ent5

call delay2

mov a,#4h

wait4:

jnb p0.4,wait4

ajmp enter_digit

ent5: ;ввод 5

jb p0.5,ent6

call delay2

mov a,#5h

wait5:

jnb p0.5,wait5

ajmp enter_digit

ent6: ;ввод 6

jb p0.6,ent7

call delay2

mov a,#6h

wait6:

jnb p0.6,wait6

ajmp enter_digit

ent7: ;ввод 7

mov p0,#0fbh

jb p0.4,ent8

call delay2

mov a,#7h

wait7:

jnb p0.4,wait7

ajmp enter_digit

ent8: ;ввод 8

jb p0.5,ent9

call delay2

mov a,#8h

wait8:

jnb p0.5,wait8

ajmp enter_digit

code_wrong: ;обработка неверного кода

movdoor_code,#30h ;возвращаемся к началу массива

djnzattempts,ent1 ;если есть ещё попытки, в гл. цикл

setbp2.1 ;включение звукового сигнала

calldelay ;задержка 1 с

clrp2.1 ;выключение звукового сигнала

movattempts,#4h ;восстан. число попыток

jmp code_wrong

compare: ;сравнениекодов

decdoor_code ;переходим к предыдущей цифре

cjne @door_code,#6h,code_wrong;проверяем 6-ю цифру и далее все

decdoor_code ;цифры по порядку

cjne @door_code,#5h,code_wrong

dec door_code

cjne @door_code,#4h,code_wrong

dec door_code

cjne @door_code,#3h,code_wrong

dec door_code

cjne @door_code,#2h,code_wrong

dec door_code

cjne @door_code,#1h,code_wrong

clrp2.0 ;открыть замок

setbp2.2 ;включить светодиод

movattempts,#3h ;восстан. кол-во попыток

wait_open:

jnbp0.7,wait_open ;ждём, пока откроется дверь

call delay2

wait_close:

jb p0.7,wait_close ;ждём, показакроетсядверь

setbp2.0 ;закрыть замок

clrp2.2 ;выключить светодиод

ajmpent1 ;переход в гл. цикл

timer0: ;обработка прерывания от T0

clrtcon.4

clr tcon.5

reti

delay: ;задержка 1 с

movr1,#1fh

loop1:

mov th0,#0h

mov tl0,#0h

setb tcon.4

loop2:

jb tcon.4,loop2

djnz r1,loop1

ret

delay2: задержка 5 мс

mov r3,#13h

loop4:

mov r2,#0ffh

loop3:

djnz r2,loop3

djnz r3,loop4

ret

end