Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 19:11

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: MACRO для работы с битами SFR (ASEM 51)
СообщениеДобавлено: 04 июн 2012, 15:36 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 647
Откуда: Херсон
Открыв код из темы http://forum.easyelectronics.ru/viewtopic.php?f=6&t=10703 решил вспомнить, как оно на 51 писать проги.

Вот сделал пару МАКРО для работы с битами SFR регистров, идею я уже когда-то предлагал.
Show

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MACRO для работы с битами SFR (ASEM 51)
СообщениеДобавлено: 05 июн 2012, 13:01 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4097
Откуда: г. Липецк
На первый взгляд полезные макросы.
Пишу на ассемблере AVR, и привык к записям вроде
Код:
outi   ADMUX, (1<<REFS0) | (1<<ADLAR)

Но на работе иногда приходится сталкиваться с ассемблером а51 и напрягают записи типа
Код:
MOV   TMOD,#00100000B

приходится лезть в даташит и выяснять что имелось в виду ;C/T = 0, Mode = 2
При применении предложенных макросов текст программы может стать более удобочитаемым.
P.S. При инициализации регистров макросом mSetBits вместо команды присвоения непосредственного значения MOV будет использована команда "логическое "ИЛИ" ORL. Т. е. макрос изменяет только указанные биты. Иногда это неприемлемо. Может быть стоит добавить макрос mInitBits с использованием MOV?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MACRO для работы с битами SFR (ASEM 51)
СообщениеДобавлено: 22 апр 2013, 18:18 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4097
Откуда: г. Липецк
У каждого ассемблера, а в особенности у его препроцессора есть свои особенности. Я пользуюсь IDE Keil uVision 4 и ее ассемблером А51. Прямая попытка применить эти макросы успехом не увенчалась. Пришлось адаптировать. Адаптированный вариант выкладываю:
Show Macros.inc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: MACRO для работы с битами SFR (ASEM 51)
СообщениеДобавлено: 30 май 2019, 21:30 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4097
Откуда: г. Липецк
Ввел в макросы защиту от использования адресов битов, не относящихся к используемому регистру (idiot proof). Переработана структура для избавления от повторяющегося кода. Пример использования, установка битов регистров TCON и SCON:
Код:
  mInitBits TCON, TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0
  mInitBits SCON, SM0, SM1, SM2, REN, TB8, RB8, TI, RI

Т.к. все биты соответствуют "своим" регистрам выхлоп компилятора нормальный:
Код:
Build target 'Target 1'
linking...
Program Size: data=39.0 xdata=0 code=11
"Macros" - 0 Error(s), 0 Warning(s).

Теперь поменяем в коде названия регистров:
Код:
  mInitBits SCON, TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0
  mInitBits TCON, SM0, SM1, SM2, REN, TB8, RB8, TI, RI

Биты теперь своим регистрам не соответствуют и выхлоп поменялся:
Код:
Build target 'Target 1'
assembling Main.a51...
Main.a51(26): error A110: Bit IT0 not valid for SCON register
Main.a51(26): error A110: Bit IE0 not valid for SCON register
Main.a51(26): error A110: Bit IT1 not valid for SCON register
Main.a51(26): error A110: Bit IE1 not valid for SCON register
Main.a51(26): error A110: Bit TR0 not valid for SCON register
Main.a51(26): error A110: Bit TF0 not valid for SCON register
Main.a51(26): error A110: Bit TR1 not valid for SCON register
Main.a51(26): error A110: Bit TF1 not valid for SCON register
Main.a51(27): error A110: Bit RI not valid for TCON register
Main.a51(27): error A110: Bit TI not valid for TCON register
Main.a51(27): error A110: Bit RB8 not valid for TCON register
Main.a51(27): error A110: Bit TB8 not valid for TCON register
Main.a51(27): error A110: Bit REN not valid for TCON register
Main.a51(27): error A110: Bit SM2 not valid for TCON register
Main.a51(27): error A110: Bit SM1 not valid for TCON register
Main.a51(27): error A110: Bit SM0 not valid for TCON register
Target not created.

Show И сам код макросов, Macros.inc

Upd. 24.06.19.
Глянул свежим взглядом, переработку структуры для избавления от повторяющегося кода до конца не довел, во внутреннем макросе iMakeMask код повторяется.
Чтобы от него избавиться, нужно ввести один внутренний макрос и отказаться от двух предыдущих
Show iCheckBit

Тогда в макросе iMakeMask повторяющегося кода не будет
Show iMakeMask


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB