бесплано рефераты

Разделы

рефераты   Главная
рефераты   Искусство и культура
рефераты   Кибернетика
рефераты   Метрология
рефераты   Микроэкономика
рефераты   Мировая экономика МЭО
рефераты   РЦБ ценные бумаги
рефераты   САПР
рефераты   ТГП
рефераты   Теория вероятностей
рефераты   ТММ
рефераты   Автомобиль и дорога
рефераты   Компьютерные сети
рефераты   Конституционное право
      зарубежныйх стран
рефераты   Конституционное право
      России
рефераты   Краткое содержание
      произведений
рефераты   Криминалистика и
      криминология
рефераты   Военное дело и
      гражданская оборона
рефераты   География и экономическая
      география
рефераты   Геология гидрология и
      геодезия
рефераты   Спорт и туризм
рефераты   Рефераты Физика
рефераты   Физкультура и спорт
рефераты   Философия
рефераты   Финансы
рефераты   Фотография
рефераты   Музыка
рефераты   Авиация и космонавтика
рефераты   Наука и техника
рефераты   Кулинария
рефераты   Культурология
рефераты   Краеведение и этнография
рефераты   Религия и мифология
рефераты   Медицина
рефераты   Сексология
рефераты   Информатика
      программирование
 
 
 

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

PORTВ — это 8-разрядный порт, который имеет регистр направления TRISB, с помощью которого каналы порта могут быть индивидуально настроены на ввод или на вывод.

Установление в "1" бита регистра TRISB определяет соответствующий какал PORTB как вход, т.е. выходные буферы переводятся в третье состояние. Установление а "0" бита регистра TRISB определяет соответствующий канал PORTB как выход, т.е. содержимое защелки порта выводится на соответствующий вывод микросхемы.

Все контакты PORTВ имеют встроенные подтягивающие резисторы. Их включением управляет один бит -RCPU, он должен быть установлен в "0". Подтягивающие резисторы автоматически выключаются, когда каналы порта настраиваются на вывод и после POR.

Все операции вывода в порт осуществляются как чтение-модификация-запись. Команды BCF и BSF, например, считывают значение порта в ЦПУ, выполняют операцию с битом и записывают результат обратно. Требуется осторожность при применении этих команд к порту, содержащему как входы, так и выходы. Например, операция BSF надбитом 5 PORTB считывает все восемь битов PORTB в ЦПУ выполняется и записывает результат в выходные защелки. Если другой канал PORTВ используется как двунаправленный и настроен в данный момент на ввод, то входной сигнал будет считан с вывода в ЦПУ и записан а защелку данных этого канала поверх предыдущего значения.

1.3.4 Таймер

Возможности TMR0:

- 8-разрядный таймер доступен для чтения и записи,

- 8-разрядный программируемый предделитель,

- выбор источника тактового сигнала (внутренний или внешний),

- выбор активного фронта внешнего тактового сигнала,

- прерывание по переполнению таймера.

Режим работы от внутреннего тактового сигнала выбирается установлением в "0" бита Т0CS. Приращение значения TMR0 производится в каждом машинном цикле (без предделителя). После записи в TMR0 нового значения инкремент счетчика запрещен два последующих цикла.

Режим работы от внешнего тактового сигнала выбирается установлением в "1" бита T0СS. Приращение значения TMR0 производится по нарастанию или по спаду, а зависимости от состояния бита T0SЕ, сигнала со входа T0CKI.

TMR0 имеет программируемый предделитель. Предделитель может быть подключен либо к TMRO, либо к WDT. Бит PSA управляет подключением предделителя.

Прерывание от TMR0 возникает при переполнении TMR0, при этом флаг T0IF устанавливается в "1" и TMR0 продолжает работу. Запретить это прерывание можно установкой в "0" бита T0IE. Процедура обработки прерывания должна установить флаг T0IF в "0" перед тем, как вновь разрешить прерывание. Прерывание от TMRO не может вывести процессор из режима SLEEP, поскольку таймер в этом режиме выключен.

1.3.5 Предделитель

8-разрядный счетчик может использоваться как предделитель для TMR0 или как постделитель для WDT. Имеется только один преддепитель, который может быть использован либо для TMR0, либо для WDT. Подключение предделителя к TMR0 означает, что WDT не может его использовать, и наоборот.

Биты PSA и PS2-PS0 определяют подключение предделителя и коэффициент деления. Когда предделитель подключен к TMR0, любая команда записи в TMR0 будет очищать предделитель. Когда предделитель подключен к WDT, команда CLRWDT очистит предделитель вместе с WDT. Предделитеяь недоступен для чтения или записи. При сбросе предделитель также очищается.

Управление подключением предделителя полностью программное, т.е. можно его переключить во время выполнения программы.

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

1.4.1 Обзор команд

Каждая команда PIC16F84 - это 14-битовое слово, которое разделено по смыслу на следующие части:

1.  Код операции,

2.  Поле для одного и более операндов, которые могут участвовать или нет в этой команде.

Система команд PIC16F84 включает в себя байт-ориентированные команды, бит-ориентированные, операции с константами и команды передачи управления. В таблицах 1.3, 1.4 и 1.5 представлены команды микроконтроллера PIC16F84.

Для байт-ориентированных команд "f" обозначает собой регистр, с которым производится действие; "d" - бит определяет, куда положить результат. Если

"d" = 0, то результат будет помещен в W регистр, при "d" = 1 результат будет помещен в "f", упомянутом в команде, в отличии от бит-ориентированных команд, в которых "b" обозначает номер бита, участвующего в команде, а "f" - это регистр , в котором этот бит расположен.

Для команд передачи управления и опреаций с константами, "k" обозначает восьми или одинадцатибитную константу.

Все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла:

1.  Проверка условия и переход,

2.  Изменение программного счетчика как результат выполнения команды.

Один командный цикл состоит из четырех периодов генератора. Таким о разом, для генератора с частотой 4 МГц время исполнения командного цикла будет 1 мкс.

Таблица 1.3 — Бит ориентированные команды

Мнемокод Название команды
BCF f,b Сброс бита в регистре f
BSF f,b Установка бита в регистре f
BTFSC f,b Пропустить команду, если бит = 0
BTFSS f,b Пропустить команду, если бит = 1

Таблица 1.4 — Байт ориентированные команды

Мнемокод Название команды
ADDWF f,d Сложение W с f
ANDWF f,d Логическое И W и f
CLRF f Сброс регистра f
CLRW Сброс регистра W
COMF f,d Инверсия регистра f
DECF f,d Декремент регистра f
DECFSZ f,d Декремент f, пропустить команду, если 0
INCF f,d Инкремент регистра f
INCFSZ f,d Инкремент f, пропустить команду, если 0
IORWF f,d Логическое ИЛИ W и f
MOVF f,d Пересылка регистра f
MOVWF f Пересылка W в f
NOP Холостая команда
RLF f,d Сдвиг f влево через перенос
RRF f,d Сдвиг f вправо через перенос
SUBWF f,d Вычитание W из f
SWAPF f,d Обмен местами тетрад в f
XORWF f,d Исключающее ИЛИ W и f
ADDLW k Сложение константы с W
ANDLW k Логическое И константы и W
IORLW k Логическое ИЛИ константы и W
SUBLW k Вычитание W из константы
MOVLW k Пересылка константы в W
XORLW k Исключающее ИЛИ константы и W
OPTION Загрузка W в OPTION регистр
TRIS f Загрузка TRIS регистра

Таблица 1.5 — Команды переходов

Мнемокод Название команды
CALL k Вызов подпрограммы
CLRWDT Сброс Watchdog таймера
GOTO k Переход по адресу
RETLW k Возврат из подпрограммы с загрузкой константы в W
RETFIE Возврат из прерывания
RETURN Возврат из подпрограммы
SLEEP Переход в режим SLEEP

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


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 Общий провод (земля)

Используемый микроконтроллер имеет внутреннее 1K x 14 бит Flash памяти для программ, 8-битовые данные и 64байт Flash памяти данных. Все команды состоят из одного слова (14 бит шириной) иисполняются за один цикл (400 нс при 10 МГц), кроме команд перехода, которые выполняются за два цикла (800 нс). PIC16F84 имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек. Периферия включает в себя 8-битный таймер/счетчик с 8-битным программируемым предварительным делителем (фактически 16 - битный таймер) и 13 линий двунаправленного ввода/вывода. Высокая нагрузочная способность (25 мА максимальный втекающий ток, 20 мА максимальный вытекающий ток) линий ввода/вывода. Максимально допустимые значения электрических параметров для данного микроконтроллера представленны в таблице 1.7

Таблица 1.7

Описание

Максимальное

значение

Ед. изм.
Допустимая рабочая температура -55°С +125 °С
Температура хранения -65°С +150 °С

Напряжение VDD относительно Vss-0,3

7,5 В

Напряжение -MCLR относительно Vss

-0,3 — 14 В

Напряжение на остальных вы водах относительно VSS

-0.6 — VDD+0.6

В
Потребляемая мощность 800 мВт

Максимальный ток на Vss

150 мА

Максимальный ток на VDP

100 мА

Входной запирающий ток IIK

±20 мА

Выходной запирающий ток IOK

±20 мА
Максимальный выходной ток стока канала ввода-вывода 25 мА
Максимальный выходной ток истока канала ввода-вывода 20 мА
Максимальный выходной ток стока PORTA (суммарный) 80 мА
Максимальный выходной ток истока PORTA (суммарный) 50 мА
Максимальный выходной ток стока PORTB (суммарный) 150 мА
Максимальный выходной ток истока PORTB (суммарный) 100 мА

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


© 2010 САЙТ РЕФЕРАТОВ