Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
432 Приложение 1 не работает. В этой книге мы пользуемся преимущественно более лаконичным сти лем языка Pascal, предваряя шестнадцатеричные числа знаком доллара. Создатели стандартов языка С в своем стремлении запутать пользователей как можно больше приняли еще запись в реже употребляемой восьмеричной системе, как числа с ведущим нулем, - например, 77 означает просто десятичное 77, а вот 077 будет означать 7 · 8 + 7 = 63 1 0 • Это надо учитывать, потому что и среда Arduino, и АVR-ассемблер принимают такую запись, и это может привести к недоразуме ниям. Следует учитывать, что стандартами языков С и С++ запись констант в двоичном виде не поддерживается, потому с этим вопросом существует большая путаница в языках на их основе . Созданный на основе С/С++ язык Arduino унаследовал от АVR-ассемблера поддержку такой записи, но, формально говоря, в нем определена другая форма представления двоичных чисел : с заглавной латинской В перед чис лом (ВОООО 1 1 О 1 ) . В Arduino можно использовать обе этих формы, а вот в АVR ассемблере - только первую. Нужно также учитывать, что во избежание неодно значностей не следует записывать в двоичном виде числа более одного байта. В книге часто встречаются примеры, когда большое десятичное число нужно поде лить на байты, записывая их в отдельные разряды. Это можно делать с помощью штатных средств АVR-ассемблера (функции low и high - см. главу 6) . В явном ви- 1 де (так, как мы задаем время задержки в многочисленных случаях применения про- цедуры Delay по всему тексту книги), десятичное число любой длины можно пре образовать в шестнадцатеричную запись с помощью обычного калькулятора Windows, если выбрать для него вид «Программист» . Отрицательными и дробными числами мы в этой книге не пользуемся (подробнее об этом см. главу 8), потому рассказывать о них не будем. Д воично-десяти чны й формат BCD О существовании двоично-десятичного формата записи чисел (BCD) пользователи языков высокого уровня (в том числе и Arduino) часто не осведомлены вовсе . Но в электронике его поневоле приходится использовать, когда речь идет о выводе, например, на цифровой дисплей. Для этой цели приходится преобразовывать дво ичные/шестнадцатеричные числа в десятичные и хранить их в таких же байтовых регистрах или ячейках памяти. Это можно делать двумя путями : в виде упакован ного и неупакованного BCD. Неупакованный формат попросту означает, что мы тратим на каждую десятичную цифру не тетраду, как минимально необходимо, а целый байт. Зато при этом не возникает разночтений: 05 1 6 = 05 1 0, и никаких проблем. Ясно, что это крайне неэкономично - байтов для записи числа требуется в два раза больше, а старший полубайт при этом все равно всегда ноль. Потому ВСD-числа при хранении и передаче по каналам связи всегда упаковывают, занимая и старший разряд второй десятичной цифрой. Скажем, число 59 1 0 при этом запишется не как два байта: 05 и 09, а как просто 59 1 6 • Однако обращаться с ним, как с обычным чис лом, нельзя : записи 59 1 6 соответствует число 5· 1 6 + 9 = 89 1 0, что в рассматриваемом
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==