Главная » Микроконтроллеры
Призовой фонд
на октябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Отладочная плата на AT89S52 или изучаем МК с нуля

В один прекрасный момент случилось то, что должно было случиться еще очень давно, это изучение микроконтроллеров серии MCS-51 на ассемблере. В начале этого пути упоминались AT89C4051, но они мне показались не функциональными сточки зрения прошивки, так как все программаторы, которые я встречал в сети, были либо под COM-порт, либо  LPT. Тогда я полез в каталог данного семейства и начал смотреть подобные микроконтроллеры. В итоге нашёл AT89S51,  AT89S52, AT89S53 – это тот же самый AT89C4051, но у серии S есть ISP и они имеют большее количество памяти и портов ввода вывода.  Поиски программатора тоже были не из легких, но в скорее я нашёл то, что искал – это был USBasp  с модифицированной прошивкой и новым софтом. Вот такое вот вступление, теперь же рассмотрим сам программатор и отладочную плату с некоторыми простыми примерами.

Программатор для AT89S52

Схема программатора

Программатор поддерживает AT89S51, AT89S52, AT89S53, AT89S8252, AT89S8253, AT89S2051, AT89S4051 + еще много разных камней от AVR . Схему собирать как есть без выкидывания деталей, хотя я не ставил конденсаторы на обвязку кварца, но это уже другой разговор.

Обвязка МК перед программированием

Здесь вывод 31 должен быть подтянут к + питания (лог. единица). Этот вывод дает знать, из какой памяти выполнять программу МК, если на выводе 31 присутствует логический ноль, то контроллер работает с внешней памятью, а если иначе, то с внутренней. Так как у меня нету внешней памяти я работаю с внутренней. Выводы Р1.5-Р1.7,RST это ISP  для программирования МК, все также как и у AVR.  Если вдруг не заработает, то есть не будет определяться МК программатором то за место R1  нужно поставить конденсатор на 0.1мкф как у автора. Почему я поставил резистор? Да потому что у меня не было под рукой мелкого конденсатора, + я еще дополнил данный вывод сброса кнопкой.

По программатору, думаю все понятно.

Отладочная плата для AT89S52

Начнем со схемы

Отладочная плата для AT89S52

Прежде всего, хочу сказать, для чего я делал такую плату:

  1. Отладка простых программ с использованием светодиодов (помигать, разработка световых эффектов и тп.).
  2. Работа с кнопками (лепить матричную клавиатуру было не охота, так что если нужна такая клавиатура, то можно использовать один порт для периферии).
  3. Отладка программ с использованием последовательного порта (UART).
  4. Изучение основ семейства AT89X51

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

Рассмотрим теперь несколько примеров программ на ассемблере.

Стандартный Hello World  на ассемблере

cseg  at   0  // абсолютный сегмент в области памяти программ

jmp   Start  //переход к Start 

Start:       //метка начала программы

setb p2.0   //устанавливаем  в бит p2.0  лог. ед.

LoopMain:   //главный цикл     

               lcall   DriveLed  //вызов функции мигания светодиода

               lcall   Delay    //вызов функции задержки

               sjmp  LoopMain   //конец  главного цикла

;********************************************************

Delay: //функция задержки

mov     r3,#0  //пишем в регистр r3 ноль

LoopDelay2:   // цикл задержки 2

mov  r2,#0   //пишем в регистр r2 ноль

LoopDelay1:  //цикл задержки 1

    Nop   //нет команд

    nop

    nop

    nop

    nop

    nop

    nop

    nop

    nop

    nop

    inc     r2  //инкрементируем r2

    cjne    r2,#255,LoopDelay1  // если r2 не равно 255 переходим к метке цикл задержки 1, если равно то идем дальше

    nop

    inc     r3  // инкремент r3

    cjne    r3,#20,LoopDelay2  //если r3 не равно 20 то переходим к метке цикл задержки 2, если равно то идем дальше

    nop

    ret // возврат из подпрограммы

;********************************************************

DriveLed: //функция мигания светодиодом

cpl p2.0 //инвертируем бит р2.0

ret      //возврат из подпрограммы

;********************************************************

end  //конец главной программы 

В этой программе все просто, если непонятно о чем идет речь, то тогда лучше сначала просто открыть справочник и почитать про команды. Я пользуюсь этим

Теперь сделаем бегущий огонь.

Данная программа реализуется посредством записи в выбранный регистр (у меня это аккумулятор А ) числа FЕ это 1111 1110 и при выполнении команды rr A (сдвига содержимого аккумулятора в право )  получаем 0111 1111, и так далее. Аналогично можно сделать сдвиг влево.

Изменения в программе были внесены здесь

Изменения в программе были внесены здесь 
Start:
mov A, #0feh //записать в аккумулятор #0feh, 1111 1110
и в функции  DriveLed
DriveLed:
 rr A //сдвиг в право
mov P2, A  //записать в порт Р2 содержимое аккумулятора А
ret

Все остальные куски программы такие же. Здесь тоже нет ни чего сложного.

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

Здесь поступим следующим образом

Start: 
mov A,  #0feh	
mov r4, #00000000b		  		   		   
LoopMain:
m1:	 
	setb    p0.0   //установили бит(на нем висит кнопка)
	mov c,  p0.0 //записали в регистр признаков С
              jc m2	       //переход к м2 если С=1
	inc r4           // инкремент  r4       
m2:
cjne r4, #1, w	 // если r4 не равен 1 то идем к метке w, если равен то дальше
call DriveLed
lcall   Delay
jmp m1
w: 
cjne r4, #2, m1	 // если r4 не равен 2 то идем к метке м1, если равен то дальше
call DriveLed1
lcall   Delay
sjmp  LoopMain

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

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Микроконтроллерat89s51,52,531 Поиск в LCSCВ блокнот
Стабилитрон3.6 В2 Поиск в LCSCВ блокнот
Кварц4 МГц1 Поиск в LCSCВ блокнот
Кварц12 МГц1 Поиск в LCSCВ блокнот
Светодиодылюбые14 Поиск в LCSCВ блокнот
Конденсатор33 пФ2 Поиск в LCSCВ блокнот
Резистор
10 кОм
7 Поиск в LCSCВ блокнот
Резистор
68 Ом
2 Поиск в LCSCВ блокнот
Резистор
1.5 кОм
1 Поиск в LCSCВ блокнот
Резистор
330 Ом
12 Поиск в LCSCВ блокнот
Кнопка без фиксациилюбые5 Поиск в LCSCВ блокнот
РазьемUSB B1 Поиск в LCSCВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3.5 Проголосовало: 1 чел.

Комментарии (18) | Я собрал (0) | Подписаться

0
Александ #
Зачем использовать AT89S52 когда есть AT89C51ED2? Он программируется через COM-порт и никакие программаторы не нужны. На оф. сайте есть вся инфа
К тому же PonyProg может программировать AT89S52 и программатор для пони значительно проще - всего то несколько стабов и резисторов
Ответить
0

[Автор]
while(1) #
У меня нету таких, и COM-порта нету. USBasp паяется за вечер, так что смысла особого не вижу загоняться про ком порт.
Ответить
+1
optima #
Сдвиг в право нужно делать с переносом rrc, тогда ноль с младшего разряда будет переходить в старший автоматом.
Ответить
0
virus-error #
COM порт тоже собирается за вечер, зато будет еще и COM порт
Ответить
0
Олег #
USBasp как было сказанно паяется за вечер, который в миллион раз полезнее иметь чем COM port.
Ответить
0
vovan161 #
Какие фузы выставлять для управляющей atmega8 ?
Ответить
0
id-rad #
Чёт исправная плата с этой прошивкой и дровами даже под ХР не определяется.
Может вместе с прошивкой и фюзы надо править?
Ответить
0
vovan161 #
Спасибо, прогер определился, но не видит мк, может из-за того что управляющая микросхема ftmega8A-PU?
Ответить
0

[Автор]
while(1) #
Нет у меня такая же. Какой у вас МК из 51 серии? Обвязка микроконтроллера должна быть как на третьем рисунке сверху. Попробуйте еще замените R1 на конденсатор 0.1мкФ.
Ответить
0
vovan161 #
Кондер на 0.1 мкФ не помог, а МК который хочу прошить такая-же atmega8A-PU. Хочу этот прогер использовать на ноуте!
Ответить
0
vovan161 #
Спасибо автору за ответы! Всё заработало, надо было кварц подсоединить, МК уже прошивался!
Ответить
0

[Автор]
while(1) #
Так этот прогер заточен специально под 51, я не пробовал им шить простые аврки. Если надо шить простые аврки, то надо прошить юсбасп обычной прошивкой и все.
Ответить
0

[Автор]
while(1) #
Весь необходимый софт и прошивки я приложил архивом к статье. 8051 USB.zip там прошивка, драйвера, ПО для программатора
Ответить
0
sdk #
Спасибо большое, особо за программатор, очень универсален, особенно сама программа -позволяет работать с любым портом компа! Дальше тему развивать будете?
Ответить
0

[Автор]
while(1) #
Можно и дальше идти, но я новичок в Ассемблере. Поэтому более серьезные проекты не получится писать, но на Си у меня больше возможностей. В принципе я думаю можно будет по подключать всякую разную периферию (датчики, ацп, цап, память, экраны, и т.п.) В ближайшее время могу подготовить статью о задержках (программная и аппаратная) и работу с UART данного семейства контроллеров, если интересно то пишите...
Ответить
0
Stas #
Конечно, было бы неплохо продвинуться в освоении 51 серии. В настоящее время таких доступных статей по этим микроконтроллерам нет. Да и доступной литературы, кроме А. Фрунзе тоже нет.
Собрал за выходной модуль, прошил контроллер файлом 33.hex, и все заработало. Теперь буду разбираться с программой.
Большое спасибо автору за очень толковую статью и приложения к ней.
Ответить
+1

[Автор]
while(1) #
Могу посоветовать книгу "Белов А.В. - Конструирование устройств на микроконтроллерах" там как раз об этих камнях написано, с примерами и схемами и кодом. В общем надумал один девайс, так вот если все норм. пойдет то ссылку тут дам.
Ответить
0
BDS #
Китайцы сделали на этой микросхеме детский конструктор. http://ru.aliexpress.com/item/LDE-Shake-Stick-Flash-Stick-AT89S52-DIY-Kit-Magic-Wand-Blank-PCB-board/32496601767.html
Позволяет "рисовать в воздухе" различные символы. Хотел перепрограммировать. Но почитав желание стало пропадать. Мне даже ассемблерировать нечем (нет транслятора). Да и в программе их я навряд ли что то пойму. А хотелось изменить только графику, зашить что нибудь другое вместо китайских иероглифов.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
ELM327 OBD II — адаптер с поддержкой CAN МиниПК MK809V - 4 ядра, Android 4.4.2
вверх