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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

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

Купите USBASP, установите ProgISP 1.72 и не морочте себе голову. Именно AT89S4051 не шил, но вот AT89S52 этой связкой шьются нормально.
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

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

Сообщение Ser60 »

ds3ds3 - схему как у VT1 в журнале можно подключать к любым выводам порта у 2051, поскольку не один и них не работает в двух-тактном режиме (push-pull). Однако, если порт какого-либо другого МК работает в 2-тактном режиме, то как отметил BOB51, следует использовать только схему на VT2. Вероятно, это и имел в виду автор статьи.

Насчет программатора для 2051, эта фраза взята из ДШ на МК. Там-же приведен алгоритм последовательного программирования. На фоне этого неясно что Вы имеете в виду под параллельным программатором для 2051? Вообще, если хотите изучить архитектуру 8051, рекомендую забыть про атмеловские продукты. Посмотрите лучше на силлабовские МК серии С8051 или еще лучше на их более новую серию EFM8. Для последних у фирмы имеются Starter Kits стоимостью около 30 USD с отладчиком на борту и кучей другого функционала, например измеритель потребляемого тока, сопряженный с инструментом Energy Profiler в их (бесплатном) IDE Simplicity Studio.
Реклама
ds3ds3
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср ноя 21, 2012 02:55:37

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

Сообщение ds3ds3 »

blowit:
Изображение
В даташите 4051 написано:
Programming Algorithm: To program the AT89C4051, the following sequence is
recommended.
1. Power-up sequence:
Apply power between VCC and GND pins
Set RST and XTAL1 to GND
2. Set pin RST to “H”
Set pin P3.2 to “H”
3. Apply the appropriate combination of “H” or “L” logic
levels to pins P3.3, P3.4, P3.5, P3.7 to select one of the programming operations
shown in the PEROM Programming Modes table.
To Program and Verify the Array:
4. Apply data for Code byte at location 000H to P1.0 to P1.7.
5. Raise RST to 12V to enable programming.
6. Pulse P3.2 once to program a byte in the PEROM array or the lock bits. The byte-write
cycle is self-timed and typically takes 1.2 ms
и т.д.
Выделенное красным - это не параллельное?
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

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

Сообщение Ser60 »

Прочитал сейчас внимательнее секцию о программировании МК в ДШ. Там все только про параллельный интерфейс программирования. На том сайте скорее всего имелось в виду последовательное программирование байтами. Я с этим МК никогда дел не имел, и сейчас, поборов шок, еще раз понял, что правильно делал. Он отстал от современных лет на 20 минимум. Бегите от него, если только на работе насильно насильно не держут. Его время давно прошло. Я много работал с силлабовскими С8051 и несколько с EFM8 как советовал выше. Попробуйте их, если хоте остаться верным этой архитектуре, и увидите, что жизнь цветная.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Скажем так... что не всегда и не везде силабсовские МК доступны... да и цена... 8)
А вот насчет прошивки 2051 то да... еще тот подарочек - я на нее самодельный программатор делал (там еще в алгоритме "недокументированный подарочек" имеется... :( ) но та железяка под ДОС или винь 98-ю (на основе LPT до которого в ХР не добраться в полном объёме).
Для "простоначинающего" тот вариант весьма недружественный в отношении подготовки файлов/работы с ПК.
Программатор для S-сериидля 2051/4051 не подходит.
Единственно удобен старый... шклерозь... фирмовый - но он также под ХР не работоспособен.
Так что ежли из 51-х местна доступа (и нету готового фабричного программатора) - проще AT89S51/AT89S52 использовать.
Силапси конечно вкусность... но "только слюнки поглотать" ибо ни кристаллов ни программатора в ближни лет... надцать не видать аки ухов собственных... Да и прочего также - чего в ящичках осталось - то и обсасывамс...
:(
Реклама
ds3ds3
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср ноя 21, 2012 02:55:37

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

Сообщение ds3ds3 »

Вооот, собрал, в понедельник будем пробовать прошивать.
Изображение
Последний раз редактировалось ds3ds3 Сб авг 06, 2016 04:24:30, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

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

Сообщение Ser60 »

Я в курсе Вашей ситуации, BOB51. Надеюсь, она улучшится гораздо скорее, чем через ..надцать лет. Также надеюсь, что у ds3ds3 ситуация лучше. Всем удачи!
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

В своё время начал было изучать МК по Фрунзе, привлекла подробность и доходчивость изложения материала. Но потом забросил. В настоящий момент решил возобновить изучение. Но аналогов этой книги по современным Мк не нашёл, к сожалению. Так что на забрасывайте "старообрядца" гнилыми помидорами, пожалуйста. Помогите разобраться.

Подпрограмма преобразования 2 в 2\10. Застрял практически на первой операции. Число 65280 заносим в DPTR, затем переносим в регистр R2 младший байт R3 старший. При этом получается, что в R2 записываются одни 0 во всех битах. Это младший байт числа 65280. Затем заносится в DPTR число 10000 и вычитается из старшего и младшего байта, R3 и R2 соответственно. То есть каким образом из 00000000 вычитается 00010000? Я понимаю, что есть бит переноса и так далее ... Какое число будет результатом этого действия? Если на калькуляторе, то ерунда полная получается. ((

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

R32MNDPT:
        CLR     C                       ;ОЧИЩАЕМ CY
        MOV     A,R2                    ;R2 В АККУМУЛЯТОР
        SUBB    A,DPL                   ;ВЫЧИТАЕМ ИЗ НЕГО МЛ.БАЙТ DPTR И СY
        MOV     R2,A                    ;ВОЗВРАЩАЕМ РАЗНОСТЬ В R2
        MOV     A,R3                    ;R3 В АККУМУЛЯТОР
        SUBB    A,DPH                   ;ВЫЧМТАЕМ ИЗ НЕГО БИТ ПЕРЕНОСА
                                        ;И МЛ.БАЙТ DPTR
        MOV     R3,A                    ;ВОЗВРАЩАЕМ РАЗНОСТЬ В R3
        RET
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение petrenko »

Во первых : во избежание затруднений пишите явно ACC ,а не A в коде.
( Это относится к ассемблерам для архитектур типа MCS-51 . )

Далее : там получаются два байта : сначала разность младших 8бит и бит "заём" ,а потом разность старших 8бит с учётом заёма.

Это общий аль-горитм вычисления чисел разрядностью более, чем разрядность а.л.у. какого-либо процессора.

Уверен, что с этим так или иначе разберётесь.

Но ( ! ) это учебный аль-горитм .
В семействах процессоров типа MCS-51 можно применять команду DIV . :wink:
( для этого, однако, надо пользовать четыре регистра для входных данных и -четыре- пять регистров для результата и в каждом регистре должны лежать цифры в неупакованном формате.

Удачи в изучении !
Последний раз редактировалось petrenko Пн авг 08, 2016 15:32:05, всего редактировалось 2 раза.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Ежли вкратце... в примитиве
Для всего надо из числа вычитать десятичную десятку в двоичном эквиваленте (0х0A) - количество благополучных вычитаний и есть целое (сотни тысяч, десятки тысяч, тысячи, сотни - а остаток присоединим как единицы.
Для упрощения - убыстрения применяют часто промежуточные величины с двоичными эквивалентами
10000 (0x2710),
1000 (0x03E8),
100 (0x64) и
10 (0x0A).
"Полный" вариант в виде многобайтового деления используется весьма редко.
Более частое применение имеет табличный кодер/декодер в диапазоне 0-100 (с упорорм на использование DPTR как базового адреса).
У 51-й можно также командами деления/умножения воспользоваться.
Использовать DPTR для простой математики - великое варварство - там вполне достаточно штатных R2-R7в текущем банке.
Особенность семейства MCS51 такова, что вне зависимости от "современности" базовая модель и система команд остается неизменной - а добавочные аппаратные модули "совместимы вверх" - прожка написанная для 51-й будет всегда работоспособна на старших моделях.
Как вариант "для воспоминаний" здесь в сундуке КОТА:
https://sunduk.radiokot.ru/loadfile/?lo ... 82&turbo=1
Есть еще кучка книжек. Про запас IDE (инсталятор) и минимальные средства разработки/программирования от атмела.
:beer:

Пока шкрябал...
petrenko - для разных компиляторов имеются разны варианты "сленга"
(в том числе и для весьма красивой MCU 8051 IDE - успел еще бесплатны версии для ХР скачать - сейчас там за бабки и бесплатно под линуксь) так что "рекомендуется" не значит "обязательно соблюдается"...
:(
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

Спасибо, что обратили внимание на мой вопрос. Забегу немного вперёд: смотрел я подпрограммки на комканде DIV, но тоже сразу застопорился на вопросе. Команда DIV возможно только между АСС и регистром В, то есть для однобайтового числа подходит. А если это двухбайтное число?

По моему первому вопросу. С алгоритмом мне всё понятно. Мне не ясно другое:
При этом получается, что в R2 записываются одни 0 во всех битах. Это младший байт числа 65280. Затем заносится в DPTR число 10000 и вычитается из старшего и младшего байта, R3 и R2 соответственно. То есть каким образом из 00000000 вычитается 00010000?
Или другими словами: какое число у нас получается занести в R2 после выполнения команды SUBB A,DPL ???

Прикрепляю скрин, что получается на калькуляторе.
Вложения
SUBB.jpg
(105.41 КБ) 253 скачивания
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение petrenko »

Вы недостаточно внимательно прочитали :
petrenko писал(а):... можно применять команду DIV . :wink:
( для этого, однако, надо пользовать четыре регистра для входных данных и
-четыре- пять регистров для результата и в каждом регистре должны лежать цифры в неупакованном формате. ) ..
Разъясню подробнее :
неупакованные цифры занимают всю разрядность регистра, но в старших разрядах нули, а значащие только младшие 4бита(==1ниббл) , то есть в случае 8-и-битного регистра имеют такой вид : Rn=={0000xxxx}

Можно положить их в регистры процессора например так :
R3=={0000x3.3x3.2x3.1x3.0}
R2=={0000x2.3x2.2x2.1x2.0}
R1=={0000x1.3x1.2x1.1x1.0}
R0=={0000x0.3x0.2x0.1x0.0}

R7=={0000y3.3y3.2y3.1y3.0}
R6=={0000y2.3y2.2y2.1y2.0}
R5=={0000y1.3y1.2y1.1y1.0}
R4=={0000y0.3y0.2y0.1y0.0}

Upd : и "изыскать" отсутствующий R8 для самой старшей цифры decimal результата .. :facepalm:

Регистры ACC и B будут содержать частичные значения по ходу вычислений.

Деление будет производиться по сути так же, как в школе учили - то есть будем делить неупакованное число на константу .

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

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

Сообщение Amigosam »

УУУУ вы меня совсем запутали ... В данном случае R0...R7 хранятся числа до преобразования 2/10? Каким образом их так можно записать тогда?
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение petrenko »

Что то сегодня совсем тяжко дело идёт .. :(

Итак ещё подробнее :
В регистрах лежат : в R3,R2,R1,R0 - неупакованные цифры числа, которое будем подвергать преобразованию, то есть икс-а ( X==x3x2x1x0 )
,а в R8,R7,R6,R5,R4 неупакованные цифры результата, то есть игрек-а ( Y==y4y3y2y1y0 )

Вот так сие выглядит :

R3=={0x3h}
R2=={0x2h}
R1=={0x1h}
R0=={0x0h}

R7=={0y3h}
R6=={0y2h}
R5=={0y1h}
R4=={0y0h}

upd.08.08.2016 : и придётся "изыскать" R8 :o :facepalm: - там будет лежать самая старшая цифра результата decimal .
( при преобразовании чисел >9999dec четырёх десятичных цифр не хватит, нужна пятая )
...

Если что "накосячил" - извиняюсь заранее , несколько устал сегодня. :sleep:

upd.08.08.2016 : ^_Ну вот сейчас посмотрел - и вправду вчера "накосячил" .. :oops: Поправил ..
Последний раз редактировалось petrenko Пн авг 08, 2016 12:45:47, всего редактировалось 3 раза.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

По числам: упакованные_неупакованные. Например, взят 3-х байтовое 16777215. Как из него получаем неупакованное, каков алгоритм? Я так понимаю данное число состоит из 6 полубайт, а у нас только 4 регистра.
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

В общем, на половине пути я где-то с решением своего вопроса. Разобрался с симулятором, на который дал мне ссылку BOB51. С DOSом я и раньше был на вы, а тут его и техника ещё не хочет поддерживать. Ох ... Погоняю "свою" программку в симуляторе, понаблюдаю за содержимым регистров. Надеюсь поможет.

По случаю с командой DIV ещё буду разбираться.

ЗЫ ещё один нюанс, пока по книге работаю с TASM, полагаю это имеет значение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Весьма рекомендую перейти сразу или на атмелевский c51asm или на указанную выше IDE (там и симулятор вкуче). Если более профессионально - демо-версию keil или Ride7 IDE.
Это касательно оболочек для работы на ПК.
В самом компе все ранее указанные софтинки работают под WIN_XP или семеркой.
Кроме прочего иногда раздел с прикладными прожками требуется отформатировать в FAT32 (создать маленький логический диск) - для "старых" прожек, ориентированных для работы под ДОС.
И еще один рекомендованный книг:
http://mexalib.com/download/2877
8)
Прожки вида c51asm или AD2500 требуют наличия запускающего *.bat файла.
Прицепил два варианта:
батнички.zip
(1.03 КБ) 173 скачивания
А - для AD2500 и
аt - для c51asm.
ессно надо будет соответственно пути к каталогам/файлам переписать под своё размещение.
:wink:
"упакованные/неупакованные" - проще будет так
одна десятичная цифирь в двоичном байте вида 0х00-0х09 (0-9) - "неупакованный" - в байте старшая тетрада равна 0 а младшая - двоичный эквивалент десятичного значения ( в диапазоне от 0 до 9 совпадают).
две десятичных цифири (двоичные эквиваленты) старшая в старшей тетраде а младшая в младшей - "упакованный"... типа 0х52 = 52 или 0х90 = 90.
Так что ежли у Вас
16777215
то уж никак ему 3-х байтовым не быть:
неупаковка (промежуточные значения)
0х01
0х06
0х07
0х07
0х07
0х02
0х01
0х05
или далее получаем
0х16
0х77
0х72
0х15
четыре байта в упакованном виде с двоичным (исходным) значением 0хFFFFFF - вот двоичная форма та 3-х байтовая... НО... "с подвохом" - значение может интерпретироваться как "число со знаком".
8)
Аватара пользователя
Amigosam
Встал на лапы
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

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

Сообщение Amigosam »

BOB51 писал(а):Весьма рекомендую перейти сразу или на атмелевский c51asm или на указанную выше IDE (там и симулятор вкуче). Если более профессионально - демо-версию keil или Ride7 IDE.
Очень хочется, но инфы разъяснительной по этим вещам нет. Я как тугодум, до пенсии изучать сам буду.
BOB51 писал(а): В самом компе все ранее указанные софтинки работают под WIN_XP или семеркой.
Кроме прочего иногда раздел с прикладными прожками требуется отформатировать в FAT32 (создать маленький логический диск) - для "старых" прожек, ориентированных для работы под ДОС.
Под это дело выделил старенькой лаптом, там как раз в FAT32 разбит диск
BOB51 писал(а): И еще один рекомендованный книг:
Есть у меня такая, :) в бумажном варианте когда-то покупал ...

BOB51 писал(а): 16777215
....
неупаковка (промежуточные значения)
0х01
0х06
0х07
0х07
0х07
0х02
0х01
0х05
или далее получаем
0х16
0х77
0х72
0х15
Это всё понятно, и хорошо визуально видно, все переносы разрядов. А как это заставить МК выполнить?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Двоична математика воть туть была:
https://sunduk.radiokot.ru/loadfile/?load_id=1327388014
Относительно алгоритмов свертки...
СпойлерДопустим
R7=0x01
R6=0x06
R5=0x07
R4=0x07
R3=0x07
R2=0x02
R1=0x01
R0=0x05
тогда делаем такое:
mov a,r1
swap a
orl a,r0
mov r0,a ; r0=0x15
mov a,r3
swap a
orl a,r2
mov r1,a ; r1=0x72
mov a,r5
swap a
orl a,r4
mov r2,a ; r2=0x77
mov a,r7
swap a
orl a,r6
mov r3,a ; r3=0x16
итогом
r3=0x16
r2=0x77
r1=0x72
r0=0x15
:roll:
и "для разнообразия"
Mcs51tbl_1.jpg
(153.95 КБ) 267 скачиваний
rpdmap51.GIF
(24.19 КБ) 458 скачиваний
:write:
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение petrenko »

^
^
^
^
^
^_
А вот никто и не заметил, что вчера то я и вправду "накосячил".. :oops:

( Ну чуял вот, что что то не так, но устал трохи . )

Придётся "изыскать" ещё регистр для самой старшей неупакованной BCD цифры.

В общем поправил.

Строго говоря если преобразуемое неупакованное число можно "потерять" ,то хватит вообще 5 регистров для пяти неупакованных BCD цифр результата .
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Ответить

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