Оглавление:
- Шаг 1. Требования
- Шаг 2: создание программиста
- Шаг 3: Установка программного обеспечения для программистов
- Шаг 4: Программирование чипа
- Шаг 5: Сборка
- Шаг 6: Пояснение к коду
- Шаг 7: Дополнительные ресурсы
Видео: Введение в программирование 8051 с помощью AT89C2051 (приглашенная звезда: Arduino): 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
8051 (также известный как MCS-51) - это микроконтроллер 80-х годов, который остается популярным и сегодня. Современные микроконтроллеры, совместимые с 8051, доступны от множества поставщиков, всех форм и размеров, а также с широким спектром периферийных устройств. В этом руководстве мы рассмотрим микроконтроллер AT89C2051 от Atmel.
AT89C2051 - это небольшой (2 Кбайт флэш-памяти, 128 байт ОЗУ), дешевый (~ 1,40 доллара за чип) микроконтроллер.
- 2.7-6V работа
- 15 линий ввода / вывода
- 2 таймера (16 бит)
- Внутренние и внешние прерывания
- UART
- Встроенный аналоговый компаратор
- До 2MIPS при тактовой частоте 24 МГц
Шаг 1. Требования
Требования:
- ПК с Linux (требуется программное обеспечение: Arduino IDE, git, make, sdcc)
- Arduino UNO
- Микросхема AT89C2051 (корпус DIP20)
- 20-контактный разъем ZIF
- Оптопара (желательно MOSFET-выход)
- Щит для прототипирования Arduino
- Блок питания 12 В
- Источник питания 5В
- Кварцевый генератор 16 МГц
- 2x 30 пФ конденсатор
- Конденсатор 100 нФ
- Диод (например: 1N400X)
- Резисторы (1К, 3К3)
- Протоборд
- Джемперы
- Медная проволока
Проверьте наличие необходимого программного обеспечения:
который python3
которые делают какой sdcc какой git
Шаг 2: создание программиста
Этот раздел будет кратким, поскольку некоторое время назад я построил свой программный щит. Прилагаю схему и изображения собранной платы. Схема в формате PDF находится в репозитории.
Вам нужно будет запрограммировать плату программиста:
1. Клонируйте репозиторий.
git clone
2. Откройте файл AT89C2051_programmer / AT89_prog / AT89_prog.ino в среде Arduino IDE.
3. Создайте и загрузите скетч из Arduino IDE.
Шаг 3: Установка программного обеспечения для программистов
1. Создайте виртуальную среду Python.
python3 -m venv venv
. Venv / bin / активировать
2. Установить at89overlord. at89overlord - программист с открытым исходным кодом для микросхемы AT89C2051, написанный мной. Его исходный код можно найти здесь.
pip install at89overlord
3. Проверьте установку.
at89overlord -h
Шаг 4: Программирование чипа
1. Клонируйте простой проект мигания.
cd ~
git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051 /
2. Соберите приложение.
делать
3. Подключите Arduino к ПК, подключите питание 12 В, вставьте микросхему AT89C2051 в гнездо ZIF.
4. Найдите последовательный порт Arduino.
ls / dev / tty *
5. Загрузите в чип встроенный файл IntelHex. Если ваш порт Arduino отличается от / dev / ttyACM0, вы должны передать правильное значение с параметром командной строки -p.
at89overlord -f./hello.ihx
Шаг 5: Сборка
Соберите схему по схеме. PDF-версию можно найти в репозитории.
Вы должны увидеть зеленый светодиод, мигающий с частотой около 0,5 Гц.
Шаг 6: Пояснение к коду
#включают
#включают
Начнем с включения заголовка AT89X051 из sdcc. Он содержит макросы для взаимодействия с регистрами, как если бы они были переменными. Мы также включаем stdint.h, который содержит определения целочисленных типов uint8_t и uint16_t.
// Предполагая, что частота генератора 16 МГц
#define INTERRUPTS_PER_SECOND 5208
Прерывание возникает при переполнении Timer0. Он настроен как один 8-битный таймер, поэтому это происходит каждые 2 ^ 8 циклов процессора. Один цикл процессора занимает 12 тактов, и, таким образом, мы получаем 16000000/12/2 ^ 8 = 5208,33333.
изменчивый uint8_t led_state = 0;
изменчивый uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Объявляем переменные контроля состояния светодиода и счетчика прерываний.
void Timer0_ISR (void) _interrupt (1) {
timer_counter--; если (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
Каждый раз, когда Timer0 переполняется, счетчик уменьшается. Если он равен нулю, он сбрасывается, и состояние светодиода изменяется. Это происходит примерно раз в секунду, в результате чего частота мигания светодиода составляет ~ 0,5 Гц.
int main () {
TMOD = 0x3; // Режим таймера - 8 бит, без предделителя. freq = OSCFREQ / 12/2 ^ 8 TL0 = 0; // Очистить счетчик TH0 = 0; // Очистить регистр TR0 = 1; // Устанавливаем таймер на запуск. ЕТ0 = 1; // Устанавливаем прерывание. EA = 1; // Устанавливаем глобальное прерывание. в то время как (1) {если (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}
Мы настраиваем модуль таймера и ждем изменений в переменной управления состоянием светодиода. TMOD - это регистр управления режимом таймера. TL0 и TH0 - это регистры управления Timer0. ET0 - это бит включения таймера0 в регистре управления таймером (TCON). TR0 и EA - это биты в регистре разрешения прерывания (IE).
Шаг 7: Дополнительные ресурсы
- Таблица данных AT89C2051:
- Компилятор C для малых устройств (sdcc):
- 8051 ресурсы:
- Репозиторий программатора AT89C2051:
- Репозиторий hello-8051:
Рекомендуемые:
Программирование любой платы / модуля ESP8266 с помощью микропрограммы AT-команд: 5 шагов
Программирование любой платы / модуля ESP8266 с помощью микропрограмм AT-команд: Каждый модуль и плату ESP8266 можно запрограммировать разными способами: Arduino, python, Lua, AT-команды, и многие другие, вероятно … Первые три из них лучше всего подходят для автономной работы, микропрограмма AT предназначен для использования ESP8266 в качестве модуля или для быстрого тестирования с TTL RS232 c
Программирование микроконтроллеров с помощью программатора USBasp в Atmel Studio: 7 шагов
Программирование микроконтроллеров с помощью программатора USBasp в Atmel Studio: Привет, я прочитал и изучил множество руководств, в которых рассказывается, как использовать программатор USBasp с IDE Arduino, но мне нужно было использовать Atmel Studio для задания в университете, и я не мог найти никаких руководств. После исследования и прочтения многих р
Введение в программирование Raspberry Pi без ручного кодирования: 3 шага
Введение в программирование Raspberry Pi без ручного кодирования: Привет, это руководство покажет вам, как превратить Raspberry Pi в полностью программируемое устройство автоматизации, совместимое с графически ориентированным языком программирования для ПЛК, называемым функциональной блок-схемой (часть стандарта IEC 61131-3). Это может быть
Введение в распознавание голоса с помощью Elechouse V3 и Arduino: 4 шага (с изображениями)
Введение в распознавание голоса с помощью Elechouse V3 и Arduino: Привет …! Технология распознавания голоса применяется уже несколько лет назад. Мы до сих пор помним, какое волнение было у нас, когда мы разговаривали с первым iphone с поддержкой Siri. С тех пор устройства голосового управления выросли до очень продвинутого уровня, beyo
Рождественская звезда с Arduino и светодиодами RGB: 5 шагов (с изображениями)
Рождественская звезда с Arduino и светодиодами RGB: Привет! Мы - новосибирская община Ардуино из глубокой заморозки Сибири. Чтобы немного согреться, мы решили сделать красивые сияющие и мигающие рождественские звезды. Обязательно посмотрите демонстрационное видео