Симулятор 8051 (MCS-51)
Пишете на ассемблере — программа собирается и выполняется прямо в браузере: регистры, внутреннее ОЗУ, порты со светодиодами и кнопками, таймеры, последовательный порт с терминалом, прерывания. Пошагово или на полной скорости, с точкой останова и подсчётом машинных циклов.
Процессор
Порты
Щёлкните по разряду — он переключится: так задаются входы (кнопки).
Регистры специальных функций
Последовательный порт
Загрузка готовой прошивки
Внутреннее ОЗУ 00…7F
Как пользоваться
- Выберите пример или напишите свою программу. Кнопка Собрать (или Ctrl+Enter) переводит текст в машинный код; при ошибке будет указан номер строки.
- Пуск запускает выполнение, Шаг выполняет одну команду, +10 — десять. Справа обновляются регистры, порты и содержимое памяти.
- Разряды портов можно переключать мышью — так имитируются кнопки и датчики на входах.
- В поле «останов на адресе» впишите адрес в шестнадцатеричном виде: выполнение остановится, когда счётчик команд дойдёт до него.
- Всё, что программа отправит в последовательный порт, появится в терминале; поле ввода отправляет строку в приёмник.
Что поддерживается
| Узел | Подробности |
|---|---|
| Набор команд | Полный набор MCS-51: пересылки, арифметика с флагами CY, AC, OV и признаком чётности, умножение и деление, десятичная коррекция, логика, сдвиги, битовые операции, все переходы, вызовы, стек, MOVX и MOVC |
| Память | 64 КБ памяти программ, 128 байт внутреннего ОЗУ с битовой областью 20H…2FH, четыре банка регистров, 64 КБ внешнего ОЗУ через DPTR и @Ri |
| Порты | P0…P3, побитная адресация, переключение разрядов мышью для имитации входов |
| Таймеры | Таймер 0 и таймер 1, режимы 0, 1 и 2 с автоперезагрузкой, флаги TF0 и TF1, биты запуска TR0 и TR1 |
| Последовательный порт | Режим 1 со скоростью от таймера 1, флаги TI и RI, приём и передача занимают реальное время в машинных циклах |
| Прерывания | Внешние 0 и 1, таймеры 0 и 1, последовательный порт; векторы 03H, 0BH, 13H, 1BH, 23H, биты IE и возврат по RETI |
| Ассемблер | Метки, ORG, EQU, BIT, DB, DW, DS, END, имена регистров и битов, числа в форматах 25H, 0x25, 11011b, 'A' |
Точность модели
Кодировка команд сверена с настоящим ассемблером sdas8051 из пакета SDCC: 116 команд, охватывающих все группы набора, собраны обоими ассемблерами и сравнены байт в байт — расхождений нет. Поведение процессора проверяется 55 тестами: флаги сложения и вычитания, десятичная коррекция, умножение и деление с остатком, признак чётности, переключение банков регистров, битовая область ОЗУ, стек и вложенные вызовы, таблицы через MOVC, внешнее ОЗУ, переполнение таймеров в двух режимах, приём и передача по UART, вызов обработчика прерывания и возврат.
Время считается в машинных циклах: команда занимает от одного до четырёх циклов, а цикл равен двенадцати тактам кварца — отсюда пересчёт в миллисекунды в панели процессора. Задержки, написанные циклами DJNZ, дают ровно те же числа, что и на настоящем кристалле.
Чего нет
Не моделируются: таймер 2 и расширенное ОЗУ старших моделей (8052), режимы 0, 2 и 3 последовательного порта, работа портов на физическом уровне (подтяжки, нагрузочная способность, режим «квази-двунаправленного» входа), сторожевой таймер и режимы пониженного потребления, а также внешняя память программ и мультиплексирование шины на P0 и P2. Точки останова задаются по адресу, а не щелчком по строке.
Частые вопросы
Почему при записи в порт светодиод «горит» нулём?
Так устроена схемотехника 8051: выход притягивает линию к земле, поэтому светодиод подключают анодом к питанию, и активный уровень получается нулевым. Отсюда и привычная запись CLR P1.0 для включения.
Как получить нужную задержку?
Считайте циклы: команда DJNZ занимает два машинных цикла, значит вложенный цикл на 250 повторов даёт 500 циклов, то есть 500 микросекунд при кварце 12 МГц. Панель процессора показывает и циклы, и время — можно проверить прямо на ходу.
Можно ли загрузить готовую прошивку?
Да, вставьте содержимое HEX-файла в поле загрузки — программа разберёт формат Intel HEX и проверит контрольные суммы. Исходник при этом не нужен, но и подсветки строк не будет.
Чем 8051 отличается от AVR и PIC?
Это архитектура начала восьмидесятых с аккумуляторной моделью, битовой адресацией и внешней шиной. Ядро оказалось настолько удачным, что до сих пор живёт внутри сотен современных микросхем — от радиомодулей до контроллеров USB.
Смотрите также
- Симулятор PIC16F84A и симулятор AVR ATmega8 — соседние архитектуры
- Симулятор цифровых схем — что стоит вокруг микроконтроллера
- Конструктор регистра — собрать значение TMOD или SCON по разрядам
- HEX · DEC · BIN и таблица ASCII
- PIC, AVR — разделы по микроконтроллерам