misha88 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 (изменено) · Жалоба Посмотрите плиз схему и программу подключения светодиодного 4-разрядного индикатора. Таблица знакогенератора размещена в рез.памяти мк. ;indpos–номер включеного катода ;Таблица знакогенератора(без децимальных точек) digit: db C0h, F9h, A4h, B0h, 99h, 92h, 82h, F8h, 80h, 90h ; Таблица кодов для включения одного из четырех катодов ipos : db 01h, 02h, 04h, 08h ; Инициализация параллельного интерфейса display: mov A, 0FFh out BUS, A mov A, @R1 add A, digit mov A, @A out P1, A mov A, R2 out BUS, A rl, A mov R2, A inc R1 repeat: mov A, indpos mov R1, number add A, R1 mov R1, digit add R1 mov A, R1 mov R1, ipos add R1 mov A, 01h dcr D mov A, D jnz repeat mov D, 7 jmp repeat Изменено 27 февраля, 2010 пользователем Omen_13 Оформление кода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба по схеме: резисторы нужны в базы транзисторов, а коллекторные лучше перенести в сегменты A-G - свечение будет равномерное при зажигании разных символов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misha88 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба м? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба угу :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misha88 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба угу :) зачем в базе то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба зачем в базе то?Для 1816ВЕ51 (ксати, почему выбрана такая печка, она же току сожрёт больше индикаторов) резисторы к npn-транзисторам нужны, но как подтяжка к питанию. Т.е в исходной схеме добавить пару килоом от базы на питание. http://www.chipinfo.ru/literature/chipnews/200009/58.html - там, правда, пара опечаток есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Вторая схема уже лучше, но: порты у 1816ВЕ51 очень хилые, в 0 они способны утянуть всего несколько миллиампер, а в плюс и того меньше, так как этот ток обеспечивается только внутренними резисторами подтяжки (internal pullups), более того, порт 0 даже их не имеет, чистый открытый сток. Так что светодиоды с этих портов не прокормить, нужно чем-то умощнять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misha88 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба вопрос хороший. чем только Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба ток обеспечивается только внутренними резисторами подтяжки (internal pullups), более того, порт 0 даже их не имеет, чистый открытый сток. мда, значит ввел в заблуждение... извиняюсь, последний раз держал в руках этот контроллер лет 15 тому назад :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба вопрос хороший. чем толькоМожно взять 74HC595 и TPIC6C595. Первая анодами сегментов управлять будет, вторая общими катодами, заменяя транзисторы. Управление всей этой схемой по трем проводам. А если еще и четвертый (для ШИМ-сигнала) задействовать, то можно будет яркость индикатора регулировать (если это требуется). Либо хотя бы какой-то 8-ми разрядный параллельный регистр типа 74HC(T)273 / 74HC(T)274 / 74HC(T)583 на P0 поставьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misha88 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба а с прогой что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 (изменено) · Жалоба http://incubator.amasoft.ru/content/view/293/475/ Вот тут все, что требуется. а с прогой что? Будут вопросы - велкам. "а с прогой что" - это не вопрос. Изменено 1 марта, 2010 пользователем rezident Объединены два сообщения пользователя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
at89c51ed2 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба 2 misha88 По описанию выходной ток низкого уровня для порта Р0 - 5 мА, что вполне достаточно для засветки современных эффективных LED индикаторов (даже в динамической индикации со скважностью 4), но не больших размеров. Выходные токи высокого уровня менее 1 мА, поэтому не годятся для засветки. Поэтому единственной альтернативой (не усложняющей схемотехнику) является применение индикаторов с ОА. Для этого Вам придётся просто проинвертировать коды знакогенератора и выбора знакоместа и сменить полярность ключевых транзисторов с n-p-n на p-n-p с одновременным подключением эммитеров последних не к "земле", а к питанию. В остальном всё правильно - базовые резисторы и резисторы между сегментами и выводами порта Р0. Ещё бы я добавил pull-up резисторы для баз транзисторов. Теперь о программе. Программой это назвать нельзя, это скорее подпрограммы вывода данных на сегменты и знакоместа. Которые не понятно как, в какое время и откуда вызываются. Не понятно, что такое R1, R2, D. Точнее, ясно, что это регистры, но для каких целей? Если уж не пишите об этом в начале (как про знакогенератор), то хотя бы комментарии к командам пишите, что бы Вам самому было понятно. Из какого ассемблера Вы взяли команду "out BUS, A"? Судя по Вашей программе здесь должно быть MOV P0, A. Теперь команда "add A, digit". Вы описываете digit как массив, поэтому при выполнении такой команды (если компилятор не выдаст ошибки) к аккумулятору будет прибавлен нулевой элемент массива, т.е. к числу, которое Вы собираетесь высветить на индикаторе Вы прибавите код знакогенератора 0! Вам же нужно сделать нечто другое: сначала запомнить начальный адрес массива знакогенератора, потом к этому адресу прибавить само число, которое хотите засветить (т.е. сместиться в массиве знакогенератора на само индицируемое число). Далее. В ассемблере 51 не существует команды mov A, @A, косвенная адресация только через R0 и R1! Команды out P1, A не существует! Есть команда MOV P1, A. Что такое регистр D? Нет такого в asm51. Нет команды dcr, есть DEC (декремент). Почему D инициализируется с 7!? Вы что развёртку делаете по сегментам, а не по знакоместам? Тогда это не для Вашей схемы и не для индикаторов с ОА! Вам нужно считать всего 4 раза - ровно столько, сколько индикаторов! В своё время мне очень помогало рисование алгоритма в виде графа (блок-схемы). Может и Вам это поможет. Удачи. 2 DpInRock А вообще, тому преподу, который такие задания дает - надо лицо бить. А за что, позвольте полюбопытствовать? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 28 февраля, 2010 Опубликовано 28 февраля, 2010 · Жалоба Таблица знакогенератора размещена в рез.памяти мк.А разве 1816ВЕ51 не с масочным (программируется на заводе) ПЗУ программ? На бумаге были 1816ВЕ751 с УФ стиранием (не более 100 циклов), но были ли они живьем - не знаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 1 марта, 2010 Опубликовано 1 марта, 2010 (изменено) · Жалоба Сообщение модератора. Обсуждение способов и методов преподавания в данной теме является оффтопиком. Все сообщения с оффтопиком были перенесены в отдельную тему. Изменено 1 марта, 2010 пользователем rezident Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться