Чему бы хорошему учиться! Так нет - давай галиматню печатать.) Газзель, ведь есть же классика - блинк, начни с неё. Затем уменьши, а если хочешь изгальнуться, продолжни на ассемблере. Ну только не так как, потому что у тебя это почти как в машинных кодах. А главное, заради чего!
Я вот только одного не пойму... Ежли у индивидума желание организовать задержки на основе времени исполнения команд, то на кой ляд дергать все биты порта МК при том, что требуется менять статус только одного бита того порта? Ведь просто остаточно выбрать наиболее длинную по времени выполнения команду да запускать ее пачками с нужной длиной (расходуя ресурс ПЗУ), а уж по окончании каждой пачки инвертировать выходной сигнал. Без всякого излишнего изврата. Это ежли циклические счетчики на регистрах вероисповедание использовать не позволяет. Только вот... у аруинки-нанки при тактовой частоте 16МГц время исполнения одноцикловой команды будет 0,0000000625 секунды, а время восприятия глаза хотя бы 0,1-0,2 секунды. Это сколько ж команд(написать в тексте исходника) надобно то будет?...
книгу Вольфганг Трамперт "AVR-RISC Микроконтроллеры".
спасибо! Да, немного многовато подробностей, но кое что нашел. Я до этого смотрел Джон Мортон, понравился простотой, но со странностями. А еще ИИ Кочегаров и ВА Трусов. Все учебники примерно похожи, но чуть переформулированное изложение позволяет догадаться в чем дело сравниваю несколько вариантов.
нащет примера, вот как раз новичку проще открыть даташит и увидеть номер регистра, все. В примере я пытался запомнить что в дефайнах, но это только если сидеть и зубрить наизусть. В итоге пока я пытался разобраться в программе, я уже забывал что есть что
у аруинки-нанки при тактовой частоте 16МГц время исполнения одноцикловой команды будет 0,0000000625 секунды, а время восприятия глаза хотя бы 0,1-0,2 секунды.
именно этим я и руководствовался, когда придумывал, что нужно от программы, и поэтому закладывал 3 ступени 256*256*256. Но факты говорят об обратном. После того как я освободил первые 26 строк, где должны быть векторы прерываний, программа заработала стабильным меандром примерно 2Гц, может 3Гц, хотя сама программа получается должна быть = 1 регистр * кол-во строк программы
поправка, регистр откуда выводится в порт забыл, получается 256*128* (104 строк проги) = 1966080 горит, и столько же негорит. Уже близко, но все равно где то в 2 раза быстрее, чем в реальности получилось
Код:
nop ; сюда приходят прерывания nop ; которые я ващето не использую nop ; однака... nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop
cli ; то же не знаю зачем clr R16 ; вот теперь после nop эти clr не стопорят диод clr R17 ; в чем разница все равно не понятно clr R18 clr R19 clr R20 clr R21 clr R22 clr R23 clr R24 clr R25 clr R26 clr R27 clr R28 clr R29 clr R30 clr R31
nop ; кажись это строка 44
dec R16 ; здесь b7 будет 127раз 1 + 128й раз 1 inc R17 ; здесь b7 будет 127раз 0 + 128й раз 1
mov R31, R16 ; здесь в R31 и 0x1E будем asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 ; переворачивать b7 в b0 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; перевернули
add R18, R31 ;здесь b7 сложится из 128раз ; перевернутых единиц R16 и перевернутых нулей R17 ; а потом , после использования, вычтется из ; перевернутых нулей R16 и перевернутых единиц R17
mov R31, R18 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ;
add R21, R31 ; используем моргнувшие в R18 единички, складываем их
mov R31, R17 ; доделываем, не даем R18 мгновенно заполниться asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E
sub R18, R31 ; , доделали, после пользования моргнувшей ; в R18 единички 127 раз держим b7 в ноль
mov R31, R21 asr R31 asr R31 ; b7 зажигает pb5
sbi 0x04, 5 out 0x05, R31 ; по задумке должно 128 гореть и гаснуть jmp 44 ; появился цикл, которого по задумке нужно было избежать
большая просьба, кому не лень, залейте, пожалуйста, у себя прогу, как быстро моргает диод? И работает ли ваще? Я не понимаю, почему по факту скорость моргания не соответствует указанной BOB51
Добавлено after 2 minutes 2 seconds: Martian , вот жеж! я искал сводную таблицу
Этта. ТС. Я сейчас скажу, и хотел бы, чтобы вы поняли правильно. Ассемблер такая штука. Никто не хочет смотреть в выкладывемые простыни кода. Исходи от другого. ТЗ. Что ты хочешь получить в целом. Где у тебя затруднения. И не лезь в ассемблер. Поясню. Всё пишут по разному. На основании своего опыта и текущего объёма знаний. И чтобы диалог был конструктивным. Нужно не кодами меряться, обмениваться. А постановкой задачи.
Классический пример "как испортить готовую конструкцию" В данном случае платку Ардуино нано... (похоронный марш)... В нанке по умолчанию зашит свой бутлоадер, разумеется с соответствующей начальной инициализацией по сигналу сброса (reset)... А тут вдруг мы запихиваем туда свою прошивку да под ассемблером ... И в добавок сносим таблицу векторов прерываний (но оставив бутлоадер). В результате ни работоспособной нанки ни работоспособной самоделки. ПЕЧАЛЬКА. В даташитах имена регистров всегда указаны (производителем по умолчанию). Русское описание АВРок весьма полное в книгах Белова (есть в СУНДУКЕ КОТА). Одна книга по тинькам, другая по мегам. К сожалению там меги 328й нету - написаны те книжи достаточно давно. Удобно читать параллельно с даташитами.
BOB51, чем тебе прошивка под ассемблером не нравится для ардуино-нано? или ты думаешь, что под С++ там совсем другая система команд - не такая как у ассемблера? для бутлодера не существует таблицы векторов в начале флеши, так как в "пустой" флеши там вообще не прописаны адреса векторов. а также бутлодер может перенести таблицу векторов в совсем другое место, в такое место, куда "не достанет" записываемая прошивка. поэтому все твои ПЕЧАЛЬКИ ни о чём, так как без проблем будет работать прошивка под ассемблером и векторам ничего не будет мешать.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, можно мне вклиниться? Пофигу на чём писать, только пиши по нормальному, а не быдлокодь. Ты понимаешь? Без абсолютных адресов и прочей туфты. И нихрена у ТС-а не получится, не ту область он выбрал. Мой ему совет - бросай, не трать время.
Да. И дрочить можно. Не афишируя, естественно. Хотя... А если серьёзно, нужно иметь лицо, перед тем, когда выставляешь свои бредни на всеобщее обозрение. И после того, когда их прочтут люди.
Для того, чтобы корректно добавить свой тест-проект в какой-либо МК, имеющий свою собственную прошивку, нужно достаточно полную информацию и об имеющейся в МК резидентной программе иметь и о его соответствующей конфигурации. Это совершенно не зависит от того на каком языке совмещение программ делать. Без учета того, что выполнено в исходной программе не получиться свой тест вставить. Как минимум "начальный след" в регистровом файле и в ОЗУ вполне вероятен, даже если таблица векторов не задействована. Далее... Бутлоадер явно конфигурирует ресурсы ввода-вывода (UART, вероятно сопутствующий таймер, указатель стека и может еще чего). Если тест-программа этого не учитывает(не выполняет реконфигурацию при запуске) ошибки неизбежны.
Заголовок сообщения: Re: поезд из А движется пока из басейна вытекает... BLINK
Добавлено: Вт фев 27, 2024 05:43:53
Открыл глаза
Зарегистрирован: Чт сен 14, 2023 23:53:12 Сообщений: 44
Рейтинг сообщения:0
ну яж не первый такой. У других работает. бутлодер не дает фьюзы изменить, но прогу с использованием прерываний можно загружать.
В моей проге не используются никакие ресурсы, что они сконфигурированы , что нет - только сложить/вычесть и перевернуть b7 в b0, все. Даже наоборот, мне все лишние ресурсы нужно подавить.
Собственно прога то работает, а в изначальной проге я круто просчитался с задержкой и заложил много ступеней, причем одну ваще и не собирался, и получилось 256*256*256*256*128* 227строк = 124794569752576 тиков = 7799660,6сек = 2166 часов. Вооощем 16мгц не так уж и много.
Однако интересна именно первоначальная ошибочная прога, тк диод мерцает и иногда гаснет с определенной закономерностью. А поскольку никакие специальные ресурсы и функции не используются, то это должно что то говорить о принципах работы или портов или контроллера ваще
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения