1.4.2 Программа PIC-контроллерного устройства измерения временных велечин сигналов

Начальная инициализация

START

clrf port а ; Обнулить порт А.

clrf portb ; Обнулить порт В.

bsf status,5 ; Обращение к банку 1.

movlw 27 ; Синхронизация таймера 0 по заднему фронту

внешних тактов, включение таймера.

movwf option_reg

movlw 10

movwf trisa ; RAO - RA3 выходы, RA4 вход.

clrf trisb ; RBO - RB7 выходы.

bcf status, 5 ; Обращение к банку 0.

movlw 08 ; Для контроля дисплея

movwf Dig_x ; Загрузить во все регистры индикации 8.

MovwfDig_y

movwfDig_z

movwfDig_exp

Основной цикл программы

movlw 0A ; Установить счетчик циклов индикации.

movwf cnt_r

loop1 call refresh ; Вывод на индиторы.

decfsz cnt_r, f

goto loop1

loop5 clrf tmr0 ; Сброс таймера.

bsf status, 5 ; Обращение к банку 1.

movlw 0001 ; Разрешить прохождение внешних тактов на

вход таймера, RBO вход.

movwf trisb

bcf status,5 ; Обращение к банку 0.

movlw .199 ; 1 мс ожидания для измерения

высокочастотных сигналов.

movwf cnt1

in_ms nор

clrwdt

decfsz cntl, f

goto in_ms

bsf status, 5 ; Обращение к банку 1.

clrf trisb ; Заблокировать прохождение внешних тактов

на вход таймера, RBO выход.

bcf status, 5 ; Обращение к банку 0.

call prescaler ; Считать накопленное значение таймера.

movf H_byte, f

btfss status,2 ; Старший байт значения таймера = 0?

goto call_ms ; Нет, переход на обработку.

btfsc L_byte,7 ; Старший разряд младшего байта значения=0?

goto call_ms ; Нет, переход на обработку.

clrf tmr0 ; Сброс таймера.

bsf status,5 ; Обращение к банку 1.

movlw 01 ; Разрешить прохождение внешних тактов на

вход.

movwf trisb ; таймера, RBO вход.

bcf status,5 ; Обращение к банку 0.

nор ; 0.5 с ожидания для измерения низкочастотных сигналов.

nор

movlw 0A ; Установить счетчик циклов индикации.

movwf cnt_r

loopr call refresh ; Вывод на индикацию.

decfsz cnt_r, f

goto loopr

nор

nор

nор

bsf status,5 ; Обращение к банку 1.

clrf trisb ; Заблокировать прохождение внешних тактов

на вход таймера, RBO выход.

bcf status,5 ; Обращение к банку 0.

call prescaler ; Считать накопленное значение таймера.

movf H_byte, f

btfss status,2 ; Старший байт значения таймера = 0?

goto cal05 ; Нет, переход на обработку.

btfsc L_byte,7 ; Старший разряд младшего байта значения=0?

goto cal05 ; Нет, переход на обработку.

clrf Dig x ; Да, обнулить текущее значение индикации.

clrf Dig_y

clrf Dig_z

clrf Dig_exp

goto loop5 ; Переход на начало основного цикла.

Обработка измерения высокочастотных сигналов.

call_msclrf U ; Очистка десятичных регистров.

clrf D clrf H

clrf M

clrf DM

clrf CM

movlw 03 ; Коррекция порядка результата для

высокочастотных сигналов.

movwf Dig_exp

call segment ; Преобразование DEC в семисегментный код.

movwf portb ; Вывод цифры на индикатор.

bcf porta,1 ; Активизировать индикатор.

call Delay ; Задержка времени для сканирования.

bsf porta, 1 ; Отключить индикатор.

movf Dig_z, W ; Значение сотых для индикации.

call segment ; Преобразование DEC в семисегментный код.

movwf portb ; Вывод цифры на индикатор.

bcf porta,2 ; Активизировать индикатор.

call Delay ; Задержка времени для сканирования.

bsf porta,2 ; Отключить индикатор.

movf Dig_exp, W ; Значение порядка результата для индикации.

call segment ; Преобразование DEC в семисегментный код.

movwf portb ; Вывод цифры на индикатор.

bcf porta,3 ; Активизировать индикатор.

call Delay ; Задержка времени для сканирования.

bsf porta, 3 ; Отключить индикатор.

return

prescaler ; Считать накопленное значение таймера.

movf tmr0, W

movwf H_byte ; Сохранить значение таймера 0.

Извлечение значения предделителя TMR00.

clrf N ; Обнулить счетчик.

cicl bcf portb,0 ; Сформировать тактовый импульс на входе

синхронизации таймера.

bsf portb,0

bcf portb,0

incf N, f ; Инкремент счетчика.

movf H_byte, W

xonvf tmrO, W ; Значение таймера 0 изменилось? btfsc status,2

goto cicl ; Нет, повторить цикл.

movlw 00FF

movwf L_byte

movf N, W

subwf L_byte, f ; Получить и сохранить значение

предделителя.

incf L_byte, f

return

calc ; Преобразование формата: HEX в DEC.

movlw .16 ; Установить счетчик разрядов.

movwf N

coder

rlf L_byte, f ; Сдвиг старшего разряда значения таймера в

бит С.

rlf H_byte, f

btfsc status,0 ; Бит С = 1?

call sessn ; Да, прибавить десятичное значение разряда к десятичным регистрам.

decfsz N, f ; Декремент счетчика разрядов.

goto coder ; Продолжить преобразование.

call report ; Коррекция значений десятичных регистров.

; Вычисление порядка значения индикации.

movlw 05 ; Установить счетчик разрядов после запятой.

movwf E movlw CM+1 ; Загрузить адрес строки десятичных разрядов

для косвенной адресации.

movwf fsr

calc_ext ; Поиск старшего значащего разряда.

decf fsr, f ; Коррекция счетчика разрядов.

movf indf, W

btfss status,2 ; Значение = О?

goto end_ext ; Нет, закончить поиск.

decfsz E, f ; Все разряды проверены?

goto calc_ext ; Нет, продолжить поиск.

end_ext

movlw 2

subwf E,W

btfss status,0 ; Значение порядка < 2? goto err ; Да, ошибка - обнулить значение индикации.

btfsc status,2 ; Значение порядка = 2? goto no_app ; Да, обход округления.

; Округление выходного значения.

addlw U ; Получить адрес отбрасываемого разряда для косвенной адресации.

movwf fsr ;

decf fsr, f movlw 05 ; Сравнить значение разряда с 5.

subwf indf, W

btfss status,0 ; Значение > 5?

goto no_app ; Нет, обход округления.

incf fsr, f

incf indf, f ; Да, инкремент следующего разряда.

no_app

call report ; Коррекция значений десятичных регистров после округления. movf E,W ; Формирование значения для индикации.

addwf Dig_exp, f ; Сохранить значение Е.

addlw U ; Получить адрес строки десятичных разрядов

для косвенной адресации.

movwf fsr

movf indf, W

movwf Dig_x ; Переслать значение X.

decf fsr, f

movf indf, W

movwf Dig_y ; Переслать значение Y.

decf fsr, f

movf indf, W

movwf Dig_z ; Переслать значение Z.

return

Ошибка - обнулить значение индикации.

err movlw 0

movwf Dig_x

clrf N

call calc ; Вычисление значения для индикации.

movlw 0A ; Загрузить счетчик циклов индикации.

movwf cnt_r

goto loop1 ; Переход на начало основного цикла.

Обработка измерения низкочастотных сигналов.

саl05 clrf U ; Очистка десятичных регистров.

clrf D clrf H

clrf M

clrf DM

clrf CM

movlw .17 ; Установить счетчик разрядов.

movwfN

btfsc H_byte,7 ; Старший разряд значения таймера =1?

call sessn ; Да, загрузить в десятичные регистры

216=65536.

bcf status, 0

rlf L_byte, f ; Коррекция значения таймера до 1с.

rlf H_byte, f

clrf Dig_exp ; Коррекция порядка результата для

низкочастотных сигналов.

clrf N

call calc ; Вычисление значения для индикации.

goto loop5 ; Переход на начало основного цикла.

Delay ; Подпрограмма задержки времени для

сканирования индикации.

movlw .10

movwf cnt 1

nор

beta movlw .248

movwf cnt2

clrwdt ; Сброс сторожевого таймера.

Alfa nор

nор

decfsz cnt2, f

goto alfa

nор

nор

decfsz cntl, f

goto beta

nор

return

refresh ; Процедура сканирования индикации.

movf Dig_x, W ; Значение единиц для индикации.

call segment ; Преобразование DEC в семисегментный код.

movwf portb ; Вывод цифры на индикатор.

bcf porta, 0 ; Активизировать индикатор.

call Delay ; Задержка времени для сканирования.

bsf porta, 0 ; Отключить индикатор.

movf Dig_y, W ; Значение десятых для индикации.

movwf Dig_y

movwf Dig_z

movwf Dig_exp

return

report ; Коррекция значений десятичных регистров.

movlw 05 ; Установить счетчик разрядов,

movwf cnt_r movlw U ; Загрузить адрес строки десятичных разрядов для косвенной адресации.

movwf fsr

loop_rep

clrf i ; Очистить поправку следующего разряда.

movf indf, W

movwf N ; Загрузить значение во временный регистр.

calc_rep

movf N, W

movwf indf ; Сохранить значение.

incf i, f ; Инкремент поправки следующего разряда.

movlw 0А

subwf N, f ; Вычесть 10.

btfsc status, 0 ; Результат отрицательный?

goto calc_rep ; Нет, продолжить коррекцию.

decf i, f ; Скорректировать поправку следующего разряда.

incf fsr, f

movf i, W

addwf indf, f ; Прибавить поправку к следующему

разряду.

decfsz cnt_r, f ; Все разряды скорректированы?

goto loop_rep ; Нет, продолжить коррекцию.

return

sessn ; Преобразование значения двоичного разряда в десятичное.

movf N, W ; Загрузить номер разряда.

call tab_dec ; Получить смещения в таблице для разряда.

movwf E

call tab_dec ; Получить значение десятков тысяч.

addwf DM, f

incf E, f

movf E, W

call tab_dec ; Получить значение единиц тысяч.

addwf M, f

incf E, f

movf E, W

call tab_dec ; Получить значение сотен.

addwf H, f

incf E,f

movf E, W

call tab_dec ; Получить значение десятков.

addwf D, f

incf E, f

movf E, W

call tab_dec ; Получить значение единиц.

addwf U, f

return

END



Информация о работе «Разработка PIC-контроллера устройства измерения временных величин сигналов»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 67774
Количество таблиц: 17
Количество изображений: 7

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

Скачать
98975
2
0

... информации о количестве полученной потребителем или выработанной производителем тепловой энергии, температуре, давлении, объеме (массе) теплоносителя и о времени работы в открытых и закрытых водяных системах теплоснабжения при давлениях до 1,6 МПА (16 кгсм2) и температурах до +150 °С. Область применения - теплоэнергетика, системы коммерческого учета расхода горячей воды и тепловой энергии, ...

Скачать
81674
4
13

... САПР Accel Eda (Рис. 5). Рис.5. Принципиальная схема электронного термометра в Accel EDA. Принципиальная схема электронного термометра приведена в Приложении Б. Выбор элементной базы основан на выборе элементов согласующихся с микроконтроллером. Основными элементами схемы являются термодатчики, которые хорошо согласуются с микроконтроллером. Термодатчики DS1820 имеют следующие технические ...

Скачать
59054
7
7

... перевернутый утюг или электроплитку. Плата погружается в расплав, а затем вынимается с одновременным удалением излишков припоя ракелем из твердой резины. 8 Смета затрат на устройство ввода аналоговой информации   8.1 Материалы и комплектующие В таблице 2 показаны затраты на приобретение материалов и комплектующих [10]. Таблица 2 Наименование Кол. Цена, руб. Сумма, руб. ...

Скачать
98605
12
0

... руб. Изготовление печ.платы 2 0,9 15,85 14,27 1,43 15,70 Сборка 4 1,18 20,19 23,82 2,38 26,20 Монтаж 4 2,46 20,19 49,67 4,96 54,63 Наладка 5 0,8 21,20 16,96 1,70 18,66 ИТОГО: 104,72 10,47 115,19 Таблица 4 Плановая канкуляция для зарядного устройства на микроконтроллере PIC12F675 Статьи затрат Сумма затрат (руб.) Обоснование Расчета 1.Сырье и ...

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


Наверх