Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
А простите за дурацкий вопрос. А как на ассемблере устроить десятичный счет последовательно от 0000 до 9999. Чего совсем нет никаких хороших идей
Пробовал последовательно инкрементировать 4 ячейки памяти (каждую через 9 циклов) с CJNE через 9, но например, при переходе от 0019 к 0020 сначала образуется 0009, и только в следующем цикле образуется 0020
Пробовал 16-битное сложение с DA A, но это работает ужасно, пропускает числа.
Пробовал 16-битное сложение с переводом результата в BCD, проверкой в десятичных числах, но результат громоздкий и тормозной.
Наверняка есть есть какой-то математический метод, но с двоичной арифметикой я как бы не очень.
Посоветуйте чего нибудь.
Пробовал последовательно инкрементировать 4 ячейки памяти (каждую через 9 циклов) с CJNE через 9, но например, при переходе от 0019 к 0020 сначала образуется 0009, и только в следующем цикле образуется 0020
Пробовал 16-битное сложение с DA A, но это работает ужасно, пропускает числа.
Пробовал 16-битное сложение с переводом результата в BCD, проверкой в десятичных числах, но результат громоздкий и тормозной.
Наверняка есть есть какой-то математический метод, но с двоичной арифметикой я как бы не очень.
Посоветуйте чего нибудь.
Трудное детство, стальные игрушки.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Инкремент и сложение по реакции флагов могуть отличаться (на память - шклерозь) а посему
DA A неверно сработает. Нужно использовать простое сложение с единицей.
Или алгоритм математики аналогично DA A и соответственно реакции флагов результата.
16-разрядное не применимо - обрабатываем два байта - один с единицами и десятками, другой с сотнями и тысячами.

DA A неверно сработает. Нужно использовать простое сложение с единицей.
Или алгоритм математики аналогично DA A и соответственно реакции флагов результата.
16-разрядное не применимо - обрабатываем два байта - один с единицами и десятками, другой с сотнями и тысячами.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
[uquote="Голимый",url="/forum/viewtopic.php?p=3309366#p3309366"]А как на ассемблере устроить десятичный счет последовательно от 0000 до 9999.[/uquote]
Разделите задачи, у вас их две :
счетчик от 0000 до 9999
и
вывод информации в понятном пользователю виде
счетчик - инкремент младшего байта + сложение старшего байта с битом переноса и контроль достижения максимума.
а вот уже в выводе городите что вам приспичит, вплоть до реализации ITOA на асме...
Разделите задачи, у вас их две :
счетчик от 0000 до 9999
и
вывод информации в понятном пользователю виде
счетчик - инкремент младшего байта + сложение старшего байта с битом переноса и контроль достижения максимума.
а вот уже в выводе городите что вам приспичит, вплоть до реализации ITOA на асме...
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
если перевод в BCD труден то [uquote="Голимый",url="/forum/viewtopic.php?p=3309366#p3309366"]Пробовал последовательно инкрементировать 4 ячейки памяти (каждую через 9 циклов) с CJNE через 9, но например, при переходе от 0019 к 0020 сначала образуется 0009, и только в следующем цикле образуется 0020[/uquote] доводите до совершенства...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Amigosam
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Пт фев 14, 2014 20:45:33
- Откуда: Северный Кавказ
Преобразование аналоговых величин ...
В журнале Радио как-то публиковалась статья про преобразование аналоговых величин МК. Скрин во вложении. Что имеется в виду под порогом переключения? Напряжение, время??? Как его узнать?
- Вложения
-
- 1234567.jpg
- (103.08 КБ) 957 скачиваний
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
напряжение, разумеется. Никак- есть диапазон для данного типа ИС в ТУ, а для конкретного экземпляра определяется только практическим путем. И да, статья в 4/2005 была про PIC12F675, а название темы немного отличается
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Лучше готовые внешние ЦАП и/или АЦП использовать (из комплектации к адуринкам).
Ранее метод применялся у ПИК МК - но там иное, чем у mcs51 построение выходных каскадов портов - для классики может не пойти.
Относительно ЦАП на основе ШИМ попроще - там любой МК сгодится.
Есть и современные от китайцев STC15F204EA с АЦП на борту (из "прощедоступных")

Ранее метод применялся у ПИК МК - но там иное, чем у mcs51 построение выходных каскадов портов - для классики может не пойти.
Относительно ЦАП на основе ШИМ попроще - там любой МК сгодится.
Есть и современные от китайцев STC15F204EA с АЦП на борту (из "прощедоступных")
- Amigosam
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Пт фев 14, 2014 20:45:33
- Откуда: Северный Кавказ
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
[uquote="salang",url="/forum/viewtopic.php?p=3369287#p3369287"]напряжение, разумеется. Никак- есть диапазон для данного типа ИС в ТУ[/uquote]
Например, в статейном варианте: 25 Вольт, мВ? И разве на импортные микросхемы есть ТУ? И как практически тогда определить?
Например, в статейном варианте: 25 Вольт, мВ? И разве на импортные микросхемы есть ТУ? И как практически тогда определить?
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
где Вы в той формуле увидели В или мВ? Это т.н. эмпирическая формула. На имп. ИС есть datasheet, это ничего не меняет с точки зрения вопроса
- Amigosam
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Пт фев 14, 2014 20:45:33
- Откуда: Северный Кавказ
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Так вопрос в том и заключался: какой параметр из даташита для конкретной микросхемы нужно подсталять в формулу? Есть ли у него англоязычное название?
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Этот параметр называется Input Low Voltage.
-
Wladimir_TS
- Друг Кота
- Сообщения: 5066
- Зарегистрирован: Вс фев 15, 2009 01:04:58
- Откуда: Kaluga
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Люди - помогите разобраться с тем что делает данный участок кода :
Именно не что делает каждая команда, а что делает с математической и логической стороны над значениями в ячейках ОЗУ 0018h-001Fh
Код в формате i8035 выполняется в адресах 0284h - 2FFh
Входной параметр в R2 (0-3) по кругу при каждом вызове
MOV R1,#18h
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
RR A
RR A
ANL A,#3Fh
INC A
ADD A,R0
MOV @R1,A
INC R1
DJNZ R3,M1
Начальные значения в ячейках от 1 до FF, 0 не бывает.
С адреса 0200h имеется таблица
db 01h, 00h, 00h, 00h, 00h, 00h, 00h, 00h,
db 01h, 00h, 00h, 00h, 01h, 00h, 00h, 00h,
db 01h, 00h, 01h, 00h, 01h, 00h, 00h, 00h,
db 01h, 00h, 01h, 00h, 01h, 00h, 01h, 00h,
db 01h, 00h, 01h, 01h, 01h, 00h, 01h, 00h,
db 01h, 00h, 01h, 01h, 01h, 00h, 01h, 01h,
db 01h, 01h, 01h, 01h, 01h, 00h, 01h, 01h,
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
Есть предположение что в коде ошибка. Возможно преднамеренная, но без понимания того, что код делает сложновато.
Именно не что делает каждая команда, а что делает с математической и логической стороны над значениями в ячейках ОЗУ 0018h-001Fh
Код в формате i8035 выполняется в адресах 0284h - 2FFh
Входной параметр в R2 (0-3) по кругу при каждом вызове
MOV R1,#18h
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
RR A
RR A
ANL A,#3Fh
INC A
ADD A,R0
MOV @R1,A
INC R1
DJNZ R3,M1
Начальные значения в ячейках от 1 до FF, 0 не бывает.
С адреса 0200h имеется таблица
db 01h, 00h, 00h, 00h, 00h, 00h, 00h, 00h,
db 01h, 00h, 00h, 00h, 01h, 00h, 00h, 00h,
db 01h, 00h, 01h, 00h, 01h, 00h, 00h, 00h,
db 01h, 00h, 01h, 00h, 01h, 00h, 01h, 00h,
db 01h, 00h, 01h, 01h, 01h, 00h, 01h, 00h,
db 01h, 00h, 01h, 01h, 01h, 00h, 01h, 01h,
db 01h, 01h, 01h, 01h, 01h, 00h, 01h, 01h,
db 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h
Есть предположение что в коде ошибка. Возможно преднамеренная, но без понимания того, что код делает сложновато.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
" Входной параметр в 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??).

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??).
-
Wladimir_TS
- Друг Кота
- Сообщения: 5066
- Зарегистрирован: Вс фев 15, 2009 01:04:58
- Откуда: Kaluga
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Второй набор регистров не используется, забыл сказать. Используются как ячейки памяти, содержимое которых так-же было указано
Адреса расположения программного кода и таблицы указаны
Предположений что это у меня много - нужно больше конкретики или какая-то свежая мысль.
Что значит каждая команда я знаю.
ANL на забивает единицами - а забивает нулями те поля, где в параметре "0" AND же функция...
Адреса расположения программного кода и таблицы указаны
Предположений что это у меня много - нужно больше конкретики или какая-то свежая мысль.
Что значит каждая команда я знаю.
ANL на забивает единицами - а забивает нулями те поля, где в параметре "0" AND же функция...
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Wladimir_TS
Че-то я строки с адресами слева от команд в упор и под лупой не наблюдаю...

Че-то я строки с адресами слева от команд в упор и под лупой не наблюдаю...
-
Wladimir_TS
- Друг Кота
- Сообщения: 5066
- Зарегистрирован: Вс фев 15, 2009 01:04:58
- Откуда: Kaluga
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
3я строка сверху с начальном сообщении указывает диапазон адресов внутри которых данный кусок находится - так как точно начального адреса не знаю (кусок выдран из более объемного кода). А как имеющийся ассемблер заставить генерить *.lst я ещё не думал. С таблицей он в одном сегменте.
Над таблицей дан конкретный адрес.
Над таблицей дан конкретный адрес.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Без адреса команды 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 и ключа из таблицы в соответствии с значением первой части обработчика.

(собственно более необходим абсолютный адрес для 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 и ключа из таблицы в соответствии с значением первой части обработчика.
-
Wladimir_TS
- Друг Кота
- Сообщения: 5066
- Зарегистрирован: Вс фев 15, 2009 01:04:58
- Откуда: Kaluga
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Можно считать, что адрес первой команды MOV R1, #18h = 0284h
Основной вопрос как раз с точки зрения назначения куска кода, а не того, как он работает.
Основной вопрос как раз с точки зрения назначения куска кода, а не того, как он работает.
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Так уже сказано - вариант то-ли шифровальщика, то-ли генератора контрольного кода для сравнения блока из 8 байт.
Назначение определяется работой кода и устройством (общей программой и схемотехникой конкретного устройства) где тот пакет данных используется (откуда загружается и куда затем выдается).

Назначение определяется работой кода и устройством (общей программой и схемотехникой конкретного устройства) где тот пакет данных используется (откуда загружается и куда затем выдается).
-
Wladimir_TS
- Друг Кота
- Сообщения: 5066
- Зарегистрирован: Вс фев 15, 2009 01:04:58
- Откуда: Kaluga
Re: Мелкие вопросы по МК-51 а-ка MCS-51, ASM и не только..
Если-б было все так просто.
Но - для каждого из 4х последовательных вызовов с разными входными значениями в R2 исходное содержимое 8 ячеек памяти одинаково (независимо от их содержимого после предыдущего вызова). В них не может содержаться значение 0. Полученные 32 байта есть полезная обрабатываемая информация.
Но - для каждого из 4х последовательных вызовов с разными входными значениями в R2 исходное содержимое 8 ячеек памяти одинаково (независимо от их содержимого после предыдущего вызова). В них не может содержаться значение 0. Полученные 32 байта есть полезная обрабатываемая информация.