на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Устройство ультразвукового измерения дальности
p align="left">movwf PORTB ;выводим значение в порт В

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

clrf TMR0 ;обнуляем таймер и

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

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

goto indc2 ;если флаг равен 0 (счетчик не переполнен)-выполняем проверку

если флаг равен 1 (счетчик переполнен) - переходим к следующему индикатору

;-----------------------------------------------------выводим значение DIGIT3 на индикатор

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

movwf PORTB ;выводим значение в порт В

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

clrf TMR0 ;обнуляем таймер и

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

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

goto indc3 ;если флаг равен 0 (счетчик не переполнен)-выполняем проверку

;если флаг равен 1 (счетчик переполнен)-

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

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

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

В первой части подпрограммы indication мы устанавливаем «биты точки и питания» индикаторов согласно схеме. В переменной DIGIT1 будет храниться значение дециметров от 0 до 9 т.к. используемые в схеме индикаторы являются семи сегментными с дополнительным выводом для десятичного разделителя - точки, в переменной DIGIT2 - значение метров, в переменной DIGIT3 - значение декаметров соответственно. Таким образом согласно схеме для отображения цифр на индикаторах через дешифратор используется всего четыре линии порта B: RB0, RB1, RB2, RB3 для передачи битов 0, 1, 2 и 3 соответственно. Вычисленные отображаемые значения будут храниться в переменных DIGIT1…3 поразрядно, для этого используется первые четыре бита каждой переменной. Линии RB4, RB5 и RB6 порта В мы используем для поочередной подачи питания на индикаторы. Линия RB4 на индикатор декаметров (отображение значения DIGIT3), RB5 на индикатор метров (отображение значения DIGIT2), RB6 на индикатор дециметров (отображение значения DIGIT1). Для этого мы используем следующие биты переменных: бит 6 - DIGIT1, бит 5 - DIGIT2 и бит 4 - DIGIT3 согласно схеме. Линия RB7 порта В используется для подачи сигнала на десятичную точку индикатора метров (переменная DIGIT2). Таким образом используется весь порт В и мы можем, заранее установив биты в переменных посылать их на порт В поочередно, соответственно поочередно подключая индикаторы. Для наглядности ниже приведен рисунок 10.

2

Рис. 10. Схема индикации.

Далее выводим значение DIGIT1 на порт В. Организуем задержку отображения на индикаторе при помощи таймера TMR0 на 256 мкс. Затем эту же процедуру производим для DIGIT2 и DIGIT3 отображая их значения на индикаторах.

Подпрограмма нажатия кнопки pressing

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

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

pressing ;подпрограмма обработки нажатия кнопки

btfss PORTA, 2 ;проверяем линию RA2 порта А (кнопку s2),

goto main1 ;если не нажата возвращаемся в программу (на indication)

goto main2 ;если нажата-возврат из подпрограммы

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

При выполнении этой подпрограммы происходит тестирование присутствия сигнала (+5В) на линии RA2 порта A. Если на линию поступает напряжение (кнопка нажата) - выполняется команда перехода в основную программу на соответствующую метку (main2). В противном случае (кнопка не нажата) переход осуществляется на другую метку основной программы (main2).

Подпрограмма передачи transfer

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

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

transfer ;подпрограмма передачи импульсов

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

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

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

;-----------------------------------------------------передача сигнала

tran1 bsf PORTA, 0 ;устанавливаем в 1 линию RA0 порта А

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

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

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

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

goto tran2 ;если флаг равен 0 (счетчик не переполнен)-выполняем проверку

;если флаг равен 1 (счетчик переполнен)-

;-----------------------------------------------------задержка сигнала

bcf PORTA, 0 ;устанавливаем в 0 линию RA0 порта А

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

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

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

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

goto tran3 ;если флаг равен 0 (счетчик не переполнен)-выполняем проверку

;если флаг равен 1 (счетчик переполнен)-

;-----------------------------------------------------считаем импульсы

decfsz NUMIMP, 1 ;уменьшаем зачение NUMIMP на "1" если NUMIMP не равен "0"

;(передано<5импульсов)-

goto tran1 ;переходим в начало подпрограммы на tran1 если NUMIMP равен "0"

;-----------------------------------------------------(передано 5 импульсов)-

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

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

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

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

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

Данная подпрограмма выводит на линию RA0 порта А микроконтроллера 5 импульсов частотой 40 кГц. Учитывая, что мы не подключаем предделитель для таймера-счетчика TMR0 и в схеме используется керамический резонатор частотой 4 МГц имеем тактовую частоту микроконтроллера равную 1 МГц, т.е. одна команда выполняется за 1 мкс. Следовательно один импульс частотой 40 кГц имеет продолжительность 1/40000=25 мкс. Т.е. мы должны сформировать один импульс за 25 мкс. Блок-схема данной подпрограммы представлена на рис. 11. Значения для таймера подобраны таким образом, чтобы сформировать импульс на линии продолжительностью около 25 мкс. В конце подпрограммы устанавливается новое значение для переменной NUMIMP, т.к. оно потребуется для работы другой подпрограммы.

2

Рис. 11. Блок-схема подпрограммы transfer.

Подпрограмма ожидания waiting

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

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

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

;-----------------------------------------------------задержка начала приема сигнала

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

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

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

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

goto wait1 ;если флаг равен 0 (счетчик не переполнен)-выполняем проверку

;если флаг равен 1 (счетчик переполнен)-

;-----------------------------------------------------начинаем счет времени

ожидание приема (по 100 мкс)

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

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

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

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

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 ;возврат из подпрограммы (сигнал есть)

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

2

Рис. 12. Блок-схема подпрограммы waiting.

В начальной части подпрограммы производится небольшая задержка начала счета времени ожидания для того, чтобы произошло затухание помех вызванных излучением сигнала в предыдущей подпрограмме. Затем запускается таймер на 100 мкс. Т.к. мы будем считать промежутки времени по 100 мкс. Блок-схема подпрограммы представлена на рис. 12. Таким образом максимальный период ожидания составит 100*100*100=1000000 мкс, что составляет 1с. Принимая скорость распространения звука равной 331,4 м/с - это более чем достаточно, т.к. по условию задания максимальная измеряемая дальность устройства составит 99,9 метра.

Подпрограмма приема reception

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

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

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 флаг прерывания по переполнению таймера

Страницы: 1, 2, 3, 4, 5



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.