Ассемблер (ASM) для AVR в вопросах и ответах
- Negor
- Вымогатель припоя
- Сообщения: 586
- Зарегистрирован: Ср мар 07, 2007 22:58:02
- Откуда: Черкассы, Украина
- Контактная информация:
Итак. Хочу тахометр на МК для вентилятора ПК. Хочу на АСМе. Выбор пал мерять длину периода с таходатчика вентилятора. Меряем время одного периода, умножаем на два и делим 60 на то что получилось. Проблема в математике. Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается. Надо реализовать такую формулу 60/(word*0.01024) где word - 16-разр число. полученное число я планирую переделать в BCD и вывести на LCD. А вот с такими вот действиями на асме всё стало. Прошу подробно распиать наиболее выгодный путь. Я читал тут на форуме что можно запятые потом в ответы подставлять и т.д. Поэтому неплохо было бы в ответе написать логику рассуждений - типа "ввиду того что делимое 0,01024 делить мы будем такто потому что если будем делить нетакто то получится вот так". Заранее спасибо
There is only 10 kind of people: those who understands binary code and those who dont!!!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Negor писал(а):Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается.
Дак если на Си УЖЕ написал ... может РАЗУМНО и продолжить на нём ?!
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Negor
- Вымогатель припоя
- Сообщения: 586
- Зарегистрирован: Ср мар 07, 2007 22:58:02
- Откуда: Черкассы, Украина
- Контактная информация:
Не - на Си я написал кусочек(ничтожный) который и вычисляет эту формулу. Написал СПЕЦИАЛЬНО чтоб потом заюзать в проэкте на асм. Написать проэкт на АСМе - дело принципа, тем более что столбко уже вложил - осталось чуть меньше половины
There is only 10 kind of people: those who understands binary code and those who dont!!!
- Томатный
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Вт июл 31, 2007 20:32:30
- Откуда: Киев, Украина
- Контактная информация:
ложная тревога, тут все есть:
http://elm-chan.org/cc_e.html
пока найдешь, можно подумать что этим никто никогда не занимался...
http://elm-chan.org/cc_e.html
пока найдешь, можно подумать что этим никто никогда не занимался...
- GRafGRay
- Прорезались зубы
- Сообщения: 223
- Зарегистрирован: Вт окт 02, 2007 14:43:23
- Откуда: Ростов-на-Дону
- Контактная информация:
Господа, вопрос следующий
имеется рабочая прошивка для тини 2313, девайс готов и думаю что исправен. Но есть одно но! Семисегментные индикаторы я воткнул не с общим анодом, как автор статьи просил - а с общим катодом (были у меня под рукой, не стал заморачиваться). В обучалке автор писал что мол замена индикаторов - дело плёвое, 2 строчки в коде и всё ок. Но я уже второй час по форуму в поисках этих двух строчек и ничего вразумительного не нашел. Будьте любезны, не откажите в помощи.
имеется рабочая прошивка для тини 2313, девайс готов и думаю что исправен. Но есть одно но! Семисегментные индикаторы я воткнул не с общим анодом, как автор статьи просил - а с общим катодом (были у меня под рукой, не стал заморачиваться). В обучалке автор писал что мол замена индикаторов - дело плёвое, 2 строчки в коде и всё ок. Но я уже второй час по форуму в поисках этих двух строчек и ничего вразумительного не нашел. Будьте любезны, не откажите в помощи.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
эти строчки надо не на форуме искать, а в исходнике программы
кратко: надо инвертировать сигналы на сегменты и общие анлды/катоды. т.е. найти место в программе, где эти данные выводятся и перед выводом проинвертировать их.
кратко: надо инвертировать сигналы на сегменты и общие анлды/катоды. т.е. найти место в программе, где эти данные выводятся и перед выводом проинвертировать их.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
GRafGRay писал(а):но проблема в том что я очень плохо знаком с синтаксисом ассемблера
Очень плохо.
Всё засисит от того каким образом идет взаимодействие с портом, т.е. нужные биты устанавливаются/очищаются по одиночке или все сразу.
Если по одиночке, то копайте в сторону команд SBI и CBI.
Если сразу, то чтоб инвертировать значение в регистре юзайте команду COM.
- GRafGRay
- Прорезались зубы
- Сообщения: 223
- Зарегистрирован: Вт окт 02, 2007 14:43:23
- Откуда: Ростов-на-Дону
- Контактная информация:
Код и девайс отсюда http://www.radiokot.ru/lab/controller/01/
-
ipkin
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вт июл 10, 2007 23:15:17
- Откуда: Магнитогорск
во вложении два фрагмента кода от программы (контроллер мега64)
один без использования RCALL а второй с использованием вот который без RCALL (MEG1.ASM) он работает на выводе порта D7 пролетает 0 а коде MEG2.ASM этого 0 нет объясните почему хотя компилятор ошибки не выдаёт просто хочу чтобы в основной программе были подпрограммы а неполучается
один без использования RCALL а второй с использованием вот который без RCALL (MEG1.ASM) он работает на выводе порта D7 пролетает 0 а коде MEG2.ASM этого 0 нет объясните почему хотя компилятор ошибки не выдаёт просто хочу чтобы в основной программе были подпрограммы а неполучается
-
ipkin
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вт июл 10, 2007 23:15:17
- Откуда: Магнитогорск
в том то и дело что не работает
я сейчас просто записываю эти короткие коды в мегу и осцилом смотрю в коде где без rcall нолик пробегает а с rcall его нет вот такая вот проблема
а вот ещё если вместо файла m64def.inc подставить 8515def.inc и в коде убрать строку sts XMCRA,temp копилятор при таком раскладе ругается (т.к у 8515 нет такого регистра) всё робит но у меня же мега64
я сейчас просто записываю эти короткие коды в мегу и осцилом смотрю в коде где без rcall нолик пробегает а с rcall его нет вот такая вот проблема
а вот ещё если вместо файла m64def.inc подставить 8515def.inc и в коде убрать строку sts XMCRA,temp копилятор при таком раскладе ругается (т.к у 8515 нет такого регистра) всё робит но у меня же мега64
может включен режим совместимости с мега103, как здесь
http://www.radiokot.ru/forum/viewtopic.php?t=8985
http://www.radiokot.ru/forum/viewtopic.php?t=8985
- Томатный
- Нашел транзистор. Понюхал.
- Сообщения: 174
- Зарегистрирован: Вт июл 31, 2007 20:32:30
- Откуда: Киев, Украина
- Контактная информация:
пожалуйста наведите на правильный путь
когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).
Это видно по тому, что у меня после инициализации на ЖКИ выводится надпись "Хеллоу" и после очистки экрана должна выполняться основная програма, но у меня после очистки экрана снова появляется надпись "Хеллоу" и так происходит пока поступают даные на RXD.
для меги32 векторы прерываний описал так:
в подпрограме USART_RXC пусто:
и ещё вопрос: можно ли в одной подпрограме использовать несколько ret или reti ?
когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).
Это видно по тому, что у меня после инициализации на ЖКИ выводится надпись "Хеллоу" и после очистки экрана должна выполняться основная програма, но у меня после очистки экрана снова появляется надпись "Хеллоу" и так происходит пока поступают даные на RXD.
для меги32 векторы прерываний описал так:
Код: Выделить всё
rjmp RESET
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp USART_RXC
reti
reti
reti
reti
reti
reti
retiв подпрограме USART_RXC пусто:
Код: Выделить всё
USART_RXC:
retiи ещё вопрос: можно ли в одной подпрограме использовать несколько ret или reti ?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
оформите таблицу векторов прерываний, как положено - думаю, проблемы исчезнут. используйте конструкцию
вместо кучи бестолковых nop-ов или rjmp-ов. кто вас научил так оформлять таблицу векторов прерываний?!
Код: Выделить всё
.org VECTOR
rjmp VECTOR_FUNC
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Томатный писал(а):когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).
для меги32 векторы прерываний описал так:
Как правильно сделать посмотрите в АСМ листинге (файл .lst) в примере к задаче 5 курса - там как раз работа с USART и с LCD.
Или в примере в VMLAB
C:\VMLAB\AVR_demo\UART.ASM
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru