Чтение онлайн

ЖАНРЫ

Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:

EQU SMALLPERIOD1=50;HIGHTFREQTIME; частота для промежуточных длительность единицы

/Variable

DEF smallperiodh=r23.DEF smallperiodl=r24.DEF smallth=r25;

DEF smalltl=r26

DEF periodh=rl8; значение 1/4 периода

DEF periodl=rl9

DEF temp=rl6

DEF temph=r17

DEF tempi=r29

DEF tempi=r22

DEF timeh=r27; значение компаратора. DEF time1=r28

DEF flag=r20; need in for correct initilization

; Program

CSEG

ORG $00

rjmp RESET

ORG $10

RESET:

ldi temp,low(RAMEND)

out SPL,temp

ldi temp,CDDRB; put in/out

out DDRB,temp

ldi temp,CDDRD

out DDRD,temp

ldi periodl,low(FIRSTFREQ); put Initial frequency

таймера,

импульсов импульсов

ldi periodh,high(FIRSTFREQ)

ldi temp,PUTTCCR1B; put CK

out TCCR1B,temp

sbi P0RTB,4; extinguish diods

sbi PORTB,3

ldi flag,0b00000001

ldi smallth,0

ldi smallth,0

ldi temph,0

ldi tempi,0

rjmp MAIN

RSTTIMER:; reset's counter

ldi tempi,0

out TCNT1H,tempi

ldi tempi,0

out TCNT1L,tempi; RESET timeout timer

ret

WAITMATCH:

ldi temp,0b01000000; очищаем 7 бит

out TIFR,temp

LOOP:

in temp,TIFR; wait for matching flag

sbrc flag,2

rjmp LOOPT

in tempi, TCNT1H; сравнение старш. частей текущ. вр. и 1/4 пер.

ср timeh,temp1

breq Р

in tempi, TCNT1H

cp timeh,tempi

brio EXIT

LOOPT:; идем сюда из диодов, так как нам не надо сравнивать текущ. вр. с вр. тек. + 1/4 пер

sbrs temp,6

rjmp LOOP

EXIT:

ret

P:; сравнение младш частей

in temp1, TCNT11

cp temp1,time1

brio LOOP

ldi flag,1

cp tempi,time2

brge EXIT

DIV:; divide in 4

sec

clс

ror temph

ror temp1

clс

ror temph

ror tempi ret

FIRSTOPT:; process the first diode

sbi PORTB,3; light the diode

in tempi,TCNT11

in temph,TCNT1H

add tempi,period1

adc temph,periodh

out OCR1AH,temph; put the time of maching

out OCR1AL,temp1

ldi flag,0b00000100

rcall WAITMATCH; wait match

cbi PORTB,3;extinguish the diode

ldi flag,0

ret

WAIT0:; wait falling

rcall RSTTIMER

cbi PORTB, 4; init

mov timeh,periodh

mov timel,period1

WT:

rcall SMALLPULSES1 sbrs

flag,0

rjmp WT

ldi flag,0

ret

SMALLPULSES1:;forms the intermediate pulses

sbi PORTB,3; light the diode

ldi smallperiod1,low(SMALLPERIODO); put Initial frequency for intermediate pulses for 0

ldi smallperiodh,high(SMALLPERIODO)

add smallt1,smallperiod1

dc smallth,smallperiodh

out OCR1AH,smallth; put the time of maching

out OCR1AL,smallt1

rcall WAITMATCH

sbrc flag,0

rjmp EX

cbi PORTB,3/extinguish the diode

ldi smallperiodl,low(SMALLPERIOD1); put Initial frequency for intermediate pulses for 1

ldi smallperiodh,high(SMALLPERIOD1)

add smallt1,smallperiod1

adc smallth,smallperiodh

out OCR1AH,smallth; put the time of maching

out 0CR1AL,smalltl

rcall WAITMATCH

EX:

ret

WAIT1:; wait raising

in time1,TCNT11; init

in timeh,TCNT1H

add time1,period1

adc timeh,periodh

in smallt1, TCNT11

in smallth, TCNT1H

W1:

rcall SMALLPULSES2

sbrs flag,0

rjmp W1

ldi flag,0

ret

SMALLPULSES2:;forms the intermediate pulses

sbi PORTB,4; light the diode

ldi smallperiod1,low(SMALLPERIOD0); put Initial frequency for intermediate pulses for 0

ldi smallperiodh,high(SMALLPERIOD0)

add smallt1,smallperiod1

adc smallth,smallperiodh

out OCR1AH,smallth; put the time of maching

out OCR1AL,smallt1

rcall WAITMATCH

sbrc flag,0

rjmp EX1

cbi PORTB,4/extinguish the diode

ldi smallperiod1,low(SMALLPERIOD1); put Initial frequency for intermediate pulses for 1

ldi smallperiodh,high(SMALLPERI0D1)

add smallt1,smallperiod1

adc smallth,smallperiodh

out OCR1AH,smallth; put the time of maching

out OCR1AL,smallt1

rcall WAITMATCH

EX1:

ret

SECONDOPT:; process the second diode

sbi P0RTB,4; light the diode

in temp1,TCNT11

in temph,TCNT1H

add temp1,period1

adc temph,periodh

ldi flag,0b00000100

out OCR1AH,temph; put the time of maching

out OCR1AL,temp1

rcall WAITMATCH; wait match

ldi flag,0

cbi PORTB,4/extinguish the diode

ret

SAVEFAZA:; calculate new period

in temp1,TCNT11

in temph,TCNT1H

rcall DIV

mov period1,temp1

mov periodh,temph

ldi temp1,0

ldi temph,0

ldi smallth,0

ldi smallt1,0

ldi time1,0

ldi timeh,0

ret

MAIN:

sbis ACSR,5;wait rise

rjmp MAIN

sbrs flag,0

rcall SAVEFAZA

ldi flag,0

rcall WAIT0

rcall FIRSTOPT

FALL:

sbic ACSR,5;wait falling

rjmp FALL

Поделиться с друзьями: