Страница 32 из 53

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

Добавлено: Пн авг 08, 2016 15:30:12
petrenko
Гы - гы -гы .. :))) "Изыскал" типа-как-бы R8 ! :idea:

Когда старшая цифра результата будет в ACC - просто PUSH ACC и - вуалая - она в стеке . :idea: :)))


Но вообще можно ещё лучше : пользовать 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
Могут.
Даже может быть изменен приоритет прерываний.
Единственное условие - разумный интервал во времени исполнения прерываний/очередности исполнения сопутствующих задач.
8)

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
:roll:
Пока_без_кота писал(а):Доброго времени суток. Надо написать кусок кода, который будет для 2 старших битов байта делать сдвиг влево не трогая остальные биты. Написал вот так, можно ли "быстрее, выше, сильнее" ?
...
Можно, если вспомнить про "битовый процессор" - используем или непосредственную перестановку бит в регистрах области битовой адресации (0х20-0х2F) или прямоадресуемые биты акумулятора (см.РСФ) и какой - либо из регистров с прямоадресуемыми битами.
примерно так:
mov c,bit
mov bit,c
где bit = адресу соответствующего бита.
:wink:

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/) - вроде как в России через китаяцев доступны...
:dont_know:

Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..

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

Код: Выделить всё

dw Task_1
dw Task_2
dw Task_3
; и т.д.
Макрос создал такой:

Код: Выделить всё

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) и операторах
<...> и % ... вобщем раздел "макрооператоры" вычитывать надо...
:dont_know:

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).
Надо весьма придирчиво переписывать...
:cry:
Погляну... Как разумемс выше приведенное (add.asm) надо библиотекой сделать?
:roll:

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
Как видите, были минимальные ошибки в синтаксисе :beer:
P.S. Еще, конечно, можно просто "include" если проект небольшой.

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

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 сунуть - теоретически должон слопать...
:dont_know: