====== Чтение данных из регистра ======
Управление микроконтроллером осуществляет через операции записи и чтения значений регистров.
Для чтения значений примеряется процедура ''SYSTEM.GET''.
Первый аргумент — адрес регистра, второй — машинное слово.
Машинное слово может быть переменной или константой типа целое (''INTEGER'') или множество (''SET'').
Рассмотрим сначала чтение на примере регистра ''GPIOx_IDR''. В следующем фрагменте из [[https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf|документации к микроконтроллеру]] показано, что первые 16 бит регистра ''GPIOx_IDR'' содержат информацию о напряжении на выводах порта ''x''.
{{ :ob:o7:example:idr.png?800 }}
Адреса регистров хранятся в модулях подсистемы ''Micro''. Напримр для микроконтроллеров семейства **STM32F10xxD** адреса хранятся в модуле ''MicroSTM32F10xxD''. Для настройки выводов контроллеров STM32F10* используется модуль ''MicroSTM32F10xPinCfg''.
MODULE ExamplesGet;
IMPORT SYSTEM, MCU := MicroSTM32F10xxD, PinCfg := MicroSTM32F10xPinCfg;
CONST pin = 7;
PROCEDURE InitButton*;
BEGIN
PinCfg.Configure(PinCfg.C, 13, PinCfg.inputPullDown);
END InitButton;
PROCEDURE CheckButton*(): BOOLEAN;
VAR x: SET;
BEGIN
SYSTEM.GET(MCU.GPIOAIDR, x);
RETURN pin IN x (* проверяем, есть ли искомый пин в множестве бит регистра *)
END CheckButton;
END ExamplesGet.
Этот пример реализует процедуру, которая проверяет уровень сигнала на ножке ''pin''. Кнопка должна быть подключена к питанию через резистор номиналом от 100 Ом, чтобы обеспечить ток менее 50 мА.
Подробнее про [[https://oberoncore.ru/library/wirth_sets|применение типа SET для управления регистрами]].
Второй пример реализует чтение данных в целое число из регистра чтения данных АЦП:
VAR value: INTEGER;
BEGIN
SYSTEM.GET(MCU.ADC1DR, value);