|
Индикатор на K1816BE51 |
|
|
|
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
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|