[ такое ощущение, что многим легче спросить и потом день ждать когда ответят, чем за 5 минут найти и разобраться в команде используя, например AVR Instruction Set - http://www.atmel.com/atmel/acrobat/doc0856.pdf.
согласен на 100 %. лучше разбираться самому....но была раньше такая работа на которой была возможность посидеть спокойно и чтото поделать.... а сейчас день пролетает как за 5 минут и я очень благодарен вам за понимание и помощь ПС а на ссылку открывается такое вот окно
Попытался разобраться, что это такое. Почитал описание упомянутых в вышеприведённом примере битов регистра USICR (МК ATTiny2313) и получил, что в данном случае в регистр R16 загружается байт 0b00011011. Вроде бы понятно. Хотя и непонятно, для чего его так записали .
Но в следующем примере мне встретилось ещё хуже :
ldi R16, (1<<USIWM0)|(0<<USICS0)|(1<<USITC)
Что такое (0<<USICS0) ? Это просто ноль во втором разряде двоичного числа? Тогда зачем его так записывать? В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает... А этот ноль чем лучше других? Чего я недопонимаю?
Последний раз редактировалось Тихоня Чт мар 12, 2009 12:33:20, всего редактировалось 1 раз.
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Подобные записи используются для простоты визуального восприятия кода.
Цитата:
Что такое (0<<USICS0) ? Это просто ноль? Тогда зачем его так записывать? В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает... А этот ноль чем лучше других?
Это обычный ноль, а записан он так, опять же, чтобы было чётко видно значение бита USICS0.
Цитата:
В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает
На другие разряды никто не обращает внимания, т.к. в данном конкретном месте кода программы их значение не важно.
На другие разряды никто не обращает внимания, т.к. в данном конкретном месте кода программы их значение не важно.
Ну, глядя в программу, я бы не сказал, что в ней не важно, чему будет равен, например, бит USICS1... Если в него записать 1, то полная чепуха получится. Но о нём просто решили не говорить. Молча записали ноль и всё. А на USICS0 ещё и пальцем показали.
Но в общем идея примерно прояснилась. Спасибо.
Зарегистрирован: Вс мар 04, 2007 01:17:12 Сообщений: 690
Рейтинг сообщения:0
ничего не будет... не важно сколько пустых строк или пробелов, главное соблюсти синтаксис- поставь программу VMLAB и эксперементируй сколько влезет, там даже для наглядности панель есть с кнопками и светодиодами- можешь под них код писать, как под настоящую панель
TEMP- это так регистр обозвали, некоторым неудобно писать out PORTB,R16, для наглядности обзывают регистры.
TEMP как название -это такая помойка, ее везде для одноразовых вычислений используют. Также можешь назвать R16 DATA или ZNACHENIE, PEREMENNAYA, короче как тебе удобнее.
Последний раз редактировалось Alexeus Пн мар 16, 2009 00:20:17, всего редактировалось 1 раз.
Зарегистрирован: Вс мар 04, 2007 01:17:12 Сообщений: 690
Рейтинг сообщения:0
Stalker46 писал(а):
Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB а можно ли так ldi Temp, PortB
ldiTemp, PortB???
последнее точно бред, такое не прокатит... (а что выхотите сделать присвоив темпу портб?)
вы хоть раз компилятор то запускали? если что не так- он ругается, если не ругается на с то тыся чпр обел ов и вместеслитыеслова, то все Ок, будет работать
Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB а можно ли так ldi Temp, PortB
ldiTemp, PortB???
Вы бы лучше описание инструкций АВР почитали (искать можно на этом форуме по ключевы словам AVR Instruction Set, собственно ссылка на документ приведена мной на предыдущей странице этой темы).
Если Вы командой
Код:
ldi Temp,PortB
пытаетесь считать содержимое порта B то у Вас ничего не получится, ибо читать нужно так
Код:
in Temp, PortB
Командой ldi Temp,PortB максимум что может получиться - это вы загрузите адрес порта в регистр Temp.
Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB а можно ли так ldi Temp, PortB
ldiTemp, PortB???
Да, кстати, рекомендую пистать названия регистров так, как они записаны в файле определений (например m8def.inc если речь идет о мега8, для др. контроллера будет другой файл), т. е. заглавными буквами: PORTB, PINB, DDRB.
Я вижу, здесь немало знающих людей собралось: надеюсь и мне подскажут Надо прочитать бит по одному адресу из пространства ввода-вывода (I/O space) и записать его по другому адресу и номеру разряда (тоже в I/O space). Как это сделать покороче?
У меня что-то больно громоздко получается: скопировать байт через IN в регистровый файл, выделить бит, проанализировать его значение, а потом, в зависимости от результата, SBI или CBI...
Неуж-то короче нельзя?
Карма: 1
Рейтинг сообщений: 3
Зарегистрирован: Пн сен 01, 2008 14:49:03 Сообщений: 151 Откуда: Казахстан
Рейтинг сообщения:0
Анализировать бит в I/O можно и не копируя. Смотри команды sbis и sbic.
А если копировать, то можно использовать команды bst и bld. Хотя всё равно длинновато получается......
Код:
in temp,port_in bst temp,bit_in in temp,port_out bld temp,bit_out out port_out,temp
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Тихоня писал(а):
Неуж-то короче нельзя?
Код:
sbic PinX, X rcall BitSet ; перейти по метке, если бит Х в PinX установлен sbis PinX, X rcall BitReset ; перейти по метке, если бит Х в PinX сброшен
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
YurkaM, Pooher, спасибо! Оба варианта по-своему хороши. У меня есть теперь пища для размышлений.
Это мне было нужно для тестовой программки, помогающей понять работу МК, а именно: светодиодик должен показывать состояние одного из флагов. Встроенный в AVR Studio симулятор дал мне повод усомниться в корректности симуляции интерфейса USI, почему я и решил поэкспериментировать на железе. А заодно и азы программирования осваиваю, совмещаю, так сказать, полезное с полезным
Люди, подскажите пожалста. Программку пишу и захотел сделать сохранение данные в ЕЕПРОМ. Программа данные туда успешно записывает, но вот считывает почему-то все нули. Уже пробую просто вывести в порт, на котором весят светодиоды то что прочтено из ЕЕПРОМ. Результат аналогичен Подскажите в каком месте криво сделано
Сейчас этот форум просматривают: Bing [Bot] и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения