Язык программирования Форт


Глава 11. Создание слов-определителей - часть 20


Т = aV + b, где Т - температура, V - напряжение, а и b - константы, которые определяются при калибровке и для каждого датчика имеют свои значения. Нам нужно для каждого датчика создать слово, которое будет брать из стека значение напряжения, рассчитывать значение температуры (на практике умноженное на 1000) и запоминать результат в массиве RESULT. Для создания слов, например, 1ТЕМР, 2ТЕМР и т.д. можно использовать слово-определитель port# a b VOLT-TO-TEMP nTEMP (#порта) где nТЕМР - слово-ребенок. Например, если для датчика температуры с номером 8, подключенного к порту номер 32, уравнение имеет вид: Т == 26v + 1200, тогда соответствующее ему слово для преобразования милливольт в значение температуры выглядит так: 32 26 1200 VOLT-TO-TEMP 8TEMP а слово для преобразования напряжение-температура VOLT-TO-TEMP можно определить следующим образом: : VOLT-TO-TEMP (Имя определяющего слова) CREATE (Компилирует заголовок слова-ребенка) (Помещает в слово-ребенок адрес кода стадии исполнения) ROT , SWAP , , (Компилирует #порта, а, b) DOES> (Начинает определение стадии исполнения слова-ребенка) (Помещает в стек адрес содержимого слова-ребенка) >R ( -- ) (Помещает адрес в стек возвратов) R@ @ ( -- #порта ) (Помещает в стек номер порта) PORT-DATA @ ( -- данные ) (Извлекает значение напряжения из порта n) R@ 2+ @ ( -- V а ) ( Извлекает а ) * ( -- V*a ) (Вычисляет значение переменной компонента) R@ 4 + @ ( -- V*a b ) (Извлекает b) + ( -- результат ) (Рассчитывает температуру) R> @ ( -- результат #порта ) (Помещает в стек номер порта) RESULT ! ( -- ) (Запоминает результат в n-й позиции, массива) ; (Конец определения) где начальные значения компилируются в слово-ребенок в такой же последовательности, в какой они появляются в стеке. При исполнении слова-ребенка, например 8TEMP, значение берется из соответствующего порта (в данном случае 32-го), преобразуется в температуру благодаря исполнению слов, находящихся в его определении после слова DOES>. В итоге результаты запоминаются в ранее определенном массиве RESULT.


- Начало -  - Назад -  - Вперед -