Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [ 66 ] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

.EQU Note sol1 = Note 7

.EQU Note 8=114

.EOU Note la1 = Note 8

.EOU Note 9=101

.EOU Note ci1 = Note 9

.EQU NoTe 10=96

.EOU Note <)o2 = Note 10

.EQU Note 11=85

.EOU Note re2 = Note 11

.EOU Note 12=76

.EOU Note mi2 = Note 12

.EOU Note 13=72

.EOU Note fa2 = Note l3

.EQU Note 14=64

.EQU Note sol2 = Note 14

.EOU DURATION = 350

.EOU Time 1=1000/Note 1

EOU Time 2=1000/Note 2

.EOU Time 3=10O0/Note 3

.EQU Time 4=1000/Note 4

.EOU Time 5=1000/Note 5

.EOU Time 6=1000/Note 6

.EOU Time 7=1000/Note 7

.DEF KeyPass=rO

.DEF tmp=rO

.DEF KeyPass1=r1

DEF KeyPass2=r2

.DEF KeyPass3=r3

.DEF KeyPass4=r4

.DEF KeyPass5=r5

.DEF SSREG=r6

.DEF DelayVar=r7

DEF InTUseO=r8

.DEF LastKey=r9

.DEF ZerReg=rlO

.DEF Time0=r16

.DEF Time1=r17

.DEF Time2=r18

DEF EEadr=r20

Время, увеличивается 3815 раз в секунду Время, увеличивается раз в 67 секунд Время, увеличивается раз в 47721 час, насыщается за 50 суток Адрес для записи в EEPROH. равен 255, если в текущий момент запись не производится

DEF .OEF

.DEF .DBF .DEF .DEF .DEF .DEF

EventType=r21 BeepVar=r21

TimerEEByte=r22

TimerEEBit=r23

Key=r24

BeepDuration=r25

FreqConst=r26

IntUse1=r27



; .DEF PassLoopCounter=r28

.DEF Flags=r29

; bit О - Password accepted

.ORG ООО

clr ZerReg

rjmp RESET .ORG 002

Здесь оказываемся при возникновении прерывания от таймера 3 раза в секунду

Таймер используется как RTC и для вывода информации EEPROM Увеличение счетчика времени

SSREG.SREG TimeO,1 Timel, ZerReg Time2,ZerReg TimeOk

Timel ; Если прошло переполнение, Time2

счетчик времени остановлен

subi adc adc brcc com com TiraeOk:

; Чтение данных из EEPROM и выдача на внешний порт.

: Процедура обработки прерывания будет вызвана не раньше, чем через 300-3*4 мс ; после последнего обращения к EEPROH, поэтому проверка готовности EEPROM не ; производится, она должна быть уже готова.

and!

TlmerEEByte.$3F

EEAR,TimerEEByte

EECR,EERE

;set EEPROM Read strobe

EECR,EERE

;set EEPROM Read strobe 2nd time

IntUSBO.EEDR

:get data

andi

TimerEEBit,7

brne

BitLop

TimerEEByte

BitLop:

inc TimerEEBit

; = 1..8

IntUse1,TimerEEBit

IntUseO

BitShift:

; Выбираем посылаемый бит

IntUseO

; Используется как текущий считанный

IntUsel

; Используется как счетчик

brne

BitShift

IntUsel,PORTD

IntUseO,0

IntUsel,0

PORTD.IntUsel

SREG.SSREG

reti

Здесь оказываемся при включении питания схемы

RESET:



Настройка Idi out Idi out Idi out Idi out Idi mov Idi mov Idi mov Idi mov Idi mov Idi clr clr rcall sei

микросхемы и программы.

r31.$8F DDRB,г31 г31.$03 DDRD.г31 г31.$05 TCCRO.г31 г31.$02 TIMSK,г31 г31.2

KeyPassl. г31 г31.3

KeyPass2. г31 г31,2

KeyPass3, г31 Г31.3

KeyPass4, г31 г31.2

KeyPassS,г31

EventType.evReset

Timel

Time2

WrireEEPROH

Настраиваем направление работы портов

Настраиваем гаймер

Разрешаем прерывания при переполнении таймера Загружаем пароль по умолчанию

Сбрасываем счетчик времени

Разрешаем прерывания

MainLoop:

: Подготавливаемся

clr clr ori clr clr

гЗО.О г31,0 Flags.1 KeyPass LastKey

PassLoop:

rcall GetKey brtc

breq cpi breq Idi Idi rcall mov

PassLoop Key,LastKey PassLoop Key,KeyEnter MainLoop

FreqConst,FreqKeyPressed BeepDuration.S

к вводу пароля.

: При предъявлении пароля пока ошибок не было

Цикл ввода пароля

Записывает в переменную Key код нажатой клавиши и устанавливает бит Т, если клавиша нажата

Если предыдущая клавиша еще нв отпущена

Если нажат сброс, начинавм ввод строки с начала

Веер

LastKey.Key

inc Id

cpse andi

cpi brne

KeyPass.Z Key,KeyPass Flags."1

гЗО,Кеу1еп PassLoop

Выдача короткого звукового сигнала

Сравниваем введенную цифру и цифру пароля иэ ОЗУ, если ошибка, сбрасываем бит успешности пароля.

Длина секретного кода.



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [ 66 ] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.0009