Перейти к содержанию

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


solaar

Рекомендуемые сообщения

Приветствую жителей чата!

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

кодового замка на PIC16С84(нарыл что PIC16F84А - это аналог).Вобщем собрал програматор, а прошить не

получилось (фаил не компилируется, говорит иирор при компиляции

програмой MPASMWIN). САм я не разбираюсь в написании

прошивок......:(

На поможете обнаружить ошибки в прошивке?

Буду очень признателен.......:)

;******************************************************************

;Кодовая панель на PIC16C84

;Автор: Aleksander I. Gurin a_gurin@kmv.ru

;Все права на данную разработку принадлежат автору.

;Использование данного устройства в коммерческих целях

;без разрешения автора запрещено.

;(с) 17.08.99

;******************************************************************

list p=16c84, r=dec

errorlevel 0,-305

include "C:\PROGRA~1\MPLAB\p16c84.inc";здесь стоит указать путь к inc-файлу

;соответствующего процессора

__config _cp_off & _wdt_on & _pwrte_off & _xt_osc

count equ h'0010' ;"счетчик" опроса клавиатуры

pres equ h'0011' ;текущее состояние клавиатуры

push equ h'0012' ;последняя нажатая клавиша

tout equ h'0013' ;счетчик задержки

ctout equ h'0014' ;еще один счетчик задержки

dummy equ h'0015' ;когда - как

; (обычно,- счетчик попыток набора кода)

sum equ h'0016' ;регистр проверки правильности ввода кода

flag equ h'0017' ;флаговый регистр

;биты регистра flag

;0 - \

;1 - - счетчик 10-ти секундной задержки

;2 - /

;3 - зарезервирован

;4 - устанавливается, когда набрана очередная цифра кода

;5 - установлен, когда нажата любая кнопка

;6 - установлен, когда разрешена запись в EEPROM

;7 - не используется

;#define test ;установим режим отладки (после отладки эту строчку нужно закомментировать)

org h'00'

goto main

org h'04'

inter bcf intcon,3 ;подпрограмма обработки прерываний

bsf status,5

bcf eecon1,4 ;сбросим флаг окончания записи в EEPROM

bcf status,5

bsf flag,6

retfie

read clrf count ;подпрограмма опроса клавиатуры

incf count,1

clrf pres

clrf push

bcf flag,5

seta comf count,0 ;организуем сканирование клавиатуры "бегущим нулем"

movwf porta ;установим порт RA

call rest ;задержка на установление сигнала на RA

scanb movf portb,0 ;прочитаем порт RB

movwf pres

comf pres,1

xorlw 0x70

movwf pres

swapf pres,1

incf pres,1

decfsz pres,1 ;если была нажата любая кнопка -

goto key ;посмотрим, что нажали

bcf status,c ;если нажатия не было -

rlf count,1 ;прочитаем следующий ряд кнопок

btfss count,4 ;если все прочли -

goto seta

goto eoread ;вернемся в точку вызова.

;Результатом работы следующих семи операторов будет преобразование

;содержимого регистра push к следующему виду (в кавычках - нажатая в

;данный момент кнопка):

;"1" - 09h "2" - 0Ah "3" - 0Ch

;"4" - 11h "5" - 12h "6" - 14h

;"7" - 21h "8" - 22h "9" - 24h

;"*" - 41h "0" - 42h "#" - 44h

;В таком же формате код хранится в EEPROM

;Кстати, при прошивке процессора в EEPROM нужно записать какой-нибудь код.

;Я обычно записываю 42h по адресу 20h в EEPROM.

;Код при этом будет "0".

key movf count,0

movwf push

rlf push,1

rlf push,1

rlf push,1

movf pres,0

iorwf push,1

btfss flag,5 ;если клавиша нажата и мы еще не "пищали" -

call beep ;немного "попищим"

bsf flag,5 ;и установим бит 5 регистра flag,

; чтобы больше не "пищать" пока не отпущена

; нажатая кнопка

goto scanb ;...и посмотрим не отпустили-ли кнопку

eoread return

beep movlw 0xff ;подпрограмма включения бипера

movwf ctout

ifndef test

loop1 bcf portb,2 ;проинвертируем биты 1

bsf portb,1 ;и 2 порта RB

call rest ;... и подождем

bcf portb,1 ;снова проинвертируем биты 1

bsf portb,2 ;и 2 порта RB

call rest ;... и снова подождем

decfsz ctout,1

goto loop1

bcf portb,1

bcf portb,2

endif

return

rest movlw 0x19 ;подпрограмма задержки

movwf tout

loop2 nop

ifndef test ;в режиме отладки обойдем эту задержку

decfsz tout,1

goto loop2

endif

return

compare clrf sum ;подпрограмма проверки кода

movlw 0x20

movwf fsr

mark02 movf 0x00,0 ;просто просуммируем текущие

addwf sum,1 ;значения регистров 20h-27h RAM

incf fsr,1 ;результат оставим в регистре sum

movlw 0x28

xorwf fsr,0

btfss status,z

goto mark02

return

sec nop ;подпрограмма задержки на 1 сек.

ifndef test ;в режиме отладки обойдем эту задержку

bsf status,5

movlw 0x0e ;установим пределитель, чтобы получить

movwf 0x81 ;задержку примерно в одну секунду

bcf status,5

clrwdt ;сбросим WDT

sleep ;... и отдохнем

endif

return

main bsf status,5

movlw 0x00 ;установим порт RA на вывод

movwf trisa

movlw 0x70 ;установим RB0-RB3 и RB7 на вывод

movwf trisb ;... RB4-RB6 - на ввод

bcf 0x81,7

bcf status,5

movlw 0x00

movwf intcon ;запретим прерывания

movlw 0x1f

movwf porta

clrf portb

movlw 0x03 ;число попыток ввода кода

movwf dummy

mark00 movlw 0x20 ;читаем 8 байт правильного кода

movwf fsr ;из EEPROM (20h-27h)

mark01 movf fsr,0 ;в ROM (20h-27h) побайтно

movwf eeadr

bsf status,5

bsf eecon1,rd

bcf status,5

movf eedata,0

movwf 0x00

incf fsr,1

movlw 0x28

xorwf fsr,0

btfss status,z

goto mark01

movlw 0x20

movwf fsr

clrf flag ;сбросим флаги

goto loop0

open movlw 0x0f ;включим зеленый светодиод

movwf porta

call sec ;подождем примерно секунду

call beep ;"попищим" немного

bsf portb,3 ;и откроем таки дрерь

call sec ;примерно на секунду

mark04 bsf porta,4 ;выключим зеленый светодиод

clrf portb

call beep ;еще раз "попищим"

goto main ;... и все сначала

loop0 clrf intcon ;запретим все прерывания

clrwdt ;сбросим WDT

call read ;и опросим клавиатуру

mark09 movlw 0x00

xorwf push,0

btfss status,z ;если нажата любая кнопка -

goto mark05 ;пойдем на mark05

movlw 0x10 ;сбросим RA0-RA3

movwf porta

loop7 movlw 0x88 ;разрешим прерывание по RB

movwf intcon

bsf status,5 ;запустим WDT

movlw 0x0f

movwf 0x81

bcf status,5

clrwdt

sleep

btfsc intcon,0 ;если мы проснулись от нажатия на кнопку -

goto loop0 ;опросим клавиатуру

btfss flag,4

goto loop7

incf flag,1

btfsc flag,2 ;если 10 сек. нет нажатий -

goto main ;то стоит навести порядок

goto loop7 ;в противном случае - подождем еще...

mark05 movlw 0x41 ;... и посмотрим, что нажали.

xorwf push,0

btfss status,z ;если нажали "*" -

goto mark06

goto mark10 ;пойдем на mark10

mark06 movlw 0x44

xorwf push,0

btfss status,z ;если нажали "#" -

goto mark07

goto mark03 ;пойдем на mark03

mark07 movf push,0 ;значит набрана очередная цифра кода

xorwf 0x00 ;...запишем ее в EEPROM

incf fsr,1

movlw 0x10 ;сбросим счетчик 10-ти секундной задержки

movwf flag

goto loop0 ;... и будем ждать следующей цифры кода

mark03 bcf status,c ;был набран код + "#"

call compare ;проверим правильность набора кода

incf sum,1

decfsz sum,1 ;если код правильный -

goto mark08

goto open ;откроем дверь

mark08 decfsz dummy ;"ошибочка" - вычтем одну попытку и проверим,- не была ли она последней

goto mark00 ;попробуем еще раз...

; три раза неправильно введен код!

; любые действия пользователя игнорируются!

movlw 0x40

movwf dummy

clrf porta

loop4 clrf portb

call beep ;"пищим" примерно минуту

call sec

bsf porta,4

decfsz dummy,1

goto loop4

goto main ;... и все сначала

mark10 bcf status,c ;был набран код + "*" - попытка смены кода

call compare ;проверим правильность набора кода

incf sum,1

decfsz sum,1 ;если "старый_код" правильный -

goto main

movlw 0x20

movwf fsr

bcf porta,4 ;включим зеленый светодиод

call beep ;радостно "пискнем"

bsf porta,4 ;и выключим зеленый светодиод

loop6 clrwdt

call read ;опросим клавиатуру

movlw 0x00

xorwf push,0

btfss status,z ;если что-то нажато -

goto mark11

goto loop6

mark11 movlw 0x41 ;... проверим, не нажали-ли "*"

xorwf push,0

btfss status,z ;если "*" -

goto mark12

goto main ;пользователь передумал, пора навести порядок

mark12 movlw 0x44 ;... проверим, не нажали-ли "#"

xorwf push,0

btfss status,z ;если "#" -

goto mark13

goto save ;... значит завершен набор "нового_кода" и его стоит сохранить в EEPROM

mark13 movf push,0 ;если мы сюда "дошли" - значит набрана очередная цифра "нового_кода"

movwf 0x00 ;запишем ее в RAM

incf fsr,1

movlw 0x29

xorwf fsr,0

btfss status,z ;если была попытка ввести 9-ю цифру

goto loop6

call sec ;два раза "пискнем" и не будем сохранять "новый_код"

call beep

call sec

call beep

goto main

save call sec ;перепишем новый код в ееprom

bcf porta,4

call beep

bsf porta,4

clrwdt

movlw 0x20

movwf fsr

loop5 bsf status,5 ;разрешим запись (стандартная процедура записи в EEPROM)

movlw 0x04

movwf eecon1

bcf status,5

bcf flag,6

movf fsr,0

movwf eeadr

movf 0x00,0

movwf eedata

movlw 0xc0

movwf intcon

bsf status,5

movlw 0x09

movwf 0x81

movlw 0x55

movwf eecon2

movlw 0xaa

movwf eecon2

bsf eecon1,wr

loop8 bcf status,5

btfss flag,6 ;пока запись не завершена

goto loop8 ;наматываем круги

clrf intcon

clrwdt

bcf flag,6

incf fsr,1 ;... и так пока не перепишем байты 20h-27h из ROM в EEPROM

movlw 0x28

xorwf fsr,0

btfss status,z

goto loop5

bsf status,5

clrf eecon1

clrf eecon2

movlw 0x0e

movwf 0x81

bcf status,5

clrwdt ;запись завершена

stop bcf porta,4 ;включим зеленый светодиод

call beep ;радостно "пискнем"

bsf porta,4 ;и выключим зеленый светодиод

call sec ;подождем секунду

bcf porta,4 ;включим зеленый светодиод

call beep ;радостно "пискнем"

bsf porta,4 ;и выключим зеленый светодиод

goto main ;... и все сначала

end end

post-19600-1171278106_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Так Я в написании прошивок "0", вот в чем дело.....

Может попробуешь "чайничку" помочь?

Ссылка на комментарий
Поделиться на другие сайты

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Вот ошибки:

1.txt

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 solaar: я Вам уже ответил в тему

http://forum.cxem.net/index.php?showtopic=...0&gopid=109932&

посмотрите там, сделаете как я написал, и все будет ОК!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Тоже не могу понять и увидеть как на сборки например коре дуо ставят сеасоники 
    • Мда...Хотя встречал аппараты 80х чехи немцы. Там стояла только керамика под TO-3.
    • @Lexter большое спасибо за ответ Если у меня маленькая схема, я ведь могу сделать Э0 для удобства? По сути ПК с переферийкой, все покупное и немного жгутов для подключения РГБ лент при помощи контроллера Ниже привел схему, будет ли она верна? Можно ли ее на Э3 использовать? Если нет то как мне эти устройства указывать на Э3? Нужно ли добавлять вид с модели(к примеру ПК) и подписывать на нем разъемы? Ведь на ПК HDMI 3шт(к примеру, можно иметь ввиду что я говорю о USB), и по схеме не понять какой именно X1 И влитые в корпус кабели, можно ли подписывать в блоке их цепь(как у -U1 на схеме выход 12VDC и у сетевого фильтра)? Или вообще никак не пояснять, что за выход у этого блока?
    • Вопрос. Почему большинство именитых производителей применяет или слюду или номакон.?Про кремнийорганику не буду говорить.
    • В теме "Проект MultiQuad-405" возникло живое обсуждение данного вопроса, решил создать новую тему. Делимся мнением по данному вопросу и своим опытом. Мне не нужно объяснять, что лучше, все давно определено на основании собственного опыта и измерений. Немного измерений из интернета: https://pandia.ru/text/80/312/987.php https://mysku.club/blog/aliexpress/73934.html Немного информации по теплопроводности: BeO (оксид бериллия)  250-400 Вт/(м·K) AlN (нитрид алюминия)  180-280 Вт/(м·K) Al2O3 (оксид алюминия)  20-33 Вт/(м·K) Слюда  0,44 - 0,51 Вт/(м*К) Номакон  0,8 - 1,4 Вт/(м*К) Алюминий  200-240 Вт/(м·K)  Медь  390-400 Вт/(м·K) Верхний ряд BeO (оксид бериллия) из СССР Средний Al2O3 (оксид алюминия) отечественного производства Нижние две Al2O3 (оксид алюминия) китай                                                                                                                                                                                                                            
    • Нет, магнитный поток выбивается с торцов дросселя.Торцы дросселя рядом находятся с железом или ферритом -у вас нет.Единственный момент сифонить может слегка с разъма транса, просто поднимите на всякий случай чуть по выше через прокладки из пары текстолитов. Экран думаю вариант очень не айс. Он должен быть из жести, ни медь ни алюминь не подходит.если его сделаете  точка максимально близкая к разъему транса начнет греться. Думается обертывать полностью тоже нельзя - не получился бы короткозамкнутый виток.
×
×
  • Создать...