80C51GB

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

seedbutcher писал(а):Если будет возможность
Те или иные приёмы и предпочтения в оформлении программы - вещь сугубо индивидуальная, хотя общие правила всё-же есть..
Главное из них одно, что-бы программа хорошо читалась и можно было-бы вспомнить, что она делает, например через год..
Всё остальное, как то, писать команды большими или маленькими буквами, давать меткам те или иные имена - это, как себя приучишь..
Мя например пишу программу маленькими буквами, а большими - определения, имена регистров и непосредственные значения данных..

Вот, в качестве примера оформления посмотри одну из моих стареньких правда программ..
Мя ни на чём не настаиваю, просто ты должен выработать "свой стиль"..
Что-то можешь у мя перенять, а что-то сам выдумаешь..
Вложения
BL89511.asm
(5.65 КБ) 344 скачивания
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
seedbutcher
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн окт 10, 2011 19:47:06
Откуда: Екатеринбург

Re: 80C51GB

Сообщение seedbutcher »

А вот можно еще пару комментариев про лишние команды?
А то опыта нет совсем.
Спасибо за пример! Изучу в свободное время. он для atmel?
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

seedbutcher писал(а):он для atmel?
Для любой 51-класики и для СиЛабса тоже подойдёт, только настройка последовательного порта чуть подправится..
Это мя делал для отладочного модуля загрузчик, что-бы не прошивать микросхему, а загружать программу в ОЗУ, которое находилось в области памяти программ..
seedbutcher писал(а):можно еще пару комментариев про лишние команды?
Вот например, ты вызываешь отдельную подпрограмму при обработке прерывания.

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

ORG 07BH                       ; прерывание по завершению преобразования в АЦП0
CALL INTER_ANGLE               ; вызов подпрограммы обработки углов
RETI                           ; возврат из прерывания
Т.е. у тя получается, что пришло прерывание, ты прыгаешь на подпрограмму INTER_ANGLE, потом после её RET-а прыгаешь обратно, а потом по RETI выходишь из прерывания..
Одна из команд возврата - лишняя..

Надо было написать:

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

ORG 07BH                       ; прерывание по завершению преобразования в АЦП0
LJMP INTER_ANGLE               ; вызов подпрограммы обработки углов
А в конце подпрограммы INTER_ANGLE поставить RETI..

И ещё такой совет:
В системе команд МК51 нет команд jmp и call, а то, что ты написал, это псевдо-команды транслятора, который вместо них подставляет конкретные команды sjmp, ajmp, ljmp и acall и lcall в зависимости от длины вызова/перехода..

Не привыкай к просто jmp и call - ставь конкретную команду..

P.S. И ещё, не забывай в подпрограммах обработки прерываний и в остальных подпрограммах сохранять И и возвращать ИЗ стека значения регистров, которые данная подпрограмма изменяет..
Это не относится к тем регистрам, через которые могут передаваться/возвращаться параметры подпрограмме..

Т.е. в начале твоей подпрограммы INTER_ANGLE должны быть строчки:

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

push ACC
push PSW
push B
А в конце, перед командой возврата, наоборот:

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

pop B
pop PSW
pop ACC
Обращаю внимание, что в этих командах аккумулятор надо писать, именно так - ACC, а непросто А..
И слово состояния, PSW для порядка сохраняется, что-б не терялись флаги основной программы..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
seedbutcher
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн окт 10, 2011 19:47:06
Откуда: Екатеринбург

Re: 80C51GB

Сообщение seedbutcher »

Понял)
Тут есть разница. Можно обработчик углов писать именно как подпрограмму и тогда вызывать через CALL и в конце писать RET. Это одно.
А вот писать LJMP и перемещать RETI, это уже другое. это просто переход на адрес без организации подпрограммы.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

seedbutcher писал(а):это просто переход на адрес без организации подпрограммы.
Как это? И ret и reti это оба возврата из подпрограммы, только одна из просто подпрограммы, а другая из подпрограммы обработки соответствующего прерывания..
Как собственно у тя и сделано..

Если-бы у тя подпрограмма INTER_ANGLE вызывалась в программе ещё где-то, то мя про ljmp и reti не написал-бы..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
seedbutcher
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн окт 10, 2011 19:47:06
Откуда: Екатеринбург

Re: 80C51GB

Сообщение seedbutcher »

Просто она у меня вызывается именно через CALL. Но Вы правы, можно просто заменить на ljmp.
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

seedbutcher писал(а):можно просто заменить на ljmp.
Если просто заменишь на ljmp , но не заменишь ret на reti, то "упрыгаешь" далеко-далеко..

Кстати, у тя в программе нет настройки стека..
Его в принципе почти всегда хватает установленного по умолчанию, но не всегда так бывает..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
seedbutcher
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн окт 10, 2011 19:47:06
Откуда: Екатеринбург

Re: 80C51GB

Сообщение seedbutcher »

МитяРа писал(а):
seedbutcher писал(а):можно просто заменить на ljmp.
Если просто заменишь на ljmp , но не заменишь ret на reti, то "упрыгаешь" далеко-далеко..
Это понятно.
Стек я думаю не трогать пока. Если в дальнейшем надо будет, то переопределю.
Аватара пользователя
seedbutcher
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пн окт 10, 2011 19:47:06
Откуда: Екатеринбург

Re: 80C51GB

Сообщение seedbutcher »

Ну и вот еще.
Все же ASM или C? и почему? А то в интернете мнений просто очень-очень много
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: 80C51GB

Сообщение BOB51 »

прямое управление ресурсами МК, прикладные библиотеки и наиболее оптимальное самостоятельное распределение ресурсов при объёмах пзу до 10кило машинных кодов - предпочтение асму, математика, работа различных ОС, большой (32-64 и более кило) объём пзу - предпочтение С.
Лучший результат - доскональное знание того и другого, желательно не менее чем в 3-4 различных семействах(системах) :beer:
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

Мяу всем..
BOB51 писал(а):Лучший результат - доскональное знание того и другого,
Соглашусь полностью.. Хотя сам пишу исключительно на Асме..
Всё зависит от конкретной задачи.. Иногда самым оптимальным будет Си-шная программа с Ассемблерными вставками..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: 80C51GB

Сообщение BOB51 »

жаль только, что для асма и С требуется разный подход - асм требует знаний железа и схемотехники, а С наоборот - абстрагирования от мелочей (на первый взгляд)
кроме того помощ по асму в большинстве случаев строится с подходом "освоение с нуля", а вот для С - наоборот :"азы вы уже давно знаете"
ну и диалкетов... :cry:
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: 80C51GB

Сообщение МитяРа »

Ну да, ну да..

seedbutcher, гляжу аватарку кошачью завёл, значит прижился.. :))
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»