====== Запись значения в регистр ======
Управление микроконтроллером осуществляет через операции записи и чтения значений регистров.
Для записи значения примеряется процедура ''SYSTEM.PUT(adr, val)''.
Первый аргумент процедуры — адрес регистра, второй — значение равное машинному слову.
Машинное слово может быть переменной или константой типа целое (''INTEGER'') или множество (''SET'').
Тип SET позволяет записать машинное слово в формате множества бит.
Пример константы типа ''SET'', где 1-ый, 2-й и 30-й бит 32-битного машинного слова равны 1:
{0,2,30}
что соответствует машинному слову, записанному в двоичном виде (младший бит в конце):
0100 0000 0000 0000 0000 0000 0000 0101
Рассмотрим запись на примере регистра ''GPIOx_BSRR''. В этом фрагменте из [[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_BSRR'' управляют подачей напряжения на вывод, а оставшиеся 16 бит (от 16 до 31) выключают напряжение на выводах порта.
{{ :ob:o7:example:bsrr.png?800 |}}
Адреса регистров хранятся в модулях подсистемы ''Micro''.
Для микроконтроллеров **STM32F10xxD** адреса хранятся в модуле ''MicroSTM32F10xxD''.
MODULE ExamplesPut;
IMPORT SYSTEM, MCU := MicroSTM32F10xxD;
PROCEDURE On13;
BEGIN
SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (* поднять напряжение на PС13 *)
END On13;
PROCEDURE Off13;
BEGIN
SYSTEM.PUT(MCU.GPIOCBSRR, {13+16}); (* убрать напряжение на PС13 *)
END Off13;
PROCEDURE On (x: INTEGER);
BEGIN
SYSTEM.PUT(MCU.GPIOCBSRR, {x}); (* поднять напряжение на PСx *)
END On;
PROCEDURE Off (x: INTEGER);
BEGIN
SYSTEM.PUT(MCU.GPIOCBSRR, {x+16}); (* убрать напряжение на PСx *)
END Off;
еще бы добавить пример кода когда в цикле биты set / unset
END ExamplesPut.
В процедуре ''On13'' мы записываем константу ''{13}'' типа ''SET'', которая означает то, что бит с номером 13 равен 1, а остальные биты машинного слова при этом равны 0.
В процедуре ''Off13'' мы записываем константу ''{13+16}'' типа ''SET'', которая означает то, что бит с номером 29 равен 1. Такая операция над регистром ''GPIOCBSRR'' приводит к выключению напряжения на выводе ''PC13''.