Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#21 26.07.2006 22:45:11

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

Фух, еле победил эти глюки....

2 Liv

Доброго времени суток!!  Спасибо огромное за вашу  вашу программу про светодиод!! Все понятно (в общем). Откомпилировалась успешно.Однако все же есть некоторые вопросы общего характера.
1. Регистру r16 присвоили имя "temp" и всегда работали с ним как с некоторым буфером, через который пересылаются данные.
Например, Вы пишете:
    
    ldi    temp,0xFF    ;загружаем в temp FF   
    out    DDRB,temp    ;настраиваем порт B на вывод

тут понятно, комнды непосредственной записи числа в порт я не нашел (mov P1,#11111111,к примеру, как в 51-х, тут не канает).
Дальше больше. Вы пишете:

    ldi    temp,LED_DEL
    sts    LedTmr,temp    ;загружаем в переменную значение LED_DEL

тут как я понимаю, тот же случай. Напрямую нельзя присвоить переменной значение константы, я правильно понял??
Т.е. фактически пересылка данных из одной области памяти (где храниться LED_DEL) в другую (тот самый 1 байт,
зарезервированный под LedTmr) возможна только через "буферный" регистр temp ака r16 (кстати, почему именно он??)

В обработчике прерывания по переполнению таймера 0 Вы опустили в стек сперва temp а потом и SREG. Но, опять-таки SREG через temp. Насколько я понял, все эти операции (ldi, lds, push, pop и пр.) возможны только с регистрами из того самого регистрового файла (32 РОНа, напрямую соединенные с АЛУ. Как видите, в архитектуре я тоже немного "прошарил" smile )
И последнее.

Init:    ldi    temp,RAMEND    ;константа RAMEND определена в 2313def.inc
    out    SPL,temp             ;инициализируем стек

Константа RAMEND из 2313def.inc: ".equ    RAMEND  =$DF    ;Last On-Chip SRAM Location" - "последняя область встроенной SRAM".  Я читал, что стек у AVR аппаратно не реализован,(ну, кроме AT90S1200) и стеком является область SRAM, адрес которой указан в  Stack Pointer. А каков его (стека) объем в данном случае?? У меня есть подробное русское описание архитектуры ATmega103, там написано буквально следующее: "Указатель стека указывае на область в SRAM данных, в которой размещаются стеки подпрограмм и прерываний. Объем стека в SRAM данных должен задаваться программой перед каждым вызовом подпрограммы и обработкой разрешенного прерывания."
Вы вроде нигде не указывали объем стека при вызове подпрограммы и обработке прерывания...
Заранее спасибо!!  Ваша помощь просто неоценима!!! smile

Отредактировано Алексей (26.07.2006 22:54:59)


......There is someone in my head, but it's not me.......

Вне форума

#22 26.07.2006 23:01:00

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

Алексей пишет:

2 LivДоброго времени суток!!

Здарова!

"Регистру r16 присвоили имя "temp" и всегда работали с ним как с некоторым буфером, через который пересылаются данные"

Верно.

"тут понятно, комнды непосредственной записи числа в порт я не нашел"

Дык RISC, ё моё. В итоге всё равно быстрее получается.

"Напрямую нельзя присвоить переменной значение константы, я правильно понял??"

Правильно.

"Т.е. фактически пересылка данных из одной области памяти (где храниться LED_DEL) в другую (тот самый 1 байт,
зарезервированный под LedTmr) возможна только через "буферный" регистр temp ака r16 (кстати, почему именно он??)"

R16 - это первый регистр из старших, с которым возможны все операции (битовые, например, или с непосредственными операндами, т.е. числами). Регистры R0..R15 неполноценны. Но в MCS-51 столько регистров вообще не было. Плюс возможность арифметических операций с любым регистром...

"В обработчике прерывания по переполнению таймера 0 Вы опустили в стек сперва temp а потом и SREG.
Но, опять-таки SREG через temp. Насколько я понял, все эти операции (ldi, lds, push, pop и пр.) возможны
только с регистрами из того самого регистрового файла (32 РОНа, напрямую соединенные с АЛУ. Как видите, в
архитектуре я тоже немного "прошарил" smile )"

Круто прошарили. Я очень рад.

"Я читал, что стек у AVR аппаратно не реализован,(ну, кроме AT90S1200) и
стеком является область SRAM, адрес которой указан в  Stack Pointer. А каков его (стека) объем в данном случае??"

У S1200 был апаратный стек, но у всех нормальных AVR он, как и положено, находится в ОЗУ. У S1200 стек был очень ограниченный, а у всех остальных AVR он лимитируется только объемом ОЗУ. На практике при программировании на асемблере можно забыть про стек, ему места хватит. В отлитчие от Си, на ассемблере мы не передаем данные через стек. Но и для Си в AVR стека хватает.

"Заранее спасибо!!  Ваша помощь неоценима!!! smile"

Ну, этого много! Хватит пива smile

Вне форума

#23 27.07.2006 07:15:18

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

2 Liv Снова здравствуйте!!!

Liv пишет:

R16 - это первый регистр из старших, с которым возможны все операции (битовые, например, или с непосредственными операндами, т.е. числами). Регистры R0..R15 неполноценны. Но в MCS-51 столько регистров вообще не было. Плюс возможность арифметических операций с любым регистром...

Постойе-ка.. в чем "неполноценность" первых 16-ти?? В моей мега-умной книге такого нет....

Я все-таки создам новую тему. А то ведь оффтопим фактически. Начальство рассердиться smile


Liv пишет:

Ну, этого много! Хватит пива smile

Эх, жаль, что мы далеко!! Давайте адрес, я Вам по почте вышлю smile


......There is someone in my head, but it's not me.......

Вне форума

#24 27.07.2006 09:37:45

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

Алексей Постойе-ка.. в чем "неполноценность" первых 16-ти?? В моей мега-умной книге такого нет....

Регистры R0-R15 неполноценны тем, что с ними не проходят команды с непосредственными операндами (ldi, например). Если в AVR Studio нажать F1, когда курсор стоит на мнемонике команды, откроется хелп по этой команде, где будет указано, с каким диапазоном регистров она работает. Есть еще ряд стандартных "граблей", я позже подготовлю и напишу.

Уважаемая администрация форума! Большая просьба перенести из этой ветки посты, начиная с #14 в новую ветку "AVR для чайников". Эта ветка пусть останется, возможно, будет продолжение беседы по MCS-51.

Вне форума

#25 27.07.2006 21:33:07

adsh
Реалист
Откуда: Киев
Здесь с 16.01.2004
Сообщений: 4,755
Сайт

Re: MCS-51 для "чайников"

Liv пишет:

Уважаемая администрация форума! Большая просьба перенести из этой ветки посты, начиная с #14 в новую ветку "AVR для чайников". Эта ветка пусть останется, возможно, будет продолжение беседы по MCS-51.

Перенести не получится, только всё цитировать и писать от себя. Делать?


Саша

Вне форума

#26 27.07.2006 22:21:55

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: MCS-51 для "чайников"

Да наверно не стоит. Бог с ними, с этими постами. Просто больше не будем ничего сюда писать про AVR да и все. А если кто хочет что по 51-м обсуждать, так пусть продолжают ветку. Я ее создал, думал, что буду 51-ми заниматься. Но Liv переубедил.


......There is someone in my head, but it's not me.......

Вне форума

#27 29.11.2006 13:51:51

Filth
Новичок
Здесь с 29.11.2006
Сообщений: 2

Re: MCS-51 для "чайников"

Давайте продолжим эту страничку!

Написал я  прогу на асемблере, оттранслировал ее TASM-ом (как написано в книге А.Фрунзе Микроконтроллеры? это же просто!) и получил файл *.obj , но програма Pony Prog (через которую програмирую контроллер) не поддерживает етот формат файла. Есть ли какието конверторы *.obj <=> *.bin или чем лучше компилировать??

Вне форума

#28 29.11.2006 18:29:47

GAL
Участник
Откуда: г. Запорожье
Здесь с 05.03.2004
Сообщений: 141

Re: MCS-51 для "чайников"

Для простых задач, с объемом до 2к можно использовать Бейсик BASCOM-8051 от mcselec.com или ассемблер/Си Reads51 от www.rigelcorp.com. Это все бесплатно. На выходе они готовят hex-файлы для пршивки. Сам пользовался неоднократно.

Вне форума

#29 30.11.2006 00:39:09

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: MCS-51 для "чайников"

Filth пишет:

Написал я  прогу на асемблере, оттранслировал ее TASM-ом (как написано в книге А.Фрунзе Микроконтроллеры? это же просто!) и получил файл *.obj , но програма Pony Prog (через которую програмирую контроллер) не поддерживает етот формат файла. Есть ли какието конверторы *.obj <=> *.bin или чем лучше компилировать??

Если TASM-у в командной строке задать ключ -b, то он генерирует двоичный исполняемый файл (тот же .bin), но с расширением .obj. Если ключа -b не ставить, то он генерит hex-файл, хотя тоже с расширением .obj. Так что в Вашем случае достаточно поставить ключ желаемого формата, а затем просто переименовать файл (сменить расширение).

Вне форума

#30 04.12.2006 13:53:52

Filth
Новичок
Здесь с 29.11.2006
Сообщений: 2

Re: MCS-51 для "чайников"

Спасибо Liv, все заработало!

Вопрос следующий: Можно ли TASM-ом компилировать с командной строки в WIN XP SR2? или лучше в чистом DOS-е? от етого что-нибудь зависит?

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.037 сек, 8 запросов выполнено - Использовано памяти: 626.22 Кбайт (Пик: 676.59 Кбайт) ]