А простите за дурацкий вопрос. А как на ассемблере устроить десятичный счет последовательно от 0000 до 9999. Чего совсем нет никаких хороших идей
Пробовал последовательно инкрементировать 4 ячейки памяти (каждую через 9 циклов) с CJNE через 9, но например, при переходе от 0019 к 0020 сначала образуется 0009, и только в следующем цикле образуется 0020
Пробовал 16-битное сложение с DA A, но это работает ужасно, пропускает числа.
Пробовал 16-битное сложение с переводом результата в BCD, проверкой в десятичных числах, но результат громоздкий и тормозной.
Наверняка есть есть какой-то математический метод, но с двоичной арифметикой я как бы не очень.
Посоветуйте чего нибудь.
Инкремент и сложение по реакции флагов могуть отличаться (на память - шклерозь) а посему
DA A неверно сработает. Нужно использовать простое сложение с единицей.
Или алгоритм математики аналогично DA A и соответственно реакции флагов результата.
16-разрядное не применимо - обрабатываем два байта - один с единицами и десятками, другой с сотнями и тысячами.
если перевод в BCD труден то [uquote="Голимый",url="/forum/viewtopic.php?p=3309366#p3309366"]Пробовал последовательно инкрементировать 4 ячейки памяти (каждую через 9 циклов) с CJNE через 9, но например, при переходе от 0019 к 0020 сначала образуется 0009, и только в следующем цикле образуется 0020[/uquote] доводите до совершенства...
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
В журнале Радио как-то публиковалась статья про преобразование аналоговых величин МК. Скрин во вложении. Что имеется в виду под порогом переключения? Напряжение, время??? Как его узнать?
напряжение, разумеется. Никак- есть диапазон для данного типа ИС в ТУ, а для конкретного экземпляра определяется только практическим путем. И да, статья в 4/2005 была про PIC12F675, а название темы немного отличается
Лучше готовые внешние ЦАП и/или АЦП использовать (из комплектации к адуринкам).
Ранее метод применялся у ПИК МК - но там иное, чем у mcs51 построение выходных каскадов портов - для классики может не пойти.
Относительно ЦАП на основе ШИМ попроще - там любой МК сгодится.
Есть и современные от китайцев STC15F204EA с АЦП на борту (из "прощедоступных")
[uquote="salang",url="/forum/viewtopic.php?p=3369287#p3369287"]напряжение, разумеется. Никак- есть диапазон для данного типа ИС в ТУ[/uquote]
Например, в статейном варианте: 25 Вольт, мВ? И разве на импортные микросхемы есть ТУ? И как практически тогда определить?
" Входной параметр в R2 (0-3) по кругу при каждом вызове
MOV R1,#18h что содержится в регистре R18 неизвестно
MOV R3,#8
M1:
MOV A,@R1
CPL A
RL A
RL A
ANL A,#0Ch
ADD A,R2
RL A
ANL A,#1Eh
MOVP A,@A что содержится в таблице на текущей странице памяти программ неизвестно
также неизвестна сама текущая страница данного кода
MOV R0,A возможно вариант стека для акумулятора
MOV A,@R1 читаем регистр
CPL A инверсия с последующим умножением на 4
RR A
RR A
ANL A,#3Fh Забиваем единицами все, кроме 6 и 7 бита
INC A похоже на дополнение до двух, но с промежуточным умножением после инверсии
ADD A,R0 предыдущее значение складывается с результатом
MOV @R1,A засылается в регистр
INC R1 и переходим на следующий элемент массива
DJNZ R3,M1
..."
Возможно какой-то вариант CRC контроля с привлечением таблицы (изврат на тему CRC8 или подобного) или кодирования с определенным ключом обработки... Как версия улучшенной "контрольной суммы" ибо обрабатывается массив данных в ОЗУ с табличным ключом (табличная CRC??).
3я строка сверху с начальном сообщении указывает диапазон адресов внутри которых данный кусок находится - так как точно начального адреса не знаю (кусок выдран из более объемного кода). А как имеющийся ассемблер заставить генерить *.lst я ещё не думал. С таблицей он в одном сегменте.
Без адреса команды MOV R1,#18h обсуждение не имеет смысла.
(собственно более необходим абсолютный адрес для MOVP A,@A)
Т.е.
NNNN mov..... где NNNN значение адреса перого байта команды.
Раскладка адресов(как я уже писал ранее в другой теме) может быть получена или по *.hex файлу или по *.bin файлу (образ ПЗУ) без особого труда (делаем прожку на basic или на чем посовременнее).
А сама страница памяти - это 0х0200:0х02FF, а не 0284h - 2FFh как у Вас.
Диапазон целевых адресов 000хххх0 на текущей странице памяти программ 0-0x1E (0-30).
Но это всего лишь компонента обработки в которой участвует 8 байт массива в ОЗУ (0x18-0x20) и компонент из R2.
Задача прожки поменять значение массива согласно текущего байта данных, сменного ключа из R2 и ключа из таблицы в соответствии с значением первой части обработчика.
Так уже сказано - вариант то-ли шифровальщика, то-ли генератора контрольного кода для сравнения блока из 8 байт.
Назначение определяется работой кода и устройством (общей программой и схемотехникой конкретного устройства) где тот пакет данных используется (откуда загружается и куда затем выдается).
Но - для каждого из 4х последовательных вызовов с разными входными значениями в R2 исходное содержимое 8 ячеек памяти одинаково (независимо от их содержимого после предыдущего вызова). В них не может содержаться значение 0. Полученные 32 байта есть полезная обрабатываемая информация.