Разработка кодового замка на MCS-51

Автор: Пользователь скрыл имя, 24 Марта 2012 в 17:15, реферат

Описание работы

Цель: спроектировать кодовый замок на основе микроконтроллера с архитектурой MCS-51, разработать функциональную схему устройства, написать программу для микроконтроллера.
Результат проектирования: был спроектирован кодовый замок, обладающий возможностью звуковой сигнализации о попытке подбора кода.

Работа содержит 1 файл

Разработка кодового замка.docx

— 1.15 Мб (Скачать)

 

org 0bh

ajmp timer0

 

org 100h

 

main:

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

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

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

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

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

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

 

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

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

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

mov a,door_code 

call delay2

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

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

 

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

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

 

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

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

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

wait1:     

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

ajmp enter_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:   ;обработка неверного кода

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

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

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

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

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

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

jmp code_wrong 

 

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

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

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

dec door_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

 

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

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

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

wait_open:

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

call delay2 

wait_close:

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

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

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

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

 

 

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

clr tcon.4

clr tcon.5

reti

 

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

mov r1,#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




Информация о работе Разработка кодового замка на MCS-51