Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

главный колбасист писал(а):АгА, по вашему совету в мультисиме наменял чего то,на свою голову.
Прочитал все свои сообщения за последние 30 лет на всех форумах, включая форумы знакомств, и не нашёл, где бы я упоминал мультисим или прочие трассировщики и виртуальщики.
Я проверяю исключительно на стендах и в железе. Есть свой определённый алгоритм поиска ошибок.
Прежде чем что-то менять, нужно знать для чего это нужно. Но если принципиально, то могу дать ссылку на форум, где я как раз что-то менял на первых шагах и что из этого вышло. Но это в лс.

Забейте в свой код тыщу раз "nop" и всё откомпилится на раз-два. Если целью стоит только чтобы компилятор принял. Но ни один светодиод при этом так и не зажжется.

Двигаться нужно к какойто цели, решать какую-то задачу, тогда и результат будет. А не просто бродить сам не зная куда.

Вот ответьте: зачем вам инициализация Z?
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

[uquote="shonty",url="/forum/viewtopic.php?p=3848212#p3848212"]Прежде чем что-то менять, нужно знать для чего это нужно.[/uquote]
Разумеется это так.

Мультисим это моя идея была. Я никого не обвиняю. А что,удобно. железо,железом,а это тоже хорошая вещь.мультисим и прочие протеусы.

Как же зачем инициализация ? Все надо знать. так и постигаем ,шаг за шагом. По быстрому хотел найти
в нете, ничего не попалось. :?
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Ну тогда lpm это загрузка байта с адреса програмной памяти, которая определена в Z (регистрах R30:R31) .

Опять же нужно знать какой байт с какого адреса вам нужен, и что вы хотите с ним сделать в последствии.
А просто так написать lpm (load programm memory кажется), это равно что написать nop. И ошибки нет и чЮдно время провели.
:)

PS: первое, на чём я споткнулся по незнанию, исправляя чужие коды это когда написал
adiw Z, 96
Знаний 0, но цель была.
Исправил на
adiw Z, 48
adiw Z, 48
Лаконично так :)
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

.device mega8
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc"
.list

;==
;объявления
.def temp=r16 ;колбасное изделие
.def counter=r17
.eseg
.db 0x05
.cseg
.equ DisplayPort=PORTB

enTa:
ldi counter,0b00110011
ldi temp,0x05
fmul temp,counter
out tccr0,temp
dec temp
inc counter
out 0x33,temp
ldi r18,0x01
bld r18,0x01
inc temp
ldi r30,0x01
lpm
ld r18,x
out DisplayPort,r0
add r0, temp
adiw r24,0x0a
rjmp enTa

Этого достаточно ?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

главный колбасист писал(а):Этого достаточно ?
Смотря для чего. Для того, что бы откомпилировалось, то вообще шедевр.
Правда и манипуляции с флагом T тоже не понятны...

Всё таки цель определяет направление.
А она у вас какая?
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Всё таки цель определяет направление.
А она у вас какая?
Цель,свалить отсюда.
навсегда...
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

главный колбасист, то что вы хотите научиться программировать и достичь определённой независимости - это очень хорошо.
Но процесс самообразования бывает двух типов:
Первый - с начала, с азов. Он более медленный, но основательный.
Второй - с конца. Более скоростной. Обращение к азам происходит в процессе, для решения возникающих затруднений и устранения пробелов в знаниях. Опять же, затруднения возникают при движении по определённому маршруту. При выбранном направлении.
Вы же сразу притянули конец к началу и оказались в глубокой... середине, потерявшись в направлениях. В такой ситуации даже затруднений для импульса к следующему движению возникнуть не может.
Здесь или в начало или в конец, третьего не дано.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

[uquote="shonty",url="/forum/viewtopic.php?p=3848570#p3848570"]главный колбасист,
Вы же сразу притянули конец к началу и оказались в глубокой... середине, потерявшись в направлениях. В такой ситуации даже затруднений для импульса к следующему движению возникнуть не может.
Здесь или в начало или в конец, третьего не дано.[/uquote]
:) Интересная точка зрения. :)

Опять меня преследуют разочарования. В моем протеусе не оказалось WH1602 с контроллером 44780.
Есть только какая то LM016L ,после получасовых поисков в библиотеке,но у нее 14 выводов а не 16. И нет входа С .Хотелось состыковать и поизвращаться с изменениями в коде.
Это не одно и то же? И как подключить LM016L ? Или подскажите,где импортировать модель WH1602 ?
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 19103
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

LM016L и 1602 - это одно и то же.
нет выводов подсветки.
остальное всё есть.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вообще-то ассемблер начинают изучать не с протеуса...
Максимум штатный симулятор IDE и/или примитив-макет.
А уже по мере усложнения задач сам придеш к пониманию "куда копать".
8)
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Не получается ничего. Буковки на виртуальном дисплее не бегают. При запуске симуляции. Экран зажигается,а буковок нет. :cry:
Доглядел виртуальным осциллоскопом,что генерации нет на кварце. Может в этом причина...
Жаль,файл проекта не могу прилепить.
Вложения
HD44780.c
(3.36 КБ) 209 скачиваний
lcd_mega8_circuit_small.gif
(13.48 КБ) 219 скачиваний
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Что у вас под обозначением "A1", на пине reset, между резистром и кондером? Перемычка?

Выкинте её. Там кнопка должна быть.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

А хрен его знает. схема не моя,взятая с какого то сайта.Впрочем как и исходник. У меня там ничего нет.
Я понимаю,что при соединении reset с землей, контроллер будет делать сброс. А так,с R и C будет однократный при подаче питания.

Добавлено after 35 minutes 40 seconds:
Прилепил кнопку. При нажатии на нее,сигналы с порта D становятся неопределенными. И это понятно.
А больше ничего.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 19103
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

главный колбасист, а что ты тут с исходником на Си делаешь в теме про ассемблер?
если еще тут будешь продолжать, дам бан за оффтоп.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Я больше не буду.
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

сигналы с порта D становятся неопределенными. И это понятно.
А больше ничего.
Ну понятное дело, что контроллеру нечего исполнять. Ты ему прошивку указал?
И да, на выводдах кварца в модели НИЧЕГО не будет - этот аспект не симулируется в виду его ненужности. Тактирование там виртуальное, и не просто так а частотой указанной в свойствах модели. Даже если биты конфигурации стоят иначе - модель на многие из них плевала с высокой колокольни в виду ненужности и бесперспективности в целях отладки программного кода, но полная симуляция всех аспектов просто впустую потратит ценный ресурс. Есть ещё ряд особенностей с которыми столкнётесь при работе с моделями/симуляторами... например UART-ы на протеусе не работают на скоростях выше 38400 бод. Если задать к примеру 115200 то реальный выход всеравно будет 38400 и не больше. Какое-то ограничение чтобы не использовали в коммерческих целях.
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1408
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край

Сообщение главный колбасист »

Ну понятное дело, что контроллеру нечего исполнять. Ты ему прошивку указал?
разумеется.
Нас выгнали в тему по протеусу.
https://radiokot.ru/forum/viewtopic.php ... start=5040
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Может кто-нибудь прояснить ситуацию с ".undef"?
Конечно я могу и регистрами всё переписать, но просто уже интересно стало...

Ситуация такая:

Код: Выделить всё

PODPROGRAMMA:
	.def BAR_track		=	R16
	.def BAR_height		=	R17
	.def POS_mark_line	=	R18
	.def BAR_width		=	R19
	.def BAR_count		=	R20

.....................
.....................
........... код подпрограммы ................
.....................
rcall LABEL1
.....................
.....................
.....................

	.undef BAR_track
	.undef BAR_height	
	.undef POS_mark_line	
	.undef BAR_width		
	.undef BAR_count
ret

LABEL1:
..........
..........
dec POS_mark_line
..........
..........
dec BAR_height
..........
..........
dec BAR_track
..........
..........
ret

По логике, я ставлю .undef-ы на выходе из основной подпрограммы, в которой они и были определены.
Но компилятор выдаёт: error: Invalid register

Если переношу их в конец подпрограммы под LABEL1, то принимает. Но тогда где же логика?

Первый раз столкнулся с таким. Где их правильно расположить?

PS.
Всё, понял. Их можно и ешё ниже расположить. Не зависимо в теле процедуры или нет. Но как-то странно это.
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Для обхода ограничений .def/.undef используем первичную привязку к "временным регистрам общего пользования"
к примеру:

Код: Выделить всё

; область полного функционала
 .def tmp0 = r16 ; рабочий регистр (полный функционал)
 .def tmp1 = r17 ; рабочий регистр (полный функционал)
 .def tmp = r18 ;(полный функционал)
 .def tmp = r19 ;(полный функционал)
 .def tmp = r20 ;(полный функционал)
 .def tmp = r21 ;(полный функционал)
 .def tmp = r22 ;(полный функционал)
 .def tmp = r23 ;(полный функционал)
а в прикладных программах применяем директивку #define

Код: Выделить всё

; proc_a
#define cnt0 tmp0
#define mod_a tmp1

Код: Выделить всё

;proc_b
#define my_buf tmp0
#define mod_5 tmp1
#define cntl tmp2
#define cnth tmp3
однако следует учитывать, что компилятор в таком случае не отслеживает "взаимоналожение" регистров
8)
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Надо только вспомнить что препроцессор(а директивы в его ведении) не знает ничего о программе и в часности о том как она работает - он работает с ТЕКСТОМ программы, для него это не более чем символы. Теперь стало яснее почему твой финт не сработал?
Контактная информация:
Ответить

Вернуться в «AVR»