... настраиваете таймер на переполнение и в прерывании опрашиваете клавиатуру. Если переполнение, например, происходит каждые 10 мсек, то наличие "сигнала" нажатия в течении 10 прерываний подряд и есть факт нажатия.
Предположим я опрошу кнопку и запущу процедуру, а что потом? Как обработать все кнопки? И не проще ли подправить мой код, видел много примеров на таком принципе как у меня, без таймеров, а то я в них не шарю
Блин, да вы когда-нибудь научитесь вкладывать простыни кода в файлы???
Я конечно дико извиняюсь, но как уже сказал выше - файл прикрепить не удалось. Вылазит окошко Идет закачка, потом окошко закрывается, а файл так и не прикреплен((((
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт фев 22, 2011 13:23:03
Потрогал лапой паяльник
Зарегистрирован: Пн мар 16, 2009 23:35:42 Сообщений: 383 Откуда: Украина Новоднестровск
Рейтинг сообщения:0
Всем привет. К то подскожет как написать код, чтоб прочитать по порядку содержимое, сначала PIND0, затем PIND1, и так далее, PIND2,PIND3.PIND4,PIND5,PIND6,PIND7.
_________________ Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Всем привет. К то подскожет как написать код, чтоб прочитать по порядку содержимое, сначала PIND0, затем PIND1, и так далее, PIND2,PIND3.PIND4,PIND5,PIND6,PIND7.
Только прочитать? А использовать полученные данные не надо?
Код:
SBIS PIND,0 RJMP P00 ;что-то делаем, если PIND0=1 RJMP P1 P00: ;что-то делаем, если PNID0=0 P1:SBIS PIND,1 RJMP P10 ;что-то делаем, если PIND1=1 RJMP P2 P10: ;что-то делаем, если PNID1=0 P2:; И Т. Д.
Всем привет. Такая проблема, решил в качестве примера собрать матричную клавиатуру и опрашивать ее 32ой мегой. В Proteuse схема работает как надо, а вот в железе нет, светодиоды просто друг за другом загораются.
Очередная аргумент в пользу вредности Протеуса. Человек научился писать программы для МК, но такие, что только в Протеусе и работают. А не было бы Протеуса, он бы давно научился писать программы, работающие в реале.
Подавление дребезга можно делать по разному. Можно так. Опрос клавиатуры нужно осуществлять 100 раз в секунду - не чаще. Если клава прочлась нажатой - это факт нажатия. Если клава 10 раз подряд прочлась отжатой - факт отжатия. Если был факт нажатия, то не может быть еще факта нажатия, пока не было факта отжатия.
Решил написать один большой проект на ассемблере, знаю что на СИ было бы проще - но к сожалению код на СИ не умещается в мегу64.. подумал что на ассемблере код будет короче.. да и быстродействие возможно будет где то чуть больше...
На асм для меги пишу впервые
архив с написанным вкладываю компилятор ассемблера - tavrasm
В настоящее время у меня следующие проблемы: 1. помоему где то некорректно работаю со стеком - иногда код перезагружается (на экране железки появляется мусор - с экраном работаю через буфер - возникло подозрение что стек растет и доходит до экрана)
2. постоянно в буфер экрана записываются какие то два байта (вижу на экране артифакты).. в коде вроде ничего записывающего по тем адресам нет... но артифакты есть.. думал что это глюки процедуры печати символов - но сдвинул в RAM буфер экрана - и артифакты сдвинулись на новое место на экране - то есть запись идет по фиксированным адресам ОЗУ и соответственно скорее всего процедура печати символов здесь не причем..
3. есть ли команда сохранения флагового регистра ? раньше помню всегда была команды наподобие PUSH AF / POP AF - чтобы сохранить регистр флагов в прерывании - а как это сделать в меге ? на PUSH SREG - компилятор ругнулся..
4. Какой софт отладчик может работать c выходными файлами tavrasm - ткните пож-та.. желательно с описанием настройки.. и хотелось бы чтото попроще протеуса - в принципе сейчас интересует только отладка кода (найти проблемы со стеком, посмотреть кто и что пишет в экранный буфер, посмотреть что делает прерывание с флагами..)
5. Очень был бы благодарен за указание подводных камней в написанном мною коде - лучше я перепишу сейчас... наверняка стилистических и алгоритмических ошибок в этом коде много... укажите мне на них - может быть мои проблемы от этих ошибок и возникли....
Решил написать один большой проект на ассемблере, знаю что на СИ было бы проще - но к сожалению код на СИ не умещается в мегу64.. подумал что на ассемблере код будет короче.. да и быстродействие возможно будет где то чуть больше...
а что же это за супер-проект такой, что в мегу64 может не влезть?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Решил написать один большой проект на ассемблере, знаю что на СИ было бы проще - но к сожалению код на СИ не умещается в мегу64.. подумал что на ассемблере код будет короче.. да и быстродействие возможно будет где то чуть больше...
а что же это за супер-проект такой, что в мегу64 может не влезть?!
кодер передатчика радиоуправления летающими моделями.. вот ссылка на первый вариант http://forum.rcdesign.ru/blogs/50021/blog9239.html (это мой блог на профильном сайте.. там же и обсуждение прошивки, версии, документация) - написан на СИ.. оо! вот кстати ссылка на доку в формате pdf.. там все с картинками vcoder.pdf но очень многое написать в первом варианте не удалось- и алгоритм повлиял и задачу ставил попроще (чтобы не распыляться бесконечно на функционал).. да и опыта было не много.. сейчас начал второй вариант http://forum.rcdesign.ru/blogs/50021/blog9927.html - дошел достаточно далеко... но использование программной памяти уже перевалило 60%.. причем написано только процентов 40 задачи... да и интерфейс не получился тот что хотел (а то что хотел - займет еще больше места !) вот и решил на асм перейти.. - и нашел первые грабли.. чую что из-за моего неправильного программирования все проблемы.. - вот и пришел за советом
Коты!! читайте исходные сообщения ! открывайте вложенные файлы !!
Повторю еще раз: проект перешагнет за 64 кб - если его писать на СИ.. что за проект - можно глянуть в сообщении выше.. (есть ссылка на доку, форумы, блоги)
сейчас хочу переписать проект на асме.. и уверен что все равно займу около 40 кб флеша.. - ну просто поверьте в это и все.. в железке стоит мега64, железка покупная - соответственно что стоит то и использую
во вложенных файлах то что я уже написал.. - там всего на пару кб.. - я только начал.. и уже нашел грабли... прошу ответить на те вопросы которые я поставил в исходном сообщении..
p.s. не обсуждайте кривизну моих идей, вы их не знаете и не видели, обсуждайте лучше кривизну моих рук, ибо код этими руками написанный я вложил для обсуждения и задал конкретные вопросы которые меня интересуют
во вложенных файлах то что я уже написал.. - там всего на пару кб.. - я только начал.. и уже нашел грабли... прошу ответить на те вопросы которые я поставил в исходном сообщении..
... и с каждым новым килобайтом проблем будет больше, хотя бы из-за размера исходника. Если нужна помощь по написанию конкретной функции на ассемблере - постараюсь помочь (в комментах опишите, что на входе и что надо получить выходе) ... правда пишу в AVR Studio
Варнингов компилятора не получали, где массив индикатора?
Код:
lcd_font.asm(1) : Warning : A .DB segment with an odd number of bytes is detected. A zero byte is added.
И таких дополнений он сделает 256. 256 байт нулей!
гм.. компилятор ничего не выдает... у меня tavrasm... по поводу нулей - я это уже увидел (когда считаю адрес символа в таблице то умножаю не на 5 (размер образа символа в таблице) а на 6 как раз по этой причине)... - печать символа будет переписана (как и таблица символов) - этот вариант был оставлен как отладочный, просто чтобы была возможность выводить на экран строки
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения