Страница 32 из 53
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пн авг 08, 2016 15:30:12
petrenko
Гы - гы -гы ..

"Изыскал" типа-как-бы
R8 !
Когда старшая цифра результата будет в ACC - просто PUSH ACC и - вуалая - она в стеке .
Но вообще можно ещё лучше : пользовать R0 R1 как индексные и держать числа в РПД . Причём hex исходное можно даже упакованное ! Что весьма упрощает и "укомпактивает" .
Тогда просто : MOV A,@R1 ; ANL A,#00001111b для чётных нибблов ,потом MOV A,@R1 ; SWAP A ; ANL A,#00001111b для нечётных нибблов ,потом DEC R1 ;
Ну а класть результат в РПД всё ж таки неупаковванными BCD цифрами : MOV @R0,A ; DEC R0 ;
( ,тем более, что выводить на индикацию неупаковванные BCD цифры проще ).
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср авг 31, 2016 19:01:15
Amigosam
Появились снова вопросы

. Могут ли одновременно работать два таймера/счётчика? Один в режиме счётчика, а другой для организации часов реального времени.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср авг 31, 2016 19:10:41
BOB51
Могут.
Даже может быть изменен приоритет прерываний.
Единственное условие - разумный интервал во времени исполнения прерываний/очередности исполнения сопутствующих задач.

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср авг 31, 2016 19:32:00
Amigosam
А не подскажите, для энкодера каков алгоритм сопряжения?
У меня поначалу было представление сотворить это как опрос двух кнопок. То есть перед опросом портов с энкодером предварительно в один из регистров заносим 1. Предположим, с вывода a поступает импульс - инкремент регистра (2 получится), если с вывода b - декремент регистра (получится 0), проверяем, если > 0 то вращение вправо (условно), если содержимое регистра = 0, то вращение влево. Ну а дальше тупо накопление кол-ва импульсов с соответствующим знаком
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср авг 31, 2016 23:11:35
Пока_без_кота
Доброго времени суток. Надо написать кусок кода, который будет для 2 старших битов байта делать сдвиг влево не трогая остальные биты. Написал вот так, можно ли "быстрее, выше, сильнее" ?
Спойлер
Код: Выделить всё
Process_Messages: ; Переводит установленные (01) сообщения в активные (10), а непрочитанные активные (10) сбрасывает в неактивные (00). Неактивные (00) - пропускаются.
mov R0, #first_messages ; Берем первое сообщение
Process_Next_Messages:
mov A, @R0 ; Загоняем в аккумулятор
anl A, #11000000b ; Зануляем тело сообщения
jz Next_Messages ; Если неактивно (00) - берем следующее
rl A ; Иначе сдвигаем влево, получая в 2 старших байтах новое состояние для этого сообщения (01 становится 10, 10 становится 00, 11 - невозможное состояние)
anl A, #11000000b ; Зануляем испорченое тело сообщения
mov new_message_state,A ; Сохраним полученую маску нового состояния сообщения
mov A, @R0 ; Повторно загоняем сообщение в аккумулятор
anl A, #00111111b ; Зануляем старое состояние сообщения
orl A, new_message_state ; Даем сообщению новое состояние
mov @R0, A ; И загоняем назад
Next_Messages:
inc R0 ; Берем следующее сообщение
djnz message_counter,Process_Next_Messages ; Перебор всех сообщений
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Чт сен 01, 2016 08:20:29
BOB51
Amigosam писал(а):А не подскажите, для энкодера каков алгоритм сопряжения?
...
http://radiokot.ru/forum/viewtopic.php? ... 4#p2812164
алгоритм
http://img.radiokot.ru/files/20529/10olmil01x.GIF
Пока_без_кота писал(а):Доброго времени суток. Надо написать кусок кода, который будет для 2 старших битов байта делать сдвиг влево не трогая остальные биты. Написал вот так, можно ли "быстрее, выше, сильнее" ?
...
Можно, если вспомнить про "битовый процессор" - используем или непосредственную перестановку бит в регистрах области битовой адресации (0х20-0х2F) или прямоадресуемые биты акумулятора (см.РСФ) и какой - либо из регистров с прямоадресуемыми битами.
примерно так:
mov c,bit
mov bit,c
где bit = адресу соответствующего бита.

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пт сен 09, 2016 16:05:36
Kavka
Всем здравствуйте.
Подскажите, у каких производителей есть 80C31/51 с быстрыми ядрами и флэшем на борту? Имею в виду быстрее, чем средние 12 тактов на команду, где-то видел, что есть 1 такт на команду.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пт сен 09, 2016 16:46:49
salang
у почти всех есть 1Т, но в реальности из-за цены доступны только Lemicro
здесь или
здесь
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пт сен 09, 2016 20:37:28
BOB51
Силабс и/или STC (
http://www.stcmcu.com/) - вроде как в России через китаяцев доступны...

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пн окт 10, 2016 14:30:45
Пока_без_кота
Доброго времени суток.
На 16 пиках смастерил себе макрос, который создает таблицу переходов на нужное количество. Очень удобная получилась штука. Не смог удержаться, чтобы не попытаться сообрудить что-то подобное для любимых MCS-51 и словил облом

Требуется создать таблицу переходов вида:
Макрос создал такой:
Код: Выделить всё
cnt var 1
rept 5
dw Task_(cnt)
cnt var cnt+1
endm
А как правильно ?
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Пн окт 10, 2016 15:37:26
BOB51
Тут ежли по макросам - зависит от компилятора, а не от системы команд.
Конкретику читать надо...
Там где-то было об объединении символьных строк (с51asm) и операторах
<...> и % ... вобщем раздел "макрооператоры" вычитывать надо...

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Вт окт 11, 2016 22:12:59
Пока_без_кота
С эти пока не разобрался, но попробовав другую IDE (Keil), убедился, что макрос "irpc" MCStudio обрабатывает некорректно (не согласно найденных примеров для этой IDE) А жаль.
Может ли кто-то привести в качестве примера 2 файла исходников на асме, которые в Keil транслируются и собираются в 1 hex, а то у меня что-то никак не получается перенести проект из нескольких файлов из MCStudio в Keil. Гуглю уже 2 день, и ничего внятного. Вот так не получается:
Код: Выделить всё
File: ADD.asm
;Add routine which will be called from other file
PUBLIC ADDNUM ;declare function as public
ADDNUM_ SEGMENT CODE ;define code segment for linker
RSEG ADDNUM_ ;select segment ADDNUM
ADDNUM: ;Our add routine
MOV R2,R1
ADD R2,R0
RET
File: Test.asm
EXTRN CODE (ADDNUM) ;define the external symbol
CSEG at 0 ;code starts at 0
MOV R0,#50 ;Some dummy instructions
MOV R1,#51
ACALL ADDNUM ;lets call this routine which is in second file
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 08:29:46
BOB51
Там по синтаксису весьма значительная разница (между keil-подобными исходниками и MCStudio).
Надо весьма придирчиво переписывать...
Погляну... Как разумемс выше приведенное (add.asm) надо библиотекой сделать?

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 08:40:55
Rtmip
Применительно к Keil и вашим исходникам вносим исправления и все работает:
файл test.asm
Код: Выделить всё
NAME Test
EXTRN CODE (ADDNUM) ;define the external symbol
CSEG at 0 ;code starts at 0
MOV R0,#50 ;Some dummy instructions
MOV R1,#51
ACALL ADDNUM ;lets call this routine which is in second file
JMP 0
END
файл add.asm
Код: Выделить всё
NAME _ADD
;Add routine which will be called from other file
PUBLIC ADDNUM ;declare function as public
ADDNUM_ SEGMENT CODE ;define code segment for linker
RSEG ADDNUM_ ;select segment ADDNUM
ADDNUM: ;Our add routine
MOV R2, A
ADD A, @R0
RET
END
Как видите, были минимальные ошибки в синтаксисе

P.S. Еще, конечно, можно просто "include" если проект небольшой.
Добавлено after 1 minute 36 seconds:
BOB51 писал(а):... Как разумемс выше приведенное (add.asm) надо библиотекой сделать?

мне кажется, что с библиотекой возни больше будет

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 09:13:17
BOB51
Там (в MCStudio) это понятие автономно компилируемого файла - библиотекаря в полном (обычном для трехкомпонентной системы ассемблер-линкер-библиотекарь) понимании там нету, только подключаемые файлы. Просто синтаксис директив упрощенный. Из-за того и практически не пользуюсь, хотя сама IDE и дополнительные средства отладки там превосходные...

ОЙ-ОЙ!
А таки обшибок в задачке мнооогооо...
Ежли у нас "изолированная" подпрограмма - т.е. может вызываться когда захочет и где захочет с задачей
только сменить значение в регистрах РОН указываемых в параметрах при вызове... Забыли про PSW и акумулятор...
Да и все действия делаются только с участием акумулятора...
Итог:
задача
имеем перед вызовом параметры в R0 и R1
по завершении результат сложения двух данных имевшихся в @R0 и @R1 размещается в R2
используется текущий регистровый банк
Код: Выделить всё
.cseg
addnum:
push PSW
push ACC
add a,@r0
add a,@r1
mov r2,a
pop ACC
pop PSW
ret
или может я чего про задачку недопонял?
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 13:24:46
Пока_без_кота
BOB51, Rtmip, спасибо вам огромное, за то, что помогаете!!! Это реально единственно более-менее живая тема по MCS-51 во всем рунете. Собственно предистория. Когда-то давно, я уже вопрошал в этой теме по поводу IDE для MCS-51. ARV, посоветовал мне MCStudio, за что ему огромное спасибо, это действительно стоящая вещь. Она достаточно проста, но в тоже время достаточно функциональна в плане отладки. Я учился на ней и горя не знал. Но вот передо мной стала проблема повторного использования уже написаного кода, и решил разбивать свои постепенно усложняющиеся проекты на отдельные модули. С помощью опять же ARV-а у меня все прекрасно получилось на этой IDE, хотя она изначально для этого не предназначена. Как писал BOB51, в MCStudio нет понятия библиотек, там просто подключаемые файлы. Поэтому я просто делал основной файл *.asm, а все подключаемые модули - *.inc
Умея все это, я уже давненько написал свой динамический диспетчер, который достает задачи из очереди и выполняет их. Он нормально работал. Потом я решил освоить 16 Пики (спасибо BOB51, он реально очень помог), и написал этот же (с небольшими изминениями, учитывая меньшие ресурсы пиков) диспетчер, и он получился реально прикольнее, я поприменял кучу макросов, благодаря которым настройка диспетчера становилась интуитивно понятной и простой. Я решил усовершенствовать макросами свой диспетчер на MCS-51 и столкнуля с глюками/ограничениями MCStudio и решил перенести его в Keil. Сегодня вечером попробую сделать, как написал Rtmip и отпишусь

2 BOB51 - задачка в примере взята с интернетов, там просто какй-то кусок кода, до котрого мне нет дела, прошу прощения, если ввел в заблуждение, я просто показал по какому принцыпу я делал многофайловый проект в Keil и получил облом.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 14:00:23
ARV
Пока_без_кота писал(а):MCStudio
у меня сохранилась версия MCStudio в "расширенном" варианте. этот вариант умеет работать с Си (подмножество SDCC) и, самое интересное, умеет работать в режиме FBD и (если не путаю ничего) в режиме, аналогичном Algoritm Builder.
FBD - это когда рисуется блок-схема обработки данных из всяких блоков (счетчик, триггер, элемент И и т.п.), а потом из этого генерируется исходник Си, который потом можно и подправить при необходимости.
Автор сего продукта на все ранее имевшиеся у меня контакты (а так же на найденные в интернете) никак не откликается... так что если кому интересно, могу предоставить инсталляторы - думаю, для автора ценность этого продукта давно нулевая, и он не обидется...
правда по неизвестным мне причинам все инсталляторы детектируются антивирусами, как заразные, но сильно сомневаюсь, что это на самом деле так: я у себя устанавливал, и никаких эффектов не возникло. видимо, какие-то особенности кода Delphi 7 сейчас пугают антивирусы...
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 14:49:33
BOB51
Я успел закачать два варианта еще бесплатного (1.4.7 и 1.4.9) под "форточки" - сейчас УВЫ - бесплатное только под линукс...

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Ср окт 12, 2016 15:02:44
Пока_без_кота
BOB51 писал(а):
Увы, похоже вы с ARV-ом про разные IDE говорите, он про MCStudio, а вы про MCU8051 IDE

(тоже весьма ненеплохая штука, если подскажете, как в ней сделать проект из нескольких файлов - буду благодарен, ибо я и в ней пытался, но не получилось)
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Добавлено: Чт окт 13, 2016 09:05:38
BOB51
Ну да... я ж про ту самую MCU8051IDE v1.4.9 (
http://www.moravia-microsystems.com/mcu-8051-ide/)...
Делал я заготовку под многофайловики там...
По такому же принципу, как и для моих "слэнговых" конструкций под c51asm...
Только вот с "переводом" синтаксиса/директив... мал поднатрахалси и на время отложил дальнейшее освоение.
У c51asm синтаксис под keil подгонялся, возможности явно поболее, а вот наглядность... G...
Кстати... можно мои последние проекты попробовать в keil сунуть - теоретически должон слопать...
