Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОВС (шпоры).doc
Скачиваний:
14
Добавлен:
20.09.2019
Размер:
670.72 Кб
Скачать
  1. Pic16f84. Проектирование обработчика прерываний от таймера

Внутренний таймер представляет собой восьмиразрядный двоичный счётчик, автоматически инкрементирует свои значения от 0 до 255 и при переполнении, счётчик способен сгенерировать прерывание.

Выход первого мультиплексора подключен ко входу программируемого делителя частоты и ко входу второго мультиплексора. Делитель частоты управляется тремя младшими разрядами опционального регистра. Выходная линия мультиплексора – это сигнал синхронизации счётчика TMR0. Выход счётчика подключен к T0IF , который в случае переполнения генерирует прерывание.

T0CS – выбор источника синхронизации, если T0CS бит равен 0, используется учетверённая системная частота микроконтроллера, иначе – внешний источник синхронизации.

T0SE – выбирает тип синхронизации для внешнего источника тактовых импульсов, Если T0SE == 0, то выбирается передний фронт, если 1 – спад, либо задний фронт синхроимпульса.

PSA – позволяет использовать, либо искл. использование делителя частоты. Если == 0 , то делитель частоты не используется , иначе используется настраиваемая конфигурация делителя частоты.

PS* - биты OPTION

PS2

PS1

PS0

Rate

0

0

0

1:2

0

0

1

1:4

0

1

0

1:8

0

1

1

1:16

1

0

0

1:32

1

0

1

1:64

1

1

0

1:128

1

1

1

1:256

Пример программирования таймера:

 BCF STATUS, RP0

CLRF INTCON

MOVLW XXX ; заполняем таймер некой константой

MOVWF TMR0

BSF INTCON, T0IE

BSF INTCON, GIE

ORG 0x0 ; любой др. код

GOTO Main ; …

ORG 0x4 ; обработчик

GOTO LED_STATUS LED_STATUS:

Constant c_led_sta = 0x80 MOVLW c_led_sta

ORG 0x10 XORWF PORTB, 1 ; XOR PORTB и c_led_sta

Main: CLRF PORB ; диод не горит MOVLW XXX ; инициализируем таймер

CLRF TMR0 MOVWF TMR0 ; тем же значением

BSF STATUS, RP0 BCF INTCON, T0IE

MOVLW 0x0 BSF INTCON, GIE

MOVWF TRISB ; все порты на вых. RETURN

; настройка таймера End

BCF OPTION_REG, 5 ; T0CS=0 внутр. ист-к

; синх-ции, Fsys/4 Предположим, что МК работает на Fsys=1кГц.

BSF OPTION_REG, 3 ; исп. предвар. дел-ль ч-ты Хотим, чтобы светодиод мигал с ч-той 1 Гц.

BCF OPTION_REG, 2 ; коэф-т дел. 2, Fsys/8 = 125 Гц

BCF OPTION_REG, 1 ; в итоге – Fsys/8 XXX = 256-125=131

BCF OPTION_REG, 0

  1. Pic16f84. Простейшие устройства вывода информации. Семисегментные индикаторы

Помимо простейших светодиодов в МК технике применяются:

  1. 7 segments LED (бинарные – необх. 8 линий, двоично-десятичные – 4 линии)

  2. Линейки светодиодов

  3. Светодиодные матрицы (панели) и т.п.

СЕМИСЕГМЕНТНЫЕ ИНДИКАТОРЫ

Чтобы управлять 7LED’ами, необх. и достаточно 8 управляющих линий.

Все светодиоды могут иметь общий катод.

По аналогии есть индикаторы с общим анодом. Общий анод подключается на источник питания, а соединение либо разрыв с землёй лучше осуществлять с пом. транзисторных ключей.

Помимо двоичных 7-сегментных индикаторов сущ. двоично-десятичные индикаторы, которые отличаются числом выводов (4).

Двоично-десятичный индикатор содержит ещё и декодер.

(I4, I3 ,I2, I1)  (A, B, .. , G)

11111110  0

7-сегментные индикаторы редко исп. в одиночку.

М ультиплексирование подразумевает использование общих информационных линий для передачи кода отображаемого символа, а адресация соотв. индикатора осущ. посредством управления их общими катодами либо анодами.

T1, T2 – n-p-n транзисторы

Алгоритм программирования:

  1. Записываем код символа S1 в порт B.

  2. Активируем старший 7-сегментный индикатор путём вкл. T1, к-рый управляется разрядом RA1.

  3. Удерживаем открытым T1 в период, достаточный, чтобы он разгорелся (>=5 ms) (Wait for Latency).

  4. Прекращаем свечение этого индикатора, т.е. T1 off.

  5. Записываем код 2-го символа S2 в порт B.

  6. Активируем T2.

  7. Выжидаем период для компенсации латентности (Wait for Latency).

  8. T2 off.

  9. Goto 1 (повторяем процедуру заново).

Период повторения данной процедуры д. б. таким, чтобы компенсировать эффект мигания 2 индикаторов. Изменяя 3-й и 7-й пункт, можно управлять яркостью свечения индикаторов.