Программирование на PICBASIC
В данном разделе описаны программы на языке BASIC, аналогичные рассмотренным выше ассемблерным программам. Используйте их, а также — представленные блок-схемы для перевода ассемблерного кода в BASlC-программы.
Очевидно, что по программа на BASIC намного короче. В общем случае это справедливо для всех BASIC-версий ассемблерных программ.
Язык BASIC предоставляет встроенные подпрограммы, решающие сложные задачи, в то время как ассемблеру необходимо указывать, что делать, шаг за шагом. Тем не менее, в машинных кодах ассемблерные программы в общем случае намного короче, чем их версии, сгенерированные компилятором BASIC.
Примечательной чертой листинга является высокая пропорция операторов Poke. Язык PICBASIC для перевода выходов в состояние лог. или лог.
О обычно использует команды High и Low, которые применимы только к разрядам порта В. По различным причинам, микроконтроллер PIC робота «Скутер» настроен на использование порта С для большинства операций вывода данных. Переделка его на использование порта В означала бы изменение разводки проводов. Во избежание этого использовали операторы Poke. Кроме того, порт В в микроконтроллере 16F690 предоставляет только четыре разряда. В ассемблерных версиях программ мы можем устанавливать или сбрасывать различные разряды, однако оператор Poke воздействует на все разряды порта одновременно. Существуют способы поправить это. О них мы расскажем позже.
Аналогичным образом, команда Peek одновременно считывает все разряды порта.
Поиск света
Версия этой программы на PICBASIC достигает той же цели, что и ассемблерная версия, но другим способом.
В случае с ассемблером робот «Скутер» кружит по комнате до тех пор, пока не обнаружит источник яркого света.
После этого он начинает движение на свет.
В версии программы на BASIC робот поворачивается по крайней мере на 360°, измеряя по ходу уровень освещенности. Он определяет, какой из возможных нескольких источников света — наиболее яркий, и затем двигается к нему. Соответствующая блок-схема.
В данном случае робот «Скутер» использует вместо компаратора один из своих АЦП. Это означает, что у него нет необходимости использовать вывод 19 (AN0) в качестве входа опорного напряжения.
Мы можем просто игнорировать этот вход или же использовать ( в качестве альтернативного входа второго АЦП. Вывод 19 PIC (RA0/AN0) на F12 соединен с резистором R7 в точке. Это обеспечивает возможность использования LDR2 в качестве на левой стороне робота.
Программа содержит подпрограмму поиска самого яркого источника света. По мере сканирования и отбора данных последовательные за меры, считываемые в переменную Sample А, сравниваются с замеров, в переменной SampleB и больший из них заносится в SampleB.
В конце фазы выборки данных значение SampleB немного уменьшается и сохраняется в Sample C. Это необходимо для снижения вероятности потери роботом самого яркого источника света, когда он будет пытаться найти его повторно в подпрограмме looking, вследствие погрешности измерений.
В подпрограмме looking робот опять выполняет сканирование, -сравнивая входные данные Sample D со значением Sample C до тех пор, пока не найдет более яркий (вероятно, тот же самый) источник света. Затем он переходит к подпрограмме found и начинает движение вперед. Преимущество этой версии программы заключается в том, что она будет работать при любых уровнях окружающей освещенности и не зависит от предварительной установки опорного напряжения. Программа опрашивает входные напряжения и выбирает наибольшее из них. Однако здесь есть одна «ловушка».
В условиях очень низкой освещенности при не очень ярком источнике света значение SampleB может оказаться меньше 16.
Вычитание 16 из этого малого значения сделает значение SampleC отрицательным (например, -3, что соответствует виде).
Однако, микроконтроллер не распознает это значение как отрицательное. Он будет считать его положительным, равным 253 в десятичном виде.
Это выведет данное значение на уровень, намного превосходящий какие либо вероятностные отсчеты, в результате чего истинный источник света не будет найден. По этой причине не используйте эту программу в темных помещениях.
При разработке и тестировании этой программы полезно знать величины входных напряжений. В PICBASIC это просто. Короткая команда Write 11, SampleB помещает значение SampleB по адресу 11 в памяти EEPROM. Если микроконтроллер PIC установить в программатор, то это значение отобразится на экране компьютера. В подпрограмме отбора значений мы можем видеть десять последовательных значений SampleA, что дает нам представление о степени их разброса. По окончании разработки эти команды записи могут быть удалены.
Источник: qwedr.com