Автор: Пользователь скрыл имя, 24 Марта 2012 в 17:15, реферат
Цель: спроектировать кодовый замок на основе микроконтроллера с архитектурой MCS-51, разработать функциональную схему устройства, написать программу для микроконтроллера.
Результат проектирования: был спроектирован кодовый замок, обладающий возможностью звуковой сигнализации о попытке подбора кода.
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 ;проверяем,
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;
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