Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.06.2025

Просмотров: 1762

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

B1

=

B0

MAX 100

' Сделать B1

как набольшее из двух значений B0 и 100 (B1

‘ примет значения от 100 до 255

B1

=

B0

MIN 100

' Сделать B1

как наименьшее из двух значений B0 и 100

‘ (B1не может быть больше100)

Оператор NCD.

Оператор NCD возвращает порядковый номер старшего разряда шестнадцатиразрядного двоичного числа имеющего значение 1. Он используется для того, чтобы найти в значении самый старший разряд равный 1. Он возвращается в 0, если никакой разряд не равен 1.

Пример:

B0 = NCD %01001000 ' Переменная B0 равняется 7

Оператор REV.

Оператор REV полностью меняет значения разрядов двоичного числа на противоположное. Число разрядов, которые будут полностью изменены – может быть от 1 до 16. Отсчет изменяемых разрядов ведется, начиная с самых младших разрядов.

Пример:

B0 = %10101100 REV 4 ' Преобразовать значение %10101100 в переменную

B0 равную %10100011

Оператор SIN.

Оператор SIN возвращает 8-разрядное значение косинуса угла. Результат представляется в дополнительном коде. Это значит, что восьмой разряд результата в двоичном представлении говорит о знаке результата. Если этот разряд равен 0, то результат положительный, а если равен единице – отрицательный (модуль отрицательного результата может быть получен с использованием команды ABS). В PicBasicPro значения аргумента и значения функции отличаются от значений принятых в обычной математике. Так в PicBasicPro полный угол для функции SIN равен 255 в двоичных радианах, в отличие от обычных 360 градусов. Для перевода градусов в двоичные радианы воспользуйтесь формулой α*255/360 где α - угол в градусах. А максимальное и минимальное значение функции лежит в интервале от +127 до -127 (в обычной математике этот интервал от +1 до -1).

Пример:

B1 = SIN B0

48


Оператор SQR.

Оператор SQR возвращает квадратный корень значения. Так как PicBasic работает только с целыми числами, результатом всегда будет 8-разрядное целое число, не большее чем фактический результат.

Пример:

B0 = SQR W1

' B0 квадратный корень W1

Поразрядные операторы.

Одним из важных свойств языков высокого уровня есть возможность перехода к языкам низкого уровня типа ассемблер. Поразрядные операторы осуществляют доступ к регистрам и памяти МК на уровне отдельного разряда. Они действуют на каждый разряд значения булевым способом и могут использоваться для того, чтобы ‘обнулить’ какие либо разряды или установить в 1 нужные. Например,

B0

= B0

& %00000001

' Обнулить разряд 0 переменной B0

B0

=

B0

|

%00000001

' Установить в переменной B0 разряд 0 в 1

B0

=

B0

^

%00000001

' Осуществить реверсирование состояние разряда 0

‘ в переменной B0

В следующей таблице представлены поразрядные операторы.

Таблица 7

ПОРАЗРЯДНЫЕ ОПЕРАТОРЫ

Операторы

Описание

&

Логическое И

|

Логическое ИЛИ

^Логическое Исключающее ИЛИ

~Логическое НЕ (отрицание)

&/

Логическое НЕ И

|/

Логическое НЕ ИЛИ

^/

Логическое НЕ Исключающее ИЛИ

Операторы сравнения.

Операторы сравнения используются в утверждениях типа IF..THEN, для того чтобы сравнить одно выражение с другим. PicBasicPro поддерживает следующие операторы сравнения:

Таблица операторов сравнения

Таблица 8

49


Операторы сравнения

Оператор сравнения

Описание

= или ==

равно

<> или ! =

Не равно

<

Меньше чем

>

Больше чем

<=

Меньше или равно

>=

Больше или равно

Логические операторы.

Логические операторы отличаются от поразрядных операторов. Они приводят к истинному или ложному следствию их действия. Значение 0 рассматривают как ложное. Любое другое значение рассматривается как истинное. Они по большей части используются в соединении с операторами сравнения в утверждениях IF..THEN. PicBasicPro поддерживает следующие логические операторы:

Таблица логических операторов

Таблица 9.

Логические операторы

Логический оператор

Описание

AND или &&

Логическое И

OR или ||

Логическое ИЛИ

XOR или ^^

Логическое исключающее ИЛИ

NOT AND

Логическое НЕ И

NOT OR

Логическое НЕ ИЛИ

NOT XOR

Логическое НЕ исключающее ИЛИ

Пример:

IF (A == big) AND (B > mean) THEN run

Убедитесь, что Вы использовали круглые скобки для указания PicBasicPro на нужный порядок выполнения операций.

50


Некоторые замечания о стилях программирования.

Создание и сопровождение программы это искусство. Здесь хотелось бы привести несколько простых методик следование, которым могло бы помочь Вам стать художником в этом деле.

Комментарии. Старайтесь использовать как можно больше комментариев. Даже притом, что программу пишете Вы, и ее работа совершенно очевидна для Вас. Однако через большой промежуток времени Вы не сможете вспомнить ее идеи, не говоря о постороннем человеке. Конечно, комментарии могут занимать много места в исходном тексте программы, но они не занимают память микроконтроллера, а поэтому используйте их свободно. И это поможет Вам в дальнейшем.

Делайте так, чтобы комментарии говорили Вам о том, что делает программа. Комментарий вроде: "Установить Pin0 в 1" - просто объясняет синтаксис языка, но ничего не говорит о том, почему Вы это делаете. Однако такой комментарий: "Включить светодиод, когда батарея разряжена" мог бы сказать Вам многое.

Блоки комментариев в начале программы и перед каждой секцией могут подробно описать то, что может случиться, вместо коротких заявлений в конце строки. Но не увлекайтесь одними только блоками, используйте оба вида комментариев.

В начале программы обычно описывается то, для чего программа предназначена, кто написал ее и когда. Может быть, также полезно внести в список дату и информацию о проверке, определения, что подключено к каждому контакту микроконтроллера, на какой микроконтроллер она рассчитывалась и тому подобное.

Контакты и имена переменных. Объявляя названия контактов или присваивая имена переменным старайтесь делать так, чтобы это было чем-то более понятным, нежели просто Pin0 или B1. В дополнение к либеральному использованию комментариев, наглядные имена переменных и контактов могут значительно повысить удобочитаемость программы. Следующий фрагмент программы демонстрирует это:

BattLED var PORTB.0

' Светодиод «Батарея разряжена»

level

var byte

' Переменная в которой хранится уровень

‘ зарядки батареи

If level < 10 Then

' Если уровень зарядки батареи низок,

High BattLED ' Включить светодиод

Endif

Метки. Метки также должны нести смысловую нагрузку. Название метки должно говорить о том, какая задача решается в подпрограмме начинающейся с

51


этой метки. Так как обычно строка или подпрограмма, к которой переходит программа, делают, что-то уникальное.

Оператор GOTO. Старайтесь не использовать слишком часто команду GOTO. Оператор GOTO является, может быть иногда необходимым, но злом, старайтесь минимизировать его использование в максимально возможной степени. Делайте так, чтобы Ваша программа логически не скакала, была бы более последовательной. Лучшей заменой команды GOTO для достижения цели может быть команда GOSUB.

Глава 3. Примеры программ.

Основной задачей данной книги является обучение читателя программированию микроконтроллеров на языке BASIC. До настоящего момента мы рассматривали теоретическую часть этого вопроса, но, как известно теория без практики это необходимое, но далеко не достаточное условие освоения какого либо предмета. Поэтому в этой части книги мы перейдем непосредственно к разработке программ для реальных целей. Во всех описанных проектах мы будем использовать микроконтроллер PIC16F877А. В этом микроконтроллере имеется все необходимое для решения наших задач. Хотя Вы можете взять и другие микроконтроллеры, имеющие в своем составе необходимые аппаратные средства. Но только не забывайте в панели MicroCode Studio в окне выбора микроконтроллера выбрать соответствующий тип контроллера.

Начнем мы с самого простого примера, который часто называют «Hello Word».

Пример № 1 – Мигающий светодиод («Hello Word»).

Наша первая программа будет включать и выключать светодиод, подключенный к одному из выводов микроконтроллера (PORTB.0). Таким образом, мы сделаем нечто типа маяка, который будет работать так долго, пока это кому-то не надоест. На Рис. 18 приведена схема этого устройства. Выбрали мы этот микроконтроллер (достаточно мощный) не потому, что будем решать архи-сложную задачу, а только потому, что его можно использовать во всех примерах этой книги. А зачем нам покупать несколько разных контроллеров, когда все примеры мы можем изучить на одной этой микросхеме.

А вот и текст нашей первой программы:

Symbol LED = PORTB.0

‘ Присвоим выводу PORTB.0 имя LED

TRISB = %11111110

Установим вывод В.0 на выход, а остальные на

‘ вход

main:

Метка начала основной программы

52