Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
к4.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
269.26 Кб
Скачать

Список використаних джерел

1. http://auction.ua/item/1147312. htm

2. http://gsm-c45. narod.ru/PIC16F628A.html

3. http://pro-radio.ru/controllers/3864/

4. http://www.compitech.ru/html. cgi/arhiv/03_04/stat_120. htm

5. http://www.rlocman.ru/shem/search.html? q=PIC16F628A

6. http://www.gsm-storozh.com/1. htm

7. Вовків А. УЗ датчик охоронної сигналізації. - Радіо, 2003 № 5, с.

8. www.itsf.ru/bespr. htm

9. Козаченко В., Хмельовськая Л. Кодовий замок // Радіо. - 1990. - №8

10. Марченко Д.Н. Просте економне охоронне устройство //. - №9.

11. Нечаєв І. ІК-локатор для сліпих. - Радіо, 1989 N10, С.84

12. ("Радіомир" №9/2004, с.38-44.

13. Вілл В. Інфрачервоний сторож. - Радіо, 1996 № 1, с.52-54.

14. Вілл В. Ультразвукий автосторож. - Радіо, 1996 № 4, с.43-49.

15. Виноград Ю. Электронная охрана. - М.: СИМВОЛ-Р|, 1996

16. Радіо, 1998 N7, С.42

17. Магнітометричний пристрій для охоронної сигналізації // Патент РФ № 2075905 від 20.03.96

Додатки Додаток 1. Основні технічні характеристики мікроконтролера pic16f628

Додаток 2

Рис.2.5 Схема розробленого пристрою.

Додаток 3. Програма для мікроконтролера pic16f628a

includep16f628. inc

__config _WDT_ON & _MCLRE_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _BODEN_OFF

; программа для частоты процессора 1 МГц!!!

cblock 0x20

dsdat0

dsdat1

dsdat2

dsdat3

dsdat4

dsdat5

dsdat6

dsdat7

var_01

var_02

var_03

var_04

var_05

var_06

_4del

_ms_del

endc

DQequ4

Bp1equ2

Bp2equ3

; - ------

org 0x00

movlwb'00000111'

movwfCMCON; компараторы не используются

bcfPORTA, 1;!!!!!!!!!!!!!

bcf STATUS, RP1

bsf STATUS, RP0; bank 1

movlwb'11110001'

movwfTRISA

movlwb'00000001'

movwfTRISB

movlwb'01111010'

movwfOPTION_REG

bcfSTATUS, RP0; bank 0

movlwd'50'

movwfvar_01

start_test:

btfscPORTB, 0

gotod_start

movlwd'100'

call _ms_delay

decfszvar_01, f

gotostart_test

call_clean_eeprom; - очистить EEPROM

movlwd'114'

movwfvar_01

movlwd'31'

movwfvar_02

movlwd'2'

movwfvar_03

call_sound

movlwd'67'

call_ms_delay

call_sound

d_start:

; задержка ~72 мс

sleep

; передаём ипульс сброса

bcfPORTA, DQ

bsfSTATUS, RP0; bank 1

bcfTRISA, DQ; DQ - выход

bcfSTATUS, RP0; bank 0

movlwd'124'; задержка 502 мкс

call_4delay

bsfSTATUS, RP0; bank 1

bsfTRISA, DQ; DQ - вход

bcfSTATUS, RP0; bank 0

movlwd'16'; задержка 70 мкс

call _4delay

btfscPORTA, DQ; на DQ низкий уровень?

gotod_start; нет - начать с начала

movlwd'106'; задержка 430 мкс

call_4delay

btfssPORTA, DQ; на DQ высокий уровень?

gotod_start; нет - начать с начала

; передаём команду

movlw0x33; код команды

callsend_byte

movlw dsdat0

movwf FSR

movlwd'8'

movwfvar_03

_next_rc_byte:

callreceive_byte

movwfINDF

incfFSR, f

decfszvar_03, f

goto_next_rc_byte

movfdsdat0, f

btfscSTATUS, Z

goto_error_data

; вычисляем CRC

clrfvar_04

movlwd'7'

movwf var_01

movlw dsdat0

movwf FSR

Next_byte:

movlw 0x08

movwf var_02

movfINDF, w

movwf var_03

DoCRC_Loop:

xorwf var_04, w

movwf var_05

rrf var_05, w

movf var_04, w

btfsc STATUS, C

xorlw b'00011000'

movwf var_05

rrf var_05, w

movwf var_04

bcf STATUS, C

rrf var_03, f

movf var_03, w

decfsz var_02, f

goto DoCRC_Loop

incf FSR, f

decfszvar_01, f

goto Next_byte

; в переменной var_04 - crc первых 7-ми байт

movf var_04, w

xorwf dsdat7, w

btfss STATUS, Z

goto _error_data

clrwdt; сброс watсhdog таймера

callsearch_eeprom

xorlw0x01

btfssSTATUS, Z

gotof_id

ok_idcall_identify_ok

gotod_start

f_idcall_identify_failed

gotod_start

search_eeprom:

; поиск в EEPROM

clrw

bsfSTATUS, RP0; bank 1

movwfEEADR

bsfEECON1, RD

movfEEDATA, w

bcfSTATUS, RP0; bank 0

movwfvar_01; количество ключей

movlw0x01

movwfvar_02; адрес в EEPROM

_next_sr:

movlwd'6'

movwfvar_03; номер проверяемого байта

movlwdsdat1

movwfFSR

_st_cmp:

movfvar_02, w; адрес в W

bsfSTATUS, RP0; bank 1

movwfEEADR; W в регистр адреса

bsfEECON1, RD; начать чтение

movfEEDATA, w; из EEPROM в W

bcfSTATUS, RP0; bank 0

xorwfINDF, w; сравнить прочитанный байт с байтом

btfscSTATUS, Z; равны?

goto_next_cmp; да, сравнить следующий

movfvar_03, w

addwfvar_02, f

decfszvar_01, f; все номера сравнены?

goto_next_sr; нет, сравнить снова

clrw; да, выйти из подпрограммы с W=0

gotoexit_se

_next_cmp:

incfFSR, f; следующий байт

incfvar_02, f; следующий байт EEPROM

decfszvar_03, f; все байты проверены?

goto_st_cmp; нет, проверить следующие

; да - выйти из подпрограммы с W=1

movlw0x01

exit_se:

return

_identify_ok:

; сигнал "пользователь определён"

movlwd'45'; 556 Hz

movwfvar_01

movlwd'37'; 1/15 сек

movwfvar_02

movlwd'2'

movwfvar_03

call_sound

movlwd'40'; 625 Hz

movwfvar_01

movlwd'42'; 1/15 сек

movwfvar_02

call_sound

movlwd'67';

call_ms_delay;

movlwd'30'; 833 Hz

movwfvar_01

movlwd'111'; 1/7 сек

movwfvar_02

call_sound

movlwd'15'

movwfvar_01

movlwd'222'

movwfvar_02

call_sound

btfssPORTB, 0;!!!!!!!

call_write_serial;!!!!!!!

bsfPORTA, 1

movlwd'7'

movwfdsdat0;!!!! используется dsdat0

next_id_sound:

movlwd'14'

movwfvar_01

movlwd'51'

movwfvar_02

movlwd'14'

movwfvar_03

call_sound

movlwd'100'

call_ms_delay

decfszdsdat0, f

gotonext_id_sound

bcfPORTA, 1

return

_identify_failed:

; сигнал "пользователь не определён"

movlwd'45'; 556 Hz

movwfvar_01

movlwd'37'; 1/15 сек

movwfvar_02

movlwd'2'

movwfvar_03

call_sound

movlwd'40'; 625 Hz

movwfvar_01

movlwd'42'; 1/15 сек

movwfvar_02

call_sound

movlwd'67';

call_ms_delay;

movlwd'241'; 104 Hz

movwfvar_01

movlwd'14'; 1/7 сек

movwfvar_02

call_sound

movlwd'67';

call_ms_delay;

call_sound

btfssPORTB, 0

call_write_serial

movlwd'7'

movwfvar_01

movlwd'250'

call_ms_delay

decfszvar_01, f

goto$-3

return

; подпрограмма передачи байта

send_byte:

movwfvar_01

movlwd'8'

movwfvar_02; количество передаваемых бит

next_tr_b:

bcfPORTA, DQ

bsfSTATUS, RP0; bank 1

bcfTRISA, DQ; DQ - выход

bcfSTATUS, RP0; bank 0

nop

nop

rrfvar_01, f

btfscSTATUS, C

goto_set_in

nop

nop

goto_no_set_in

_set_in:

bsf STATUS, RP0; bank 1

bsfTRISA, DQ; DQ - вход

bcfSTATUS, RP0; bank 0

_no_set_in:

movlwd'14'; задержка 62 мкс

call_4delay

bsf STATUS, RP0; bank 1

bsfTRISA, DQ; DQ - вход

bcfSTATUS, RP0; bank 0

nop

nop

nop

nop

decfszvar_02, f

gotonext_tr_b

return

; подпрограмма приёма байта

receive_byte:

movlwd'8'

movwfvar_01

clrfvar_02

next_rc_b:

bcfPORTA, DQ

bsfSTATUS, RP0; bank 1

bcfTRISA, DQ; DQ - выход

bcfSTATUS, RP0; bank 0

nop

nop

nop

nop

nop

nop

bsfSTATUS, RP0; bank 1

bsfTRISA, DQ; DQ - вход

bcfSTATUS, RP0; bank 0

nop

nop

nop

bcf STATUS, C

btfscPORTA, DQ

bsfSTATUS, C

rrfvar_02, f

movlwd'11'; задержка 50 мкс

call_4delay

decfszvar_01, f

gotonext_rc_b

movfvar_02, w

return

; - -----____--------------

_error_data:

movlwd'223'

movwfvar_01

movlwd'9'

movwfvar_02

movlwd'2'

movwfvar_03

call_sound

goto d_start

; подпрограмма задержки ms

_ms_delay:

movwf_ms_del

_1000us:

nop

nop

movlwd'247'

call_4delay

decfsz_ms_del, f

goto_1000us

return

; подпрограмма задержки us

_4delay:

movwf _4del

l4dlclrwdt

decfsz _4del, f

goto l4dl

return

_write_serial:

movlwdsdat1

movwfFSR

bsfSTATUS, RP0; bank 1

clrfEEADR

bsfEECON1, RD

movfEEDATA, w

bcfSTATUS, RP0; bank 0

movwfvar_01

sublwd'20'

btfssSTATUS, C

goto_mem_full

movfvar_01, w

bcfSTATUS, C;

rlfvar_01, f; умножаем var_01 на 6

rlfvar_01, f; - ------ // ---------

addwfvar_01, f; - ----- // ---------

addwfvar_01, f; - ---- // ---------

incfvar_01, w; var_01 +1

bsfSTATUS, RP0; bank 1

bsfEECON1, WREN

movwfEEADR

_next_byte:

movfINDF, w

movwfEEDATA

call_eeprom_write

incfEEADR, f

incfFSR, f

movlwdsdat7

subwfFSR, w

btfssSTATUS, C

goto_next_byte

bcfEECON1, WREN

clrfEEADR

bsfEECON1, RD

movfEEDATA, w

addlw0x01

bsfEECON1, WREN

movwfEEDATA

call_eeprom_write

bcfEECON1, WREN

bcfSTATUS, RP0; bank 0

gotoexit_write_serial

_mem_full:

movlwd'30'

movwfvar_01

movlwd'165'

movwfvar_02

movlwd'2'

movwfvar_03

call_sound

movlwd'67';

call_ms_delay;

movlwd'34'

movwfvar_01

movlwd'105'

movwfvar_02

call_sound

movlwd'67';

call_ms_delay;

movlwd'28'

movwfvar_01

movlwd'178'

movwfvar_02

call_sound

movlwd'67';

call_ms_delay;

movlwd'45'

movwfvar_01

movlwd'79'

movwfvar_02

call_sound

exit_write_serial:

return

_clean_eeprom:

bsfSTATUS, RP0; bank 1

bsf EECON1, WREN; разрешить запись

clrfEEADR

movlw0x00

movwfEEDATA

goto_write_first

_nx_adrmovlw0xFF

movwfEEDATA

_write_first:

call _eeprom_write

incfEEADR, f

movlw0x80

subwfEEADR, w

btfssSTATUS, C

goto_nx_adr

bcfEECON1, WREN; запретить запись

bcfSTATUS, RP0; bank 0

return

_eeprom_write:

; bcf INTCON, GIE; запретить прерывания

clrwdt

movlw 0x55

movwf EECON2

movlw 0xAA

movwf EECON2

bsf EECON1, WR

eewrtsbtfsc EECON1, WR

goto eewrts

return

org 0x2100

DATA 0x00

end

Размещено

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]