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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение 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 цифры проще ).
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

Появились снова вопросы :) . Могут ли одновременно работать два таймера/счётчика? Один в режиме счётчика, а другой для организации часов реального времени.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Могут.
Даже может быть изменен приоритет прерываний.
Единственное условие - разумный интервал во времени исполнения прерываний/очередности исполнения сопутствующих задач.
8)
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

А не подскажите, для энкодера каков алгоритм сопряжения?
У меня поначалу было представление сотворить это как опрос двух кнопок. То есть перед опросом портов с энкодером предварительно в один из регистров заносим 1. Предположим, с вывода a поступает импульс - инкремент регистра (2 получится), если с вывода b - декремент регистра (получится 0), проверяем, если > 0 то вращение вправо (условно), если содержимое регистра = 0, то вращение влево. Ну а дальше тупо накопление кол-ва импульсов с соответствующим знаком
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток. Надо написать кусок кода, который будет для 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		; Перебор всех сообщений
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение 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:
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Всем здравствуйте.
Подскажите, у каких производителей есть 80C31/51 с быстрыми ядрами и флэшем на борту? Имею в виду быстрее, чем средние 12 тактов на команду, где-то видел, что есть 1 такт на команду.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
salang
Грызет канифоль
Сообщения: 273
Зарегистрирован: Вт янв 18, 2011 19:32:48
Откуда: Мск

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

Сообщение salang »

у почти всех есть 1Т, но в реальности из-за цены доступны только Lemicro здесь или здесь
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Силабс и/или STC (http://www.stcmcu.com/) - вроде как в России через китаяцев доступны...
:dont_know:
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток.
На 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
А как правильно ?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Тут ежли по макросам - зависит от компилятора, а не от системы команд.
Конкретику читать надо...
Там где-то было об объединении символьных строк (с51asm) и операторах
<...> и % ... вобщем раздел "макрооператоры" вычитывать надо...
:dont_know:
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

С эти пока не разобрался, но попробовав другую 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
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Там по синтаксису весьма значительная разница (между keil-подобными исходниками и MCStudio).
Надо весьма придирчиво переписывать...
:cry:
Погляну... Как разумемс выше приведенное (add.asm) надо библиотекой сделать?
:roll:
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

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

Сообщение 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:
мне кажется, что с библиотекой возни больше будет :)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение 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
или может я чего про задачку недопонял?
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

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 и получил облом.
Последний раз редактировалось Пока_без_кота Ср окт 12, 2016 14:26:39, всего редактировалось 2 раза.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Пока_без_кота писал(а):MCStudio
у меня сохранилась версия MCStudio в "расширенном" варианте. этот вариант умеет работать с Си (подмножество SDCC) и, самое интересное, умеет работать в режиме FBD и (если не путаю ничего) в режиме, аналогичном Algoritm Builder.
FBD - это когда рисуется блок-схема обработки данных из всяких блоков (счетчик, триггер, элемент И и т.п.), а потом из этого генерируется исходник Си, который потом можно и подправить при необходимости.
Автор сего продукта на все ранее имевшиеся у меня контакты (а так же на найденные в интернете) никак не откликается... так что если кому интересно, могу предоставить инсталляторы - думаю, для автора ценность этого продукта давно нулевая, и он не обидется...
правда по неизвестным мне причинам все инсталляторы детектируются антивирусами, как заразные, но сильно сомневаюсь, что это на самом деле так: я у себя устанавливал, и никаких эффектов не возникло. видимо, какие-то особенности кода Delphi 7 сейчас пугают антивирусы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Я успел закачать два варианта еще бесплатного (1.4.7 и 1.4.9) под "форточки" - сейчас УВЫ - бесплатное только под линукс...
:(
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

BOB51 писал(а):
Увы, похоже вы с ARV-ом про разные IDE говорите, он про MCStudio, а вы про MCU8051 IDE :))) (тоже весьма ненеплохая штука, если подскажете, как в ней сделать проект из нескольких файлов - буду благодарен, ибо я и в ней пытался, но не получилось)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

Вернуться в «Разные вопросы по МК»