Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
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: