Программирование MCS51 STC89xx Tue, October 15 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

STC89xx Печать
Добавил(а) microsin   

Эта серия имеет минимальные отличия от оригинальной архитектуры MCS51. Цоколевка корпусов совпадает со старыми микроконтроллерами 8031, 8051, 8052, 8058, I8751, AT89C51, и т. п., что облегчает апгрейд существующих готовых систем. Т. е. можно вынуть из системы старый микроконтроллер и заменить его на новый, получив дополнительные возможности и двукратное повышение производительности, иногда при этом даже не потребуется перекомпилировать исходное программное обеспечение.

Серия STC89xx представляет 8-битные микроконтроллеры, которое полностью совместимы по системе команд с индустриальным стандартом серии микроконтроллеров 80C51. Имеется 64K байт памяти flash для программы приложения, которая может программироваться в рабочей системе (In-System-Programming, ISP). Есть также возможность самопрограммирования из программы пользователя (In-Application-Programming, IAP). ISP позволяет пользователям обновлять программу и данные, не извлекая микроконтроллер из системы. IAP по сути позволяет выполнять то же самое, но эта технология осуществляет перезапись памяти кода и/или данных, когда приложение выполняется в системе. Для приложения предоставляется 1280 или 512 байт встроенной в кристалл памяти RAM, что достаточно для многих встраиваемых приложений. Пользователь может конфигурировать микроконтроллер (MCU), запуская программу в режиме 12 тактов на 1 машинный цикл, получая при этом ту же самую низкоуровневую аппаратную архитектуру тактирования, как и оригинального устройства 80C51 других вендоров, либо можно сконфигурировать тактирования на 6 тактов на один машинный цикл, удваивая тем самым производительность ядра. Серия STC89xx сохраняет все аппаратные возможности стандартного устройства 80C51. Дополнительно имеется в распоряжении дополнительный порт ввода/вывода (P4), Timer 2, 8 источников прерывания с 4 уровнями приоритета, встроенный в кристалл генератор, и однократно разрешаемый сторожевой таймер (Watchdog Timer).

Список возможностей серии STC89xx:

• Улучшенное ядро 80C51, которое по выбору может работать на скорости 6T (6 тактов на машинный цикл, ускорение в 2 раза) или 12T (12 тактов на машинный цикл, как на старой архитектуре MCS51).
• Рабочий диапазон напряжений питания: 3.3..5.5V (серия STC89C) или 2.0..3.6V (серия STC89LE).
• Рабочий диапазон тактовых частот: 0..48 МГц (режим 12T) или 0..24 МГц (режим 6T).
• Встроенная в кристалл память программ FLASH размером 4/8/13/16/20/32/64K, с гибкой возможностью перепрограммирования ISP/IAP (в зависимости от модели микроконтроллера).
• Встроенная в кристалл память ОЗУ (512 байт основная RAM и 1280 байт дополнительная RAM).
• Можно адресовать до 64K байт внешней RAM.
• Можно адресовать до 64K байт внешней памяти.
• Два указателя (DPTR) для ускорения перемещения данных.
• Три 16-битных таймера/счетчика. Timer 2 может считать вверх и вниз, с возможностью вывода программируемой частоты на ножке порта P1.0.
• 8 адресов векторов прерываний с 4 уровнями приоритета.
• Улучшенный UART с аппаратным распознаванием адреса, функцией детектирования ошибки фрейма и собственным генератором скорости.
• Один 15-битный сторожевой таймер с 8-битным прескалером (с функцией однократного разрешения).
• Интегрирован супервизор сброса MAX810.
• Три режима управления питанием: normal mode (обычный рабочий режим), idle mode (режим ожидания), power-down mode (режим выключения).
• Низкая генерация помех (EMI): запрет генерации ALE.
• Из режима power down микроконтроллер можно разбудить прерываниями INT0 (ножка порта P3.2), INT1 (ножка порта P3.3), T0 (ножка порта P3.4), T1 (ножка порта P3.5), RXD (ножка порта P3.0).
• Дополнительные источники прерывания цифровому сигналу: INT2 (ножка порта P4.3), INT3 (ножка порта P4.2).
• Максимум доступно до 39 программируемых портов ввода/вывода (GPIO).
• Имеется четыре 8-битных двунаправленных порта; дополнительный 4-битный порт P4 доступен в корпусах PLCC-44 и LQFP-44.
• Рабочий диапазон температур: -40..+85°C (индустриальное исполнение) / 0..75°C (коммерческое исполнение).
• Типы корпусов: PQFP-44, LQFP-44, PDIP-40, PLCC-44.

[Внутренняя организация]

Ядро CPU серии STC89xx полностью совместимо со стандартным микроконтроллером 8051, с поддержкой всех мнемоник инструкций и сохранением совместимости по двоичному коду. Серия STC89xx может выполнять код в 2 раза быстрее, чем стандартный 8051 (режим тактирования 6T) или с обычной скоростью (режим тактирования 12T). Улучшение производительности отдельных программ зависит от реально используемых инструкций.

STC89xx block diagram

Рис. 1. Блок-диаграмма STC89xx.

[Таблица выбора микроконтроллеров STC89xx по общим параметрам]

Тип VCC, V FLASH,
байт
SRAM,
байт

TIMER UART DPTR EEPROM,
байт
STC89C51RC 3.3-5.5 4K 512 3 1 2 4K
STC89C52RC 3.3-5.5 8K 512 3 1 2 4K
STC89C53RC 3.3-5.5 13K 512 3 1 2 /
STC89LE51RC 2.0-3.6 4K 512 3 1 2 4K
STC89LE52RC 2.0-3.6 8K 512 3 1 2 4K
STC89LE53RC 2.0-3.6 13K 512 3 1 2 /
STC89C54RD+ 3.3-5.5 16K 1280 3 1 2 45K
STC89C58RD+ 3.3-5.5 32K 1280 3 1 2 29K
STC89C516RD+ 3.3-5.5 61K 1280 3 1 2 /
STC89LE54RD+ 2.0-3.6 16K 1280 3 1 2 45K
STC89LE58RD+ 2.0-3.6 32K 1280 3 1 2 29K
STC89LE516RD+ 2.0-3.6 61K 1280 3 1 2 /

У всех перечисленных в таблице моделей имеется прерывание по снижению VCC ниже допустимого уровня (INT Low VCC), 4 аппаратных внешних прерывания могут выводить MCU из режима сна (power down mode), сторожевой таймер (WDT).

Дополнительные аппаратные функции, которые не реализованы: PCA, PWM, D/A, ADC, настройка нижнего предела срабатывания прерывания порога допустимого напряжения питания, специальный таймер для пробуждения.

[Цоколевка, описание выводов]

STC89xx PDIP40 pinout STC89xx PQFP44 LQFP44 pinout STC89xx PLCC44 pinout

Мнемоника PDIP40 QFP44 PLCC44 Описание
P0.0 - P0.7 39..32 37..30 43..36 Port0, 8-битный двунаправленный порт ввода/вывода (GPIO) со встроенными резисторами pull-up. Этот порт также мультиплексирован с аппаратной функцией вывода младшего байта шины адреса и шины данных, когда осуществляется доступ к внешней памяти программ и данных.
P1.0 - P1.7 1..8 40..44,
1..3
2..9 Port1, 8-битный двунаправленный порт ввода/вывода (GPIO) со встроенными резисторами pull-up. Когда в Port1 записываются единички, мощная подтяжка pull-up включается драйверами CMOS только на 2 периода тактовой частоты, и затем подключается слабая подтяжка pull-up резисторами, подтягивая уровень вывода порта к лог. 1. P1.0 также используется как источник сигнала события для Timer2, или выводит выходной сигнал Timer2. P1.1 также используется как один из источников сигнала управления захватом для Timer2.
P1.0/T2 1 40 2
P1.1/T2EX 2 41 3
P2.0 - P2.7 21..28 18..25 24..31 Port2, 8-битный двунаправленный порт ввода/вывода, со встроенными резисторами pull-up. Кроме GPIO, этот порт имеет мультиплексируемую аппаратную функцию вывода старшего байта адреса, когда осуществляется доступ к внешней памяти программ и данных.
P3.0/RXD 10 5 11 Port3, 8-битный двунаправленный порт ввода/вывода, со встроенными резисторами weak pull-up. Когда в Port3 записываются единички, мощная подтяжка pull-up включается драйверами CMOS только на 2 периода тактовой частоты, и затем подключается слабая подтяжка pull-up резисторами, подтягивая уровень вывода порта к лог. 1. Port3 также поддерживает множество различных аппаратных функций. Ножки P3.0 и P3.1 работают как вход приемника и выход передатчика для UART. P3.2 и P3.3 работают как источники внешнего прерывания /INT0 и /INT1. P3.4 и P3.5 работают как источники событий индивидуально для Timer0 и Timer1. P3.6 также работает как аппаратный сигнал записи /WR, активизируемый при доступе к внешней памяти. P3.7 работает также как аппаратный сигнал чтения /RD, активизируемый при доступе к внешней памяти.
P3.1/TXD 11 7 13
P3.2/INT0 12 8 14
P3.3/INT1 13 9 15
P3.4/T0 14 10 16
P3.5/T1 15 11 17
P3.6/WR 16 12 18
P3.7/RD 17 13 19
P4.0   17 23 Port4, расширенный порт ввода/вывода, который работает наподобие Port1. Port4 доступен только для вариантов корпусов LQFP44, PLCC44. P4.2 и P4.3 работают как источники внешнего прерывания /INT3 и /INT2.
P4.1   28 34
P4.2/INT3   39 1
P4.3/INT2   6 12
RST 9 4 10 Сигнал сброса RESET. Лог. 1 на этом выводе в течение как минимум 2 периодов тактовой частоты приведет к сбросу устройства.
/EA 31 29 35 Ножка /EA должна удерживаться в лог. 0, чтобы MCU брало исполняемый код из внешней памяти вместо внутренней. На этом выводе имеется встроенный резистор pull-up.
/ALE 30 27 33 Выходной импульс для защелкивания младшего байта адреса при доступе к внешней памяти.
/PSEN 29 26 32 Строб чтения для внешней памяти, активный уровень лог. 0.
XTAL1 19 15 21 Вывод для подключения внешнего кварцевого резонатора, вход встроенного генератора. Может принимать тактовый сигнал от внешнего генератора.
XTAL2 18 14 20 Вывод для подключения внешнего кварцевого резонатора, инвертирующий выход встроенного генератора. Этот вывод должен оставаться не подключенным, когда используется внешний генератор тактов.
VCC 40 38 44 Плюс напряжения питания.
GND 20 16 22 Минус напряжения питания, общий провод для всех сигналов, земля.

[Размеры корпусов]

Микроконтроллеры серии STC89xx (STC89Cxx, STC89LExx) выпускаются в стандартных корпусах PQFP-44, LQFP-44, PDIP-40, PLCC-44, сохраняя цоколевку традиционных микроконтроллеров семейства MCS51. Размеры корпусов см. в даташите STC89C51RC-en.pdf [2].

[Управление питанием, сброс]

Всего есть 3 режима, в которых может находиться микроконтроллер: нормальный режим, режим ожидания (Idle mode) и режим выключения (Power-down mode). По умолчанию активен нормальный режим, в остальные режимы возможен вход с помощью программирования бит PD и IDL регистра PCON.

PCON (адрес 87h)

Бит 7 6 5 4 3 2 1 0
Имя SMOD SMOD0   -   POF GF1 GF0 PD IDL

SMOD. Выбор двойной скорости UART для режимов UART 1, 2 или 3. 0: обычная скорость (по умолчанию), 1: двойная скорость.

SMOD0. Бит SM0/FE выбора для SCON.7. Если этот бит установлен, то SCON.7 носит функцию детектирования ошибки фрейма (Frame Error). Если этот бит очищен, то SCON.7 используется как один из бит выбора режима UART.

B5. Зарезервирован.

POF. Power-On flag, флаг включения. Этот бит устанавливается действием включения (power-off-on), и его можно очистить только программно. Если на практике требуется узнать, как произошел сброс MCU, то программа инициализации должна использовать следующий алгоритм. Если POF=1, то это холодный старт (cold boot, Power-On Reset, POR), далее следует программно очистить флаг POF. Если POF=0, то это был внешний ручной сброс, или сброс от WDT, или программый сброс.

GF1. General-purposed flag 1, флаг общего назначения.

GF0. General-purposed flag 0, флаг общего назначения.

PD: Power-Down bit, бит выключения. Установка этого бита поместит STC90C51RC/RD+ MCU в режим Stop/Power-Down, из которого можно вывести/разбудить MCU внешним прерыванием или сбросом. Из-за того, что в режиме Stop/Power-Down останавливают свою работу внутренний генератор, CPU, таймеры, UART и другие аппаратные блоки, то будет работать только блок внешнего прерывания. Следующие ножки могут разбудить MCU из Stop/Power-Down mode: INT0/P3.2, INT1/P3.3, INT2/P4.3, INT3/P4.2.

IDL: Idle mode bit, бит режима ожидания. Установка этого бита поместит STC90C51RC/RD+ в состояние Idle mode, при этом останавливается только CPU - приостанавливается выполнение кода, тактирование ядра CPU отключается, то тактирование таймеров, прерываний, последовательного порта продолжается. Следующие выводы могут разбудить MCU и вывести его из Idle mode: INT0/P3.2, INT1/P3.3, INT2/P4.3, INT3/P4.2. Кроме того, прерыванияTimer0, Timer1, Timer2 и UART также могут вывести MCU из Idle Mode.

Ниже подробнее описан каждый из режимов пониженного энергопотребления.

Idle Mode (режим ожидания). Инструкция, которая установит бит IDL (PCON.0) приведет к тому, что она будет последней, которая была выполнена перед входом в idle mode. В этом режиме внутреннее тактирование отключается от ядра CPU, но не от функций блока прерываний, таймеров, WDT и последовательного порта. Статус CPU полностью сохраняет свое состояние: указатель стека (Stack Pointer, SP), счетчик инструкций (Program Counter, PC), слово состояния (Program Status Word, PSW), аккумулятор (Accumulator, A) и другие регистры будут хранить свои данные во время режима ожидания. Ножки портов будут удерживать свое логическое состояние, какое они имели в момент активации режима ожидания. На ножках ALE и PSEN удерживается лог. 1. Idle mode оставляет периферийные устройства работать, так что они могут разбудить CPU, когда генерируется прерывание. Timer 0, Timer 1, Timer 2 и UART будут продолжать свою работу в режиме ожидания.

Есть два способа прервать режим ожидания. Во-первых, активация любого разрешенного прерывания приведет к тому, что будет аппаратно очищен бит IDL, завершая тем самым действие idle mode. Прерывание будет обработано, и инструкция RETI на выходе из ISR продолжит выполнение программы со следующей инструкции, находящейся после инструкции, которая ввела микроконтроллер в режим ожидания.

Биты флагов (GFO и GF1) могут использоваться, чтобы искусственно показать, было ли прерывание сгенерировано во время обычной работы или во время режима ожидания. Например, если инструкция, активирующая idle mode, установила один или оба этих флага вместе с битом IDL (операцией OR над регистром PCON). Тогда если выход из idle mode был осуществлен прерыванием, то прерывание может заметить этот факт, анализируя содержимое флагов GF0 и GF1.

Во-вторых, пробуждение процессора будет вызвано подтягиванием ножки сброса RESET к лог. 1, вызывая генерацию внутреннего аппаратного сброса. Поскольку тактовый генератор все еще работает, аппаратный сброс должен удерживаться в активном состоянии только на 2 системных тактовых цикла (24 такта системной частоты), чтобы сброс был завершен.

Power Down (PD) Mode. Инструкция, которая установит бит PD (PCON.1), приведет к тому, что это будет последняя выполненная инструкция перед входом в режим выключения (Power-Down mode). В Power-Down mode, будут выключены встроенный генератор и память FLASH, чтобы минимизировать потребление энергии. В этом режиме потреблять ток будет только схема включения (power-on circuit). Содержимое встроенной памяти RAM и регистров специального назначения (Special Finction Register, SFR) сохраняется.

Есть только один способ разбудить микроконтроллер, чтобы вывести его из power-down mode - аппаратный сброс (ножка RESET) или внешнее прерывание (/INT0../INT3, вывод RXD, выводы T0, T1). Когда пробуждение было выполнено ножкой сброса RESET, программа продолжит свое выполнение с адреса 0000h.

Будьте внимательны к формированию импульса сброса на выводе RESET - он должен быть активен (активный уровень лог. 1) на время как минимум 10 мс, чтобы частота тактов могла застабилизироваться. Если пробуждение произошло от прерывания ножек GPIO, то CPU возобновит свою работу с перехода на соответствующий обработчик прерывания (interrupt service routine, ISR). Перед запуском кода ISR подача тактовой частоты на CPU блокируется, пока не пройдет 32768 тактов, чтобы исключить подачу нестабильной тактовой частоты на ядро. Чтобы использовать для пробуждения ножки GPIO, до входа в режим выключения должны быть должным образом разрешены прерывания в соответствующих регистрах. Обратите внимание, что за инструкцией, которая выключает процессор (это та инструкция, которая вводит микроконтроллер в power-down установкой бита PD), должна находиться инструкция NOP, если используется пробуждение от ножки GPIO. Когда завершается режим Power-down по прерыванию, период пробуждения контролируется внутренней схемой задержки. По отрицательному перепаду на ножке, генерирующей прерывание, запускается генератор, и внутренний таймер схемы задержки начинает счет. Подача внутренних тактов на ядро по возобновление вычислительного процесса CPU разрешается только после того, как таймер задержки переполнится. После этого периода таймаута начнет выполняться код соответствующего ISR. Чтобы предотвратить повторное срабатывание прерывания, код ISR перед своим завершением должен запретить это прерывание. Ножка прерывания должна удерживаться в лог. 0, пока не истечет таймаут запуска ядра и не начнется выполнение кода ISR. Программа пользователя не должна пытаться войти (или повторно войти) в power-down mode как минимум 4 мкс после того, как произошло одно из следующих событий: начало выполнения кода (после любого типа сброса) или выход из power-down mode.

Примеры кода, демонстрирующие выход из power-down mode по внешнему прерыванию на языках C и ассемблера см. в даташите STC89C51RC-en.pdf [2].

Управление сбросом, работа вывода RESET, сброс по включению питания (Power-On Reset, POR), программный сброс, описание встроенного супервизора MAX810, описание регистра PCON, описание работы сторожевого таймера (Watch-Dog-Timer, WDT), пример кода с WDT, см. в даташите STC89C51RC-en.pdf [2].

[Организация памяти]

Микроконтроллер (далее сокращенно MCU) серии STC89xx имеют раздельные адресные пространства для памяти программ (Program Memory) и памяти данных (Data Memory), это так называемая Гарвардская архитектура (см. Википедию).

Program memory. Это память, в которой хранятся выполняемые ядром CPU инструкции (в архитектуре MCS51 также в этой памяти могут храниться табличные данные и таблицы переходов). Можно адресовать до 64K байт памяти flash для хранилища программы и хранилища данных для MCU серии STC89xx. Младшие 4K байт для STC89C51RC (8K байт для STC89C52RC, 16K байт для STC89C54RC, и т. д., см. таблицу выбора микроконтроллеров) могут находится на кристалле чипа. Дизайн позволяет пользователям конфигурировать память как 3 отдельные раздела банков. Они называются регионом AP (application program), регионом IAP (In-Application-Program) и регионом загрузки ISP (In-System-Program boot). Регион AP это пространство, где размещается программа пользователя. Регион IAP (In-Application-Program) это энергонезависимая память данных, которая может использоваться для сохранения важных параметров программы AP. Другими словами, функционал IAP серии STC89xx предоставляет пользователю возможность читать и записывать свои данные в регионе данных flash, что избавляет от необходимости использовать внешнюю память EEPROM. Регион ISP boot это пространство, которое позволяет разместить специальную программу, которую мы называем кодом самопрограммирования (программа ISP). Внутри региона ISP пользователь может также разрешить доступ на чтение/запись в маленькое пространство памяти для сохранения параметров специального назначения. Обычно назначение программы ISP - заполнить регион программы AP, чтобы обеспечить апгрейд кода без необходимости извлекать процессор из системы.

Серия MCU STC89xx имеет специальную внутреннюю конфигурационную информацию (что-то похожее на фьюзы AVR). Аппаратура MCU захватывает эту конфигурационную информацию в момент включения (power-up), и в соответствии с ней выполняет аппаратную защиту по управлению доступом в регионы памяти - по предопределенным критериям, заданным в процессе программирования конфигурационной информации). Критерии состоят в том, что разрешен или нет доступ к региону AP только из региона ISP, доступ к региону IAP из программы ISP и AP, и запрещен ли доступ к региону ISP из программы AP и из самой программы ISP. Однако если разрешена память данных FLASH ISP ("ISP data flash is enabled"), то программа может читать/записывать эту область. Когда выполнены неправильные установки в ISP-IAP SFR, происходит выход за пределы допустимой области ("out-of-space"), и MCU серии STC89xx в соответствии с вышеуказанными критериями игнорирует недопустимую команду.

После сброса CPU начинает выполнение кода с адреса 0000H Program Memory, где должен начинаться код приложения пользователя. Для обработки прерываний код ISR должен размещаться в памяти программ по специальным адресам, которые называют векторами прерываний. Каждому прерыванию назначен фиксированный адрес вектора в памяти программ. Когда происходит прерывание, то CPU переходит к выполнению кода по вектору прерывания, приостанавливая выполнение основной программы (или менее приоритетного прерывания). Например, вектор External Interrupt 0 назначен на адрес 0003H. Если используется External Interrupt 0, то его ISR должен начинаться с адреса 0003H (обычно в этом месте находится команда безусловного перехода AJMP или LJMP). Если прерывание не используется, то место под код его вектора свободна как обычная память программ.

Ячейки векторов прерываний идут друг за другом с интервалом 8 байт: 0003H вектор для External Interrupt 0, 000BH для прерывания Timer 0, 0013H для External Interrupt 1, 001BH для Timer 1, и т. д. Если ISR достаточно короткий, то он может уложиться в этом 8-байтном интервале. Более длинные ISR могут использовать инструкцию перехода (AJMP или LJMP) для пропуска следующих на ней ячеек других векторов прерываний, если эти прерывания используются.

Ниже показано для примера распределение памяти программ микроконтроллеров STC89C51RC и STC89C52RC.

STC89C51RC Program Memory      STC89C52RC Program Memory
Память программ STC89C51RC   Память программ STC89C52RC

Data Memory. Это память, где могут размещаться только данные. Есть несколько разновидностей памяти данных.

On-chip Scratch-Pad RAM. Точно так же, как и у обычного микроконтроллера 8051, у MCU серии STC89xx имеется 256 сверхбыстрой памяти данных (SRAM), в которую входит пространство из 128 байт SFR. Младшие 128 памяти данных могут быть доступны как через прямую, так и через косвенную адресации. Старшие 128 байт памяти данных и 128 байт SFR используют общее адресное пространство. К этим старшим 128 байтам памяти данных можно получить доступ только с помощью косвенной адресации. К старшим 128 байтам SFR можно получить доступ только через прямую адресацию.

STC89xx on chip Scratch Pad RAM
On-chip Scratch-Pad RAM

Младшие 32 байта (с адресами 00H..1FH) памяти данных сгруппированы в 4 банка по 8 регистров в каждом. Инструкции программы обращаются к этим 8 регистрам как к регистрам R0..R7. Биты RS0 и RS1 регистра PSW (см. секцию "Регистры SFR для доступа к RAM") выбирают, какой из этих банков сейчас используется. Инструкции, использующие регистровую адресацию, будут осуществлять доступ только к регистрам указанного в настоящий момент банка. Это позволяет более эффективно использовать пространство кода, поскольку инструкции с регистровой адресацией короче, чем инструкции, использующие прямую адресацию.

STC89xx Lower 128 bytes Internal SRAM
Младшие 128 байт Internal SRAM

Следующие 16 байт (20H..2FH) за банками регистров формируют блок области памяти, которую можно (с помощью специальных инструкций) адресовать как отдельные биты (флаги). Набор инструкций 80C51 включает в себя широкий набор инструкций для манипуляции одним битом, и 128 бит в этой области могут быть напрямую модифицированы этими инструкциями. Адреса бит в этой области могут быть в диапазоне 00H..7FH.

К младшим 128 байтам можно получить доступ либо прямой, либо косвенной адресацией, в то время как к старшим 128 байтам можно получить доступ только косвенной адресацией. Регистры специального назначения (SFR) включают защелки портов, регистры таймеров, управление периферийными устройствами и т. д. К этим регистрам можно получить доступ только прямой адресацией. 16 адресов в пространстве SFR могут быть адресованы и как байты, и как биты. SFR, которые могут быть адресованы как биты, имеют адреса, заканчивающиеся на 0H или 8H.

Auxiliary RAM. Имеется 1024 байт дополнительного ОЗУ данных (data RAM) доступного в микроконтроллерах серии STC89C54RD+ (в то время как 256 байт дополнительного data RAM доступно на STC89C51RC). К этой памяти можно получить доступ инструкциями MOVX @Ri или MOVX @DPTR. Управляющий бит EXTRAM находится в регистре AUXR.1 (см. ниже секцию "Регистры SFR для доступа к RAM") предназначен для контроля доступа к auxiliary RAM. Когда этот бит установлен, доступ к auxiliary RAM запрещен. Когда этот бит очищен (EXTRAM=0), то auxiliary RAM является целью по умолчанию для диапазона адресов 0x0000 .. 0x03FF, и к нему можно получить доступ через инструкцию косвенной адресации MOVX @Ri и MOVX @DPTR. Если EXTRAM=0 и целевой адрес больше 0x03FF, то происходит автоматическое переключение на доступ к внешней RAM. Когда EXTRAM=0, то при выполнении инструкции MOVX @Ri содержимое регистра DPH (это старшая половина 16-битного DPTR) игнорируется.

STC89xx on chip Auxiliary RAM
Auxiliary RAM

Для компилятора KEIL-C51 присваивание переменных, размещенных в Auxiliary RAM, должно использовать определение pdata или xdata. После компиляции переменные, декларированные через pdata и xdata, будут соответственно относиться к памяти, к которой осуществляется доступ через MOVX @Ri (для pdata) и MOVX @DPTR (для xdata). Таким способом можно корректно осуществлять аппаратный доступ к памяти MCU.

External RAM. Имеется 64K байт адресного пространства, к которому осуществляется доступ как к внешнему ОЗУ данных (external data RAM). Интерфейс доступа такой же, как и у стандартного 8051 - используются ножки портов P2, P0, сигнал ALE, и ножки портов P3.6 и P3.7 получают альтернативную функцию сигналов чтения и записи для доступа к external data RAM. Для доступа к внешней памяти данных бит EXTRAM должен быть установлен в лог. 1. Доступ к внешней памяти может быть либо по 16-битному адресу (инструкцией MOVX @DPTR), или по 8-битному адресу (инструкцией MOVX @Ri). 8-битный адрес часто используется в объединении с одной ножкой порта или большим их количеством для организации страничного доступа к RAM. Если используется 8-битный адрес, то Port 2 SFR сохраняет свое состояние во время цикла доступа к внешней памяти. Это упрощает страничный доступ. 16-битные адреса часто используют для доступа к 64K байт внешней памяти данных.

STC89xx External RAM
External RAM

[Регистры SFR для доступа к RAM]

Ниже показаны некоторые SFR, которые имеют отношение к RAM.

Для быстрого перемещения данных серия STC89xx поддерживает 2 указателя данных. Они используют общий адрес SFR, и могут переключаться битом DPS (AUXR1.0).

PSW. Это слово состояния выполнения программы, (Program Status Word, сокращенно PSW).

Бит 7 6 5 4 3 2 1 0
Имя CY AC F0 RS1 RS0 OV F1 P

CY: Carry (флаг переполнения, или переноса).

AC: Auxilliary Carry Flag (флаг дополнительного переноса, применяется для BCD-операций; BCD расшифровывается как Binary Coded Decimal).

F0: Flag 0 (доступен для пользователя как флаг общего назначения).

RS1: Register bank select control bit 1 (бит 1 для выбора банка регистров).

RS0: Register bank select control bit 0 (бит 0 для выбора банка регистров).

OV: Overflow (флаг переполнения).

F1: Flag 1. Флаг, определяемый пользователем.

P: Parity (флаг четности аккумулятора).

Регистр AUXR.

Бит 7 6 5 4 3 2 1 0
Имя - - - - - - EXTRAM ALEOFF

B7..B3: эти биты зарезервированы.

EXTRAM: переключает доступ к внутреннему/внешнему ОЗУ (Internal/External RAM access).

0: для серий RD+ разрешается встроенная в кристалл auxiliary RAM, и она размещена по адресам 0x0000 .. 0x03FF. И если адрес превышает 0x03FF, то автоматически адресуется внешняя память (external RAM), находящаяся вне кристалла MCU. Для серий RC разрешается встроенная в кристалл auxiliary RAM, и она размещена по адресам 00H .. FFH. И если адрес превышает FFH, то автоматически адресуется внешняя память (external RAM), находящаяся вне кристалла MCU. 1: встроенная в чип auxiliary RAM всегда запрещена.

STC89xx EXTRAM bit func

ALEOFF: запрет/разрешение генерации сигнала ALE.

0: ALE выдается с постоянной частотой, равной 1/3 от системной (SYSclk) в режиме 6T, и 1/6 от SYSclk в режиме 12T. 1: ALE активен только во время выполнения инструкции MOVX или MOVC.

Регистр AUXR1.

Бит 7 6 5 4 3 2 1 0
Имя - - - - GF2 - - DPS

GF2: флаг общего назначения, определяемый пользователем. Его может использовать программа приложения по любому назначению.

DPS: бит выбора регистров DPTR. Если 0, то выбран DPTR0 (по умолчанию); если 1, то для использования выбран вторичный DPTR (DPTR1).

Демонстрационный код для доступа к расширенной памяти см. в даташите STC89C51RC-en.pdf [2].

[Конфигурации GPIO]

MCU серии STC89xx имеет следующие ножки портов ввода/вывода (GPIO): P0.0..P0.7, P1.0..P1.7, P2.0..P2.7, P3.0..P3.7, P4.0..P4.3 (последние доступны только в корпусах LQFP44 и PLCC44). Все выводы портов могут быть независимо друг от друга сконфигурированы в одном из 4 режимов: quasi-bidirectional (квазидвунаправленный, стандартный порт выхода 8051), двухтактный выход (push-pull), только вход или выход с открытым стоком. По умолчанию (после сброса) все ножки портов находятся в режиме quasi-bidirectional. На каждом входе имеется триггер Шмитта для улучшения подавления помех.

Quasi-bidirectional I/O. Ножки портов работают в quasi-bidirectional режиме выхода, как ножки портов стандартного 8051. Quasi-bidirectional можно использовать и как вход, и как выход, без необходимости переключения режима порта между входом и выходом. Это возможно, когда на выход ножки порта передан уровень лог. 1, тогда эта ножка имеет слабую подтяжку уровня к лог. 1 (weak pull-up), позволяя тем самым подключенным снаружи цепям подтягивать уровень к лог. 0 (так называемое монтажное ИЛИ с инверсией). Когда на выход ножки выводится лог. 0, то он может выдерживать большой ток (выход коммутируется открытым стоком порта MCU). Имеется на выбор 3 варианта pull-up для quasi-bidirectional порта, которые можно применять для разных целей.

STC89xx Quasi Bidirectional Output

Очень слабая подтяжка (very weak pull-up) подключается всякий раз, когда бит регистра порта содержит лог. 1. Эта очень слабая подтяжка выдает очень слабый ток, который достаточен для появления на ножке лог. 1, если она оставлена не подключенной к цепям, которые притягивали бы её к земле.

Второй вариант подтяжки, который называется просто слабой (weak pull-up), также включается, когда бит регистра порта содержит лог. 1, и ножка порта получает уровень лог. 1. Этот тип pull-up предоставляет основной источник тока для организации квази-двунаправленного выхода, который выводит лог. 1. Если этот вывод притягивается к лог. 0 внешним устройством, то этот weak pull-up выключается, и остается включенным только very weak pull-up. Чтобы перевести ножку порта в лог. 0 для этих условий, внешнее устройство должно быть способно проводить достаточный ток, чтобы понизить уровень на выходе, замыкая на землю ток от weak pull-up, и тем самым переводя уровень напряжения на выходе ниже его порога входного напряжения.

Третий вариант pull-up называется сильным (strong pull-up). Этот pull-up используется для ускорения переходов от лог. 0 к лог. 1 для квази-двунаправленной ножки порта, когда бит регистра порта меняет свое значение от лог. 0 к лог. 1. Когда это происходит, то strong pull-up включается на время 2 тактов CPU, быстро подтягивая уровень логики вывода к лог. 1.

Push-pull Output. Это режим работы порта как двухтактного выхода (push-pull), и структура работы порта какая же, как у открытого стока и квази-двунаправленного выхода с только тем отличием, что постоянно подключен strong pull-up, когда бит регистра порта содержит лог. 1. Режим push-pull может использоваться, когда для выхода требуется предоставить повышенный уровень тока. В этой конфигурации путь распространения входного сигнала для ножки порта такой же, как и quasi-bidirectional mode.

STC89xx Push Pull Output

Input-only Mode. Это конфигурация, в которой ножка порта работает только как вход с триггером Шмитта, без какой-либо подтяжки на входе.

STC89xx Input Only Mode

Open-drain Output. Это конфигурация выхода с открытым стоком. Все подтягивающие резисторы pull-up отключены, и работает только нижний транзисторный ключ, который может коммутировать ток ножки порта на землю, когда в регистр ножки порта записан лог. 0. Чтобы можно было использовать эту конфигурацию в приложении для передачи цифрового сигнала, ток для ножки порта должен предоставляться внешней нагрузкой - либо внешний резистор pull-up, подключенный к плюсу питания (обычно это VCC), либо светодиод с токоограничивающим резистором, либо что-то наподобие. В остальном этот режим работает так же, как и quasi-bidirectional mode. Путь распространения входного сигнала для ножки порта такой же, как и quasi-bidirectional mode.

STC89xx Open Drain Output

[Система команд]

Описание регистров специальных функций (SFR) и инструкций см. в главе 5 "Instruction System" даташита STC89C51RC-en.pdf [2].

[Прерывания]

Система прерываний MCU серии STC89xx совпадает с системой прерываний стандартного 8051. Описание системы прерываний, адресов векторов, уровней приоритетов, примеры кода см. в главе 6 "Interrupt" даташита STC89C51RC-en.pdf [2].

[Timer/Counter]

Описание таймеров/счетчиков, их регистров, режимов работы и примеры кода см. в главе 7 "Timer/Counter" даташита STC89C51RC-en.pdf [2].

[UART]

Описание улучшенного последовательного порта UART, его регистров, режимов работы и примеры кода см. в главе 8 "UART with enhanced function" даташита STC89C51RC-en.pdf [2].

[IAP/EEPROM]

Технология ISP в MCU серии STC89xx делает возможным обновление программы приложения пользователя в энергонезависимых данных приложения (находящихся в памяти IAP) без извлечения чипа MCU из конечного изделия (рабочей системы, где MCU работает). Эта полезная функция делает возможным обновление программ прямо на месте использования изделия (field-update). Обратите внимание, что для функции ISP необходимо, чтобы в память ISP была предварительно запрограммирована программа загрузчика (bootloader). Обычно от потребителя не требуется знать тонкостей принципа работы ISP, потому что компания STC предоставляет готовый, стандартный инструментарий ISP (управляющую утилиту программирования наподобие stc-isp-15xx-v6.85p.exe, см. архив [2]) и встроенный код ISP в памяти поставляемых образцов микроконтроллеров STC. Однако при самостоятельной разработке годного программного обеспечения для реализации функции ISP программист должен понимать архитектуру встроенной энергонезависимой памяти программ (embedded flash) и данных.

Embedded flash состоит из максимум 90 страниц. Каждая страница содержит 512 байт. Работая с flash, пользователь должен стереть (erase) страницу целиком перед тем, как он сможет записать (запрограммировать) данные на эту страницу.

Стирание памяти flash означает установку байт её содержимого в значение FFH. Для этого чипа доступно 2 режима стирания. Один режим это mass mode, и другой (page mode). Mass mode работает быстрее, но он очищает всю память flash целиком. Page mode медленнее, но зато он более гибкий, поскольку позволяет стирать память по одной странице. Работа в реальном времени с RAM отличается от работы с flash при очистке и записи тем, что для записи (программирования) flash требуется тратить время на ожидание завершения процесса.

Кроме того, для стирания/программирования flash требуется специальная довольно сложная процедура. К счастью, чипы серии STC89xx поставляются с удобным механизмом, помогающим пользователю читать/изменять содержимое flash. Просто заполните целевой адрес и нужные данные в несколько регистров SFR, и сработает встроенная автоматическая процедура ISP, так что пользователь может просто стирать, читать и программировать встроенную память flash и регистры опций.

Функция IAP (In-Application Program) разработана для того, чтобы пользователь мог читать/записывать энергонезависимые данные (nonvolatile data) памяти flash. Это может значительно помочь сохранять параметры приложения независимо от событий включения и выключения питания. Другими словами, пользователь может сохранять некие данные в памяти flash, и после этого выключить или перезагрузить MCU, и иметь возможность восстановить оригинальные значения данных, которые он сохранил ранее до выключения/перезагрузки.

Пользователь может программировать flash данных (data flash) таким же способом, как и программировать приложение в память flash по технологии ISP, но требуется более глубокое понимание назначения регистров SFR: ISP_DATA, ISP_ADDRL, ISP_ADDRH, ISP_CMD, ISP_TRIG и ISP_CONTR.

Регистры управления IAP/ISP. Ниже в таблице показаны регистры специальных функций (special function registers, SFR), относящихся к работе IAP/ISP. Все эти регистры могут быть доступны программно в приложении пользователя. Столбец POR/Reset показывает состояние регистра после включения питания / сброса.

Символ Описание регистра Адрес MSB Адрес бита и символ LSB POR/Reset
ISP_DATA ISP/IAP Flash Data E2h   11111111b
ISP_ADDRH ISP/IAP Flash Address High E3h   00000000b
ISP_ADDRL ISP/IAP Flash Address Low E4h   00000000b
ISP_CMD ISP/IAP Flash Command E5h - - - - - MS2 MS1 MS0 xxxxx000b
ISP_TRIG ISP/IAP Flash Command Trigger E6h   xxxxxxxxb
ISP_CONTR ISP/IAP Control E7h ISPEN SWBS SWRST - - WT2 WT1 WT0 000xx000b
PCON Power Control 87h SMOD SMOD0 - POF GF1 GF0 PD IDL 00x10000b

ISP_DATA: ISP/IAP Flash Data

Бит 7 6 5 4 3 2 1 0
Имя              

ISP_DATA это регистр порта данных для функционирования ISP/IAP. Данные ISP_DATA будут записаны по нужному адресу при операции записи ISP/IAP, и это также предоставляет доступ в окно данных при операции чтения ISP/IAP.

ISP_ADDRH: ISP/IAP Flash Address High

Бит 7 6 5 4 3 2 1 0
Имя              

ISP_ADDRH это порт для старшего байта адреса всех режимов ISP/IAP. Биты ISP_ADDRH[7:5] должны быть очищены (000b), и если хотя бы один из битов ISP_ADDRH[7:5] установлен, то операция записи IAP/ISP должна завершиться неудачно.

ISP_ADDRL: ISP/IAP Flash Address Low

Бит 7 6 5 4 3 2 1 0
Имя              

ISP_ADDRL это порт для младшего байта адреса всех режимов ISP/IAP. При операции очистки страницы (page erase) эта половина адреса игнорируется.

ISP_CMD: ISP/IAP Flash Command

Бит 7 6 5 4 3 2 1 0
Имя - - - - - MS2 MS1 MS0

Это регистр команд для управления операциями ISP/IAP. IAP_CMD используют для выбора режима flash при выполнении нескольких функций или используется для доступа к защищенным SFR.

B7..B3. Эти биты зарезервированы.

MS2, MS1, MS0. Эти биты выбирают режим операции ISP/IAP:

000: выключение (Standby).
001: чтение (Data Flash/EEPROM read).
010: программирование/запись (Data Flash/EEPROM program).
011: очистка страницы (Data Flash/EEPROM page erase).

ISP_TRIG: ISP/IAP Flash Command Trigger

Бит 7 6 5 4 3 2 1 0
Имя              

Регистр ISP_TRIG это порт команд для запуска активности ISP/IAP и доступа к защищенным SFR. Если ISP_TRIG заполнен следующими друг за другом байтами 46h, B9h, и если ISPEN (ISP_CONTR.7)=1, то сработает запуск активности ISP/IAP или доступ к защищенным SFR.

ISP_CONTR: ISP/IAP Control

Бит 7 6 5 4 3 2 1 0
Имя ISPEN SWBS SWRST - - WT2 WT1 WT0

Это регистр управления ISP/IAP.

ISPEN. Разрешает работу ISP/IAP.

0: общий запрет всего функционала ISP/IAP функций (program/erase/read).
1: разрешение функций program/erase/read для ISP/IAP.

SWBS. Управление выбором программы загрузчика (software boot).

0: загрузка из основной памяти после сброса.
1: загрузка из памяти ISP после сброса.

SWRST. Управление срабатыванием программного сброса.

0: нет операции.
1: генерируется программный сброс системы. Этот бит будет автоматически очищен аппаратурой.

Примечание: действия программного сброса должны сбросить все другие SFR, но никогда не влияют на биты ISPEN и SWBS. Биты ISPEN и SWBS будут сброшены только сбросом при включении питания (power-up reset), но не программным сбросом.

B3. Этот бит зарезервирован. Программа должна записать в этот бит 0, когда записывается ISP_CONTR.

WT2..WT0. Выбор времени ожидания, когда память flash занята.

Биты установки времени ожидания Сколько ждет CPU в тактах системной частоты
Рекомендуемая системная частота, МГц
WT2 WT1 WT0 Чтение Программирование,
меньше 55 мкс
Стирание сектора, меньше 21 мс
0 1 1 6 30 5471 5
0 1 0 11 60 10942 10
0 0 1 22 120 21885 20
0 0 0 43 240 43769 40

Пример работы с IAP/EEPROM см. в даташите STC89C51RC-en.pdf [2].

[Таблица выбора микроконтроллеров STC89xx по размеру внутреннего EEPROM]

Тип EEPROM, байт Секторов Начальный адрес Конечный адрес
STC89C/LE51RC 4K 8 0000H 0FFFH
STC89C/LE52RC 4K 8 0000H 0FFFH
STC89C/LE54RD+ 45K 90 0000H B3FFH
STC89C/LE58RD+ 29K 58 0000H 73FFH

[Ссылки]

1. Микроконтроллеры STCmicro.
2. 170314STCmcu.zip - документация на английском языке по микроконтроллерам STC, утилита программирования.

 

Добавить комментарий


Защитный код
Обновить

Top of Page