Мегаобучалка Главная | О нас | Обратная связь


Подпрограмма вычисления calculation



2020-03-19 115 Обсуждений (0)
Подпрограмма вычисления calculation 0.00 из 5.00 0 оценок




Данный блок соответствует приведенной ниже части программы.

 

;==============================================================

calculation                        ;подпрограмма вычисления расстояния инвертируем значения TIMER1 и

;-----------------------------------------------------TIMER2

movf TIMER1,0 ;записываем значение переменной TIMER1 в аккумулятор

clrf TIMER1 ;обнуляем значение TIMER1

sublw    d'100'              ;из числа 100 вычитаем значение аккумулятора

movwf   TIMER1 ;записываем полученное значение в переменную TIMER1

movf TIMER2,0 ;записываем значение переменной TIMER2 в аккумулятор

clrf TIMER2 ;обнуляем значение TIMER2

sublw    d'100'    ;из числа 100 вычитаем значение аккумулятора

movwf   TIMER2 ;записываем полученное значение в переменную TIMER2

;-----------------------------------------------------устанавливаем значения для LAPSE и DIGIT1..3

clrf LAPSE  ;обнуляем значение LAPSE

movlw   d'57' записываем в аккумулятор значение "57"

movwf   LAPSE  ;записываем значение аккумулятора в переменную LAPSE

clrf DIGIT1 ;обнуляем значение DIGIT1

clrf DIGIT2 ;обнуляем значение DIGIT2

clrf DIGIT3 ;обнуляем значение DIGIT3

;-----------------------------------------------------записываем в аккумулятор вычитаемое

calc3      movlw   d'6'                  ;"6"

subwf              TIMER1, 1 ;вычитаем из переменной TIMER1 значение аккумулятора

проверяем флаги регистра STATUS

btfss STATUS, C    ;флаг Z-нулевого результата

btfsc STATUS, Z    ;и флаг C-переноса

goto calc4 ;если флаги Z и C не равны 0

goto calc1 ;если Z=0 и C=0 значит результат отрицательный

;-----------------------------------------------------меняем значения DIGIT1…3 и LAPSE

calc4 incf DIGIT1, 1 ;увеличиваем переменную DIGIT1 на "1"

movlw   d'10' ;записываем в аккумулятор значение "10"

subwf              DIGIT1, 0 ;вычитаем значение аккумулятора из переменной DIGIT1

btfss STATUS, Z              ;проверяем результат на "0"

goto calc2 если результат не "0" идем на метку

;-----------------------------------------------------calc2

decf DIGIT1, 1 ;если результат равен "0" уменьшаем переменную DIGIT1 на "1"

incf DIGIT2, 1 ;увеличиваем переменную DIGIT2 на "1" (переносим разряд)

movlw   d'10' ;записываем в аккумулятор значение "10"

subwf              DIGIT2, 0 ;вычитаем значение аккумулятора из переменной DIGIT2

btfss STATUS, Z    ;проверяем результат на "0"

goto calc2 ;если результат не "0" идем на метку

;-----------------------------------------------------calc2

decf DIGIT2, 1 ;если результат равен "0" уменьшаем переменную DIGIT2 на "1"

incf DIGIT3, 1 ;увеличиваем переменную DIGIT3 на "1" (переносим разряд) 

movlw   d'10' ;записываем в аккумулятор значение "10"

subwf              DIGIT3, 0 ;вычитаем значение аккумулятора из переменной DIGIT3

btfss STATUS, Z              ;проверяем результат на "0"

goto calc2 ;если результат не "0" идем на метку calc2

decf DIGIT3, 1 ;если результат равен "0" уменьшаем переменную DIGIT3 на "1"

goto calc5 ;выходим из подпрограммы т.к. достигнуто значение 99,9

;-----------------------------------------------------корректируем погрешность перевода

calc2 decfz LAPSE, 1 ;уменьшаем значение LAPSE на 1

goto calc3 ;если переменная LAPSE не равна "0" - идем на метку calc3

movlw   d'57' ;записываем в аккумулятор значение "57"

movwf   LAPSE  ;записываем значение аккумулятора в переменную LAPSE

movlw   d'2' ;записываем в аккумулятор значение "2"

addwf             TIMER1, 1 ;прибавляем к переменной TIMER1 значение аккумулятора

goto calc3 ;идем на метку calc3

;-----------------------------------------------------корректируем переменные TIMER1 и TIMER2

calc1 addwf    TIMER1, 1 ;прибавляем к переменной TIMER1 значение аккумулятора

movlw   d'100'    ;записываем в аккумулятор значение "100"

addwf             TIMER1, 1 ;прибавляем к переменной TIMER1 значение аккумулятора

decf TIMER2 ;уменьшаем значение переменной TIMER2 на "1"

проверяем флаги регистра STATUS

btfss STATUS, C    ;флаг C-переноса

btfsc STATUS, Z              ;и флаг  Z-нулевого результата

goto calc4 ;если результат не отрицательный-продолжаем

если Z=0 и C=0 значит результат отрицательный-

;---------------------------------------------------------------------------------------------------------calc5 return              ;возврат из подпрограммы

;==============================================================

 

Блок-схема данной подпрограммы представлена на рис. 14. Поясним некоторые моменты. Принимая скорость звука равной 331,4 м/с, имеем 331,4*1000/1000000 мм/мкс или 0,3314 мм/мкс. Т.к. по условию задания точность измерений составляет 0,1 м, а измеренное нами время составляет двойную величину, то логично вести подсчет промежутками времени за которое ультразвук проходит 0,2 м. Т.е. 200/0,3314=603,5=(600+3,5) мкс. Каждые 600 мкс у нас накапливается погрешность в 3,5 мкс. 57*3,5=199,5≈200. Т.е. каждый промежуток времени 57*600 мкс у нас возникает погрешность в 200 мкс. Хотя она и составляет 1/3 от заданной точности мы, все равно будем ее учитывать. Принцип работы подпрограммы ясен из блок-схемы.

Рис. 14. Блок-схема подпрограммы calculation.
Заключение

 

В процессе выполнения курсового проекта, было спроектировано устройство ультразвукового измерения дальности. В пояснительной записке представлено подробное описание схемы устройства, описание программного обеспечения.

В приложении представлена принципиальная схема разработанного устройства и приведен листинг программы.

В ходе выполнения курсового проекта были решены следующие задачи:

· синтез и разработка принципиальной схемы устройства;

· разработка программного обеспечения;

· разработка конструкторской документации проекта (пояснительная записка).




2020-03-19 115 Обсуждений (0)
Подпрограмма вычисления calculation 0.00 из 5.00 0 оценок









Обсуждение в статье: Подпрограмма вычисления calculation

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (115)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)