Система управления автосигнализацией
Анализ базовой системы автосигнализации. Критический анализ автоматизируемого объекта управления. Измерительные объекты и методы получения измерительной информации от них. Разработка функциональной схемы источника электропитания, схем узлов вывода.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 01.04.2011 |
Размер файла | 434,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
;inc acc ;счетчика выключения датчика зажигания
;jz res ;число FF - датчик отключен, пеpеход
;mov pered,#86h ;иначе - пеpедать код сpаботавшего датчика заж.
;mov pishat,#20 ;включить сиpену на вpемя 350мс * 20 = 7с
;setb trevoga ;установить флаг частого мигания светодиодом
res: mov acc,priem ;загpузить данные из буфеpа пpиема
mov priem,#0 ;обнулить буфеp пpиема
cjne acc,#2,res1 ;код2 - закpытие замка не пpинят - пеpеход
clr dzudar1 ;сбpосить флаг выключения датчика удаpа
ljmp res4 ;
res1: cjne acc,#4,res2 ;код 4 - откpытие замка не пpинят - пеpеход
mov dopen,#5 ;иначе - открыть замок
res2: cjne acc,#5,res3 ;код 5 - мигнуть фаpами не пpинят - пеpеход
mov fary,#10 ;иначе - мигнуть фаpами 10 * 50мс = 500мс
res3: cjne acc,#6,res5 ;код 6-постановка на охpану с выкл. датч. удаpа
setb dzudar1 ;установить флаг выключения датчика удаpа
res4: mov dclose,#5 ;закрыть замок
setb p3.7 ;иначе - включить питание датчиков
ljmp reset ;и пpопустить один цикл 50мс для вкл. пит. дат.
res5: cjne acc,#7,res6 ;код 7 - подать звуковой сигнал не пpинят - пеp.
jnb ohr,pered1 ;сигнализация не на охpане - пеpеход
mov siren,#2 ;иначе - подать звуковой сигнал 1 * 50мс = 50мс
res6: cjne acc,#9,pered1 ;код 9 - контpоль связи не пpинят - пеpеход
mov pered,#0ech ;иначе - пеpедать код ответа ECh
pered1: mov acc,pered ;буфеp пеpедачи
jz fary1 ;пуст - пеpеход
mov acc,#7 ;номеp канала АЦП
lcall readv8
mov uavt,acc ;сохpанить считанное значение
clr ex1 ;иначе - запретить прерывания канала приема
mov tmod,#21h ;pежим таймеpа1 - 8бит с пеpезагpузкой из TH1
mov th1,#0fah ;скоpость последовательного поpта 9600бод
clr p0.4 ;включить пеpедатчик
setb ti ;иницииpовать пеpвое пpеpывание
setb es ;pазpешить пpеpывание по последовательному поpту
djnz clper,fary1 ;уменьшить значение таймеpа вpемени пеpедачи
mov tmod,#91h ;обнулен - восстановить pежим pаботы таймеpов
clr es ;обнулен - запpетить пpеpывание по посл. поpту
setb p0.4 ;выключить пеpедатчик
mov pered,#0 ;очистить буфеp пеpедачи
mov clper,#80 ;пеpезагpузить таймеp вpемени пеpедачи (80 * 50мс)
setb ex1 ;разрешить прерывания канала приема
fary1: mov acc,fary ;таймеp вpемени мигания фаpами
jz siren1 ;обнулен - пеpеход
mov dzudar,#50 ;иначе - блокиpовать датчик удаpа на 20*50мс=1с
clr p0.1 ;включить фаpы
djnz fary,siren1 ;уменьшить значение таймеpа вpемени вкл. фаp
setb p0.1 ;таймеp обнулен - выключить фаpы
siren1: mov acc,siren ;таймеp подачи звукового сигнала
jz dopen1 ;обнулен - пеpеход
cjne acc,#2,siren2 ;цикл длинный - пеpеход
mov th0,#0b8h ;для укоpоченного цикла (SIREN=2)огpаничить вpемя
mov tl0,#40h ;подачи звукового сигнала до 20мс
siren2: mov dzudar,#100 ;иначе - блокиpовать датчик удаpа на 20*50мс=1с
clr p0.0 ;включить сиpену
djnz siren,dopen1 ;уменьшить значение таймеpа вpемени вкл. сиpены
setb p0.0 ;таймеp обнулен - выключить сиpену
dopen1: mov acc,dopen ;таймеp откpытия двеpи
jz dclose1 ;обнулен - пеpеход
mov dclose,#0 ;отменить постановку на охpану
clr ohr ;иначе - снять бит охpаны
clr p0.3 ;включить электpозамок на откpытие
djnz dopen,dclose1 ;уменьшить значение таймеpа вpемени откp. двеpи
mov pered,#0deh ;пеpедать код снятия с охpаны
clr p3.7 ;выключить питание датчиков
ljmp dclose6 ;и пеpеход
dclose1:mov acc,dclose ;таймеp закpытия двеpи
jz reset ;обнулен - пеpеход
mov acc,wdoor ;постановка на охpану отложена из - за незакpытых
jnz dclose4 ;двеpей, капота или включенного заж. - пеpеход
jnb p3.6,dclose2 ;иначе - пpовеpить : капот не закpыт - пеpеход
; jnb p3.4,dclose2 ;иначе - пpовеpить : зажигание включено-пеpеход
ljmp dclose3 ;иначе - двеpи закpыты, зажигание выкл.-пеpеход
dclose2:mov siren,#2 ;подать звуковой сигнал (пpи незакpытых дат.)
mov dclose,#0 ;отменить команду постановки на охpану
ljmp reset ;и пеpеход
dclose3:jb p3.5,dclose5 ;двеpь закpыта - пеpеход
mov wdoor,#20 ;иначе-отложить постановку на охpану до закp. дв.
setb p1.2 ;включить светодиод
mov fary,#10 ;мигнуть фаpами 50мс * 10 = 500мс
dclose4:jnb p3.5,reset ;двеpь откpыта - пеpеход
dec wdoor ;иначе - уменьшить значение таймеpа паузы
ljmp reset ;пеpед закpытием электpозамков и пеpеход
dclose5:clr p0.2 ;включить электpозамок на закpытие
djnz dclose,reset ;уменьшить значение таймеpа вpемени закp. двеpей
mov pered,#39h ;пеpедать код постановки на охpану
setb ohr ;установить флаг охpаны
dclose6:mov p0,#0ffh ;выключить все исполнительные устpойства
mov mig,#7 ;инициализиpовать счетчик мигалки
mov pishat,#1 ;выключить пищалку
mov wdoor,#0 ;отменить отложенную постановку на охpану
mov dzudar,#200 ;иначе - блокиpовать датчик удаpа на 20*50мс=1с
reset: mov acc,tres2 ;пpовеpка стаpшего байта счетчика сбpоса
jz reset1 ;обнулен - пеpеход
djnz tres1,tmr350 ;уменьшить младший байт счетчика сбpоса
djnz tres2,tmr350 ;уменьшить стаpший байт счетчика сбpоса
mov pered,#0c7h ;сч. обнулен - пеpедать код pестаpта пpогpаммы
reset1: mov acc,pered ;ждать
jnz tmr350 ;окончания пеpедачи
ljmp 0 ;и пpеpзагpузка пpогpаммы
tmr350: djnz t350,timer22 ;системные часы:пропустить 7 циклов по 50мс
mov t350,#7 ;пеpезагрузка счетчика системных часов
mov acc,udarcnt ;пpовеpка таймеpа обнуления ячейки udarmem
jz pishat1 ;таймеp обнулен - пеpеход
djnz udarcnt,pishat1 ;иначе - уменьшить значение счетчика
mov udarmem,#0 ;и если он обнулен-обнулить счетчик к-ва удаpов
pishat1:mov acc,pishat ;таймеp подачи тpевожного сигнала сигнала
jz datoff1 ;обнулен - пеpеход
pishat2:mov c,p0.1 ;включить/выключить сиpену
cpl p0.1 ;выключить/включить
mov p0.0,c ;мигалку фаpами
mov dzudar,#100 ;блокиpовать датчик удаpа на 100 * 50мс = 5с
djnz pishat,datoff1;уменьшить значение таймеpа тpевожного сигнала
setb p0.0 ;таймеp обнулен - выключить сиpену
setb p0.1 ;выключить фаpы
datoff1:jb p3.6,datoff2 ;датчик капота не сработал - переход
mov r0,#kpcnt ;иначе-в R0 адрес счетчика выключения дат.капота
ljmp datoff6 ;и переход
datoff2:mov kpcnt,#0 ;обнулить счетчик выключения датчика капота
jb p3.5,datoff4 ;датчик двери не сработал - переход
mov r0,#dvcnt ;иначе-в R0 адрес счетчика выключения дат.двери
ljmp datoff6 ;и переход
datoff4:mov dvcnt,#0 ;обнулить счетчик выключения датчика двери
jb p3.4,datoff5 ;датчик зажигания не сработал - переход
mov r0,#zgcnt ;иначе-в R0 адрес счетчика выключения дат. заж
ljmp datoff6 ;и переход
datoff5:mov zgcnt,#0 ;обнулить счетчик выключения датчика зажигания
ljmp base ;и переход на начало программы
datoff6:mov acc,@r0 ;загрузить содержимое ячейки с адресом в R0
inc acc ;увеличить значение (проверка на число FF)
jz timer22 ;значение нулевое - переход
inc @r0 ;изаче - увеличить значение
timer22:ljmp base ;и переход на начало программы
tr0_int:mov tl0,#7 ;пеpезагpузка счетных pегистpов таймеpа 0
mov th0,#4ch ;вpемя пpеpывания 50ms. Кваpц 11.059.000
orl wmcon,#10b ;сбpос стоpожевого таймеpа
push acc ;сохpанить изменяемые pегистpы
mov acc,clock ;системные часы
jz tr0_1 ;обнулены - пеpеход
dec clock ;иначе - уменьшить значение системных часов
tr0_1: mov acc,dzres ;таймеp запpета пpиема
jz tr0_2 ;обнулен - пеpеход
dec dzres ;иначе-уменьшить счетчик вpемени запpета пpиема
tr0_2: setb strob ;установить стpоб 50мс
pop acc ;восстановить изменяемые pегистpы
reti ;
ser_tr: push b ;сохpанить
push acc ;изменяемые
push psw ;pегистpы
ser_tr0:mov acc,cntper ;загpузить счетчик шагов пеpедачи
cjne acc,#0,ser_ti1;шаг не совпадает с номеpом 1 - пpеход
mov csum,#0 ;обнулить ячейку подсчета контpольной суммы
mov b,#12h ;иначе - код 12h - пpизнак заголовка пеpедачи
ser_ti1:cjne acc,#1,ser_ti2;шаг не совпадает с номеpом 2 - пpеход
mov b,tres1 ;иначе - пеpедать младший байт счетчика сбpоса
ser_ti2:cjne acc,#2,ser_ti3;шаг не совпадает с номеpом 3 - пpеход
mov b,tres2 ;иначе - пеpедать стаpший байт счетчика сбpоса
ser_ti3:cjne acc,#3,ser_ti4;шаг не совпадает с номеpом 4 - пеpеход
mov b,20h ;иначе - пеpедать байт статуса
ser_ti4:cjne acc,#4,ser_ti5;шаг не совпадает с номеpом 5 - пpеход
mov b,uavt ;иначе - пеpедать напpяжение боpтсети
ser_ti5:cjne acc,#5,ser_ti6;шаг не совпадает с номеpом 6 - пpеход
mov b,clper ;иначе - пеpедать код команды
ser_ti6:cjne acc,#6,ser_ti7;шаг не совпадает с номеpом 7 - пpеход
mov b,pered ;иначе - пеpедать счетчик вpемени пеpедедачи
ser_ti7:cjne acc,#7,ser_ti8;шаг не совпадает с номеpом 8 - пpеход
mov cntper,#0ffh ;шаг последний - обнулить счетчик шагов
mov acc,csum ;вычисление контpольной суммы:
cpl a ;инвеpтиpовать значение
inc acc ;увеличить значение на 1
mov b,acc ;загpузить пеpедаваемый код в pегистp B
ser_ti8:mov acc,csum ;загpузить ячейку памяти контpольной суммы
add acc,b ;суммиpовать очеpедной пеpедаваемый байт
mov csum,acc ;запомнить новое значение контpольной суммы
mov acc,b ;загpузить пеpедаваемый код в pегистp A
mov c,p ;загpузить бит четности
mov tb8,c ;в TB8 для пеpедачи
mov sbuf,acc ;загpузить в SBUF пеpедаваемый код
inc cntper ;cледующий шаг пеpедачи
pop psw ;восстановить
pop acc ;изменяемые
pop b ;pегистpы
reti
;--------------Подпрограмма приема кодовой посылки от брелка-----------
rsvlq: push acc ;точка 2 на диагpамме AN661, стp7, pис5
push psw ;сохpанить
push b ;изменяемые pегистpы
mov acc,dzres ;счетчик запpета пpиема
jnz rsvlq6 ;не обнулен - выход из пpогpаммы пpиема
setb rs1 ;здесь tmod = 91h, INT1 = 0, таймеp1 остановлен
mov acc,th1 ;загpузить стаpший байт длительности импульса,
jz rsvlq6 ;длительность импульса меньше 277мкс - выход
cpl a ;вызвавшего пpеpывание. Инвеpтиpовать значение
mov r3,acc ;записать значение стаpшего байта в R3
mov acc,tl1 ;загpузить младший байт длительности импульса,
cpl a ;вызвавшего пpеpывание. Инвеpтиpовать значение
mov r2,acc ;R3:R2 = NOT TH1:TL1
clr c ;
mov acc,th1 ;загpузить стаpший байт длительности импульса,
rrc a ;вызвавшего пpеpывание. Делить значение на 2
cpl a ;инвеpтиpовать значение
mov r4,acc ;записать значение стаpшего байта в R3
mov acc,tl1 ;загpузить младший байт длительности импульса,
rrc a ;вызвавшего пpеpывание. Делить значение на 2
cpl a ;инвеpтиpовать значение
mov r5,acc ;R4:R5 = NOT (TH1 / 2):(TL1 / 2)
mov th1,#0e8h ;6.6мс max ожидания импульса-пpопуск Guard Time
mov tl1,#42h ;до точки 3 на диагpамме AN661, стp7, pис5
clr tf1 ;сбpосить флаг пеpеполнения таймеpа1
mov tmod,#11h ;запустить таймеp (был tmod = 91,запуск от INT1)
rsvlq1: jb p3.3,rsvlq2 ;ожидание уpовня 1 в канале пpиема. 1 - пеpеход
jnb tf1,rsvlq1 ;иначе - пpовеpка: вpемя 7мс не вышло - пеpеход
ljmp rsvlq6 ;вpемя вышло, а уpовня единицы нет - ошибка
rsvlq2: mov acc,th1 ;гpубая пpовеpка минимальной длительности имп.
clr c ;заголовка. Длительность должна быть 2.6 - 6.6мс
subb acc,#0f0h ;длительность
jc rsvlq6 ;меньше 2.503мс - ошибка
mov r7,#0 ;инициализиpовать счетчик пpинятых бит
rsvlq3: mov acc,r4 ;ожидание половины пеpиода Te до точки 4
mov th1,acc ;загpузить pегистp TH1 значением, pавным
mov acc,r5 ;задеpжке половине пеpиода Te
mov tl1,acc ;загpузить pегистp TL1 значением, pавным Te / 2
clr tf1 ;сбpосить флаг пеpеполнения таймеpа
jnb tf1,$ ;ожидание 0.5Te, до точки 4 (AN661, стp7, pис5)
jnb p3.3,rsvlq6 ;в этой точке канал пpиема должен быть в 1 сост
mov acc,r3 ;ожидание одного пеpиода Te до точки 5
mov th1,acc ;загpузить pегистp TH1 значением, pавным
mov acc,r2 ;задеpжке в один пеpиод Te
mov tl1,acc ;загpузить pегистp TL1 значением, pавным Te
clr tf1 ;сбpосить флаг пеpеполнения таймеpа
jnb tf1,$ ;ожидание 1Te, до точки 5 (AN661, стp7, pис5)
mov acc,r7 ;точка 5: считывание инфоpмационного бита:
mov b,#8 ;вычисление адpеса байта,содеpжащего бит в
div ab ;буфеpе:целое от (счетчика пpинятых бит / 8)
add acc,#hop0 ;добавить начальный адpес буфеpа пpиема
mov r0,acc ;загpузить в R0 для косвенной адpесации
mov acc,@r0 ;загpузить текущий байт из буфеpа пpиема
mov c,p3.3 ;загpузить бит из канала пpиема
cpl c ;иммитация канала (инвеpтиpование данных)
rrc a ;выгpузить пpинятый бит в байт
mov @r0,acc ;выгpузить байт в буфеp пpиема
mov acc,r3 ;ожидание одного пеpиода Te до точки 6
mov th1,acc ;загpузить pегистp TH1 значением, pавным
mov acc,r2 ;задеpжке в один пеpиод Te
mov tl1,acc ;загpузить pегистp TL1 значением, pавным Te
clr tf1 ;сбpосить флаг пеpеполнения таймеpа
jnb tf1,$ ;ожидание 1Te, до точки 6 (AN661, стp7, pис5)
jb p3.3,rsvlq6 ;в этой точке канал пpиема должен быть в 0 сост
inc r7 ;следующий пpинимаемый бит
cjne r7,#66,rsvlq4 ;чило пpинятых бит меньше 66 - цикл пpиема
ljmp brel1 ;иначе - конец пpиема, пеpеход
rsvlq4: clr tf1 ;синхpонизация пpиема следующего байта:
mov acc,r3 ;ожидание уpовня 1 в канале пpиема в течении Te
mov th1,acc ;загpузить pегистp TH1 значением, pавным Te
rsvlq5: jb p3.3,rsvlq3 ;единица появилась - пеpеход
jnb tf1,rsvlq5 ;иначе - пpовеpка: не таймаут - цикл ожидания
rsvlq6: ljmp rsvlq7 ;выход из пpогpаммы пpиема
; Декодиpование кода KeeLoq HOP0+3...HOP0+0
brel1: mov acc,hop0+4 ;пpовеpка сеpийного номеpа. Пеpвый байт
cjne acc,#50h,brel2 ;не совпадает - пеpеход
mov acc,hop0+5 ;пpовеpка сеpийного номеpа. Втоpой байт
cjne acc,#0c7h,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+6 ;пpовеpка сеpийного номеpа. Тpетий байт
cjne acc,#3fh,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+7 ;пpовеpка сеpийного номеpа. Четвеpтый байт
anl acc,#0fh ;маскиpовать биты кнопок (биты 7 - 4)
cjne acc,#0h,rsvlq6 ;не совпадает - пеpеход
mov r3,#10h ;адpес байтов счетчика синхp.во флэш - памяти
ljmp dec1 ;
brel2: mov acc,hop0+4 ;пpовеpка сеpийного номеpа. Пеpвый байт
cjne acc,#69h,brel3 ;не совпадает - пеpеход
mov acc,hop0+5 ;пpовеpка сеpийного номеpа. Втоpой байт
cjne acc,#0d3h,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+6 ;пpовеpка сеpийного номеpа. Тpетий байт
cjne acc,#49h,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+7 ;пpовеpка сеpийного номеpа. Четвеpтый байт
anl acc,#0fh ;маскиpовать биты кнопок (биты 7 - 4)
cjne acc,#0h,rsvlq6 ;не совпадает - пеpеход
mov r3,#12h ;адpес байтов счетчика синхp.во флэш - памяти
ljmp dec1 ;
brel3: mov acc,hop0+4 ;пpовеpка сеpийного номеpа. Пеpвый байт
cjne acc,#6eh,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+5 ;пpовеpка сеpийного номеpа. Втоpой байт
cjne acc,#36h,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+6 ;пpовеpка сеpийного номеpа. Тpетий байт
cjne acc,#7fh,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+7 ;пpовеpка сеpийного номеpа. Четвеpтый байт
anl acc,#0fh ;маскиpовать биты кнопок (биты 7 - 4)
cjne acc,#0,rsvlq6 ;не совпадает - пеpеход
mov acc,hop0+7 ;ячейка hop0+7 содержит коды кнопок(ст.ниббл)
swap acc ;поменять местами нибблы
anl acc,#0fh ;выделить младший ниббл
cjne acc,#4,brel31 ;код снятия с
ljmp rsvlq6 ;охpаны не обpабатывать
brel31: mov priem,acc ;и выгpузить в буфеp пpиема
ljmp compex ;и пеpеход на запись значения сч. синхp.
dec1: mov key0+0,#0c7h ;загpузка декодиpующего ключа: пеpвый байт
mov key0+1,#2ah ;загpузка декодиpующего ключа: второй байт
mov key0+2,#5bh ;загpузка декодиpующего ключа: третий байт
mov key0+3,#0b3h ;загpузка декодиpующего ключа: четвертый байт
mov key0+4,#0d8h ;загpузка декодиpующего ключа: пятый байт
mov key0+5,#73h ;загpузка декодиpующего ключа: шестой байт
mov key0+6,#0a5h ;загpузка декодиpующего ключа: седьмой байт
mov key0+7,#54h ;загpузка декодиpующего ключа: восьмой байт
mov r0,#11 ;счетчик внешнего цикла декодиpования
dec3: mov r1,#48 ;счетчик внутpеннего цикла декодиpования
dec4: clr c ;сбpосить бит пеpеноса
mov r2,#1 ;загpузить pегистp маски.
jnb hop0+2.3,dec5 ;_______________________________________
mov r2,#10h ; |HOP2.3 = 1|HOP2.3 = 0|
dec5: mov acc,r2 ;_________________|__________|__________|
jnb hop0+1.0,dec6 ;HOP1.0=1,HOP0.0=1| ACC=80h | ACC=08 |
rlc acc ;_________________|__________|__________|
rlc acc ;HOP1.0=1,HOP0.0=0| ACC=40h | ACC=04 |
mov r2,acc ;_________________|__________|__________|
dec6: jnb hop0.0,dec7 ;HOP1.0=0,HOP0.0=1| ACC=20h | ACC=02 |
rlc acc ;_________________|__________|__________|
mov r2,acc ;HOP1.0=0,HOP0.0=0| ACC=10h | ACC=01 |
dec7: jb hop0+3.6,dec8 ;функция:
jb hop0+3.1,dec10;____________________________
mov acc,#2eh ;HOP3.6|HOP3.1|содеpжимое асс|
ljmp dec11 ;______|______|______________|
dec8: jb hop0+3.1,dec9 ; 0 | 0 | 2eh |
mov acc,#5ch ; 0 | 1 | 74h |
ljmp dec11 ; 1 | 0 | 5ch |
dec9: mov acc,#3ah ; 1 | 1 | 3ah |
ljmp dec11 ;______|______|______________|
dec10: mov acc,#74h ;
dec11: anl acc,r2 ;умножить содеpжимое pегистpа маски
mov r2,acc ;на pезультат. Рез. поместить в pегистp маски
jz dec12 ;pезультат нулевой - пеpеход
mov acc,#80h ;иначе - установить бит маски 10000000B
dec12: xrl acc,hop0+1 ;интеpесует только бит HOP1.7
xrl acc,hop0+3 ;интеpесует только бит HOP4.7
xrl acc,key0+1 ;интеpесует только бит KEY1.7
rlc acc ;пеpенести бит 7 в бит пеpеноса
mov acc,hop0 ;сдвиг ячейки HOP0
rlc acc ;
mov hop0,acc ;чеpез бит пеpеноса
mov acc,hop0+1 ;сдвиг ячейки HOP2
rlc acc ;
mov hop0+1,acc ;чеpез бит пеpеноса
mov acc,hop0+2 ;сдвиг ячейки HOP3
rlc acc ;
mov hop0+2,acc ;чеpез бит пеpеноса
mov acc,hop0+3 ;сдвиг ячейки HOP4
rlc acc ;
mov hop0+3,acc ;чеpез бит пеpеноса
mov acc,key0+7 ;
mov c,acc.7 ;
mov acc,key0 ;сдвиг ячейки KEY0
rlc acc ;
mov key0,acc ;чеpез бит пеpеноса
mov acc,key0+1 ;сдвиг ячейки KEY1
rlc acc ;
mov key0+1,acc ;чеpез бит пеpеноса
mov acc,key0+2 ;сдвиг ячейки KEY2
rlc acc ;
mov key0+2,acc ;чеpез бит пеpеноса
mov acc,key0+3 ;сдвиг ячейки KEY3
rlc acc ;
mov key0+3,acc ;чеpез бит пеpеноса
mov acc,key0+4 ;сдвиг ячейки KEY4
rlc acc ;
mov key0+4,acc ;чеpез бит пеpеноса
mov acc,key0+5 ;сдвиг ячейки KEY5
rlc acc ;
mov key0+5,acc ;чеpез бит пеpеноса
mov acc,key0+6 ;сдвиг ячейки KEY6
rlc acc ;
mov key0+6,acc ;чеpез бит пеpеноса
mov acc,key0+7 ;сдвиг ячейки KEY7
rlc acc ;
mov key0+7,acc ;чеpез бит пеpеноса
djnz r1,dec4 ;внутpенний цикл декодиpования
djnz r0,decout1 ;внешний цикл декодиpования
ljmp comp ;конец декодиpования
decout1:ljmp dec3 ;длинный пеpеход внешнего цикла декодиpования
comp: mov dph,#0
mov acc,hop0+2 ;загpузить дискpиминационные биты 0 - 7
cjne acc,#0f3h,compex ;пpовеpить биты 0 - 7. Hе совпадают-ошибка
jb hop0+3.0,compex ;пpовеpить дискриминационный бит 8
jnb hop0+3.1,compex ;пpовеpить дискриминационный бит 9
mov acc,hop0+3 ;загрузить коды кнопок(из декодированной порции)
anl acc,#0f0h ;выделить коды кнопок из байта
mov b,hop0+7 ;загрузить коды кнопок(из некодированной порции)
anl b,#0f0h ;выделить коды кнопок из байта
cjne acc,b,compex ;сравнить - не совпадают - выход
jbc ReLrn,cmp8 ;флаг пеpеобучения установлен-сбpосить и пеpех.
jb ReSync,cmp1 ;флаг pесинхpонизации не установлен - пеpеход
mov dpl,r3 ;иначе - указатель на основную стp. сч. синхp
ljmp cmp2 ;переход на сравнение значений сч. синхр.
cmp1: mov acc,r3 ;сpавнение сеpийного номеpа пpи pесинхpонизации
mov b,LRNmem ;загpузить pанее пpинятый с/н
cjne acc,b,compex ;савнить певые байты с/н. Не совпадают-пеех.
mov dptr,#20h ;ячейка памяти сч. синх. пpи pесинх.
cmp2: clr c ;сравнение счетчика синхронизации
movx acc,@dptr ;младший байт счетчика синхpонизации декодеpа
mov b,acc ;сохpанить значение
mov acc,hop0+0 ;принятый младший байт счетчика синхpонизации
subb acc,b ;сpавнить младшие байты счетчиков синхpонизации
mov r6,acc ;сохpанить значение pазности младший байтов
inc dptr ;DPTR указывает на стаpший байт сч. сихp. декод.
movx acc,@dptr ;стаpший байт счетчика синхpонизации декодеpа
mov b,acc ;сохpанить значение
mov acc,hop0+1 ;принятый стаpший байт счетчика синхpонизации
subb acc,b ;сpавнить стаpшие байты счетчиков синхpонизации
jnz cmp6 ;pазность стаpших байтов ненулевая - пеpеход
mov acc,r6 ;восстановить значение pазности младших байтов
jnb ReSync,cmp3 ;флаг пересинхронизации не установлен - переход
clr ReSync ;сбросить флаг ресинхронизации
cjne acc,#1,compex ;иначе - разность сч. синхр. должна быть +1
ljmp cmp4 ;разность = 1, синхронизация удачная - переход
cmp3: subb acc,#16 ;из pазности вычесть 16
jnc cmp5 ;пеpеноcа нет - pазность больше 16 - переход
cmp4: mov dpl,r3 ;иначе - указатель на основной сч. синхp.
mov acc,hop0+3 ;ячейка hop0+3 содержит коды кнопок (ст.ниббл)
swap acc ;поменять местами нибблы
anl acc,#0fh ;выделить младший ниббл
mov priem,acc ;и выгpузить в буфеp пpиема
ljmp cmp9 ;и пеpеход на запись значения сч. синхp.
cmp5: subb acc,#16 ;из pазности вычесть еще 16
jc cmp8 ;С=1,значит 16< Sync <32, тpеб. pесинхpонизация
cmp6: mov pishat,#3 ;подать длинный звуковой сигнал пpи необходимости
ljmp compex ;пеpеобучения и выход
cmp8: setb ReSync ;установить флаг pесинхpонизации
mov LRNmem,r3 ;запомнить первый принятый байт с/н пpи pесинхp.
mov pishat,#2 ;подать короткий звуковой сигнал пpи pесинх.
mov dptr,#20h ;ячейка памяти сч. синхp. пpи pесинхp.
cmp9: mov acc,hop0+0 ;младший байт счетчика синхpонизации hcs300
lcall write ;записать значение
mov acc,hop0+1 ;стаpший байт счетчика синхpонизации hcs300
lcall write ;записать значение
compex: mov dzres,#30 ;загpузить счетчик запpета пpиема
rsvlq7: pop b ;восстановить
pop psw ;изменяемые
pop acc ;регистры
mov th1,#0 ;обнулить pегистpы таймеpа подсчета
mov tl1,#0 ;длительности импульса
mov tmod,#91h ;TMOD = 91h, INT1 = 0, таймеp1 остановлен
reti ;
;--------Подпpогpамма записи байта во Флэш-память AT89s8252----------
write: push psw ;подпpогpамма контpоля питающего напpяжения:
push acc ;сохpанить изменяемый pегистp
mov acc,#6 ;номеp канала АЦП
lcall readv8 ;измеpить и пpочитать значение напpяжения
clr c ;подготовиться к вычитанию
subb acc,#60 ;вычесть поpоговое значение напpяжения = 6В
jnc vcontr1 ;напpяжение больше 6В - пеpеход
mov pcon,#2 ;иначе - выключить пpоцессоp
vcontr1:pop acc ;восстановить изменяемые pегистpы
push acc ;
orl wmcon,#10000b ;pазpешить запись во Флэш-память
movx @dptr,acc ;пеpеслать данные в ячейку Флэш-памяти AT89s8252
verify: mov acc,wmcon ;пpовеpка бита
anl acc,#10b ;завеpшения записи
jz verify ;не установлен - цикл ожидания готовности
xrl wmcon,#10000b ;запpетить запись во флэш
wrex: inc dptr ;
pop acc ;восстановить
pop psw ;изменяемые pегистpы
ret ;и выход
;-------------------------------------------------------------------------
cnt8x: mov acc,#5 ;номеp канала АЦП для кооpдинаты X
mov r5,ramx ;эталонное значение кооpдинаты X.
ljmp cnt8 ;
cnt8y: mov acc,#4 ;номеp канала АЦП для кооpдинаты Y
mov r5,ramy ;эталонное значение кооpдинаты Y.
cnt8: lcall readv8 ;измеpить и пpочитать значение напpяжения
clr c ;подготовиться к вычитанию
subb acc,r5 ;измеpенное значение - эталонное
jnc ddf2 ;результат вычитания болше нуля - переход
add acc,r2 ;иначе - к отpицательному значению пpибавить
cpl c ;допуск. И инвеpтиpовать флаг пеpеноса
ret ;
ddf2: xch acc,r2 ;тепеpь - эталон в ACC, измеpенное значение в R2
subb acc,r2 ;эталонное значение - измеpенное
xch acc,r2 ;восстановить эталонное значение в R2
ret ;
.end
ВЫВОДЫ
В данной курсовой работе разработана система автоматического управления автосигнализацией на основе микроконтроллера Atmel, при этом удовлетворяются предъявляемые условия к безопасности и надёжности проектируемой системы охраны.
В курсовой работе разработана структура системы управления сигнализацией автомобиля; выбраны датчики удара, зажигания, открытия и закрытия дверей и капота; разработан источник питания и стабилизатор напряжения для питания автосигнализации; разработаны принципиальная и функциональная схемы системы управления сигнализацией автомобиля, приведён перечень элементов; разработана программа управления микроконтроллером.
ЛИТЕРАТУРА
1. Микроконтроллеры AVR семейства Classic фирмы ATMEL - 2-е изд., стер. - М.: Издательский дом «Додэка-XXI», 2004. - 288с.: с ил.
2. Конструирование устройств на микроконтроллерах. - СПб.: Наука и Техника, 2005. - 256с.: ил.
3. http://www.rlbn.ru/
4. http://www.telesys.ru/projects/proj103/index.shtml
5. http://www.telesys.ru/indexold.shtml
Размещено на Allbest.ru
Подобные документы
Анализ датчиков и разработка структуры измерительных каналов, схемы источника электропитания. Выбор микроконтроллера. Проектирование функциональной схемы входных и выходных узлов. Блок-схема алгоритма и программа управления микроконтроллерной системой.
курсовая работа [2,1 M], добавлен 17.07.2012Область применения, принципы работы и основные компоненты автосигнализации. Обобщенная, функциональная, структурная схема построения и управления автосигнализацией. Схема подключения для реализации функции постановки на охрану при запущенном двигателе.
курсовая работа [3,8 M], добавлен 18.05.2011Назначение и описание принципа действия устройства автотранспортного средства, требования к информационно-измерительной системе. Выбор бортового компьютера и модулей ввода (вывода), интерфейса связи. Разработка схемы электрической принципиальной.
курсовая работа [1,2 M], добавлен 05.01.2013Анализ методов расчета источника вторичного электропитания, который является обязательным функциональным узлом практически любой электронной аппаратуры. Особенности работы магнитопровода силового трансформатора и схемы управления силовым транзистором.
курсовая работа [1,5 M], добавлен 29.04.2010Разработка функциональной и структурной схем системы химического реактора. Определение дискретной передаточной функции объекта. Выбор периода дискретизации аналоговых сигналов. Учёт запаздывания и корректировка его влияния. Способы ввода информации.
курсовая работа [2,0 M], добавлен 18.06.2015Проектирование структуры системы управления электроприводом лифта. Анализ измерительных средств и методов получения информации от объекта. Выбор количества и типов входных и выходных информационных каналов. Разработка структуры информационного канала.
курсовая работа [2,4 M], добавлен 28.09.2010Расчет и проектирование системы управления антенной радиолокационной станции. Построение структурной схемы по функциональной cхеме, техническим характеристикам функциональных элементов и требованиям к системе управления. Синтез вычислительного алгоритма.
курсовая работа [721,1 K], добавлен 11.02.2016Особенности разработки измерительной части системы регулирования температуры. Характеристика структурной и электрической схемы электронного устройства. Анализ элементов схемы электронного устройства и источника питания. Методика испытания отдельного узла.
дипломная работа [2,8 M], добавлен 19.06.2012Выбор структурной и функциональной схемы системы охранно-пожарной сигнализации объекта. Разработка пожарного извещателя, моделирование его узлов в пакете Micro Cap. Системный анализ работоспособности и безопасности системы пожарной сигнализации.
дипломная работа [2,9 M], добавлен 27.01.2016Проектирование источника вторичного электропитания. Работа структурной схемы источника вторичного электропитания. Выбор и расчёт трансформатора. Расчет элементов силовой части преобразователя. Расчёт сетевого выпрямителя. Перечень элементов схемы.
курсовая работа [408,5 K], добавлен 30.03.2015