Обсуждаем контроллеры компании Atmel.
Вс апр 13, 2008 00:43:05
очищает все пины порта B кроме 0 и 1
т.е. на 4 линиях даных ЖКИ делает нули, а сигналы RS и E оставляет неизмеными
RS -> PB0
EN -> PB1
DB4 -> PB2
DB5 -> PB3
DB6 -> PB4
DB7 -> PB5
Вс апр 13, 2008 00:45:40
Томатный писал(а):очищает все пины порта B кроме 0 и 1
т.е. на 4 линиях даных ЖКИ делает нули, а сигналы RS и E оставляет неизмеными
по идее должно быть так:
in r16,PORTB
andi r16,$03
out PORTB,r16
Вс апр 13, 2008 00:56:32
ну да, я выложил код, до того как нашел ошибку
сорри, что забыл сказать
Вс апр 13, 2008 14:06:03
Итак. Хочу тахометр на МК для вентилятора ПК. Хочу на АСМе. Выбор пал мерять длину периода с таходатчика вентилятора. Меряем время одного периода, умножаем на два и делим 60 на то что получилось. Проблема в математике. Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается. Надо реализовать такую формулу 60/(word*0.01024) где word - 16-разр число. полученное число я планирую переделать в BCD и вывести на LCD. А вот с такими вот действиями на асме всё стало. Прошу подробно распиать наиболее выгодный путь. Я читал тут на форуме что можно запятые потом в ответы подставлять и т.д. Поэтому неплохо было бы в ответе написать логику рассуждений - типа "ввиду того что делимое 0,01024 делить мы будем такто потому что если будем делить нетакто то получится вот так". Заранее спасибо
Вс апр 13, 2008 14:09:19
Negor писал(а):Написал на Си - и нихрена не понял что там он на асме накатал. Посмотрел аппноут AVR200 и не понял как там деление получается.
Дак если на Си
УЖЕ написал ... может
РАЗУМНО и продолжить на нём ?!
Вс апр 13, 2008 14:34:48
Не - на Си я написал кусочек(ничтожный) который и вычисляет эту формулу. Написал СПЕЦИАЛЬНО чтоб потом заюзать в проэкте на асм. Написать проэкт на АСМе - дело принципа, тем более что столбко уже вложил - осталось чуть меньше половины
Вс апр 13, 2008 15:16:57
извините, что перебиваю, но я снова остановился на проблеме...
как мне вывести число в регистре на символьный ЖКИ?
с делением проблемы...
команда FMUL дает тот же результат что и сдвиг регистра вправо
Вс апр 13, 2008 21:38:22
ложная тревога, тут все есть:
http://elm-chan.org/cc_e.html
пока найдешь, можно подумать что этим никто никогда не занимался...
Сб апр 19, 2008 19:03:19
Господа, вопрос следующий
имеется рабочая прошивка для тини 2313, девайс готов и думаю что исправен. Но есть одно но! Семисегментные индикаторы я воткнул не с общим анодом, как автор статьи просил - а с общим катодом (были у меня под рукой, не стал заморачиваться). В обучалке автор писал что мол замена индикаторов - дело плёвое, 2 строчки в коде и всё ок. Но я уже второй час по форуму в поисках этих двух строчек и ничего вразумительного не нашел. Будьте любезны, не откажите в помощи.
Сб апр 19, 2008 19:21:04
эти строчки надо не на форуме искать, а в исходнике программы
кратко: надо инвертировать сигналы на сегменты и общие анлды/катоды. т.е. найти место в программе, где эти данные выводятся и перед выводом проинвертировать их.
Сб апр 19, 2008 19:25:02
Это я догодался, но проблема в том что я очень плохо знаком с синтаксисом ассемблера, потому и спрашиваю, может ли кто-нить подсказать какие комманды мне нужно дописать (или стереть) чтоб инвертировать выход портаБ
Сб апр 19, 2008 19:33:32
GRafGRay писал(а):но проблема в том что я очень плохо знаком с синтаксисом ассемблера
Очень плохо.
Всё засисит от того каким образом идет взаимодействие с портом, т.е. нужные биты устанавливаются/очищаются по одиночке или все сразу.
Если по одиночке, то копайте в сторону команд SBI и CBI.
Если сразу, то чтоб инвертировать значение в регистре юзайте команду COM.
Вс апр 27, 2008 22:40:22
во вложении два фрагмента кода от программы (контроллер мега64)
один без использования RCALL а второй с использованием вот который без RCALL (MEG1.ASM) он работает на выводе порта D7 пролетает 0 а коде MEG2.ASM этого 0 нет объясните почему хотя компилятор ошибки не выдаёт просто хочу чтобы в основной программе были подпрограммы а неполучается
- Вложения
-
- MEG2.ASM
- этот код не работает
- (1.17 KiB) Скачиваний: 606
-
- MEG1.ASM
- этот код работает
- (1.21 KiB) Скачиваний: 617
Вс апр 27, 2008 22:56:42
И в MEG2.ASM и MEG1.ASM код почти одинаковый, всё должно работать и в том и в другом случае. Разница только в том, что там где используется RCALL, задержка будет на 7 тактов дольше.
Вс апр 27, 2008 23:10:46
в том то и дело что не работает
я сейчас просто записываю эти короткие коды в мегу и осцилом смотрю в коде где без rcall нолик пробегает а с rcall его нет вот такая вот проблема
а вот ещё если вместо файла m64def.inc подставить 8515def.inc и в коде убрать строку sts XMCRA,temp копилятор при таком раскладе ругается (т.к у 8515 нет такого регистра) всё робит но у меня же мега64
Пн апр 28, 2008 00:37:01
может включен режим совместимости с мега103, как здесь
http://www.radiokot.ru/forum/viewtopic.php?t=8985
Пн апр 28, 2008 16:26:46
пожалуйста наведите на правильный путь
когда происходит прерывание по завершению приема 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 ?
Пн апр 28, 2008 16:36:26
оформите таблицу векторов прерываний, как положено - думаю, проблемы исчезнут. используйте конструкцию
- Код:
.org VECTOR
rjmp VECTOR_FUNC
вместо кучи бестолковых nop-ов или rjmp-ов. кто вас научил так оформлять таблицу векторов прерываний?!
Пн апр 28, 2008 16:39:05
Томатный писал(а):когда происходит прерывание по завершению приема UART, МК перегружается или происходит прыжок в начало програмы(или другой вариант, сам не знаю).
для меги32 векторы прерываний описал так:
Как
правильно сделать посмотрите в АСМ листинге (файл .lst) в примере к задаче 5 курса - там как раз работа с USART и с LCD.
Или в примере в VMLAB
C:\VMLAB\AVR_demo\UART.ASM
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.