Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: пожалуйста, вот вам код!

Отправлено Jenya_2 19 февраля 2008 г. 16:22
В ответ на: Ответ: Нее, так не пойдет. В следующий раз код вставляйте. отправлено radist 19 февраля 2008 г. 07:10

; -------------------------------
;| Программа для приемника |
;| радиоохранной сигнализации --
; -----------------------______!
;

.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\tn2313def.inc"
.cseg
.org 0

rjmp Reset ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt
rjmp Timer1_compa ;*** совпадение таймера 1
rjmp Timer1_OVF ;*** переполнение таймера 1
rjmp Timer0_OVF ;*** переполнение таймера 0 *****************используем****************
rjmp USART0_RX
rjmp USART0_UDRE
rjmp USART0_TX
rjmp ANALOG_COMP
rjmp PCINT
rjmp Timer1_compB
rjmp Timer1_compA
rjmp Timer0_compB
rjmp USI_START
rjmp USI_OVERFLOW
rjmp EE_READY
rjmp WDT_OVERFLOW
nop
nop
nop
nop
nop



nop
reset:
nop
ldi r22,RamEnd ;инициализация стека
out SPl,r22



ldi r18, 0b11111111
ldi r17, 0b11011111 ; 5-я линия на прием!
out ddrD,r17 ; настройка порта D, на ввод
out portD,r18 ; подтягивающие резисторы на +
out ddrB, r18


ldi r27,0b00000010 ;разрешить прерывание таймера 0 по переполнению Timer1_OVF
out TIMSK,r27

ldi r22,0b00000101 ;тактовый сигнал = CK/1024
out TCCR0,r22


nop
ldi r22,0 ;обнуление таймера
out TCNT0,r22

sei ;разрешить прерывания





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

clr r30

ldi r29,15 ;для мигалки (см. прерывание) (15 входов в прерывание прим.4 сек.)
ldi r28,255 ;для мигалки ----- + ------ (255 входов в прерывание прим.1,2 мин)
rjmp mmm1


INT_0:

INT_1:
Timer1_capt:
Timer1_compa: ;
Timer1_OVF:
;Timer0_OVF: ;***
USART0_RX:
USART0_UDRE:
USART0_TX:
ANALOG_COMP:
PCINT:
Timer1_compB:
Timer0_compA:
Timer0_compB:
USI_START:
USI_OVERFLOW:
EE_READY:
WDT_OVERFLOW:
reti



mmm1:
sei
clr r16
clr r19
clr r17
clr r18
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
sbrs r16,5 ; пропустить если бит 5 в регистре R16 установлен ( проверка на 1 в импульсе распознования 1)
rjmp mmm1
rcall decoder ; если есть импульс 1, ушли на -декодер..если что-то не распознано, тогда на mmm1!
nop
rcall display ; если декодирование успешно- ушли на- DiSPLAY
nop
rjmp mmm1


;*****************************************************************************************************
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
;*****************************************************************************************************

Timer0_OVF: ;************************************ прерывание по переполнению 0 таймера (для мигания)

nop
in r21,sreg
nop
nop
cbi portB,5 ;потушить, если забыли
nop
nop
dec r28 ;(255 входов в прерывание прим.1,2 мин)
breq n_s
nop
nop
v1:
nop
nop
dec r29 ;(15 входов в прерывание прим.4 сек.)
breq nsm
nop
nop
v2:
nop
nop
sbrs r30,1 ; пропустить если установлен флажок
rjmp u
nop
nop
qm:
nop;
nop
sbis portb,4 ; пропустить если установлен
rjmp z1
nop;
nop
sbic portb,4 ; пропустить если очищен
rjmp p
nop
u:
out sreg,r21
nop
nop
nop
nop;
nop
reti ;**************************************** выход из обработчика ********************************************
z1:
nop
nop
sbi portB,4 ; - зажечь часто
nop
nop
rjmp u
p:
nop
nop
cbi portB,4 ; - потушить
cbi portB,5
nop
nop
rjmp u
nsm:
nop
sbrs r30,0 ; пропустить если установлен флажок
rjmp bv
nop
l:
nop
nop
sbi portB,5 ; - зажечь редко
nop
nop
bv:
ldi r29,15
rjmp v2
n_s: ; -нет сигнала (зажечь D6)
sbr r30,1
nop
nop
sbi portb,6 ; - зажечь portc,0
nop
nop
ldi r28,255 ;(255 входов в прерывание прим.1,2 мин)
rjmp v1
;**********************************************конец обработчика****************************



; ****** П о д п р о г р а м м ы ******
;******************************************************************************************************************

display: ;зажигаем светодиоды!
nop
cbr r19,1
nop
sbrc r19,5 ; пропустить если бит 5 в регистре R19 очищен
;sbi portB,7
rcall pi44
nop
sbrs r19,5 ; пропустить если бит 5 в регистре R19 установлен
;cbi portB,7
rcall pi45
nop
sbrc r19,1 ; пропустить если бит 1 в регистре R19 очищен
rcall pi0
nop
sbrc r19,2 ; пропустить если бит 2 в регистре R19 очищен
rcall pi1
nop
sbrc r19,3 ; пропустить если бит 3 в регистре R19 очищен
rcall pi2
nop
sbrc r19,4 ; пропустить если бит 4 в регистре R19 очищен
rcall pi3
nop
;*****
sbi portb,6; portc,0
nop
rcall pause_2
rcall pause_2
rcall pause_2
nop
cbi portb,6 ; потушить portc,0
nop
nop
ldi r28,255 ;обнуление таймера (для - "нет сигнала")
nop
ret

pi44:
sbr r30,0b00000001
nop
nop
sbi portb,7 ; portc,1
nop
nop
;nop
ret
pi45:
cbr r30,0b00000001
nop
nop
cbi portb,7 ;portc,1
nop
nop
;nop
ret
pi0:
ldi r30,2
nop
sbi portB,0
nop
nop
ret
pi1:
ldi r30,2
nop
sbi portB,1
nop
nop
ret
nop
pi2:
ldi r30,2
nop
sbi portB,2
nop
nop
ret
nop
pi3:
ldi r30,2
nop
sbi portB,3
nop
nop
ret

;**************************************************************************************************************
decoder: ; распознование импульсов
nop
nop
;ret
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2
nop
lsl r19
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 2
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2 ; 1 или 0
nop
lsl r19
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 3
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2 ; 1 или 0
nop
lsl r19
;cli ; ********************************
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 4
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2 ; 1 или 0
nop
lsl r19
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 5
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2 ; 1 или 0
nop
lsl r19
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 6
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_2 ; 1 или 0
nop
lsl r19
rcall pause_2
nop
rcall pause_0
;cli
nop
rcall poisk1 ; тактовый 1 ; **********2**********
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 2
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 3
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 4
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 5
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 6
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_3 ; 1 или 0
nop
lsl r18
rcall pause_2
nop
rcall pause_0
nop
;cli
rcall poisk1 ; тактовый 1 ; **********3**********
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 2
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 3
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 4
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 5
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1 ; тактовый 6
nop
rcall pause_2
nop
rcall pause_0
nop
rcall poisk1_4 ; 1 или 0
nop
lsl r17
rcall pause_2
nop
cpse r17,r18 ; *************************** сверка 3-х посылок
rjmp mmm1
nop

cpse r18,r19
rjmp mmm1
nop

ret
;**************************************конец декодера****************************************************************
;
; **** паузы ****
poisk1:
nop
;in r21, sreg
ldi r25,100
nop
rr6:
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
dec r25
nop
brne ff6
rjmp mmm1
nop
ff6:
nop
sbrs r16,5 ; пропустить если бит 1 в регистре R16 установлен ( проверка на 1 в импульсе распознования 1)
rjmp rr6
nop
ret
poisk1_2:
nop
;in r21, sreg
ldi r25,25
nop
rr9:
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
dec r25
nop
brne ff9
rjmp b0 ; если 0
nop
ff9:
nop
sbrs r16,5 ; пропустить если бит 1 в регистре R16 установлен ( проверка на 1 в импульсе распознования 1)
rjmp rr9 ; если 1
nop
cbr r19,1
nop
ret
b0:
nop
sbr r19,1
nop
ret
poisk1_3:
nop
;in r21, sreg
ldi r25,25
nop
rr10:
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
dec r25
nop
brne ff10
rjmp b00 ; если 0
nop
ff10:
nop
sbrs r16,5 ; пропустить если бит 1 в регистре R16 установлен ( проверка на 1 в импульсе распознования 1)
rjmp rr10 ; если 1
nop
cbr r18,1
nop
ret
b00:
nop
sbr r18,1
nop
ret
poisk1_4:
nop
;in r21, sreg
ldi r25,25
nop
rr11:
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
dec r25
nop
brne ff11
rjmp b000 ; если 0
ff11:
nop
sbrs r16,5 ; пропустить если бит 1 в регистре R16 установлен ( проверка на 1 в импульсе распознования 1)
rjmp rr11 ; если 1
nop
cbr r17,1
nop
ret
b000:
nop
sbr r17,1
nop
ret
;***************************************************************************************
pause_0: ; тут должен быть только 0, если появится 1, все вернется к mmm1
nop
;in r21, sreg
ldi r25,65 ; задержка 2 (короткая)
ldi r23,1
ldi r24,1
Loop0:
nop
in r16,pinD ; вывод содержимого порта D, в R16
nop
sbrc r16,5 ; пропустить если бит 1 в регистре R16 сброшен ( проверка на 0 в импульсе p)
rjmp mmm1 ; если 1
nop
dec r25
brne Loop0
dec r23
brne Loop0
dec r24
brne Loop0
ret
;pause_1:
;nop
;in r21, sreg
;ldi r25,100 ; задержка
;ldi r23,40
;ldi r24,1
;Loop1: ;dec r25
;brne Loop1
;dec r23
;brne Loop1
;dec r24
; brne Loop1
; ret
pause_2:
nop
;
ldi r25,3 ; задержка 2 (короткая)
ldi r23,2
ldi r24,1
Loop2: ;nop

dec r25
brne Loop2
dec r23
brne Loop2
dec r24
brne Loop2
nop
ret

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



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

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

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru