Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.09.2011, 00:51
|
|
Заблокирован
Регистрация: 19.02.2007
Адрес: Барановичи
Сообщений: 255
Сказал спасибо: 3
Сказали Спасибо 51 раз(а) в 39 сообщении(ях)
|
Re: Ассемблер
nonamedov,если Вы имели в виду,что для LCD надо было прибавить 30h,а для семисегментного разрулить по таблице,дык,я думаю,что топикстартер и без нас с Вами это знает?!!
|
|
|
|
16.09.2011, 02:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Ассемблер
Сообщение от omercury
|
Это не даст делить число меньше ста на 100 (то же и для 10)...
Результат-то МК выдаст, да вот только неверный...
|
Ну вот, не топик, а Бермудский треугольник разума, при делении меньшего целого на большее целое число, то в результате, мы получим нулевое частное, а число переместится без изменения в остаток, все! Причем, это справедливо и
в моем понимании поставленной задачи и в понимании yurkin2007, при делении c помощью div или простым вычитанием (это проверка там идет всегда, но оно входит в сам алгоритм деления и проверка происходит многократно). Да и 0 тоже число . Элементарные вещи, но, к сожалению, на этом топике приходится объяснять и такие вещи.
AMilyushin, да все там правильно, есть некоторое неопределенности, но это от самого вопроса! Вот, эти неопределенности:
1) 044b = 1099 или 044h = 68?
2) количество десятков в шестнадцатеричном числе, это частное от деления на 10 или число число десятичном разряде в эквивалентном десятичном числе?
Насчет первого, я уже склоняюсь к варианту 044b=1099 (если исключить ошибку в вопросу, что более логично), насчет второго, то логичнее предположить, что это цифра во втором разряде эквивалентного десятичного числа. Думаю, в задаче требуется найти BCD код десятичной части числа.
PS. Надеюсь, меня никто не обвинит, что я как количество десятков в шестнадцатеричном числе понял именно частное от деления на десять, а что вы бы поняли, если у вас спросили количество двоек в десятичном числе? Неужели цифру в единичном разряде соответствующего двоичного числа, что то не верится!
Итак, в моем последнем понимании и как мне кажется, наиболее логичном варианте, код должен быть таким:
Сообщение от nonamedov
|
mov a, low(044Bh);
mov r1, high(044Bh);
jmp loop;
;***********************
carry:
clr c
dec r1;
jc exit;
add a, 0FFh;
jmp loop;
;************************
loop:
clr c;
subb a, #10;
jc carry;
jmp loop;
;**********************
exit:
add a, #10;
mov r2, a;
clr a
orl a,P1
orl a,#0fh
orl a,r2
mov P1,a
|
|
|
|
|
16.09.2011, 02:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Ассемблер
ALEKS1102X, о чем Вы, какое LCD??? Пишите связно! Ваша программа ошибочна, могу показать, но ,надеюсь, в этом нет особой необходимости.
|
|
|
|
16.09.2011, 03:49
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Ассемблер
Не, последний вариант программы никуда не годится, уважаемый nonamedov !
Во-первых, в результате бесконечного вычитания 10 в остатке получится кол-во единиц, которое потом используетеся. А нужно кол-во десятков.
Во-вторых, декремент не влияет на флаги, и программа никогда не выйдет из цикла на метку exit. Тут, видимо, снова нужон SUBB а,#1 с предварительным сохранением аккумулятора где-нибудь и переносом r1 в аккумулятор. Вобщем, дроби какие-то ...
PS. У меня, например, в 3 часа ночи хреново получается быстро писать на ассемблере
Последний раз редактировалось Yurkin2007; 16.09.2011 в 19:50.
|
|
|
|
16.09.2011, 04:30
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Ассемблер
Во, нашёл DJNZ, decrement and jump if not zero, годится для данного случая. Позволю себе подредактировать Вашу программу:
Цитата:
|
mov a, low(044Bh);
mov r1, high(044Bh);
inc r1;
clr c;
;************************
loop:
subb a, #100;
jnc loop;
clr c;
djnz r1, loop;
;**********************
add a, #100; в аккумуляторе остаток от деления на 100
mov b,#10;
div ab;
mov b, a;
mov a, P1;
anl a, #0F0h;
orl a, b;
mov P1, a;
|
|
|
|
|
16.09.2011, 19:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Ассемблер
Yurkin2007, да, Вы правы, удаляю предыдущий пост, чтобы не повторять Ваш. Спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:17.
|
|