Перейти к содержанию

Начинаем Работать С 51-Ми Контроллерами


mazzi

Выяснение причин малой популярности на форуме 51-х  

61 пользователь проголосовал

  1. 1. Вы используете 51-е ?

    • А что это такое?
    • Использовал, когда учился в институте.
    • 51-устарели.
    • Использую если нет выхода.
    • Конечно, это супер!
    • Иногда использую.
  2. 2. Что мешает использовать 51-е микроконтроллеры?

    • Нечем запрограммировать.
    • Нет софта для разработки.
    • Нет толковой литературы.
    • Нет потребности и желания.
    • Не устраивает цена на чипы.
  3. 3. Как вы находите материалы в данной теме?

    • Чепуха
    • Средне
    • Интересно
    • Класс! Ещё!


Рекомендуемые сообщения

Начать данную тему сподвигла низкая популярность 51-х контроллеров на форуме. Попытаюсь в несколько приёмов дать толчёк для развития этой ветки.

Просьба не писать комментарии в этой теме, давайте в личку.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Итак, приступим.

1) Использовать будем микроконтроллеры AT89LP2052. Их выпускает фирма Atmel. Они очень похожи на популярные микросхемы AT89C2051. Даташит здесь.

AT89LP2052_4052.pdf

2) Для разработки будем использовать среду Keil. Зайдя на страничку кликаем по кнопочке с надписью "C51

Evaluation Software", затем заполняем регистрационную форму, что даёт нам право скачать демоверсию продукта. Для наших целей этой версии будет вполне достаточно.

3) Для программирования будем использовать программатор и софт к нему от Atmel. Скачать архив со схемой программатора и управляющей программой можно вот отсюда. Размер архива примерно 7Мб. Программатор подключается к LPT порту. Управляющая программа у меня работала под WinXP и Win98 без всяких проблем.

Важно! Программатор не работает от LPT расположенного на дополнительной плате! Только от родного, расположенного на материнской плате компьютера.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Важные отличия МК AT89LP2052 от прежних 51-х контроллеров:

  • выполнение большинства команд за 1 такт
  • тактовая частота до 20МГц
  • порты могут работать на выход как в старом режиме с открытыми коллекторами, так и в новом PUSH-PULL.
  • ОЗУ 256 байт
  • диапазон рабочих напряжений 2.4В...5.5В
  • SPI
  • сторожевой таймер

Это показывает нам, что этот МК по производительности, наполнению встроенным оборудованием подобен МК AVR подобного класса ( ATtiny2313 ). И превосходит последний по объёму ОЗУ, что очень часто бывает немаловажным. 

Благодаря более коротким командам, в те же 2к памяти флеши  помещаются более длинные программы.(У AVR все команды не короче 2-х байт).

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Первый проект по уже сложившейся традиции - светодиодная мигалка. Схема приведена ниже. Не забудьте подключить к питанию и земле выводы 20 и 10 соответственно. Далее будем писать программу под сие чудо.

blink.png

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Программа, для проекта mazzi, поочередного зажигания диодов.

В архиве откомпиленный код.

;  мигаем светодиодами 

LED1 EQU P1.0 ; определяем символьные имена
LED2 EQU P1.1 ; теперь компилятор "знает"  что имени LED1, например, соответствует линия 0 порта Р1
LED3 EQU P1.2 
JMP START ; прыгаем через вектора прерываний на старт.

ORG 0030h ;  явно указываем компилеру с какого адреса разместить программу в памяти программ
; делается, чтобы программа не попала в поле векторов прерывания, об этом позже...

; ну собственно, основной цикл программы, отсюда будем осуществлять вызовы подпрограмм, уход в прерывания и тд. ( в Си соответствует функции Main(void){})
START: ; начинаем главный цикл
CALL BLINK ; вызываем подпрограмму мигания
JMP START ; бесконечно зацикливаем главный цикл

; Создаем подпрограммы
DELAY: ; задержка , содержимое регистров определяет время счета
MOV R3, #5
MOV R2, #0
MOV R1, #0
LOOP: DJNZ R1, LOOP ; "крутим"  каскадный счетчик циклов
DJNZ R2, LOOP
DJNZ R3, LOOP
RET ; выход, возврат по месту вызова

BLINK: ;мигаем, используем подпрограмму DELAY
call DELAY ; пауза
CPL LED1 ;инвертируем Р1,0, зажигаем СИД1
call DELAY ; пауза
CPL LED2 ;инвертируем Р1,1, зажигаем СИД2
call DELAY ; пауза
CPL LED3 ;инвертируем Р1,2, зажигаем СИД3
call DELAY ; пауза
MOV P1, #255 ; записываем в порт все единицы, гасим все
RET ; выход, возврат по месту вызова


END ; конец программы

Преемственность железа у 51 впечатляет, система команд и  адресация внутрикристальных устройств практически у всех сохраняется одинаковая, добавляется только что-то новое!

Тут можно говорить о относительной кроссплатформенности даже на уровне исполняемого кода!

Вышеприведенный пример, кстати, будет работать на любом камне из 51 семейства, без перекомпиляции под другое железо!

Главное тут думаю, понять идеологию данной архитектуры, а она очень продуманная !

1.ZIP

Изменено пользователем mazzi

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

LOOP: DJNZ R1, LOOP ; "крутим" каскадный счетчик циклов

DJNZ R2, LOOP

DJNZ R3, LOOP

В маленьких циклах с целью не плодить метки удобнее использовать символ $ - адрес текущей команды. Например:

DJNZ R1, $

DJNZ R2, $-2

DJNZ R3, $-4

Пока в груди моей бьётся мотор, надежда есть на чистый бензин...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

485.gif

Вот ещё одна схема которую можно использовать для реальных проектов. Это четырёхразрядный семисегментный дисплей с динамической индикацией информации. Для связи с другими устройствами присутствует интерфейс RS-485. При работе на скорости 9600 бод модуль можно удалять от других на расстояние до 1200 метров.

Как известно, RS-485 работает в полудуплексе, то есть модуль не может одновременно и принимать и передавать данные. Для переключения направления информации в канале используется вывод микроконтроллера P3.2. Для приёма подаём на него "0", для передачи "1".

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

А для чего нужны R3 и R4?

Для ограничения тока. В принципе их можно не ставить. Я ставлю на всякий случай.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

А может случиться так, что ток через входы ADM485 нужно будет ограничивать? Или резисторы тут из соображений "помогут, не помогут... по крайней мере, точно не навредят"?

Ссылка на комментарий
Поделиться на другие сайты

Я же говорю, можно не ставить, тем более на входы. Дело в том, что я использую SMD резисторы, а для ручного изготовления прототипа развожу одностороннюю плату, под резисторами можно провести дорожку, поэтому я на них(резисторах) не экономлю. Кроме того, в случае выхода из строя ADM485(что иногда бывает) резисторы могут спасти микроконтроллер.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Насчет цены согласен' date=' но и надежность выше[/quote'] Хотелось бы услышать Ваше обоснование надежности 51х в сравнении с AVR. Что в них такое есть, что они надежнее. У меня на пример и те и другие работают одинаково надежно, не замечал различий, если говорить о штатных режимах.

По теме ветки: обычно намигавшись светодиодами переходят к контроллеру шагового двигателя. Могу предложить схемку, которую делал когда-то для управления одним шаговым и одним двигателем постоянного тока. Сейчас за безнадобностью лежит, но появилась мысль сделать на ней электронный термометр со стрелкой, которая будет управляться шаговым двигателем.

post-78045-0-99379400-1291470842_thumb.jpg

post-78045-0-50861000-1291470940_thumb.jpg

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

Хотелось бы услышать Ваше обоснование надежности 51х в сравнении с AVR. Что в них такое есть, что они надежнее.

Архитектуре уже скоро 30 лет, техпроцесс отработан, хотя это может быть было актуально для 90-х годов прошлого века. Сейчас технологии уже далеко ушли...Но мнение, может и субъективное осталось..., и не только у меня. Да и статистика, за то говорит: В высокоответственных устройствах, чаще видим адуки и инфенеоны, а ведь отнюдь не дураки разрабатывали.

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

Все новое, как правило делается на базе старого и как правило получается лучше и это новое разрабатывают все те же недураки. Объективных причин пока не вижу считать более надежными 51е, думаю это привычка, привязанность. Я к ним тоже тепло отношусь, так как начинал с них. Простая, понятная архитектура. То, что проще устроено по идее должно быть и надежней, но это не объективно. По поводу статистики и других доводов я бы с удовольствием почитал. Если есть какая то инфа, буду рад.

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

post-78645-0-22369800-1291565383_thumb.jpg

Очередное моё творение - простая схема для контроля ветрогенератора. Для измерения скорости оборотов вала генератора используется автомобильный датчик Холла. Используется стандартная схема включения через разъём XP4. Температура генератора измеряется с помощью датчика температуры DS18B20, который подключается к контроллеру через разъём XP3, по схеме с паразитным питанием.

Связь с хостом(главным управляющим контроллером или компьютером) осуществляется через RS-485, разъём XP2.

Питание и связь передаётся через две витые пары. Питание от 12 до 36 вольт постоянного тока.

Прошивка прилагается. В следующий раз выложу схему хоста.

datchiki.zip

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Начинаем работать с Keil.  

Запустим программу и выполним последовательность действий показанных на следующей картинке для создания нового проекта.  

post-78645-0-40693300-1291819928_thumb.gif  

Затем в выпавшем диалоге наберём имя проекта( по английски ).

post-78645-0-58882600-1291819944_thumb.gif   

Следующий диалог предложит выбрать микроконтроллер для разработки. Сначала выбираем производителя

post-78645-0-66092400-1291819952_thumb.gif    

затем конкретный тип микроконтроллера.  

post-78645-0-48427800-1291819964_thumb.gif   

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

post-78645-0-06592800-1291819975_thumb.gif  

Ну вот теперь у нас есть проект. Теперь нужно развернуть дерево проекта кликнув по плюсику.

post-78645-0-76788900-1291819985_thumb.gif  

Полностью развернув дерево проекта мы видим всего один ассемблерный файл STARTUP.A51.

post-78645-0-01634600-1291819997_thumb.gif  

Добавим СИшный файл. Нажимаем CTRL+N и получаем новый файл.

post-78645-0-74123500-1291820006_thumb.gif  

Затем File/Save As и указываем имя файла вместе с расширением! Например proba1.c Добавить файл к проекту можно кликнув по папке Source Group1 правой кнопкой и выбрав из выпадающего меню Add Files to Group

post-78645-0-13444500-1291881393_thumb.gif

После чего в диалоговом окне следует выбрать наш файл proba1.c

post-78645-0-19695100-1291881482_thumb.gif 

наш файл появился в дереве проектов

post-78645-0-09451000-1291881557_thumb.gif

Затем набираем текст программы, как на экране, сохраняем файл и нажав на кнопочку build, компилируем весь проект. На рисунке обведён отчёт о построении проекта без ошибок. 

post-78645-0-05454500-1291881608_thumb.gif

Отдельно показываю эту кнопочку build.

post-78645-0-49527200-1291824357_thumb.gif  

Для изменения опций проекта сделаем следующее.

post-78645-0-72928600-1291831272_thumb.gif

Для правильной симуляции следует выбрать опции проекта, как на следующем рисунке.  Частоту кварца следует поставить такую, какая у вас в схеме.

post-78645-0-08432300-1291831285_thumb.gif

Для того, чтобы во время компиляции создавался HEX-файл(прошивка), выберите опции показанные на следующем рисунке.

post-78645-0-55175100-1291835483_thumb.gif

Полученную прошивку можно с помощью программатора "залить" в микроконтроллер.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Начинаем работать с Keil. Продолжение 1.

В нашем проекте мы указывали целевой микроконтроллер, но это влияет только на симулятор. Поэтому мы должны сами прописать в исходнике, для какого МК мы будем писать. Для этого нужно дописать в начале программы:

#include <at89lp2052.h>

Эта строка приказывает препроцессору включить в текст вашей программы всё содержимое файла at89lp2052.h

Если вдруг окажется, что у вас нет такого файла, то можете воспользоваться моим, я его присоединил к этому посту. В этом случае нужно разместить его в директории Keil , например как у меня

C:\Keil\C51\INC\Atmel\

Приведу полный текст программы для простейшей мигалки которая выкладывалась в одном из первых постов.

/**************************************************
--                                       		-- 
--  пробная программа для переключения лампочек  -- 
--  МК................AT89LP2052         		-- 
--  кварц.............12МГц                  	-- 
--											     --
**************************************************/

#include <at89lp2052.h>

// определяем выводы для управления лампами 
#define  LED1  P1_0
#define  LED2  P1_1
#define  LED3  P1_2

// константа определяющая длительность одного такта 
#define  SEK_1 0xffff

// количество тактов световых эффектов
#define MAX_FAZA  3

// объявляем глобальные переменные
idata unsigned int   t_1s=0; // переменная для выдержки паузы между переключениями
idata unsigned char  faza=0; // переменная определяет текущее состояние лампочек 

//--------------------------------------------
//  основная функция программы
//--------------------------------------------
void main ( void ) {
    while ( 1 ) { // бесконечный основной цикл программы 
      	if ( t_1s ) t_1s--; // уменьшаем переменную, пока она не равна нулю 
  	else {
       	t_1s = SEK_1; // перезагружаем её

	       if ( faza < MAX_FAZA ) faza++;
	       else faza = 0;
  	}
// переключаем лампочки
  	switch ( faza ) {// множественный выбор одного из действий 
  	case 0: LED1 = 1; LED2 = 1; LED3 = 1; break;
  	case 1: LED1 = 0; LED2 = 1; LED3 = 1; break;
  	case 2: LED1 = 1; LED2 = 0; LED3 = 1; break;
  	case 3: LED1 = 1; LED2 = 1; LED3 = 0; break;
  	}
    }
}

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

post-78645-0-56369900-1291916713_thumb.gif

Файл проекта во вложении. Так что можете потренироваться сами.

at89lp2052.zip

proba.zip

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Спасибо за полезный материал!

Раньше немного сталкивался с программированием AVR контролллеров, сейчас есть необходимость освоить 8051.

Посоветуйте пож-та, какую отладочную плату лучше купить для работы с контроллером в корпусе 32 PIN QFN?

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

мази чтото гдето мне попадалась инфа что 8051 выпускались в СССР по лицензии но немогу нигде наити .если выпускались то под каким названием и чем они отличались

все бы было шорошо если бы небыло так ужасно

Ссылка на комментарий
Поделиться на другие сайты

Назывались они КМ1816ВЕ31 и КМ1816ВЕ51. Отличие в том, что в 31-й не было памяти программ, а в 51-й было 4 килобайта.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...

Решил спросить здесь, чтобы не плодить темы. Итак. Попала в руки демо плата с C8051F020. Поставил Silicon Labs IDE, покурил даташит, подключил светодиод, написал пару строк кода, прошил иии... И ничего, МК не подает признаков жизни. Только светодиод слегка тлеет при подключении между GND и любым выводом любого порта. Код вот такой:

/////////////////////////////////////
//  Generated Initialization File  //
/////////////////////////////////////
#include "compiler_defs.h"
#include "C8051F020_defs.h"
void main(){
   P0MDOUT   = 0xFF;

   P0 = 0xff;
   P1 = 0x00;
   P2 = 0x00;
   P3 = 0x00;
  while(1){
  }
}

По моему пониманию, должны были включиться все вывода порта Р0. На практике же ничего не происходит. В чем я ошибся?

Ссылка на комментарий
Поделиться на другие сайты

вы бы еще Z80 откопали. Была бы некротема...

на самом деле нонешние 51-е уже далеко не то что было раньше. Они стали быстрее, обзавелись некоторой модной периферией, инкапсулировали флеш и остальную память на кристалл, но при этом сохранили тяжелое наследие прошлого в виде древнего ядра, хоть и слегка подпиленного. Как мне кажется семейство сохранили только для промышленных девайсов, которым необходимо сохранить совместимость только из экономических соображений. Больше пользы в них никакой. Потому как есть куда более продвинутое во всех смыслах, современное и дешовое решение - STM8/32. Копеечный чип, копеечный программатор (и отладчик!), продвинутое ядро и периферия, простой кодинг. Вы все еще хотите потратить время на освоение МК51?

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...