Колупаю неспеша C8051F022 подключил экран c75 alps . рисует две осцилограмыы от 2х внутр ацп
хочу замерять внутрипрограмные интеревалы и использовать таймер 3 для этого
читаю даташит. Насторожила фраза
" Timer 3 does not have a counter mode."
что это значит ??
хочу запустить его от clk/12
после цикла остановить и вывести на экран сколько насчитал (TMR3H :TMR3L)*12/Sysclk
Доброго времени суток. Прошу подсказать, как реализуется на ассемблере алгоритм разпознавания строк. Тоесть, по UART приходит строка, и мне нужно распознать, что пришла именно нужная мне строка, и совершить действие. Достаточно подсказать общий алгоритм. Сейчас распознаю посимвольно, поочередно сравнивая каждый символ с образцом (cjne A,'образец',Error), но ведь есть способ красивее ?
иногда проскакивает неадекватное время .. я так понял когда таймер переполняется т е Timer2_16b< Timer_16b
1 тик таймера 0.54 мксек ..
т е весь цикл гарантированно меньше 65 тыс циклов таймера .таймер работает без останова .
или можно принудительно обнулить 3й таймер?
Пока_без_кота писал(а):...алгоритм разпознавания строк. ... Сейчас распознаю посимвольно, поочередно сравнивая каждый символ с образцом (cjne A,'образец',Error), но ведь есть способ красивее ?
Если важны все символы более короткого варианта нет.
Как версия - оптимизировать расположение символов в строке с присвоением первому символу значения категории сообщения и таким же образом сортировать предварительно остальное содержание...
Тогда и вектор-переадресация возможна...
Субтема для самостоятельного поиска - протоколы обмена для модемов/сетей.
Прерывания от INT0 не разрешены после ресета. Если INT0 используется только для разрешения работы таймера 0 на аппаратном уровне, разрешать его прерывание не нужно. А если оно до этого было разрешено, его следует запретить.
В большинстве приложений да...
Ежли только не чего особо экзотического - вида подсчет времени события с фиксацией его (события) начала обработки по прерыванию от вывода INT0.
А подскажите еще такое. Осваиваю работу с радиомодулями на 433 МГц, и хочу разработать свой протокол. Манчестерское кодирование сложновато в реализации (пока для меня), поэтому решил для простоты взять кодирование длинной импульса. Как мне лучше декодировать посылку? Просто таймером считать врямя каждого импульса, и на основании посчитаных тиков делать вывод 1 или 0. Или задействовать вот такой режим таймера и считать тики только тогда, когда на ноге внешнего прерывания +. При этом я планировал все таки оставить разрешенными прерывание от внешнего входа и в нем сбрасывать таймер. То есть алгоритм следующий:
1. 1 раз пришло прерывание по внешнему входу (значит был низкий уровень на выходе приемника), обнулил таймер и вышли из прерывания.
2. Пришел высокий уровень на внешний вход - таймер сам начал считать.
3. Пришел низкий уровень на внешний вход - это был лог. 0, потому что таймер не переполнился. Сбросим Таймер для следующего подсчета.
4. Если таймер переполнился, значит это была лог. 1. (достаточно долго продержался выс. уровень)
Планирую использовать Таймер0 в режиме 3 (8 бит).
В качестве котроллера передатчика будет выступать скорее всего Тини13, так что про ее алгоритм пока речи нет, но в общем она должна для 0 формировать ипульс до 128 мкс (половина периода 8 бит. таймера MCS-51), а для 1 - больше 300 мкс (чтобы таймер 8 бит. таймер MCS-51 точно успел переполнится).
Прежде чем посылку декодировать следует решить как ее передавать. Кодировать 0/1 длиной импульса плохо, т.к. передатчик будет много тока брать в режиме передачи несушей. С точки зрения токопотребления лучше кодировать начало такта кооткими импульсами и потом запускать таймер в прерывании. Т.е. кодировать 0/1 паузами между импульсами. Однако и это не хорошо, если длины передачи 0/1 будут плавать независимо на приемном и передающем концах, например, из-за разницы температур. Для этого имеется само-синхронизирующееся 10-импульсный протокол для передачи байта. Сам когда-то этом занимался: http://mcs.uwsuper.edu/sb/Electronics/RF/
Но всё это баловство по сравнению с современными радиомодулями. У них и манчестерское кодирование делается аппаратно по желанию и вообще еще много всего.
Ser60 писал(а):Прежде чем посылку декодировать следует решить как ее передавать...
Я пошел от обратного по причине того, что передатчик ничего не будет делать, кроме как передавать, следовательно на его стороне можно реализовать достаточно затратный по ресурсам алгоритм (а следовательно там я могу подстроится, как надо будет), а вот приемник (MCS-51), помимо приема, должен будет выполнять еще кучу разных функций, поэтому я хочу сделать протокол, максимально удобный и простой с точки зрения декодирования его силами MCS-51. За ссылку спасибо, параллельно понемногу учу Пики, будет полезно))
Обязанности модема-приемника/обработки радиоканала можно и на другую какую-нибудь мелкосхемку сгрузить - а потреблять уже готовую информацию, съедобную для аппаратного приемопередатчика 51-й.
Всем здравствовать!
Читаю журнал РадиоАматор №4 за 2004 год, там про 89с4051.
Как я понял порты имеют неотключаемую подтяжку, кроме двух: Р1.0 и Р1.1;
и ещё активный уровень - низкий, а высокий задаётся подтяжкой.
А вот почему VT1 на рис. 21 можно подключать только к "открытым" (видимо неподтянутым) линиям?
Заранее спасибо.
BOB51 писал(а):
Выводы портов direct LED - НО для случая подключения между + питания и "общим/GND".
Между + и - , а где здесь пин контроллера? )
Вывод активный только низкий, правильно?
Поэтому и спросил, что имели ввиду в журнале:
"А вот почему VT1 на рис. 21 можно подключать только к "открытым" (видимо неподтянутым) линиям?"
Внутренний ключ замыкает цепь на "gnd".
Насчет "VT1" - приглядитесь к схеме подключения - вывод МК выполняет роль коротящего шунта.
Ежли бы выходной каскад был двухтактный (по типу АВР/ПИК) то тот транзистор имел все шансы "дым пустить" (разве что ограничение тока КЗ на уровне 25мА как-то мученья продлит).
Активным уровнем может быть и 1 и 0 - на выбор схемкостроителя. Предпочтение за 0... однако всякие варианты могут встречаться.
У базовой mcs51 нагрузочная способность вообще малюсенькая - и ничего, вполне управляется со своими задачами.
Активный - замыкается внутренним ключом, а пассивный - при разомкнутом ключе подтягивается к + через внутренний резистор; я так это понимаю. А дальше они пишут что подключать подтяжку (рис. 21, R1) можно только туда где нет внутренней подтяжки; вот это и странно: если так включить на остальных портах, то внешняя подключается параллельно внутренней, которая гораздо больше и не повлияет.
А, кстати, вот тут пишут что 4051 можно программировать последовательно: http://www.gaw.ru/html.cgi/txt/ic/Atmel ... 1_4051.htm
"Доступ ко встроенной флэш-памяти программ организован посредством последовательного интерфейса. Если удерживать вход RST в активном состоянии, то микроконтроллер переходит в режим последовательного программирования и при условии незапрограммированности бит защиты появляется возможность записать или считать память программ."
Что то я не нахожу в гугле таких программаторов для 4051. У кого-нибудь получалось программировать последовательно? А то я уже почти собрал blowit параллельный программатор ).
Вот что это за программатор нужен?