Потому что хочу научиться.
Ассемблер (ASM) для AVR в вопросах и ответах
А можете подсказать, каким образом привязаться именно к конкретным битам конкретного регистра? Вы же не называете, например 0 буквой А(соответственно все 0 в программе), 1 буквой Б и т.п.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
- Реклама
Замечу, RXC не доступен для записи. Лучше использовать UBRR, если в камне нет GPIO.Мikа писал(а):Первый бит, который мне пришёл в голову - RXC для UARTа.
Все биты уже привязаны. В том же инклуде. Не изобретайте велосипед. А те, которые не привязаны можете обозвать сами через .def.
Например:
Фактически, Вы присваиваете здесь константе ABCDE число 7. И далее в программе можете использовать его для обращения к этому биту. Это нужно для того, чтобы допустим не забыть какой номер бита соответствует какому флагу в программе (из тех флагов, что Вы понапридумывали).
Например:
Код: Выделить всё
.def ABCDE=7Фактически, Вы присваиваете здесь константе ABCDE число 7. И далее в программе можете использовать его для обращения к этому биту. Это нужно для того, чтобы допустим не забыть какой номер бита соответствует какому флагу в программе (из тех флагов, что Вы понапридумывали).
ИС-пытатель писал(а):Например:Код: Выделить всё
.def ABCDE=7
Другой пример
Спойлер
Код: Выделить всё
.equ SCK=7
.equ DOUT=5
.equ SPI_IRQ=3
.equ SPI_CS=4
.equ SW_EN=6
.def _FF=R1
.def _01=R2
.def BIAS=R19
.def R_COUNT=R17
.def R_CRC=R18
.def R_DATA=R22
.equ BEGIN_POINT=$C0 ; буфер памяти результата
.equ RAM_CONST=$70
.equ RAM_CONST_END=$B0
.equ BUF_COMAND=$60
.equ BUF_COMAND_END=$64
.equ N1_RAM=$80 ; 32 байта скользящего среднего N1
.equ N2_RAM=$A0 ; 32 байта скользящего среднего N2
.set PRIZ=0
.set PR_INIT=1Ого, set, я и не знал что им кто-то пользуется... Мне обычно equ хватает. А def да, только для переопределения РОН.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- Реклама
Ну, да, конечно же .equ или .set )) Ох уж эта каша в голове.. ) В Си #define. Ща прогу стряпаю с большим их количеством - вот .def и всунул с разгону. ))
Парни, так я как раз о том и говорю, что если присвоить имя какому-нибудь числу через
то это просто обзывание нуля таким именем. А если регистров с флагами 2, например. Поэтому я и поинтересовался, можно ли биты конкретного регистра как-то назвать? 
Код: Выделить всё
.equ MPCM0 = 0Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
Да хоть 100 флагов, главное чтобы регистров хватило...
А чтобы не путать какие флаги в каком регистре, имена флагов можно писать с префиксами: FL1_FLAG0, FL1_FLAG1,...,FL2_FLAG8,FL2_FLAG9.
Спойлер
Код: Выделить всё
.def FLR1=R16 ;регистры под флаги, 2 шт.
.def FLR2=R17
.equ FLAG0=0 ;сами флаги, обзывайте как хотите
.equ FLAG1=1 ;желательно учитывая функциональность
.equ FLAG2=2
.equ FLAG3=3
.equ FLAG4=4
.equ FLAG5=5
.equ FLAG6=6
.equ FLAG7=7
.equ FLAG8=0
.equ FLAG9=1
.equ FLAG10=2
.equ FLAG11=3
.equ FLAG12=4
.equ FLAG13=5
.equ FLAG14=6
.equ FLAG15=7
.cseg
...
...
SBR FLR1,(1<<FLAG2) ;пример установки флагов
SBR FLR2,(1<<FLAG14)
SBRC FLR1,FLAG3 ;пример проверки флага
RCALL FLAG3_FUNCTION
Последний раз редактировалось Engineer_Keen Вт апр 22, 2014 10:26:13, всего редактировалось 2 раза.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Ааа, разные имена для одинаковых цифр. Всё гениальное просто
Спасибо!
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
#define в ассемблере тоже работает. Привязать имя бита к регистру? да нет проблем... указывайте регистр вместе с номером бита.
например #define zero_cross R25, 0
через EQU и SET сделать это невозможно да... #define мощнее этих директив, но и ответственность выше.(наворотить можно ууууу)
Что-то вроде такого: Еще есть макросы... определяешь один раз макрос и используешь каждый раз его имя вместо набора команд, а внутри макроса один раз указывается что делать с каким регистром и битом. #define по сути это тот же макрос только однострочный и без параметров. Уж использовать его для команд установки очистки битов - самое то.
например #define zero_cross R25, 0
через EQU и SET сделать это невозможно да... #define мощнее этих директив, но и ответственность выше.(наворотить можно ууууу)
Что-то вроде такого: Еще есть макросы... определяешь один раз макрос и используешь каждый раз его имя вместо набора команд, а внутри макроса один раз указывается что делать с каким регистром и битом. #define по сути это тот же макрос только однострочный и без параметров. Уж использовать его для команд установки очистки битов - самое то.
Это в каком компиляторе так дефайн на асме работает?
Стандартный AtmelStudio, всегда использую. Только надо иметь в виду - препроцессор регистрочувствительный, #DEFINE не сработает, будет писать "неизвестная директива" использовать нужно только #define. Я по началу путался, и не понимал почему не прокатывает, а оно вона как.
В 4.19 тоже работает, впрочем дело тут не в версии студии, а в версии ассемблера, например директивы с '#' это фишки avrasm2.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Код: Выделить всё
#define zero_cross R25, 0Код: Выделить всё
#define WORK_DONE OCR0A, 1
#define zero_cross R25, 0
#define strobe PORTA, 4
SBRC zero_cross
SET
BST zero_cross
CBI WORK_DONE
CBI strobe
SBI strobe
Так может быть группа из 12 бит распределенная по разным частям 2-3-5 регистров, а не только по 8.
Для работы с битами в регистрах правда, приходится использовать уже макросы т.к. нужно минимум 2 команды чтобы установить/сбросить бит в регистре.
А.. Ну, это получается только для команд работы с битами такое определение.
Для чего еще надо?
а какие возможности макросов в avr-as!
я об ассемблере GNU, который в комплекте avr-gcc присутствует.
в свое время сделал и использовал макросы для написания такого вида кода:
в свое время сделал и использовал макросы для написания такого вида кода:
Код: Выделить всё
pushreg r1, r2, r16, r17 ; особый макрос сохранения в стеке списка регистров
... тут юзаем эти регистры
popreg ; а этот макрос сам восстанавливает из стека ранее сохраненные регистры в нужном порядке
; и не надо запоминать, в каком порядке их в стек сохраняли!
retесли рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
А количество аргументов в макросе стандартно (допустим, равно исключительно 4)? или же оно плавает (может быть любым, но не меньше 1)? 
если этот вопрос по поводу моего сообщения, то отвечаю: может быть любым (за стопицот не поручусь, конечноИС-пытатель писал(а):А количество аргументов в макросе стандартно (допустим, равно исключительно 4)?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


