5 Листинг программы расчета длительности импульса на языке ассемблер

Отладка программы была произведена с помощью отладчика-симулятора AVRSTUDIO 3.0

Код программы:

.include "8515def.inc".def fbinL=r22 ;двоичное значение, младший байт байт.def fbinH =r23 ;двоичное значение, старший байт.def tBCD0 =r23 ;BCD значение, цифры 1 и

.def tBCD1 =r24 ;BCD значение, цифры 3 и2

.def tBCD2 =r25 ;BCD значение, цифры 4

; Назначение выводов порта А:

; bit 0 - поступает импульс

;длительность которого

;необходимо измерить

; bit 1 - подключается кнопка

; режима измерения

; 0 - измерение длительности

;отрицательного импульса

; 1 - измерение длительности

;положительного импульса

; bit 2 - индикация режима измерения

; 0 - (светодиод погашен)

;индикация режима измерения

;отрицательного импульса

; 1 - (светодиод светится)

;индикация режима измерения

;положительного импульса

; bit 3 - подключается кнопка

;режима измерения

;длительности импульса в мС

; bit 4 - подключается кнопка

;режима измерения

;длительности импульса в С

; bit 5 - подключается светодиод

;режима измерения длительности

;импульса в мС

; bit 6 - подключается светодиод

;режима измерения длительности

;импульса в С

.ORG 0

RJMP MET1

RJMP IMPULS

RJMP MET1

RJMP MET1

1:RJMP Prog

RJMP Prog

RJMP MET1

RJMP MET1

MET1:LDI R16,0x02

OUT SPH,R16;Инициализация

LDI R16,0X10;стека

OUT SPL,R16

LDI R16,0B11100100

OUT DDRA,r16; НАСТРАИВАЕМ ЛИНИ b 0,1,3,4

; ПОРТА А НА ВВОД, а линии 2,5,6,7 на вывод

LDI R16,0B11111111; НАСТРАИВАЕМ ВСЕ ЛИНИИ

OUT DDRC,R16; ПОРТА C НА ВЫВОД

LDI R16,0B11111111; НАСТРАИВАЕМ ВСЕ ЛИНИИ

OUT DDRD,R16; ПОРТ D НА ВЫВОД

LDI R16,0B01000000 ;Разрешение прерывания

OUT TIMSK,R16; по переполнению T/C1

LDI R16,0B00000000;ЗАПРЕТ прерывания

OUT GIMSK,R16; по INT0

LDI R16,0X1F ;Загружаем в

OUT OCR1AH,R16 ; компататор А - 8000

LDI R16,0X40

OUT OCR1AL,R16

LDI R16,0B00000000

OUT TCNT1L,R16

LDI R16,0B00001000 ;T/C1 будет обнуляться при каждом совпадении

OUT TCCR1B,R16 ;со значением компаратора А

LDI R16,0B10000000 ;Глобальное разрешение прерываний

OUT SREG,R16

LDI R16,0X9

LDI R19,0X9 ;R19 регистр переназначенный для сравнения

; с R16 если они равны, то тогда измерение

; длительности импульса не начиналось

CLR R17

clr r22

OPROS_KEY_OF_INVERT: ; Опрос состояния кнопки

SBIC PORTA,1 ; режима измерения длительности импульса

RCALL IMPULS_POLOGITELNAY ; режим из-ия длительности сигнала высокого уровня

RCALL IMPULS_OTRICHATELNAY ; режим из-ия длительности сигнала низкого уровня

M2:

IMPULS_POLOGITELNAY:

SBI PORTA,2 ;Включаем светодиод

SBIC PORTA,0 ;Идет сканирование линии PA0

RCALL IMPULS

SBIS PORTA,0 ; Происходит проверка на наличие 1

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

M5:CPI R17,0xFF

BRCS M2 ; если R17 переполнится, то

LDI R17,0XA; тогда занесем в R17 10

RJMP M2;

Prog:INC R17 ;

CPI R17,0XA ; Отчет длительности импульса начнется

BRCS M3 ; тогда когда в R17 будет 10(DEX)(пройдет 10 мС)

INC R16 ;инкремент R17(счетчик прошедших мСекунд срабатывает при R17>10)

BRBC 1,M3 ; если R16 переполнится

INC R18 ; тогда инкрементируем R18(Длительность импульса

; Прошло десять мС далее идет счет каждой мС

M3:RETI ; находится в R18(ст. разряд),R16(мл. разряд)

IMPULS:

LDI R20, 0B00001001 ; если приходит импульс то тогда запускается T/C1

OUT TCCR1B,R20

RET

IMPILS_1_TO_0:

LDI R20,0B00000000 ; если импульс закончился T/C1 останавливается

OUT TCCR1B,R20

CPSE R16,R19 ;проверка на начало цикла измерения если он начился

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

SBIC PORTA,1 ; Опрос состояния кнопки режима измерения длительности импульса

RCALL IMPULS_POLOGITELNAY; режим из-ия высокого уровня длительности

RCALL IMPULS_OTRICHATELNAY ; режим из-ия низкого уровня длительности

RET

TEST_OF_STOP_TC1: ; подпрограмма проверки (действительно ли T/C1 остановился

IN R21,TCCR1B ;во время режима измерения длительности)

ANDI R21,0B000000000 ;если все в порядке, то тогда переходим на bin16BCD5

BRNE ENDTEST_OF

RCALL bin16BCD5

ENDTEST_OF:

RET

M2OTR:

IMPULS_OTRICHATELNAY:

CBI PORTA,2 ;Выключаем светодиод

SBIS PORTA,0 ; Происходит проверка на наличие 0

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

R


Информация о работе «Измерение длительности импульса»
Раздел: Информатика, программирование
Количество знаков с пробелами: 21334
Количество таблиц: 0
Количество изображений: 3

Похожие работы

Скачать
35989
3
0

... к резкому увеличению тока в выходной цепи ИМС управления и возможно выход ее из строя. 7.   Заключение. В результате проделанной дипломной работы была разработана плата макета и программное обеспечение блока управления реверсивным двигателем. С режимами работы: установки частоты вращения якоря двигателя, стабилизации и индикации частоты. В качестве нагрузки используется генератор, соединенный с ...

Скачать
52185
1
8

... для получения так называемого гигантского импульса и синхронизации продольных мод с целью получения пикосекундных (правильнее — сверхкоротких) импульсов. В результате возникает задача измерения основных параметров генерируемого лазером импульса излучения. Очевидно, что наиболее простым было бы построение измерений по схеме получения абсолютной зависимости мощности излучения от времени P(t) с ...

Скачать
104677
15
32

... с полезным сигналом помехам.. Итак, ЦИП наиболее полно удовлетворяют основным требованиям предъявляемым в настоящее время к измерительной аппаратуре, — высокая точность и быстродействие, автоматизация процессов измерения и обработки информации. Обобщенная структурная схема ЦИП показана на рис.25 Рис.25. Обобщенная структурная схема ЦИП В цифровом приборе измеряемая величина х ...

Скачать
61442
4
13

... – измеритель переходного процесса; 9.  – запоминающее устройство; 10.  – устройство управления.   2.2 Синтез структурной схемы блока определения длительности стимула для устройства электроанальгезии Блок определения длительности стимулирующего импульса для аппарата электроанальгезии является совокупностью трех блоков устройства для электроанальгезии, которые представлены под цифрами 8 -10 ...

0 комментариев


Наверх