Страница 13 из 400
Добавлено: Вт мар 10, 2009 22:48:01
vistador
согласен на 100 %. лучше разбираться самому....но была раньше такая работа на которой была возможность посидеть спокойно и чтото поделать.... а сейчас день пролетает как за 5 минут и я очень благодарен вам за понимание и помощь
ПС а на ссылку открывается такое вот окно

Добавлено: Ср мар 11, 2009 01:50:15
smac
vistador писал(а):
ПС а на ссылку открывается такое вот окно
Прошу прощения, что не проверил, в ссылку вкралась лишняя точка в конце, уже поправил в своем сообщении.
Добавлено: Ср мар 11, 2009 01:57:04
vistador
спасибо...
Ассемблер
Добавлено: Чт мар 12, 2009 12:05:53
Тихоня
Начал изучать ассм самостоятельно. Заметил, что в программах часто встречается загрузка регистров примерно таким способом:
ldi R16, (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
Попытался разобраться, что это такое. Почитал описание упомянутых в вышеприведённом примере битов регистра USICR (МК ATTiny2313) и получил, что в данном случае в регистр R16 загружается байт 0b00011011. Вроде бы понятно. Хотя и непонятно, для чего его так записали

.
Но в следующем примере мне встретилось ещё хуже

:
ldi R16, (1<<USIWM0)|(0<<USICS0)|(1<<USITC)
Что такое
(0<<USICS0) ? Это просто ноль во втором разряде двоичного числа? Тогда зачем его так записывать? В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает...

А этот ноль чем лучше других? Чего я недопонимаю?
Добавлено: Чт мар 12, 2009 12:27:34
Pooher
Подобные записи используются для простоты визуального восприятия кода.
Что такое (0<<USICS0) ? Это просто ноль? Тогда зачем его так записывать? В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает... А этот ноль чем лучше других?
Это обычный ноль, а записан он так, опять же, чтобы было чётко видно значение бита USICS0.
В других разрядах тоже есть нули, но они получаются как бы сами собой и никто на них внимания не обращает
На другие разряды никто не обращает внимания, т.к. в данном конкретном месте кода программы их значение не важно.
Добавлено: Чт мар 12, 2009 12:54:50
Тихоня
Pooher писал(а):
На другие разряды никто не обращает внимания, т.к. в данном конкретном месте кода программы их значение не важно.
Ну, глядя в программу, я бы не сказал, что в ней не важно, чему будет равен, например, бит USICS1... Если в него записать 1, то полная чепуха получится. Но о нём просто решили не говорить. Молча записали ноль и всё. А на USICS0 ещё и пальцем показали.
Но в общем идея примерно прояснилась. Спасибо.
Добавлено: Сб мар 14, 2009 20:40:04
Arlleex
Добавлено: Вс мар 15, 2009 22:42:04
Arlleex
Помогите пожалуйста!
Как отличается написание с пробелами и их количеством?
вот пример:
.include "d:\avr\avrasm\appnotes\2313def.inc"
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org 0
ldi Temp, Ob11111111 ; присвоение константы
out DDRB,Temp ; вывод
; выводим число 11010010 на светодиоды
ldi Temp,Ob11010010 ; присвоение константы
out PortB,Temp ; вывод на индикацию
.cseg
.org 0
ldi Temp,Ob11111111
out DDR,Temp
Begin: ldi Temp, Ob00000001 ; зажигаем первый светодиод
out PortB,Temp
ldi Temp1,0 ; задержка
ldi Temp2,0
ldi Temp3,10
Loop: dec Temp1
brine loop1
dec Temp2
brine Loop1
dec temp3
brine Loop1
ldi Temp, Ob00000010 ; зажигаем второй светодиод
out PortB,Temp
не знаю, видно ли здесь, но после некоторых операторов стоит много пробелов. От их числа Много зависит? а если строчек (интер нажимаем)?
И что бедет если я напишу, например, не out PortB,Temp а out PortB, Temp, или out PortB, Temp?
Что будет?
Ответьте пожалуйста, заранее Благодарен!!!
вот еще вопрос по ходу: что такое Temp???
Добавлено: Пн мар 16, 2009 00:15:13
Alexeus
ничего не будет... не важно сколько пустых строк или пробелов, главное соблюсти синтаксис- поставь программу VMLAB и эксперементируй сколько влезет, там даже для наглядности панель есть с кнопками и светодиодами- можешь под них код писать, как под настоящую панель
TEMP- это так регистр обозвали, некоторым неудобно писать out PORTB,R16, для наглядности обзывают регистры.
TEMP как название -это такая помойка, ее везде для одноразовых вычислений используют. Также можешь назвать R16 DATA или ZNACHENIE, PEREMENNAYA, короче как тебе удобнее.
Добавлено: Пн мар 16, 2009 00:18:11
smac
Stalker46 писал(а):Помогите пожалуйста!
Как отличается написание с пробелами и их количеством?
...
Пробелов может быть сколько угодно, главное, чтобы о ни не разделяли ключевые слова (команды, имена регистров и т. п. ) т. е. нельзя писать
остальное не запрещено.
Вообще у Вас по-видимому ошибки связаны с Ob11010010, это потому что у Вас там буква 'O' перед b вместо цифры 0.
Stalker46 писал(а):вот еще вопрос по ходу: что такое Temp
"Ну, вы, блин, даете" - (це) Михалыч.
директива def задает символьное имя регистру, т.е после приведенных строк вместо r16 можно писать Temp, вместо r17 - Temp1, и т. д. А вообще RTFM.
Добавлено: Пн мар 16, 2009 07:36:29
Arlleex
Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB
а можно ли так
ldi Temp, PortB
ldiTemp, PortB???
Добавлено: Пн мар 16, 2009 07:51:08
Alexeus
Stalker46 писал(а):Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB
а можно ли так
ldi Temp, PortB
ldiTemp, PortB???
последнее точно бред, такое не прокатит... (а что выхотите сделать присвоив темпу портб?)
вы хоть раз компилятор то запускали? если что не так- он ругается, если не ругается на с то тыся чпр обел ов и вместеслитыеслова, то все Ок, будет работать

Добавлено: Пн мар 16, 2009 11:16:20
smac
Stalker46 писал(а):Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB
а можно ли так
ldi Temp, PortB
ldiTemp, PortB???
Вы бы лучше описание инструкций АВР почитали (искать можно на этом форуме по ключевы словам AVR Instruction Set, собственно ссылка на документ приведена мной на предыдущей странице этой темы).
Если Вы командой
пытаетесь считать содержимое порта B то у Вас ничего не получится, ибо читать нужно так
Командой ldi Temp,PortB максимум что может получиться - это вы загрузите
адрес порта в регистр Temp.
Добавлено: Вт мар 17, 2009 00:30:20
Alexeus
да и состояние порта не так считывается а так:
Добавлено: Вт мар 17, 2009 00:46:27
smac
Stalker46 писал(а):Понятно все что Вы все сказали, только не понятно одно опять же:
А является ли ключевым словом это
ldi Temp,PortB
а можно ли так
ldi Temp, PortB
ldiTemp, PortB???
Да, кстати, рекомендую пистать названия регистров так, как они записаны в файле определений (например m8def.inc если речь идет о мега8, для др. контроллера будет другой файл), т. е. заглавными буквами: PORTB, PINB, DDRB.
Добавлено: Вт мар 17, 2009 17:44:03
Тихоня
Я вижу, здесь немало знающих людей собралось: надеюсь и мне подскажут
Надо прочитать бит по одному адресу из пространства ввода-вывода (I/O space) и записать его по другому адресу и номеру разряда (тоже в I/O space). Как это сделать покороче?
У меня что-то больно громоздко получается: скопировать байт через IN в регистровый файл, выделить бит, проанализировать его значение, а потом, в зависимости от результата, SBI или CBI...
Неуж-то короче нельзя?

Добавлено: Вт мар 17, 2009 18:49:02
YurkaM
Анализировать бит в 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
Добавлено: Вт мар 17, 2009 22:30:19
Pooher
Тихоня писал(а):Неуж-то короче нельзя?
Код: Выделить всё
sbic PinX, X
rcall BitSet ; перейти по метке, если бит Х в PinX установлен
sbis PinX, X
rcall BitReset ; перейти по метке, если бит Х в PinX сброшен
Добавлено: Ср мар 18, 2009 09:21:09
Тихоня
YurkaM, Pooher, спасибо!
Оба варианта по-своему хороши. У меня есть теперь пища для размышлений.
Это мне было нужно для тестовой программки, помогающей понять работу МК, а именно: светодиодик должен показывать состояние одного из флагов. Встроенный в
AVR Studio симулятор дал мне повод усомниться в корректности симуляции интерфейса
USI, почему я и решил поэкспериментировать на железе. А заодно и азы программирования осваиваю, совмещаю, так сказать, полезное с полезным

Добавлено: Ср мар 25, 2009 06:37:19
Igor
Люди, подскажите пожалста. Программку пишу и захотел сделать сохранение данные в ЕЕПРОМ. Программа данные туда успешно записывает, но вот считывает почему-то все нули. Уже пробую просто вывести в порт, на котором весят светодиоды то что прочтено из ЕЕПРОМ. Результат аналогичен

Подскажите в каком месте криво сделано