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
... к резкому увеличению тока в выходной цепи ИМС управления и возможно выход ее из строя. 7. Заключение. В результате проделанной дипломной работы была разработана плата макета и программное обеспечение блока управления реверсивным двигателем. С режимами работы: установки частоты вращения якоря двигателя, стабилизации и индикации частоты. В качестве нагрузки используется генератор, соединенный с ...
... для получения так называемого гигантского импульса и синхронизации продольных мод с целью получения пикосекундных (правильнее — сверхкоротких) импульсов. В результате возникает задача измерения основных параметров генерируемого лазером импульса излучения. Очевидно, что наиболее простым было бы построение измерений по схеме получения абсолютной зависимости мощности излучения от времени P(t) с ...
... с полезным сигналом помехам.. Итак, ЦИП наиболее полно удовлетворяют основным требованиям предъявляемым в настоящее время к измерительной аппаратуре, — высокая точность и быстродействие, автоматизация процессов измерения и обработки информации. Обобщенная структурная схема ЦИП показана на рис.25 Рис.25. Обобщенная структурная схема ЦИП В цифровом приборе измеряемая величина х ...
... – измеритель переходного процесса; 9. – запоминающее устройство; 10. – устройство управления. 2.2 Синтез структурной схемы блока определения длительности стимула для устройства электроанальгезии Блок определения длительности стимулирующего импульса для аппарата электроанальгезии является совокупностью трех блоков устройства для электроанальгезии, которые представлены под цифрами 8 -10 ...
0 комментариев