Перейти к основному содержимому

Процессор 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 такту системной частоты.