====== Чтение данных из регистра ====== Управление микроконтроллером осуществляет через операции записи и чтения значений регистров. Для чтения значений примеряется процедура ''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);