- •Ответы по Семисалову.
- •Каналы связи в су гпс.
- •Многоадресный параллельный канал связи (шина).
- •Последовательные цифровые каналы связи.
- •Многоадресные последовательные каналы связи.(Добавить про usb, il…)
- •Линии связи в информационных каналах связи.
- •Структурная схема учпу.
- •Структурная схема логико-вычислительной части учпу.
- •Векторное и радиальное прерывание.
- •Комбинированное прерывание брп.
- •Контроллер электроавтоматики
- •Основные характеристики микропроцессора pic17f873
- •Регистры состояния и управления.
- •Порты ввода-вывода
- •Примечания:
- •2.3.7. Пример программирования модуля ацп.
- •Таймер tmr0.
- •Модуль таймера tmr1.
- •Модуль таймера tmr2.
- •Модуль сср.
- •Универсальный синхронно – асинхронный приемопередатчик (usart).
- •Модуль ведущего синхронного последовательного порта (mssp).
- •Измерительные системы: назначение, состав, дос-классификация.
- •Органы управления в станках
- •Одиночные органы управления.
- •Групповые органы управления
- •Клавиатуры с линейными шифраторами.
- •Матри4ные клавиатуры
- •Устройства индикации
- •Одино4ные индикаторы
- •Одностро4ные дисплеи
- •Многостро4ные дисплеи
Модуль таймера tmr1.
Таймер TMR1 имеет 16 – разрядный счетчик, выполненный на двух регистрах (TMR1H, TMR1L), доступных для записи и чтения. Модуль может работать в двух режимах:
- режим таймера,
- режим счетчика.
В режиме таймера инкрементируется содержимое 16-ти разрядного счетчика и при переполнении его устанавливается флаг прерывания TMR1IF в региcтре PIR1 <0>.
В режиме счетчика происходит приращение 16-ти разрядного счетчика, содержимое которого может быть прочитано в любой момент времени. При достижении значения FFh, счет начинается заново со значения 00h. Структурная схема модуля показана на рис 9.
Настройка модуля на различные режимы производится установкой соответствующих бит регистра T1CON (адрес 10h), значения которых приведены в таблице 17.
Таблица 17.
Номер разряда |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Обозначение сигнала |
- |
- |
T1CKPS1 |
T1CKPS0 |
T1OSCEN |
-T1SYNC |
TMR1CS |
TMR1ON |
Где:
T1CKPS1:T1CKPS0 – выбор коэффициента деления предделителя:
11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1
T1OSCEN – включение тактового генератора модуля TMR1:
- генератор включен,
- генератор выключен (инвертор и обратная связь отключены для уменьшения потребления тока),
-T1SYNC – синхронизация внешнего тактового сигнала (при TMR1CS = 1):
1 – не синхронизировать внешний тактовый сигнал,
0 – синхронизировать внешний тактовый сигнал.
TMR1CS - выбор источника тактового сигнала:
– внешний источник тактового сигнала со входа RC0 (активный передний фронт),
- внутренний источник Fosc/4.
TMR1ON - включение модуля TMR1:
- модуль включен,
- модуль выключен.
Пример программирования таймера TMR1.
Исходные данные примем те же, что и в примере программирования таймера TMR0:
1. Требуемая задержка -500 мсек.
2. Тактовый сигнал – внутренняя частота Fosc / 4 = 1 MHz/
3. Режим работы модуля – таймер.
Максимальное время срабатывания самого таймера составляет:
t max = 256*256 * 1 = 65536 мксек (счетчик таймера сдвоенный TMR1H и TMR1L
С включенным предделителем: T max = t max * 8 = 524288 мксек., т.е. максимальное время самого таймера TMR1 больше требуемого. Разность времен 24288 мксек компенсируем за счет уменьшения длительности цикла самого таймера путем записи в регистр таймера (TMR1H и TMR1L) некоторого числа:
mm = (24288 / 8)h = 0CBA
где: 24288 – разность максимального и требуемого времени,
8 – коэффициент деления предделителя таймера TMR1,
Текст программы.
#define XTAL_FREQ 4MHZ //Частота тактового генератора 4 MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISB = 0xff; // порт В на вход
TRISC = 0x00; // порт С на выход
T1CON = 0x30; //настройка таймера TMR1
for(;;) { // цикл всей программы
for (;!RC0 ;) {
RC0 = (RB0&&RB1&&RB2&&RB4) || (RB0&&RB2&&!RB3&&RB4);
} // решение булевых уравнений фрагмента
TMR1IF= 0; // сброс флага TMR1
TMR1H = 0x0C; //начальная установка таймера
TMR1L = 0xBA;
TMR1ON = 1; //пуск таймера TMR1
for (; !TMR1IF ;) { // цикл таймера TMR1
RC0 = 0; // отключение Кп
}
} // конец main
Примечание. Код настройки таймера 30 (00110000) по порядку соответствует:
<7,6> – не программируется,
11 <5,4> – настройка предделителя 1:8
0 <3> - внутренний генератор отключен.
0 <2> - синхронизация входного сигнала отсутствует
0 <1> - внутренний источник входных импульсов
0 <0> - таймер TMR1 пока выключен.