прога
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено deb24 04 марта 2004 г. 14:54
В ответ на: at90_2313(+) отправлено deb24 04 марта 2004 г. 13:30


def f_reg = r16 ;
.def temp = r17
.def t1mult = r18 ;
.def t_off = r19 ;
.def s_reg = r20
.def count = r21 ;
.def s_temp = r22 ;
.def temp1 = r23 ;
.def temp2 = r24 ;
.def data = r15 ;


.equ LEDTIME = 0x08 ;


.equ CNTR = 0x01;
.equ IMP = 1; PD1
.equ CHARG = 2; PB2
.equ BUZZ = 3; PB3
.equ RLED = 4; PB4
.equ GLED = 5; PB5

;f_reg
.equ GD = 0x80;
.equ GDMG = 0x40; Area Damage
.equ PPS = 0x20; Previos Perimeter State
.equ SG = 0x10;
.equ ALD = 0x08;
.equ ALTD = 0x04;
.equ T1RUN = 0x02; T1 is Run

;==========================================================
.org 0x00
rjmp INIT
.org 0x01
rjmp PRESS_KEY;

.org 0x06
rjmp TIME0_INT

.org 0x05
rjmp TIME1_INT

.org 0x0A
rjmp AC_INT
;===========================================


INIT:
ldi temp, RAMEND
out spl, temp
cli
clr f_reg;
clr t_off;
ldi temp, 0x3C
out DDRB, temp;
ldi temp, 0x50
out PORTB, temp;

ldi temp, 0x02;
out DDRD, temp ;
ldi temp, 0x78;
out PORTD, temp;
ldi temp,$08
out ACSR,temp;
ldi temp, 0x02
out MCUCR, temp;
ldi temp, 0x40;
out GIMSK, temp;
ldi temp,0x82;
out TIMSK,temp;
sei ;

;МЮВХМЮЕЛ
MAIN:
;wdr
mov temp, f_reg
andi temp, SG
breq MAIN
mov temp, f_reg
andi temp, GD
breq GNG
rjmp WAIT

;==========================================================
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

GNG:
mov temp, f_reg
andi temp, T1RUN
brne LEDIMP
mov temp, f_reg
andi temp, GDMG
breq MAIN
ldi temp, 0x05
out TCCR1B, temp;
sbr f_reg, T1RUN;
rjmp MAIN ;

LEDIMP:
sbi PORTB, RLED
rcall LEDDELAY
cbi PORTB, RLED
rjmp MAIN


;++++++++++++++++++++ END GNG ++++++++++++++++++++++++

WAIT:
mov temp, f_reg
andi temp, GDMG
breq CBR_GD
cbr f_reg, PPS

LEDSIMP:
rcall LEDDELAY
cbi PORTB, RLED
rcall LEDDELAY
sbi PORTB, RLED
;cbi PORTB, GLED
;rcall LEDDELAY
;sbi PORTB, GLED
rjmp MAIN ;

CBR_GD:
mov temp, f_reg
andi temp, PPS;
brne LEDSIMP
cbr f_reg, GD;
cbi PORTB, RLED;
rjmp MAIN
;++++++++++++++++++++++ END WAIT +++++++++++++++++++++++++
;
LEDDELAY:
ser temp
ser temp1
ldi temp2,LEDTIME
LOOP:
dec temp
brne LOOP
dec temp1
brne LOOP
dec temp2
brne LOOP
ret
;======================= end ==============================

;================ inerrupt vectors ========================
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;INT0
PRESS_KEY:
in s_reg, SREG
mov s_temp, temp
mov temp, f_reg
andi temp, SG;
breq SGRD;
clr temp
out TCCR1B, temp
out TCNT1H, temp;
out TCNT1L, temp
out TCCR0, temp;
out TCNT0, temp;
cbr f_reg, SG;
cbr f_reg, T1RUN;
cbi PORTB, BUZZ;
sbi PORTB, RLED;
cbi PORTB, GLED;
ldi t1mult, MULT;
rjmp END_INT0;
STGRD:
sbr f_reg, GD;
sbr f_reg, SG;
mov temp, f_reg
andi temp, GDMG ;
breq SETPPS;
cbr f_reg, PPS;
rjmp STARTT0;

SETPPS:
sbr f_reg, PPS;
STARTT0:
ldi temp, 0x05;
out TCCR0, temp;

END_INT0:
mov temp, s_temp;
out SREG,s_reg;
reti

;+++++++++++++++++++++ end int0 ++++++++++++++++++++++++++
;
AC_INT:
in s_reg, SREG ;
mov s_temp, temp ;
in temp, ACSR
andi temp, 0x20 ;
brne SET_CHARG ;
cbi PORTB, CHARG;
rjmp END_AC_INT;
SET_CHARG:
sbi PORTB, CHARG;

END_AC_INT:
mov temp, s_temp;
out SREG, s_reg;
reti

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

TIME0_INT:
in s_reg, SREG
mov s_temp, temp
clr data;
cbr f_reg, GDMG;
ldi count, 8;
sbi PORTD, IMP;
T0LOOP1:
in temp, PIND; /* **********************
andi temp, CNTR;
or data, temp;
dec count;
breq COMPL1
rol data
rjmp T0LOOP1

COMPL1:
mov temp, data
andi temp, 0xE0;
brne GDMG_1;
mov temp, data;
com temp;
andi temp, 0x07;
brne GDMG_1;
clr data;
ldi count, 8;
clc
T0LOOP2:
in temp, PIND;
andi temp, CNTR;
or data, temp;
dec count;
breq COMPL2
rol data
rjmp T0LOOP2
COMPL2:
mov temp, data
com temp;
andi temp, ST3;
brne GDMG_1;
mov temp, data;
andi temp, ML3;
brne GDMG_1;
rjmp END_TIME0_INT

GDMG_1:
sbr f_reg, GDMG

END_TIME0_INT:
cbi PORTD, IMP
mov temp, s_temp;
out SREG, s_reg;
reti
;+++++++++++++++++++ end time0_int ++++++++++++++++++++++++
;
TIME1_INT:
.......
reti
;+++++++++++++++++++ end time1_int ++++++++++++++++++++++++


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru