Читаем Интернет-журнал "Домашняя лаборатория", 2007 №7 полностью

INCLUDE "2313def.inc"


EQU HIGHTFREQ=4000

EQU HIGHTFREQTIME=4000000/HIGHTFREQ

EQU CDDRB=0b00011000; настраиваем входы/выходы

EQU CDDRD=0b00000000

EQU PUTTCCR1B=0b00000010; настраиваем контрольный регистр устанавливаем делитель

EQU FIRSTFREQ=10000/4; начальная частота

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

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

rcall WAIT1

rcall SECONDOPT


rjmp MAIN


EXIT

Перейти на страницу:

Похожие книги

Лучшие модели на любую фигуру без примерок и подгонок
Лучшие модели на любую фигуру без примерок и подгонок

Книга представляет собой сборник, который содержит схемы построения чертежей из двух предыдущих бестселлеров автора, а также предлагает ряд новых моделей. Галия Злачевская – автор эксклюзивной методики конструирования швейных изделий. Особенность ее метода в том, что вариант построения модели подбирается с учетом особенностей силуэта фигуры, поэтому крой сразу получается точным. И главное – больше никаких примерок и подгонок! Следуя простым рекомендациям автора, вы легко сможете «шаг за шагом» освоить эту методику и в итоге – получите идеально сидящую вещь.Вы научитесь создавать современные, неповторимые и оригинальные модели для мужчин, женщин, детей и даже малышей до 3 лет с минимальными затратами времени и сил.

Галия Мансуровна Злачевская

Сделай сам / Хобби и ремесла / Дом и досуг