Смекни!
smekni.com

Измерение длительности импульса (стр. 3 из 3)

RCALL IMPULS_OTR

SBIC PORTA,0

RCALL IMPILS_0_TO_1; на PA1, если его нет, тогда переход

M5OTR:CPI R17,0xFF

BRCS M2OTR

LDI R17,0XA

RJMP M2OTR;

IMPULS_OTR:

;LDI R16,0X9

;LDI R17,0X0

LDI R20, 0B00001001 ; то тогда запускается T/C1

OUT TCCR1B,R20

RET

IMPILS_0_TO_1:

LDI R20,0B00000000 ;T/C1 остановлен

OUT TCCR1B,R20

CPSE R16,R19

RCALL TEST_OF_STOP_TC1_OTR

SBIC PORTA,1

RCALL IMPULS_POLOGITELNAY

RCALL IMPULS_OTRICHATELNAY

RET

TEST_OF_STOP_TC1_OTR:

IN R21,TCCR1B

ANDI R21,0B000000000

BRNE ENDTEST_OF_OTR

RCALL bin16BCD5

ENDTEST_OF_OTR:

RET

bin16BCD5: Подпрограмма перевода двоичного числа в двоично-десятичное

MOV R22,R16

MOV R23,R18

ldi tBCD2, -1

bin16BCD5_loop_1:

inc tBCD2; определение

subi fbinL, low(10000); количества

sbci fbinH, high(10000); десятков тысяч

brsh bin16BCD5_loop_1;в числе которое переводится

subi fbinL, low(-10000)

sbci fbinH, high(-10000)

ldi tBCD1, -0x11

bin16BCD5_loop_2:

subi tBCD1, -0x10;определение

subi fbinL, low(1000); количества

sbci fbinH, high(1000); тысяч

brsh bin16BCD5_loop_2;в числе которое переводится

subi fbinL, low(-1000)

sbci fbinH, high(-1000)

bin16BCD5_loop_3:

inc tBCD1;определение

subi fbinL, low(100); количества

sbci fbinH, high(100); десятков

brsh bin16BCD5_loop_3;в числе которое переводится

subi fbinL, -100

ldi tBCD0, -0x10

bin16BCD5_loop_4:

subi tBCD0, -0x10 ;определение

subi fbinL, 10; количества

brsh bin16BCD5_loop_4; единиц

subi fbinL, -10;в числе которое переводится

add tBCD0, fbinL

LDI R16,0X9

LDI R17,0X0

ldi r18,0x0

LDI R27,0X0

WAIT_PRESS_KEY: ; Подпрограмма проверки, в чем отображать

; индикацию в мСекундах или Секутдах

; Примечание:

; если ни одна из кнопок режима отображения

; не нажата или нажаты все, индикация отображаться не БУДЕТ

SBRC R27,0

RJMP EXIT

SBIC PORTA,3 ; Если нажата кнопка мСекунды

RCALL FLASH_mC ; то тогда переход на FLASH_mC

SBIC PORTA,4 ; если нажата кнопка Секунды

RCALL FLASH_C ; то тогда переход на FLASH_C

RJMP WAIT_PRESS_KEY ; если ни одна из кнопок не нажата

; то тогда ожидаем нажатия

SBIS PORTA,3 ; в противном случае выход из подпрограммы

RJMP EXIT

SBIC PORTA,4 ; если нажаты все две кнопки, то тогда

; ожидаем пока одну кнопку не отключат

RJMP WAIT_PRESS_KEY

OUT PORTD,R23; вывод на порт D двоично-десятичного числа

OUT PORTC,R24 ; вывод на порт C двоично-десятичного числа

OUT TCNT1H,R18 ;обнуление регистра NCNT1H (ст. регистр T/C1)

OUT TCNT1L,R18 ;обнуление регистра NCNT1L (мл. регистр T/C1)

EXIT:RET

FLASH_mC:

SBI PORTA,5 ; Включаем светодиод (режим мСекунды)

CBI PORTA,6 ; Выключаем светодиод (режим Секунды)

CBI PORTA,7 ; и выключаем разделительную точку

INC R27

RET

FLASH_C:

CBI PORTA,5 ; Включаем светодиод (режим Секунды)

SBI PORTA,6 ;Выключаем светодиод (режим мСекунды)

SBI PORTA,7 ; и включаем разделительную точку

INC R27

RET