Микроконтроллер (МК) – это однокристальная вычислительная система (CPU + память + периферия) для управления реальными объектами в режиме реального времени. В отличие от универсальных процессоров ПК, МК ориентирован на детерминированное взаимодействие с внешним миром: считывает датчики, управляет исполнительными механизмами, обеспечивает коммуникацию и энергосберегающий режим. Для ЕГЭ по информатике тема микроконтроллеров полезна как «мост» между разделами «Архитектура компьютера», «Логические схемы», «Дискретная математика», «Кодирование информации» и «Алгоритмизация»: работа с битами, таймерами, таблицами переходов, кодами, временными диаграммами, вычислительной сложностью и моделированием.
Структура однокристальной системы
Стандартный МК включает:
CPU-ядро (8/16/32-бит) с наборами регистров общего и специального назначения.
Память программ (Flash/ROM) и данных (SRAM), часто – EEPROM для долговременных параметров.
Тактовый генератор: внутренний RC-осциллятор и/или внешний кварц.
Периферийные модули: таймеры/счётчики, ШИМ, АЦП/ЦАП, GPIO, интерфейсы связи (UART, SPI, I²C, CAN, USB и др.).
Система прерываний (NVIC в ARM): диспетчеризация внешних/внутренних событий с приоритетами.
Модель памяти и отображение периферии: регистры периферии видны по фиксированным адресам.
Архитектурно МК опирается на гарвардскую (раздельные шины команд и данных) или псевдо-фон-неймановскую модели. Это влияет на пропускную способность, способы обращения к Flash и на правила оптимизации.
Программная модель
Ключевые сущности:
Регистры CPU (аккумуляторы, указатель стека SP, счётчик команд PC, флаги NZCV/PSR).
Прерывания: асинхронная передача управления обработчикам; критично для своевременной реакции.
Регистр-компоненты периферии: конфигурация модулей через битовые поля (режимы, делители, флаги события).
Состояния энергопотребления: RUN/SLEEP/STOP, пробуждение по событию.
Временная модель и детерминизм
МК работает по тактам:
Базовая частота f_clk.
Таймеры делят частоту прескалерами, формируя интервалы и частоты ШИМ.
Драйверы интерфейсов генерируют временные диаграммы (бит-тайминги).
Прерывания гарантируют ограниченную задержку реакции (latency), что важно для систем реального времени.
GPIO и логические уровни
Цифровой вход/выход имеет пороги распознавания логических уровней. Типичные режимы: Input, Input Pull-Up/Down, Output Push-Pull, Open-Drain. Нарушение соответствия уровней и токов приводит к ложным срабатываниям и перегреву линий.
Аналого-цифровое преобразование (АЦП)
Основные параметры:
Разрядность N (бит), диапазон [V_ref_low; V_ref_high].
Квантование: шаг
q = (V_ref_high - V_ref_low) / 2^N
Код результата при входном напряжении V_in:
code = ⌊ (V_in - V_ref_low) / q ⌋
Теорема Найквиста-Котельникова (для дискретизации периодических сигналов):
f_sample ≥ 2 · f_signal_max
Таймеры/ШИМ
При частоте ядра f_clk, прескалере P и периоде автоперезагрузки ARR:
f_timer = f_clk / P
T_pwm = (ARR + 1) / f_timer
f_pwm = f_timer / (ARR + 1)
duty = CCRx / (ARR + 1) (доля рабочего цикла)
Это «рабочие формулы» для конструирования частоты и скважности ШИМ.
UART (асинхронный последовательный порт)
Кадр передачи: старт-бит (0), N бит данных, опционально чётность, 1–2 стоп-бита (1). Скорость – baud. Для настройки делителя:
baud ≈ f_clk / divider ⇒ divider ≈ f_clk / baud
Погрешность делителя должна быть в допустимых рамках (обычно до ±2%) во избежание рассинхронизации.

Языки и подходы
C/С++ – де-факто стандарт для bare-metal (минимальный рантайм, прямой доступ к регистрам).
Ассемблер – для критичных участков (латентность, ISR-пролог/эпилог).
Абстракции HAL/LL – аппаратно-зависимые библиотеки, ускоряющие разработку.
RTOS (например, FreeRTOS) – для задач со строгими приоритетами и интервалами.
Минимальный шаблон инициализации (Си, абстрактно)
#include <stdint.h>
static void clock_init(void) { /* настройка f_clk, источников */ }
static void gpio_init(void) { /* режимы пинов, подтяжки */ }
static void timer_init(void) { /* прескалер, ARR, CCRx для ШИМ или интервала */ }
static void uart_init(uint32_t baud) { /* делители, конфигурация кадра */ }
int main(void) {
clock_init();
gpio_init();
timer_init();
uart_init(9600);
for (;;) {
/* главный цикл: опрос/события/обработка */
}
}
Обработчики прерываний (пример, псевдо-Си)
volatile uint32_t ticks = 0;
void SysTick_Handler(void) { // период, например, 1 мс
ticks++;
}
uint32_t millis(void) { return ticks; }
Паттерн «счётчик миллисекунд» нужен для безопасных задержек без активного ожидания, что улучшает реакцию системы.
Для ЕГЭ аналогии: кодирование/декодирование, чётность, контрольные суммы, временные диаграммы и таблицы истинности.
Упражнение 1. Шаг кванта АЦП и код измерения
Условие. АЦП 12-бит, V_ref_low = 0 В, V_ref_high = 3.3 В. Найти шаг квантования q и код для V_in = 2.0 В.
Решение.
q = (3.3 - 0) / 2^12 = 3.3 / 4096 ≈ 0.000805664 В
code = ⌊ 2.0 / q ⌋ = ⌊ 2.0 / 0.000805664 ⌋ ≈ ⌊ 2483.5 ⌋ = 2483
Проверка на края. Для 3.3 В код = 4095 (max).
Комментарий для ЕГЭ. Типовая задача «объём информации/квантование»: важно правильно посчитать 2^N.
Упражнение 2. Настройка Таймера/ШИМ
Условие. Требуется получить f_pwm = 1 кГц при f_clk = 16 МГц. Выберите прескалер P и ARR, чтобы реализовать точную частоту.
Решение.
Ищем f_timer = f_clk / P и (ARR + 1) = f_timer / f_pwm.
Возьмём P = 64:
f_timer = 16 000 000 / 64 = 250 000 Гц
ARR + 1 = 250 000 / 1 000 = 250 ⇒ ARR = 249
Ответ. P=64, ARR=249 дают точные 1 кГц.
Комментарий. Это «счётчики/делители» – аналог темы ЕГЭ про остатки и кратности.
Упражнение 3. UART: допуск по скорости
Условие. При f_clk = 8 МГц требуется baud = 115200. Найти ближайший целочисленный divider и относительную погрешность.
Решение.
divider ≈ f_clk / baud = 8 000 000 / 115 200 ≈ 69.444...
Ближайшие целые: 69 или 70
baud69 = 8 000 000 / 69 ≈ 115 942.029
baud70 = 8 000 000 / 70 ≈ 114 285.714
ε69 = (115 942.029 - 115 200) / 115 200 ≈ +0.64%
ε70 = (114 285.714 - 115 200) / 115 200 ≈ −0.79%
Ответ. Выбираем divider = 69 (ошибка ~+0.64%), допустимо.
Комментарий. По смыслу – задачи на проценты/погрешности (часто встречаются в ЕГЭ).
Упражнение 4. Таблица истинности антидребезгового фильтра
Условие. Кнопка даёт шумную последовательность b(t) (0/1). Простой фильтр: новое устойчивое состояние S принимается, только если текущие K измерений равны b. Для K=3 заполните таблицу переходов из состояния S=0 и S=1.
Решение (логика).
S=0: R∈{111} -> S'=1; иначе S'=0
S=1: R∈{000} -> S'=0; иначе S'=1
Комментарий. Чистая логика/конечные автоматы – раздел ЕГЭ «Логические схемы».
Упражнение 5. Расчёт времени реакции на прерывание
Условие. МК на f_clk=48 МГц генерирует SysTick каждую 1 мс. Обработчик ISR занимает 160 тактов. Оценить «занятость» процессора ISR и гарантированный запас на основной код в каждом миллисекундном слоте.
Решение.
Время ISR:
t_ISR = 160 / 48 000 000 ≈ 3.333... мкс
Доля = t_ISR / 1 мс = 3.33 / 1000 ≈ 0.333%
Запас на основной код ≈ 996.7 мкс
Комментарий. Типовой расчёт «время/проценты/частоты» – именно формат вычислительных мини-задач ЕГЭ.
Битовые маски (регистры периферии, Си)
#define BIT(N) (1u << (N))
#define SET(REG, MASK) ((REG) |= (MASK))
#define CLR(REG, MASK) ((REG) &= ~(MASK))
#define TGL(REG, MASK) ((REG) ^= (MASK))
volatile uint32_t GPIO_MODE; // воображаемый регистр режима
// Настроить пин 3 в "выход"
SET(GPIO_MODE, BIT(3));
Почему важно. Это «алгебра логики» в действии: для ЕГЭ – тренировка манипуляций с разрядами.
Простейший антидребезг (Си)
typedef struct { uint8_t R; uint8_t S; } Debounce3;
void debounce_update(Debounce3* d, uint8_t b) {
d->R = ((d->R << 1) | (b & 1)) & 0x07; // 3 бита истории
if (d->S == 0 && d->R == 0x07) d->S = 1;
if (d->S == 1 && d->R == 0x00) d->S = 0;
}
Моделирование ШИМ (Python, проверка математики до прошивки)
def pwm_params(f_clk, f_pwm, presc):
f_timer = f_clk / presc
arr = int(round(f_timer / f_pwm)) - 1
return f_timer, arr
# пример
f_timer, arr = pwm_params(16_000_000, 1_000, 64) # -> 250000, 249
Микроконтроллер – это компактная, детерминированная вычислительная среда, где дискретная математика, логика, кодирование и алгоритмизация напрямую превращаются в управление физическими процессами. Понимание архитектуры (ядро, память, периферия), временных и электрических моделей (таймеры, ШИМ, АЦП, UART), строгих правил проектирования, а также умение решать «школьные» задачи на степени двойки, проценты, делители и таблицы истинности делает подготовку к ЕГЭ глубже и практичнее. Пройдите упражнения, проверьте себя по чек-листу – и связка «формулы → код → измерения» станет вашим уверенным инструментом как на экзамене, так и в реальных инженерных проектах.