Дипломная работа: Разработка PIC-контроллера устройства измерения временных величин сигналов
; Вычисление
порядка значения индикации.
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
1.5 Выбор и
обоснование элементов
Для PIC-контроллерного устройства измерения временных велечин сигналов
применяются не только отечественные детали, но и импортные, поскольку наша
промышленность не освоила производство аналогов микроконтроллеров данного
класса. За счет такой комбинации удалось достигнуть наименьшей стоимости
прибора и максимально увеличить надёжность работы, а также во много раз
увеличить помехоустойчивость.
1.5.1 Отличительные
особенности микроконтроллера
PIC16F84 относится к семейству КМОП
микроконтроллеров. Расположение выводов данного микроконтроллера представлено
на рисунке 1.4 , а описание выводов — в таблице 1.6
Рисунок 1.4 —
Расположение выводов PIC16F84
Таблица 1.6
Название вывода |
Номер вывода |
Описание
|
RA0
RA1
RA2
RA3
RA4/RTCC
|
17
18
1
2
3
|
PORTA — двунаправленный порт ввода–вывода
Может быть использован как вход
внешнего тактового сигнала
|
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB0/INT
|
7
8
9
10
11
12
13
6
|
PORTB — двунаправленный порт
ввода–вывода
Может быть использован как вход
внешнего прерывания
|
OSC1/CLKIN |
16 |
Используется для подключения
кварца, RC или вход внешней тактовой частоты |
OSC2/CLKOUT |
15 |
Генератор, выход тактовой частоты в
режиме RC генератора, в остальных случаях
используется для подключения кварца |
MCLR |
4 |
Вход сброса устройства с активным
низким уровнем |
Vdd
|
14 |
Положительный вывод питания |
Vss
|
5 |
Общий провод (земля) |
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 |