Кодовый замок

Разработка электронного кодового замка с использованием микроконтроллера PIC16F676. Назначение отдельных функциональных блоков. Возможные варианты структурных схем. Обоснование выбора структурной схемы устройства. Алгоритм работы структурной схемы.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 18.06.2012
Размер файла 334,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

Нижегородский государственный технический университет

им. Р. Е. Алексеева

Институт радиоэлектроники и информационных технологий (ИРИТ)

Кафедра «Вычислительные системы и технологии»

Курсовая работа

по дисциплине: «Микропроцессорные системы»

по теме: «Кодовый замок»

Выполнил: студент

группы 09-В-2

Кузнецова Т.Н.

Проверил: Киселёв Ю.Н.

  • Нижний Новгород 2012г.

Содержание

1. Введение

2. Выбор и обоснование технических решений

2.1 Детализация исходного ТЗ и постановка задачи

2.2 Источники информации (входных сигналов)

2.3 Приемник информации (выходных сигналов)

2.4 Возможные пути решения поставленной задачи

2.5 Возможные варианты структурных схем

2.6 Обоснование выбора структурной схемы

2.7 Обоснование выбора микроконтроллера для решения поставленной задачи

3. Структурная схема устройства и её описание

3.1 Структурная схема

3.2 Назначение отдельных функциональных блоков

3.3 Алгоритм работы структурной схемы

4. Разработка функциональной и принципиальной схемы

4.1 Описание принципиальной схемы устройства

4.2 Описание функциональной схемы устройств

5. Разработка рабочей программы

5.1 Текст программы

5.2 Моделирование

6. Заключение

7. Список литературы

1. Введение

Кодовые замки являются эффективным средством предотвращения доступа посторонних лиц к охраняемым помещениям. К их достоинствам можно отнести простоту в обращении, надёжность, возможность обеспечить высокую степень защиты, относительную лёгкость смены кода (по сравнению со сменой обычного механического замка). Также немаловажными являются отсутствие необходимости изготовления ключей при предоставлении доступа большому количеству людей и невозможность физической потери ключа. Недостатком таких систем можно назвать возможность для злоумышленника подсмотреть код или подобрать его. Однако, при большой разрядности кода или наличии конструктивных особенностей, препятствующих подбору кода, таких как ограничение количества попыток или введение временной задержки между неудачными попытками, эта задача сильно затрудняется, поэтому последний недостаток нельзя назвать существенным. В данном курсовом проекте осуществляется разработка электронного кодового замка с использованием микроконтроллера.

2. Выбор и обоснование технических решений

2.1 Детализация исходного ТЗ и постановка задачи

Задание:

Разработать электронный кодовый замок, имеющий 10 кнопок для ввода кода, обозначенных цифрами от «0» до «9». Замок должен иметь переключатель режимов «Запись/Работа», кнопку «Сброс» в случае набора неверной цифры. Предусматривается смена установленного кода. Длина кода 6 десятичных цифр. После правильно введенного кода должна загораться лампочка.

Общая рекомендация:

Устройство должно быть выполнено на базе стандартных микроконтроллеров с моделированием работы в симуляторе Proteus.

2.2 Источники информации (входных сигналов)

Для того чтобы сказать что будет источником информации сначала нужно определить в каком, конкретно рассматриваемом случае мы будем производить анализ системы.

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

2.3 Приемник информации (выходных сигналов)

Для случая считывания данных из устройства приемником информации можно считать пользователя, который набирает код на считывание данных для того чтобы микроконтроллер смог их принять и выполнить проверку на верность пароля.

2.4 Возможные пути решения поставленной задачи

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

Когда пользователь вводит верный код, он должен быть извещён о том, что замок открыт, и дверь можно открывать, то есть должна присутствовать индикация факта открытия замка, в нашем случае должна загореться лампочка.

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

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

2.5 Возможные варианты структурных схем

Основная структурная схема будет похожа во всех перечисленных вариантах, меняться будут лишь составляющие ее элементы:

Схема №1

Схема №2

Данная схема похожа на №1, она отличается лишь тем, что функцию ввода/вывода будет происходить с помощью одного устройства (сенсорного дисплея), кроме того она сложнее в реализации.

Схема №3

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

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

Исходя из требований, предъявленных к устройству выше, электронный кодовый замок должен включать в себя следующие элементы:

- микроконтроллер;

- клавиатура;

- устройство сигнализации о правильности введенного кода;

- аккумулятор/батарея

- дисплей

2.6 Обоснование выбора структурной схемы

За основную структурную схему я выбрала первый вариант по следующим причинам:

- Простота переноса данной структурной схемы уже на схематическое проектирование и программный аспект устройства.

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

- Использование третий схемы потребует использование дополнительных датчиков для считывания информации, следовательно, произойдет усложнение программного кода.

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

2.7 Обоснование выбора микроконтроллера для решения поставленной задачи

Основными требованиями, предъявляемыми к микроконтроллеру в этом проекте, являются:

- наличие параллельных портов ввода-вывода в количестве, достаточном для подключения всех устройств, входящих в структурную схему системы;

- достаточно высокая надёжность и стабильность работы;

- возможность работы в расширенном температурном диапазоне.

Учитывая все эти требования, в качестве устройства управления я выбрала микроконтроллер PIC16F676 (8-разрядный КМОП микроконтроллер с Flash памятью, основан на AVR-архитектуре RISC , позволяет достигнуть оптимального соотношения производительности к потребляемой энергии).

Причины выбора:

- огромное количество справочной информации, примеров работы с микроконтроллером, книг по программированию данного МК.

- PIC16F676 недорогой по сравнению с другими микроконтроллерами, имеет низкое энергопотребление.

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

- Данный микроконтроллер довольно доступен на радио рынках в достаточных количествах.

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

- Имеет все необходимые функции и устройства для работы в проектируемой системе.

Основные характеристики:

Высокопроизводительный RISC-процессор:

* Всего 35 простых для изучения инструкции

* Все инструкции исполняются за один такт (200 нс), кроме инструкций перехода, выполняемых за два такта; минимальная длительность такта 200 нс

* 14 битовые команды

* 8 - битовые данные

* Вход внешних прерываний

* 8-уровневый аппаратный стек

* Прямой, косвенный и относительный режимы адресации для данных и инструкций

Периферия:

* 22 линий ввода/вывода с индивидуальным контролем направления

* Сильноточные схемы портов ввода/вывода:

* 25 мА макс. вытек. ток

* 25 мА макс. втек. ток

Timer0: 8-разрядный таймер/счетчик

Timer1: 16-разрядный таймер/счетчик

Timer2: 8-разрядный таймер/счетчик

2 ШИМ модуля

Последовательные интерфейсы

3-проводный SPI

I2C Master и Slave режимы

USART (с поддержкой адреса)

5 каналов 10-битного АЦП

2 аналоговых компаратора

Интегрированный программируемый источник опорного напряжения

Особенности микроконтроллера:

* Сброс при включении питания (POR)

* Таймер включения питания (PWRT) и таймер запуска генератора (OST)

* Сброс по снижению напряжения питания (BOR)

* Сторожевой таймер (WDT) с собственным встроенным RC-генератором для повышения надежности работы

* Режим экономии энергии (SLEEP)

* Выбор источника тактового сигнала

* Программирование на плате через последовательный порт (ICSPT) (с использованием двух выводов)

* Отладка на плате через последовательный порт (ICD) (с использованием двух выводов)

* Возможность самопрограммирования

* Программируемая защита кода

* 1000 циклов записи/стирания FLASH памяти программы

* 100 000 циклов записи/стирания памяти данных ЭСППЗУ

* Период хранения данных ЭСППЗУ > 40 лет

Технология КМОП:

* Экономичная, высокоскоростная технология КМОП

* Полностью статическая архитектура

* Широкий рабочий диапазон напряжений питания - от 2,0В до 5,5В

* Промышленный и расширенный температурный диапазоны

* Низкое потребление энергии

3. Структурная схема устройства и её описание

3.1 Структурная схема

3.2 Назначение отдельных функциональных блоков

Назначение микроконтроллера PIC16F676: осуществляет управление всей системой, а именно: осуществляет цикл по сканированию клавиатуры, исходя из полученных сканированием данных, определяет код нажатой клавиши и выполняет некоторые запрограммированные действия.

Назначение светодиодов: сообщение и правильности введенного кода.

Назначение клавиатуры: ввод кода.

3.3 Алгоритм работы структурной схемы

нет

нет нет

да

да

4. Разработка функциональной и принципиальной схемы

4.1 Описание принципиальной схемы устройства

Описание схемы:

Данная принципиальная электрическая схема -- графическое изображение с помощью условных графических и буквенно-цифровых обозначений (пиктограмм) связей между элементами проектируемого устройства - кодового замка.

На ней видно как между собой связанны составные элементы системы: микроконтроллер, клавиши и светодиоды.

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

электронный кодовый замок микроконтроллер

4.2 Описание функциональной схемы устройств

Описание схемы:

Выше представлена функциональная схема проектируемого устройства. Устройство управляется микроконтроллером PIC16F676.

Контроллер сканирует подключенную к его портам клавиатуру по определенному принципу и в случае нажатой клавиши анализирует код нажатой клавиши (который складывается из номера строки и столбца) запуская по его значению определенные процедуры.

5. Разработка рабочей программы

5.1 Текст программы

#DEFINE CONFIG_REQ 1

LIST P = 16F676, F = INHX8M, W = 2, X = ON, R = DEC, MM = ON, N = 0, C = 255

INDF EQU 0X0000

TMR0 EQU 0X0001

PCL EQU 0X0002

STATUS EQU 0X0003

FSR EQU 0X0004

PORTA EQU 0X0005

PORTB EQU 0X0006

PORTC EQU 0X0007

PCLATH EQU 0X000A

INTCON EQU 0X000B

PIR1 EQU 0X000C

TMR1L EQU 0X000E

TMR1LH EQU 0X000F

TMR1H EQU 0X000F

T1CON EQU 0X0010

CMCON EQU 0X0019

ADRESLH EQU 0X001E

ADRESH EQU 0X001E

ADCON0 EQU 0X001F

OPTION_REG EQU 0X0081

TRISA EQU 0X0085

TRISB EQU 0X0086

TRISC EQU 0X0087

PIE1 EQU 0X008C

PCON EQU 0X008E

OSCCAL EQU 0X0090

ANSEL EQU 0X0091

WPU EQU 0X0095

WPUA EQU 0X0095

IOC EQU 0X0096

IOCA EQU 0X0096

VRCON EQU 0X0099

EEDATL EQU 0X009A

EEDATA EQU 0X009A

EEDAT EQU 0X009A

EEADR EQU 0X009B

EECON1 EQU 0X009C

EECON2 EQU 0X009D

ADRESL EQU 0X009E

ADCON1 EQU 0X009F

IRP=7

RP1=6

RP0=5

NOT_TO=4

NOT_PD=3

Z=2

DC=1

C=0

GIE=7

PEIE=6

T0IE=5

INTE=4

RAIE=3

T0IF=2

INTF=1

RAIF=0

EEIF=7

ADIF=6

CMIF=3

T1IF=0

TMR1IF=0

TMR1GE=6

T1CKPS1=5

T1CKPS0=4

T1OSCEN=3

NOT_T1SYNC=2

TMR1CS=1

TMR1ON=0

COUT=6

CINV=4

CIS=3

CM2=2

CM1=1

CM0=0

ADFM=7

VCFG=6

CHS2=4

CHS1=3

CHS0=2

GO=1

NOT_DONE=1

GO_DONE=1

PP_GO_DONE=1

ADON=0

NOT_GPPU=7

NOT_RAPU=7

INTEDG=6

T0CS=5

T0SE=4

PSA=3

PS2=2

PS1=1

PS0=0

EEIE=7

ADIE=6

CMIE=3

T1IE=0

TMR1IE=0

NOT_POR=1

NOT_BOD=0

CAL5=7

CAL4=6

CAL3=5

CAL2=4

CAL1=3

CAL0=2

ANS7=7

ANS6=6

ANS5=5

ANS4=4

ANS3=3

ANS2=2

ANS1=1

ANS0=0

VREN=7

VRR=5

VR3=3

VR2=2

VR1=1

VR0=0

WRERR=3

WREN=2

PP_WREN=2

WR=1

PP_WR=1

RD=0

PP_RD=0

ADCS2=6

ADCS1=5

ADCS0=4

__MAXRAM 0XFF

__BADRAM 0X06, 0X08-0X09, 0X0D, 0X11-0X18, 0X1A-0X1D, 0X60-0X7F

__BADRAM 0X86, 0X88-0X89, 0X8D, 0X8F, 0X92-0X94, 0X97-0X98, 0XE0-0XFF

CPD EQU 0X3EFF

CPD_OFF EQU 0X3FFF

CP EQU 0X3F7F

CP_OFF EQU 0X3FFF

BODEN EQU 0X3FFF

BODEN_OFF EQU 0X3FBF

MCLRE_ON EQU 0X3FFF

MCLRE_OFF EQU 0X3FDF

PWRTE_OFF EQU 0X3FFF

PWRTE_ON EQU 0X3FEF

WDT_ON EQU 0X3FFF

WDT_OFF EQU 0X3FF7

LP_OSC EQU 0X3FF8

XT_OSC EQU 0X3FF9

HS_OSC EQU 0X3FFA

EC_OSC EQU 0X3FFB

INTRC_OSC_NOCLKOUT EQU 0X3FFC

INTRC_OSC_CLKOUT EQU 0X3FFD

EXTRC_OSC_NOCLKOUT EQU 0X3FFE

EXTRC_OSC_CLKOUT EQU 0X3FFF

#DEFINE __16F676 1

#DEFINE XTAL 4

#DEFINE _CORE 14

#DEFINE _MAXRAM 64

#DEFINE _RAM_END 64

#DEFINE _MAXMEM 1024

#DEFINE _ADC 8

#DEFINE _ADC_RES 10

#DEFINE _EEPROM 128

#DEFINE _PAGES 1

#DEFINE _BANKS 2

#DEFINE RAM_BANKS 1

#DEFINE _USART 0

#DEFINE _USB 0

#DEFINE _FLASH 0

#DEFINE _CWRITE_BLOCK 0

#DEFINE BANK0_START 32

#DEFINE BANK0_END 95

#DEFINE _SYSTEM_VARIABLE_COUNT 14

RAM_BANK = 0

CURRENT@PAGE = 0

DEST@PAGE = 0

#DEFINE LCD#TYPE 0

F@CALL MACRO DEST

IF (DEST < 1)

ELSE

IF (DEST > $)

ELSE

ENDIF

ENDIF

CALL DEST

ENDM

F@JUMP MACRO DEST

IF (DEST < 1)

ELSE

IF (DEST > $)

ELSE

ENDIF

ENDIF

GOTO DEST

ENDM

SET@PAGE MACRO DEST

ENDM

S@B MACRO VARIN

IF((VARIN & 384) == 0)

IF(RAM_BANK == 1)

BCF 3,5

ENDIF

IF(RAM_BANK == 2)

BCF 3,6

ENDIF

IF(RAM_BANK == 3)

BCF 3,5

BCF 3,6

ENDIF

RAM_BANK = 0

ENDIF

IF((VARIN & 384) == 128)

IF(RAM_BANK == 0)

BSF 3,5

ENDIF

IF(RAM_BANK == 2)

BSF 3,5

BCF 3,6

ENDIF

IF(RAM_BANK == 3)

BCF 3,6

ENDIF

RAM_BANK = 1

ENDIF

IF((VARIN & 384) == 256)

IF(RAM_BANK == 0)

BSF 3,6

ENDIF

IF(RAM_BANK == 1)

BCF 3,5

BSF 3,6

ENDIF

IF(RAM_BANK == 3)

BCF 3,5

ENDIF

RAM_BANK = 2

ENDIF

ENDM

R@B MACRO

IF((RAM_BANK & 1) != 0)

BCF 3,5

ENDIF

IF((RAM_BANK & 2) != 0)

BCF 3,6

ENDIF

RAM_BANK = 0

ENDM

JUMP MACRO PLABEL

GOTO PLABEL

ENDM

WREG_BYTE MACRO PBYTEOUT

S@B PBYTEOUT

MOVWF PBYTEOUT

R@B

ENDM

WREG_BIT MACRO PVAROUT,PBITOUT

S@B PVAROUT

ANDLW 1

BTFSC STATUS,2

BCF PVAROUT,PBITOUT

BTFSS STATUS,2

BSF PVAROUT,PBITOUT

R@B

ENDM

WREG_WORD MACRO PWORDOUT

S@B PWORDOUT

MOVWF PWORDOUT

S@B PWORDOUT+1

CLRF PWORDOUT+1

R@B

ENDM

WREG_DWORD MACRO PDWORDOUT

S@B PDWORDOUT+3

CLRF PDWORDOUT+3

S@B PDWORDOUT+2

CLRF PDWORDOUT+2

S@B PDWORDOUT+1

CLRF PDWORDOUT+1

S@B PDWORDOUT

MOVWF PDWORDOUT

R@B

ENDM

BYTE_WREG MACRO PBYTEIN

S@B PBYTEIN

MOVF PBYTEIN,W

R@B

ENDM

NUM_WREG MACRO PNUMIN

MOVLW (PNUMIN & 255)

ENDM

NUM_BYTE MACRO PNUMIN,PBYTEOUT

S@B PBYTEOUT

IF(PNUMIN == 0)

CLRF PBYTEOUT

ELSE

MOVLW (PNUMIN & 255)

MOVWF PBYTEOUT

ENDIF

R@B

ENDM

NUM_BIT MACRO PNUMIN,PVAROUT,PBITOUT

S@B PVAROUT

IF((PNUMIN & 1) == 1)

BSF PVAROUT,PBITOUT

ELSE

BCF PVAROUT,PBITOUT

ENDIF

R@B

ENDM

NUM_WORD MACRO PNUMIN,PWORDOUT

IF((PNUMIN & 255) == 0)

S@B PWORDOUT

CLRF PWORDOUT

ELSE

S@B PWORDOUT

MOVLW LOW (PNUMIN)

MOVWF PWORDOUT

ENDIF

IF(((PNUMIN >> 8) & 255) == 0)

S@B PWORDOUT+1

CLRF PWORDOUT+1

ELSE

S@B PWORDOUT+1

MOVLW HIGH (PNUMIN)

MOVWF PWORDOUT+1

ENDIF

R@B

ENDM

NUM_DWORD MACRO PNUMIN,PDWORDOUT

IF ((PNUMIN >> 24 & 255) == 0)

S@B PDWORDOUT+3

CLRF PDWORDOUT+3

ELSE

S@B PDWORDOUT+3

MOVLW ((PNUMIN >> 24) & 255)

MOVWF PDWORDOUT+3

ENDIF

IF( ((PNUMIN >> 16) & 255) == 0)

S@B PDWORDOUT+2

CLRF PDWORDOUT+2

ELSE

S@B PDWORDOUT+2

MOVLW ((PNUMIN >> 16) & 255)

MOVWF PDWORDOUT+2

ENDIF

IF( ((PNUMIN >> 8) & 255) == 0)

S@B PDWORDOUT+1

CLRF PDWORDOUT+1

ELSE

S@B PDWORDOUT+1

MOVLW HIGH (PNUMIN)

MOVWF PDWORDOUT+1

ENDIF

IF((PNUMIN & 255) == 0)

S@B PDWORDOUT

CLRF PDWORDOUT

ELSE

S@B PDWORDOUT

MOVLW LOW (PNUMIN)

MOVWF PDWORDOUT

ENDIF

R@B

ENDM

BIT_WREG MACRO PVARIN,PBITIN

S@B PVARIN

CLRW

BTFSC PVARIN,PBITIN

MOVLW 1

R@B

ENDM

BIT_BYTE MACRO PVARIN,PBITIN,PBYTEOUT

S@B PVARIN

CLRW

BTFSC PVARIN,PBITIN

MOVLW 1

S@B PBYTEOUT

MOVWF PBYTEOUT

R@B

ENDM

BIT_BIT MACRO PVARIN,PBITIN,PVAROUT,PBITOUT

IF((PVARIN & 65408) == (PVAROUT & 65408))

S@B PVAROUT

BTFSC PVARIN,PBITIN

BSF PVAROUT,PBITOUT

BTFSS PVARIN,PBITIN

BCF PVAROUT,PBITOUT

ELSE

S@B PVARIN

CLRDC

BTFSC PVARIN,PBITIN

SETDC

S@B PVAROUT

SKPNDC

BSF PVAROUT,PBITOUT

SKPDC

BCF PVAROUT,PBITOUT

ENDIF

ENDM

BIT_WORD MACRO PVARIN,PBITIN,PWORDOUT

S@B PWORDOUT+1

CLRF PWORDOUT+1

BIT_BYTE PVARIN,PBITIN,PWORDOUT

ENDM

BIT_DWORD MACRO PVARIN,PBITIN,PDWORDOUT

S@B PDWORDOUT+3

CLRF PDWORDOUT+3

S@B PDWORDOUT+2

CLRF PDWORDOUT+2

S@B PDWORDOUT+1

CLRF PDWORDOUT+1

BIT_BYTE PVARIN,PBITIN,PDWORDOUT

ENDM

WORD_WREG MACRO PWORDIN

BYTE_WREG PWORDIN

ENDM

WORD_BYTE MACRO PWORDIN,PBYTEOUT

BYTE_BYTE PWORDIN,PBYTEOUT

ENDM

WORD_BIT MACRO PWORDIN,PVAROUT,PBITOUT

BYTE_BIT PWORDIN, PVAROUT, PBITOUT

ENDM

WORD_WORD MACRO PWORDIN,PWORDOUT

S@B PWORDIN+1

MOVF PWORDIN+1,W

S@B PWORDOUT+1

MOVWF PWORDOUT+1

BYTE_BYTE PWORDIN,PWORDOUT

ENDM

WORD_DWORD MACRO PWORDIN,PDWORDOUT

S@B PDWORDOUT+3

CLRF PDWORDOUT+3

S@B PDWORDOUT+2

CLRF PDWORDOUT+2

BYTE_BYTE PWORDIN+1,PDWORDOUT+1

BYTE_BYTE PWORDIN,PDWORDOUT

ENDM

BYTE_BYTE MACRO PBYTEIN,PBYTEOUT

S@B PBYTEIN

MOVF PBYTEIN,W

S@B PBYTEOUT

MOVWF PBYTEOUT

R@B

ENDM

BYTE_WORD MACRO PBYTEIN,PWORDOUT

S@B PWORDOUT+1

CLRF PWORDOUT+1

BYTE_BYTE PBYTEIN,PWORDOUT

ENDM

BYTE_DWORD MACRO PBYTEIN,PDWORDOUT

S@B PDWORDOUT+3

CLRF PDWORDOUT+3

S@B PDWORDOUT+2

CLRF PDWORDOUT+2

S@B PDWORDOUT+1

CLRF PDWORDOUT+1

BYTE_BYTE PBYTEIN,PDWORDOUT

ENDM

BYTE_BIT MACRO PBYTEIN,PVAROUT,PBITOUT

IF((PBYTEIN & 65408) == (PVAROUT & 65408))

S@B PBYTEIN

BTFSC PBYTEIN,0

BSF PVAROUT,PBITOUT

BTFSS PBYTEIN,0

BCF PVAROUT,PBITOUT

ELSE

S@B PBYTEIN

RRF PBYTEIN,W

S@B PVAROUT

SKPNC

BSF PVAROUT,PBITOUT

SKPC

BCF PVAROUT,PBITOUT

ENDIF

R@B

ENDM

DWORD_WREG MACRO PDWORDIN

BYTE_WREG PDWORDIN

ENDM

DWORD_BYTE MACRO PDWORDIN,PBYTEOUT

BYTE_BYTE PDWORDIN,PBYTEOUT

ENDM

DWORD_WORD MACRO PDWORDIN,PWORDOUT

S@B PDWORDIN+1

MOVF PDWORDIN+1,W

S@B PWORDOUT+1

MOVWF PWORDOUT+1

BYTE_BYTE PDWORDIN,PWORDOUT

ENDM

DWORD_DWORD MACRO PDWORDIN,PDWORDOUT

BYTE_BYTE PDWORDIN+3,PDWORDOUT+3

BYTE_BYTE PDWORDIN+2,PDWORDOUT+2

BYTE_BYTE PDWORDIN+1,PDWORDOUT+1

BYTE_BYTE PDWORDIN,PDWORDOUT

ENDM

DWORD_BIT MACRO PDWORDIN,PVAROUT,PBITOUT

BYTE_BIT PDWORDIN,PVAROUT,PBITOUT

ENDM

VARIABLE CURRENT@PAGE = 0

VARIABLE PDESTINATION@PAGE = 0

FIND@PAGE MACRO PLABELIN

LOCAL CURRENT_ADDR = $

LOCAL DEST_ADDR = PLABELIN

IF((CURRENT_ADDR >= 0X1800) && (CURRENT_ADDR <= 0X2000))

CURRENT@PAGE = 3

ENDIF

IF((CURRENT_ADDR >= 0X1000) && (CURRENT_ADDR <= 0X1800))

CURRENT@PAGE = 2

ENDIF

IF((CURRENT_ADDR >= 0X0800) && (CURRENT_ADDR <= 0X1000))

CURRENT@PAGE = 1

ENDIF

IF((CURRENT_ADDR >= 0) && (CURRENT_ADDR <= 0X0800))

CURRENT@PAGE = 0

ENDIF

IF((DEST_ADDR >= 0X1800) && (DEST_ADDR <= 0X2000))

PDESTINATION@PAGE = 3

ENDIF

IF((DEST_ADDR >= 0X1000) && (DEST_ADDR <= 0X1800))

PDESTINATION@PAGE = 2

ENDIF

IF((DEST_ADDR >= 0X0800) && (DEST_ADDR <= 0X1000))

PDESTINATION@PAGE = 1

ENDIF

IF((DEST_ADDR >= 0) && (DEST_ADDR <= 0X0800))

PDESTINATION@PAGE = 0

ENDIF

ENDM

NUM_FSR MACRO PNUMIN

NUM_BYTE PNUMIN, FSR

IF (((PNUMIN >> 8) & 255) == 1)

BSF STATUS,7

ELSE

BCF STATUS,7

ENDIF

ENDM

LABEL_WORD MACRO PLABELIN,PWORDOUT

MOVLW LOW (PLABELIN)

S@B PWORDOUT

MOVWF PWORDOUT

MOVLW HIGH (PLABELIN)

S@B PWORDOUT

MOVWF PWORDOUT+1

R@B

ENDM

GEN3H = 32

GEN4 = 33

GEN4H = 34

GPR = 35

PBP#VAR0 = 36

PP0 = 37

PP0H = 38

PP1 = 39

PP1H = 40

PP3 = 41

PP3H = 42

PP6 = 43

PP6H = 44

SP#P9 = 45

KEYPASS = 46

VARIABLE KEYPASS#0=46,KEYPASS#1=47,KEYPASS#2=48

MKEY = 49

VARIABLE MKEY#0=49,MKEY#1=50,MKEY#2=51

_B#VR1 = 52

KEY = 53

SEC = 54

_I = 55

#DEFINE RAW1 PORTA,0

#DEFINE RAW2 PORTA,1

#DEFINE RAW3 PORTA,2

#DEFINE RAW4 PORTA,3

#DEFINE COL1 PORTA,4

#DEFINE COL2 PORTA,5

#DEFINE COL3 PORTC,0

#DEFINE LED1 PORTC,4

#DEFINE LED2 PORTC,5

#DEFINE LEDPOD PORTC,3

#DEFINE FLAG _B#VR1,0

#DEFINE FLAG1 _B#VR1,1

PROTON#CODE#START

ORG 0

GOTO PROTON#MAIN#START

T@GTB

CLRF 38

T@GTW

CLRF 40

T@GT

MOVWF 39

MOVLW 1

T@ST

MOVWF 35

MOVF 40,W

SUBWF 38,W

SKPZ

GOTO $ + 3

MOVF 39,W

SUBWF 37,W

MOVLW 4

SKPNC

MOVLW 1

SKPNZ

MOVLW 2

ANDWF 35,W

SKPZ

MOVLW 1

GOTO I@NT

EE@RD

BSF 3,5

MOVWF 155

EE@RD@W

BSF 3,5

BSF 156,PP_RD

MOVF 154,W

INCF 155,F

GOTO I@NT

EE@WR

EE@WR@W

BSF 3,5

MOVWF 154

BSF 156,PP_WREN

MOVLW 85

MOVWF 157

MOVLW 170

MOVWF 157

BSF 156,PP_WR

BTFSC 156,PP_WR

GOTO $ - 1

BCF 156,PP_WREN

INCF 155,F

GOTO I@NT

DL@MS

CLRF 40

DLY@W

MOVWF 39

DLY@P

MOVLW 255

ADDWF 39,F

SKPC

ADDWF 40,F

SKPC

GOTO I@NT

MOVLW 3

MOVWF 38

MOVLW 223

CALL DLUS@W

GOTO DLY@P

DL@US

CLRF 38

DLUS@W

ADDLW 232

MOVWF 37

COMF 38,F

MOVLW 252

SKPC

GOTO $ + 4

ADDWF 37,F

SKPNC

GOTO $ - 2

ADDWF 37,F

NOP

INCFSZ 38,F

GOTO $ - 6

BTFSC 37,0

GOTO $ + 1

BTFSS 37,1

GOTO $ + 3

NOP

GOTO $ + 1

RETURN

I@NT

BCF 3,7

I@NT2

BCF 3,5

BCF 3,6

RETURN

PROTON#MAIN#START

F2_SOF EQU $ ; ZAM_676.PRP

F2_EOF EQU $ ; ZAM_676.PRP

F1_SOF EQU $ ; ZAM_676.BAS

F1_000009 EQU $ ; IN [ZAM_676.BAS] ALL_DIGITAL = TRUE

MOVLW 7

MOVWF CMCON

BSF STATUS,5

RAM_BANK = 1

CLRF ANSEL

F1_000010 EQU $ ; IN [ZAM_676.BAS] INPUT PORTA.0: INPUT PORTA.1: INPUT PORTA.2: INPUT PORTA.3

BSF TRISA,0

BSF TRISA,1

BSF TRISA,2

BSF TRISA,3

F1_000011 EQU $ ; IN [ZAM_676.BAS] OUTPUT PORTA.4: OUTPUT PORTA.5: OUTPUT PORTA.6: OUTPUT PORTC

BCF TRISA,4

BCF TRISA,5

BCF TRISA,6

CLRF TRISC

F1_000029 EQU $ ; IN [ZAM_676.BAS] KEY = 0

BCF STATUS,5

RAM_BANK = 0

CLRF KEY

F1_000030 EQU $ ; IN [ZAM_676.BAS] FLAG = 1

BSF _B#VR1,0

F1_000031 EQU $ ; IN [ZAM_676.BAS] FLAG1 = 0

BCF _B#VR1,1

F1_000032 EQU $ ; IN [ZAM_676.BAS] KEYPASS[0] = EREAD 0

MOVLW 0

CALL EE@RD

MOVWF PBP#VAR0

MOVF PBP#VAR0,W

MOVWF KEYPASS#0

F1_000033 EQU $ ; IN [ZAM_676.BAS] KEYPASS[1] = EREAD 1

MOVLW 1

CALL EE@RD

MOVWF PBP#VAR0

MOVF PBP#VAR0,W

MOVWF KEYPASS#1

F1_000034 EQU $ ; IN [ZAM_676.BAS] KEYPASS[2] = EREAD 2

MOVLW 2

CALL EE@RD

MOVWF PBP#VAR0

MOVF PBP#VAR0,W

MOVWF KEYPASS#2

F1_000035 EQU $ ; IN [ZAM_676.BAS] MKEY[0] =1: MKEY[1] =7: MKEY[2] =8

MOVLW 1

MOVWF MKEY#0

MOVLW 7

MOVWF MKEY#1

MOVLW 8

MOVWF MKEY#2

MAIN

F1_000038 EQU $ ; IN [ZAM_676.BAS] GOSUB KLAVA

CALL KLAVA

F1_000039 EQU $ ; IN [ZAM_676.BAS] IF KEY = 35 THEN

MOVLW 35

SUBWF KEY,W

BTFSS STATUS,2

GOTO BC@LL2

F1_000040 EQU $ ; IN [ZAM_676.BAS] GOTO USTKEY

GOTO USTKEY

GOTO BC@LL3

BC@LL2

F1_000041 EQU $ ; IN [ZAM_676.BAS] ELSE

F1_000042 EQU $ ; IN [ZAM_676.BAS] FLAG = 1

BSF _B#VR1,0

F1_000043 EQU $ ; IN [ZAM_676.BAS] GOSUB PROVERKA

CALL PROVERKA

F1_000044 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL3

F1_000045 EQU $ ; IN [ZAM_676.BAS] GOTO MAIN

GOTO MAIN

USTKEY

F1_000048 EQU $ ; IN [ZAM_676.BAS] HIGH LEDPOD: HIGH LED2:KEY=0

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,3

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,5

CLRF KEY

F1_000049 EQU $ ; IN [ZAM_676.BAS] DELAYMS 3000:LOW LED2:DELAYMS 1000: HIGH LED2

MOVLW 11

MOVWF PP1H

MOVLW 184

CALL DLY@W

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,5

MOVLW 3

MOVWF PP1H

MOVLW 232

CALL DLY@W

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,5

F1_000050 EQU $ ; IN [ZAM_676.BAS] IF FLAG = 1 THEN

BTFSS _B#VR1,0

GOTO BC@LL5

F1_000051 EQU $ ; IN [ZAM_676.BAS] FOR I=0 TO 2

CLRF _I

FR@LB7

MOVLW 3

SUBWF _I,W

BTFSC STATUS,0

GOTO NX@LB8

F1_000052 EQU $ ; IN [ZAM_676.BAS] WHILE KEY = 0

BC@LL8

MOVF KEY,F

BTFSS STATUS,2

GOTO BC@LL9

F1_000053 EQU $ ; IN [ZAM_676.BAS] GOSUB KLAVA

CALL KLAVA

F1_000054 EQU $ ; IN [ZAM_676.BAS] DELAYMS 200

MOVLW 200

CALL DL@MS

F1_000055 EQU $ ; IN [ZAM_676.BAS] WEND

GOTO BC@LL8

BC@LL9

F1_000056 EQU $ ; IN [ZAM_676.BAS] EWRITE I ,[ KEY ]

MOVF _I,W

BSF STATUS,5

RAM_BANK = 1

MOVWF EEADR

BCF STATUS,5

RAM_BANK = 0

MOVF KEY,W

CALL EE@WR

F1_000057 EQU $ ; IN [ZAM_676.BAS] LOW LED2: DELAYMS 100: HIGH LED2

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,5

MOVLW 100

CALL DL@MS

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,5

F1_000058 EQU $ ; IN [ZAM_676.BAS] KEYPASS[I] = KEY

MOVF _I,W

ADDLW KEYPASS

MOVWF FSR

MOVF KEY,W

MOVWF INDF

F1_000059 EQU $ ; IN [ZAM_676.BAS] KEY = 0

CLRF KEY

F1_000060 EQU $ ; IN [ZAM_676.BAS] NEXT I

INCF _I,F

BTFSS STATUS,2

GOTO FR@LB7

NX@LB8

F1_000061 EQU $ ; IN [ZAM_676.BAS] DELAYMS 1000

MOVLW 3

MOVWF PP1H

MOVLW 232

CALL DLY@W

F1_000062 EQU $ ; IN [ZAM_676.BAS] FLAG = 0

BCF _B#VR1,0

F1_000063 EQU $ ; IN [ZAM_676.BAS] LOW LED2: LOW LEDPOD

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,5

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,3

F1_000064 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL5

F1_000065 EQU $ ; IN [ZAM_676.BAS] GOTO MAIN

GOTO MAIN

PROVERKA

F1_000068 EQU $ ; IN [ZAM_676.BAS] FLAG1 = 0: SEC=0:I = 0

BCF _B#VR1,1

CLRF SEC

CLRF _I

F1_000069 EQU $ ; IN [ZAM_676.BAS] FOR I=0 TO 2

CLRF _I

FR@LB11

MOVLW 3

SUBWF _I,W

BTFSC STATUS,0

GOTO NX@LB12

F1_000070 EQU $ ; IN [ZAM_676.BAS] WHILE KEY = 0

BC@LL12

MOVF KEY,F

BTFSS STATUS,2

GOTO BC@LL13

F1_000071 EQU $ ; IN [ZAM_676.BAS] GOSUB KLAVA

CALL KLAVA

F1_000072 EQU $ ; IN [ZAM_676.BAS] DELAYMS 200

MOVLW 200

CALL DL@MS

F1_000073 EQU $ ; IN [ZAM_676.BAS] SEC=SEC+1

INCF SEC,F

F1_000074 EQU $ ; IN [ZAM_676.BAS] IF I>0 AND SEC>30 THEN

MOVF _I,W

MOVWF PP0

MOVLW 0

CALL T@GTB

MOVWF SP#P9

MOVF SEC,W

MOVWF PP0

MOVLW 30

CALL T@GTB

ANDWF SP#P9,F

BTFSC STATUS,2

GOTO BC@LL15

F1_000075 EQU $ ; IN [ZAM_676.BAS] HIGH LED2: DELAYMS 100: LOW LED2: LOW LEDPOD :I = 0

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,5

MOVLW 100

CALL DL@MS

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,5

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,3

CLRF _I

F1_000076 EQU $ ; IN [ZAM_676.BAS] GOTO MAIN

GOTO MAIN

F1_000077 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL15

F1_000078 EQU $ ; IN [ZAM_676.BAS] WEND

GOTO BC@LL12

BC@LL13

F1_000080 EQU $ ; IN [ZAM_676.BAS] HIGH LEDPOD

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,3

F1_000081 EQU $ ; IN [ZAM_676.BAS] IF FLAG1 = 0 THEN

BTFSC _B#VR1,1

GOTO BC@LL17

F1_000082 EQU $ ; IN [ZAM_676.BAS] IF KEYPASS[I] <> KEY AND MKEY[I]<>KEY THEN

MOVF _I,W

ADDLW KEYPASS

MOVWF FSR

MOVF INDF,W

MOVWF PBP#VAR0

MOVF PBP#VAR0,W

SUBWF KEY,W

BTFSS STATUS,2

MOVLW 1

MOVWF SP#P9

MOVF _I,W

ADDLW MKEY

MOVWF FSR

MOVF INDF,W

MOVWF PBP#VAR0

MOVF PBP#VAR0,W

SUBWF KEY,W

BTFSS STATUS,2

MOVLW 1

ANDWF SP#P9,F

BTFSC STATUS,2

GOTO BC@LL19

F1_000083 EQU $ ; IN [ZAM_676.BAS] FLAG1 = 1

BSF _B#VR1,1

F1_000084 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL19

F1_000085 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL17

F1_000086 EQU $ ; IN [ZAM_676.BAS] KEY = 0

CLRF KEY

F1_000087 EQU $ ; IN [ZAM_676.BAS] HIGH LED2: DELAYMS 100: LOW LED2

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,5

MOVLW 100

CALL DL@MS

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,5

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,5

F1_000088 EQU $ ; IN [ZAM_676.BAS] NEXT I

INCF _I,F

BTFSS STATUS,2

GOTO FR@LB11

NX@LB12

F1_000089 EQU $ ; IN [ZAM_676.BAS] IF FLAG1 = 0 THEN

BTFSC _B#VR1,1

GOTO BC@LL21

F1_000090 EQU $ ; IN [ZAM_676.BAS] LOW LEDPOD

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,3

F1_000091 EQU $ ; IN [ZAM_676.BAS] HIGH LED1

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,4

BCF STATUS,5

RAM_BANK = 0

BSF PORTC,4

F1_000092 EQU $ ; IN [ZAM_676.BAS] DELAYMS 2000

MOVLW 7

MOVWF PP1H

MOVLW 208

CALL DLY@W

F1_000093 EQU $ ; IN [ZAM_676.BAS] LOW LED1

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,4

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,4

F1_000095 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL21

F1_000096 EQU $ ; IN [ZAM_676.BAS] LOW LEDPOD

BSF STATUS,5

RAM_BANK = 1

BCF TRISC,3

BCF STATUS,5

RAM_BANK = 0

BCF PORTC,3

F1_000097 EQU $ ; IN [ZAM_676.BAS] RETURN

RETURN

KLAVA

F1_000100 EQU $ ; IN [ZAM_676.BAS] KEY = 0

CLRF KEY

F1_000101 EQU $ ; IN [ZAM_676.BAS] COL1 = 1

BSF PORTA,4

F1_000102 EQU $ ; IN [ZAM_676.BAS] IF RAW1 = 1 THEN

BTFSS PORTA,0

GOTO BC@LL23

F1_000103 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000104 EQU $ ; IN [ZAM_676.BAS] KEY = 1

MOVLW 1

MOVWF KEY

F1_000105 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL23

F1_000106 EQU $ ; IN [ZAM_676.BAS] IF RAW2 = 1 THEN

BTFSS PORTA,1

GOTO BC@LL25

F1_000107 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000108 EQU $ ; IN [ZAM_676.BAS] KEY = 4

MOVLW 4

MOVWF KEY

F1_000109 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL25

F1_000110 EQU $ ; IN [ZAM_676.BAS] IF RAW3 = 1 THEN

BTFSS PORTA,2

GOTO BC@LL27

F1_000111 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000112 EQU $ ; IN [ZAM_676.BAS] KEY = 7

MOVLW 7

MOVWF KEY

F1_000113 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL27

F1_000114 EQU $ ; IN [ZAM_676.BAS] IF RAW4 = 1 THEN

BTFSS PORTA,3

GOTO BC@LL29

F1_000115 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000116 EQU $ ; IN [ZAM_676.BAS] KEY = 42

MOVLW 42

MOVWF KEY

F1_000117 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL29

F1_000118 EQU $ ; IN [ZAM_676.BAS] COL1 = 0

BCF PORTA,4

F1_000119 EQU $ ; IN [ZAM_676.BAS] COL2 = 1

BSF PORTA,5

F1_000120 EQU $ ; IN [ZAM_676.BAS] IF RAW1 = 1 THEN

BTFSS PORTA,0

GOTO BC@LL31

F1_000121 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000122 EQU $ ; IN [ZAM_676.BAS] KEY = 2

MOVLW 2

MOVWF KEY

F1_000123 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL31

F1_000124 EQU $ ; IN [ZAM_676.BAS] IF RAW2 = 1 THEN

BTFSS PORTA,1

GOTO BC@LL33

F1_000125 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000126 EQU $ ; IN [ZAM_676.BAS] KEY = 5

MOVLW 5

MOVWF KEY

F1_000127 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL33

F1_000128 EQU $ ; IN [ZAM_676.BAS] IF RAW3 = 1 THEN

BTFSS PORTA,2

GOTO BC@LL35

F1_000129 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000130 EQU $ ; IN [ZAM_676.BAS] KEY = 8

MOVLW 8

MOVWF KEY

F1_000131 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL35

F1_000132 EQU $ ; IN [ZAM_676.BAS] IF RAW4 = 1 THEN

BTFSS PORTA,3

GOTO BC@LL37

F1_000133 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000134 EQU $ ; IN [ZAM_676.BAS] KEY = 10

MOVLW 10

MOVWF KEY

F1_000135 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL37

F1_000136 EQU $ ; IN [ZAM_676.BAS] COL2 = 0

BCF PORTA,5

F1_000137 EQU $ ; IN [ZAM_676.BAS] COL3 = 1

BSF PORTC,0

F1_000138 EQU $ ; IN [ZAM_676.BAS] IF RAW1 = 1 THEN

BTFSS PORTA,0

GOTO BC@LL39

F1_000139 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000140 EQU $ ; IN [ZAM_676.BAS] KEY = 3

MOVLW 3

MOVWF KEY

F1_000141 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL39

F1_000142 EQU $ ; IN [ZAM_676.BAS] IF RAW2 = 1 THEN

BTFSS PORTA,1

GOTO BC@LL41

F1_000143 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000144 EQU $ ; IN [ZAM_676.BAS] KEY = 6

MOVLW 6

MOVWF KEY

F1_000145 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL41

F1_000146 EQU $ ; IN [ZAM_676.BAS] IF RAW3 = 1 THEN

BTFSS PORTA,2

GOTO BC@LL43

F1_000147 EQU $ ; IN [ZAM_676.BAS] DELAYMS 100

MOVLW 100

CALL DL@MS

F1_000148 EQU $ ; IN [ZAM_676.BAS] KEY = 9

MOVLW 9

MOVWF KEY

F1_000149 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL43

F1_000150 EQU $ ; IN [ZAM_676.BAS] IF RAW4 = 1 THEN

BTFSS PORTA,3

GOTO BC@LL45

F1_000151 EQU $ ; IN [ZAM_676.BAS] DELAYMS 200

MOVLW 200

CALL DL@MS

F1_000152 EQU $ ; IN [ZAM_676.BAS] IF RAW4 = 1 THEN

BTFSS PORTA,3

GOTO BC@LL47

F1_000153 EQU $ ; IN [ZAM_676.BAS] DELAYMS 500

MOVLW 1

MOVWF PP1H

MOVLW 244

CALL DLY@W

F1_000154 EQU $ ; IN [ZAM_676.BAS] KEY = 35

MOVLW 35

MOVWF KEY

F1_000155 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL47

F1_000156 EQU $ ; IN [ZAM_676.BAS] ENDIF

BC@LL45

F1_000157 EQU $ ; IN [ZAM_676.BAS] COL3 = 0

BCF PORTC,0

F1_000158 EQU $ ; IN [ZAM_676.BAS] RETURN

RETURN

F1_EOF EQU $ ; ZAM_676.BAS

PB@LB49

GOTO PB@LB49

__EOF

__CONFIG CPD_OFF&CP_OFF&BODEN&MCLRE_OFF&PWRTE_OFF&WDT_OFF&INTRC_OSC_NOCLKOUT

END

5.2 Моделирование

Для моделирования описанного кодового замка была использована программа разработки электрических схем Proteus 7 Professional.

Для того чтобы смоделировать наше устройство потребовались следующие компоненты Proteus:

Микроконтроллер PIC16F676

Клавиатура KEYPAD-PHONE

Светодиоды 3х цветов (LED-BLUE, LED-GREEN, LED-RED)

Резистор

После правильного соединения элементов между собой и их настойки, устанавливаем файл прошивки (ZAM_676.hex) к контроллеру в его свойствах.

Теперь можно пытаться симулировать работу собранного устройства.

6. Заключение

В данной работе была осуществлена разработка кодового замка.

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

При выполнении данного курсового проекта были получены новые и закреплены старые знания в области микроконтроллеров, разработки программ на языке высокого уровня, моделировании схем устройств.

7. Список литературы

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.

Размещено на Allbest.ru


Подобные документы

  • Принцип работы кодового замка. Проектирование кодового замка с возможностью звуковой сигнализации при попытке подбора кода, на базе микроконтроллера с архитектурой MCS-51. Функциональная схема устройства, составление программы для микроконтроллера.

    курсовая работа [3,2 M], добавлен 14.11.2010

  • Электронный замок: общая характеристика и принцип действия. Анализ вариантов реализации устройства. Разработка алгоритма функционирования, структурной и электрической принципиальной схемы электронного замка. Блок-схема алгоритма работы программы.

    курсовая работа [363,3 K], добавлен 10.05.2015

  • Разработка электронного кодового замка, предназначенного для запирания дверей, с возможностью ввода кодовой комбинации. Системотехническое и схемотехническое проектирование. Расчет условных размеров печатной платы. Комплексные показатели технологичности.

    курсовая работа [333,3 K], добавлен 26.12.2014

  • Разработка структурной и принципиальной схемы устройства и его отдельных блоков и обоснования принятых решений. Алгоритм и временная диаграмма работы генератора и его отдельных блоков. Расчет основных параметров и характеристик и моделирование генератора.

    курсовая работа [44,0 K], добавлен 29.01.2009

  • Обзор структурных схем повышающих преобразователей напряжения на базе различных микросхем. Синтез структурной схемы электронного устройства. Разработка принципиальной схемы функционального элемента. Расчет трансформатора полумостового преобразователя.

    курсовая работа [277,3 K], добавлен 27.06.2013

  • Разработка структурной и принципиальной схем электронного тахометра. Изучение принципа работы датчика магнитного поля. Выбор микроконтроллера. Проектирование управляющей программы для микроконтроллера. Адаптация устройства к промышленному применению.

    курсовая работа [1,1 M], добавлен 22.01.2015

  • Выбор и обоснование структурной схемы передатчика. Методы построения структурных схем одно-волоконных оптических систем передачи. Окончательный выбор структурной схемы передатчика. Мероприятия по охране труда.

    дипломная работа [210,0 K], добавлен 18.03.2005

  • Технические требования к проектируемому устройству, анализ требований на проектируемое устройство; выбор и обоснование структурной электрической схемы устройства и используемой элементной базы; описание структурной схемы, перечень её элементов.

    курсовая работа [1,5 M], добавлен 22.05.2012

  • Разработка функционально законченного устройства для обработки входных сигналов линии с использованием цифровых устройств и аналого-цифровых узлов. Алгоритм работы устройства. Составление программы на языке ассемблера. Оценка быстродействия устройства.

    курсовая работа [435,5 K], добавлен 16.12.2013

  • Разработка структурной схемы электронного устройства "баскетбольный таймер" с диапазоном 10 минут. Составление варианта реализации электрической принципиальной схемы устройства на интегральных микросхемах. Описание схемы работы таймера, его спецификация.

    курсовая работа [1,7 M], добавлен 22.12.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.