Skip to main content

Процессор 8051

Текущая версия процессора 8051 соответствует стандартному ядру, за исключением некоторых особенностей, которые будут описаны в данной главе.

Поддержка IDE

IDE – Keil. Потактовая симуляционная модель – Atmel AT89LP52.

Скорость выполнения команд

Машинный цикл равен 1 такту. Уход на обработчика прерывания занимает 5 машинных циклов.

Таблица. Скорость выполнения команд

КомандаКМЦКомандаКМЦКомандаКМЦКомандаКМЦ
ACALL3DA_A1MOV_ATRI_DIRECT2ORL_DIRECT_IMMEDIATE3
ADD_A_ATRI2DEC_A1MOV_ATRI_IMMEDIATE2POP2
ADD_A_DIRECT2DEC_ATRI2MOV_BIT_C2PUSH2
ADD_A_IMMEDIATE2DEC_DIRECT2MOV_C_BIT2RET4
ADD_A_RN1DEC_RN1MOV_DIRECT_A2RETI4
ADDC_A_ATRI2DIV_AB4MOV_DIRECT_ATRI2RL_A2
ADDC_A_DIRECT2DJNZ_DIRECT4MOV_DIRECT_DIRECT3RLC_A1
ADDC_A_IMMEDIATE2DJNZ_RN3MOV_DIRECT_IMMEDIATE3RR_A1
ADDC_A_RN1INC_A1MOV_DIRECT_RN2RRC_A1
AJMP3INC_ATRI2MOV_DPTR_IMMEDIATE:3SETB_BIT2
ANL_A_ATRI2INC_DIRECT2MOV_RN_A1SETB_C1
ANL_A_DIRECT2INC_DPTR2MOV_RN_DIRECT2SJMP3
ANL_A_IMMEDIATE2INC_RN1MOV_RN_IMMEDIATE2SUBB_A_ATRI2
ANL_A_RN1JB4MOVC_A_ATDPTR3SUBB_A_DIRECT2
ANL_C_BIT2JBC4MOVC_A_ATPC3SUBB_A_IMMEDIATE2
ANL_C_NBIT2JC3MOVX_A_ATDPTR3SUBB_A_RN1
ANL_DIRECT_A2JMP_A_DPTR2MOVX_A_ATRI3SWAP_A1
ANL_DIRECT_IMMEDIATE3JNB4MOVX_ATDPTR_A3XCH_A_ATRI:2
CJNE_A_DIRECT4JNC3MOVX_ATRI_A3XCH_A_DIRECT2
CJNE_A_IMMEDIATE4JNZ3MUL_AB2XCH_A_RN1
CJNE_ATRI_IMMEDIATE4JZ3NOP1XCHD_A_ATRI2
CJNE_RN_IMMEDIATE4LCALL4ORL_A_ATRI2XRL_A_ATRI2
CLR_A1LJMP4ORL_A_DIRECT2XRL_A_DIRECT2
CLR_BIT2MOV_A_ATRI2ORL_A_IMMEDIATE2XRL_A_IMMEDIATE2
CLR_C1MOV_A_DIRECT2ORL_A_RN1XRL_A_RN1
CPL_A1MOV_A_IMMEDIATE3ORL_C_BIT2XRL_DIRECT_A2
CPL_BIT2MOV_A_RN1ORL_C_NBIT2XRL_DIRECT_IMMEDIATE3
CPL_C1MOV_ATRI_A1ORL_DIRECT_A2

Прерывания

В текущей версии процессора 8051 предусмотрено 6 векторов прерываний.

Таблица. Описание прерываний и адрес перехода

Номер прерыванияОписаниеАдрес переходаВнутреннее название прерываний
0WDT0003hIE0
WORK_FSM
CMM
1Внутренний таймер/счетчик T0000BhTF0
2I2C0013hIE1
UART0
SPI0
TIMER0
GPIOA
3Внутренний таймер/счетчик T1001BhTF1
4OWI0023hIS0
UART1
SPI1
TIMER1
GPIOB
5GPIOC002BhIS1
TIMER2

Прерывания IS0 и IS1 всегда работают по уровню.

Подприоритеты прерываний

При одинаковом приоритете обработка прерываний выполняется в следующей последовательности

Таблица. Описание подприоритетов прерываний

ПодприоритетНазвание прерывания
1 – высшийIE0
2TF0
3IS0
4IE1
5TF1
6 – низшийIS1

Регистры управления прерываниями

При добавлении новых прерываний, в регистре приоритетов прерываний и регистре разрешения прерываний, были внесены изменения относительно стандартного ядра 8051.

IE

Измененный регистр разрешения прерываний

Бит76543210
НазначениеEAРезервES1ES0ET1EX1ET0EX0
Начальное значение0

ЕA – включение системы прерываний.

Изменение заключается в добавлении битов ES0, ES1, отвечающих за разрешение прерываний IS0, IS1 (биты ET0, ET1, EX0, EX1 отвечают за разрешение прерываний ТF0, TF1, IE0, IE1 соответственно).

IP

Измененный регистр приоритетов прерываний

Бит76543210
НазначениеРезервPS1PS0PT1PX1PT0PX0
Начальное значение0

Изменение заключается в добавлении битов PS0, PS1, отвечающих за установку приоритетов прерываний IS0, IS1. (биты PT0, PT1, PX0, PX1 отвечают за установку приоритетов прерываний ТF0, TF1, IE0, IE1 соответственно).

SCON

Измененный регистр SCON представлен ниже.

Бит76543210
НазначениеРезервIS1IS0
Начальное значение0

Изменение заключается в удалении битов, отвечающих за управление работой последовательного порта и добавление флагов прихода прерываний IS0, IS1.

Ручной вызов прерываний

Пользователь может самостоятельно вызвать прерывания IE0, IE1, IS0, IS1. Вызвать прерывания можно через регистры управления портом P1.

P1

Бит76543210
НазначениеРезервEN_NIS1IS0IE1IE0
Начальное значение255

EN_N – разрешение прерывания на основе битов текущего регистра:

  • 1 – прерывания будут вызваны в соответствии с таблицей прерываний;
  • 0 – разрешения вызова прерываний битами текущего регистра.

При разрешении вызова прерываний битами текущего регистра, прерывания от периферийных модулей будут отключены от входных линий прерываний IE0, IE1, IS0, IS1.

IS1 – прерывание IS1:

  • 1 – передать на вход линии прерывания IS1 высокий логический уровень;
  • 0 – передать на вход линии прерывания IS1 низкий логический уровень.

IS0 – прерывание IS0:

  • 1 – передать на вход линии прерывания IS0 высокий логический уровень;
  • 0 – передать на вход линии прерывания IS0 низкий логический уровень.

IE1 – прерывание IE1:

  • 1 – передать на вход линии прерывания IE1 высокий логический уровень;
  • 0 – передать на вход линии прерывания IE1 низкий логический уровень.

IE0 – прерывание IE0:

  • 1 – передать на вход линии прерывания IE0 высокий логический уровень;
  • 0 – передать на вход линии прерывания IE0 низкий логический уровень.

Таймер-счетчик

В текущей версии внешнее событие для таймера-счетчика всегда равно нулю.

В стандартной реализации таймера-счетчик инкрементируется каждый машинный цикл. В данном случае машинный цикл равен 1 такту системной частоты.