|
Индикатор на K1816BE51 |
|
|
|
Feb 27 2010, 12:46
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
Посмотрите плиз схему и программу подключения светодиодного 4-разрядного индикатора. Таблица знакогенератора размещена в рез.памяти мк.  CODE ;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
Сообщение отредактировал Omen_13 - Feb 27 2010, 18:51
Причина редактирования: Оформление кода
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 27)
|
Feb 27 2010, 13:19
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
м?
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 27 2010, 13:29
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
Цитата(stells @ Feb 27 2010, 18:23)  угу  зачем в базе то?
|
|
|
|
|
Feb 27 2010, 21:29
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
http://incubator.amasoft.ru/content/view/293/475/Вот тут все, что требуется. Цитата а с прогой что? Будут вопросы - велкам. "а с прогой что" - это не вопрос.
Сообщение отредактировал rezident - Mar 1 2010, 21:35
Причина редактирования: Объединены два сообщения пользователя.
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Feb 27 2010, 21:44
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 14-10-09
Пользователь №: 52 943

|
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 Цитата А вообще, тому преподу, который такие задания дает - надо лицо бить. А за что, позвольте полюбопытствовать?
|
|
|
|
|
Mar 3 2010, 13:16
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
Проверьте меня) Программа поразрядной обработки 1816ВЕ51. Программа должна установить нулевой разряд числа в регистре R5 в 1, сбросить четвёртый разряд в 0 и инвертировать шестой разряд. В скобочках указано значение R5 после выполнения заданной операции Код org 50h main: mov R5, #0FEh mov A, R5 orl A, #1; Установка нулевого бита => A = FFh anl A, #0EFh; Сброс четвёртого бита => A = EFh xrl A, #40h; Инвертирование шестого бита => A = AFh mov R5, A end
|
|
|
|
|
Mar 3 2010, 14:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(misha88 @ Mar 3 2010, 19:16)  Проверьте меня) Правильно, но чтобы делать поменьше ошибок и произвести впечатление на препода лучше делать примерно так CODE Bit0 EQU (1 << 0) Bit4 EQU (1 << 4) Bit6 EQU (1 << 6) ; ******************************************************* ; * bitbang ; * установить нулевой разряд числа в регистре R5 в 1, ; * сбросить четвёртый разряд в 0 и ; * инвертировать шестой разряд ; ******************************************************* bitbang xch A,R5 orl A, Bit0 anl A,~Bit4 xrl A, Bit6 xch A,R5 ret
; эту процедуру можно вызвать примерно так: mov R5, #0FEh call bitbang
заметим, что аккумулятор не портиться, его содержимое остаётся таким же что и до вызова. А если ещё и MACRO применить...
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Mar 14 2010, 19:00
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
Для динамической индикации группы символов удобно воспользоваться процедурой индикации символа, оформив ее в виде параметризуемой подпрограммы. Входными параметрами для подпрограммы REPEAT являются исходный код отображаемого символа и номер знакоместа, на которое осуществляется вывод. Исходный код символа задается текущим адресом в массиве DIGIT, а номер знакоместа текущим значением байта выборки (массив IPOS) и значением счетчика знакомест INDPOS . Код ;indpos–номер включенного катода ;Таблица знакогенератора(без децимальных точек) digit: db C0h, F9h, A4h, B0h, 99h, 92h, 82h, F8h, 80h, 90h ; Таблица кодов для включения одного из четырех катодов ipos : db 01h, 02h, 04h, 08h ; Инициализация параллельного интерфейса
display:
mov A, 0FFh mov P0, A mov A, @R1 add A, digit mov A, @A mov P1, A mov A, R2 mov P0, 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 dec D mov A, D jnz repeat mov D, 7 jmp repeat м?
|
|
|
|
|
Mar 14 2010, 19:52
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 23-12-07
Пользователь №: 33 564

|
Цитата(vvs157 @ Mar 15 2010, 00:51)  Не-а. Резисторы (10К 8 шт) одним концом на +5V, другим - на ноги порта Р0 А на общую шину??
|
|
|
|
|
Mar 15 2010, 08:30
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(misha88 @ Mar 15 2010, 12:53)  так?? Нет. Входы инверторов нужно подключить к порту контроллера напрямую, как в сообщении №18. А каждый из 8-ми резисторов подтяжки нужно включить одним выводом к +5В, другим - к каждому выводу порта контроллера раздельно.
Сообщение отредактировал ae_ - Mar 15 2010, 08:33
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|