Устройство ультразвукового измерения дальности

Работа устройства ультразвукового измерения дальности. Синтез функциональной схемы микропроцессорной системы на основе анализа исходных данных. Программа разбита на отдельные подпрограммы, которые взаимодействуют друг с другом согласно схеме программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.07.2008
Размер файла 445,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

goto wait4 ;если сигнал есть-переходим на метку wait4

если сигнала нет-продолжаем счет времени

btfss INTCON, TOIF ;проверяем флаг прерывания по переполнению таймера

goto wait2 если флаг равен 0 (счетчик не

;-----------------------------------------------------переполнен)-выполняем проверку

decfsz TIMER1, 1 ;если флаг равен 1 (счетчик переполнен)-уменьшаем TIMER1 на 1

goto wait3 ;если TIMER1 не равен "0"

;-----------------------------------------------------продолжаем ожидание если TIMER1 равен "0"-

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

movwf TIMER1 ;помещаем значение из аккумулятора в TIMER1

decfsz TIMER2, 1 ;уменьшаем значение TIMER2 на 1

goto wait3 ;если TIMER2 не равен "0"

;-----------------------------------------------------продолжаем ожидание

если TIMER2 равен "0" (сигнал уже не вернется)-заполняем ;значения DIGIT1..3

movlw d'9' ;помещаем значение "9" для переменной DIGIT1 в аккумулятор

movwf DIGIT1 ;помещаем значение из аккумулятора в DIGIT1

movlw d'9' ;помещаем значение "9" для переменной DIGIT2 в аккумулятор

movwf DIGIT2 ;помещаем значение из аккумулятора в DIGIT2

movlw d'9' ;помещаем значение "9" для переменной ;DIGIT3 в аккумулятор

movwf DIGIT3 ;помещаем значение из аккумулятора в DIGIT3

;---------------------------------------------------------------------------------------------------------

goto main1 ;возврат из подпрограммы (сигнала нет)

wait4 goto main4 ;возврат из подпрограммы (сигнал есть)

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

reception ;подпрограмма приема отраженного сигнала

;---------------------------------------------------------------------------------------------------------

ожидание окончания сигнала

recp1 btfsс PORTA, 1 ;проверяем наличие сигнала на линии RA1 порта А

goto recp1 ;если сигнала есть-продолжаем ожидание

;-----------------------------------------------------если сигнала нет-начинаем проверку

recp6 movlw d'251' ;помещаем значение "251" для таймера в аккумулятор

movwf TMR0 ;помещаем значение из аккумулятора в таймер

bcf INTCON, TOIF ;устанавливаем в 0 флаг прерывания по переполнению таймера

recp1 btfss INTCON, TOIF ;проверяем флаг переполнения таймера

если таймер не переполнен-

btfsc PORTA, 1 ;проверяем отсутствие сигнала на линииRA1 порта А

если таймер переполнен или есть

goto recp2 ;сигнал-идем на метку recp2

;если таймер не переполнен и нет

goto recp1 ;сигнала-идем на метку recp1

;-----------------------------------------------------проверяем флаг переполнения таймера

recp2 btfss INTCON, TOIF ;если таймер не переполнен-

goto recp3 ;сигнал не наш-идем на метку recp3

;---------------------------------------------------------------------------------------------------------

movlw d'252' ;помещаем значение "252" для таймера в аккумулятор

movwf TMR0 помещаем значение из аккумулятора в таймер

bcf INTCON, TOIF ;устанавливаем в 0 флаг прерывания по переполнению таймера

recp4 btfss INTCON, TOIF ;проверяем флаг переполнения таймера если таймер не переполнен-

btfss PORTA, 1 ;проверяем наличие сигнала на линии RA1 порта А

если таймер переполнен или нет

goto recp5 ;сигнала-идем на метку recp5

;если таймер не переполнен и есть

goto recp4 ;сигнал-идем на метку recp4

;-----------------------------------------------------проверяем флаг переполнения таймера

recp5 btfss INTCON, TOIF ;если таймер не переполнен-

goto recp3 сигнал не наш-идем на метку recp3

;---------------------------------------------------------------------------------------------------------

decfsz NUMIMP, 1 ;уменьшаем значение NUMIMP на "1"

goto recp6 ;если NUMIMP не равен "0"-продолжаем проверку

goto main5 ;если NUMIMP равен "0"-возврат из подпрограммы

recp3 goto main3 ;продолжение ожидания сигнала

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

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 возврат из подпрограммы

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

end

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.