Процессор 8051
Текущая версия процессора 8051 соответствует стандартному ядру, за исключением некоторых особенностей, которые будут описаны в данной главе.
Поддержка IDE
IDE – Keil. Потактовая симуляционная модель – Atmel AT89LP52.
Скорость выполнения команд
Машинный цикл равен 1 такту. Уход на обработчика прерывания занимает 5 машинных циклов.
Таблица. Скорость выполнения команд
Команда | КМЦ | Команда | КМЦ | Команда | КМЦ | Команда | КМЦ |
---|---|---|---|---|---|---|---|
ACALL | 3 | DA_A | 1 | MOV_ATRI_DIRECT | 2 | ORL_DIRECT_IMMEDIATE | 3 |
ADD_A_ATRI | 2 | DEC_A | 1 | MOV_ATRI_IMMEDIATE | 2 | POP | 2 |
ADD_A_DIRECT | 2 | DEC_ATRI | 2 | MOV_BIT_C | 2 | PUSH | 2 |
ADD_A_IMMEDIATE | 2 | DEC_DIRECT | 2 | MOV_C_BIT | 2 | RET | 4 |
ADD_A_RN | 1 | DEC_RN | 1 | MOV_DIRECT_A | 2 | RETI | 4 |
ADDC_A_ATRI | 2 | DIV_AB | 4 | MOV_DIRECT_ATRI | 2 | RL_A | 2 |
ADDC_A_DIRECT | 2 | DJNZ_DIRECT | 4 | MOV_DIRECT_DIRECT | 3 | RLC_A | 1 |
ADDC_A_IMMEDIATE | 2 | DJNZ_RN | 3 | MOV_DIRECT_IMMEDIATE | 3 | RR_A | 1 |
ADDC_A_RN | 1 | INC_A | 1 | MOV_DIRECT_RN | 2 | RRC_A | 1 |
AJMP | 3 | INC_ATRI | 2 | MOV_DPTR_IMMEDIATE: | 3 | SETB_BIT | 2 |
ANL_A_ATRI | 2 | INC_DIRECT | 2 | MOV_RN_A | 1 | SETB_C | 1 |
ANL_A_DIRECT | 2 | INC_DPTR | 2 | MOV_RN_DIRECT | 2 | SJMP | 3 |
ANL_A_IMMEDIATE | 2 | INC_RN | 1 | MOV_RN_IMMEDIATE | 2 | SUBB_A_ATRI | 2 |
ANL_A_RN | 1 | JB | 4 | MOVC_A_ATDPTR | 3 | SUBB_A_DIRECT | 2 |
ANL_C_BIT | 2 | JBC | 4 | MOVC_A_ATPC | 3 | SUBB_A_IMMEDIATE | 2 |
ANL_C_NBIT | 2 | JC | 3 | MOVX_A_ATDPTR | 3 | SUBB_A_RN | 1 |
ANL_DIRECT_A | 2 | JMP_A_DPTR | 2 | MOVX_A_ATRI | 3 | SWAP_A | 1 |
ANL_DIRECT_IMMEDIATE | 3 | JNB | 4 | MOVX_ATDPTR_A | 3 | XCH_A_ATRI: | 2 |
CJNE_A_DIRECT | 4 | JNC | 3 | MOVX_ATRI_A | 3 | XCH_A_DIRECT | 2 |
CJNE_A_IMMEDIATE | 4 | JNZ | 3 | MUL_AB | 2 | XCH_A_RN | 1 |
CJNE_ATRI_IMMEDIATE | 4 | JZ | 3 | NOP | 1 | XCHD_A_ATRI | 2 |
CJNE_RN_IMMEDIATE | 4 | LCALL | 4 | ORL_A_ATRI | 2 | XRL_A_ATRI | 2 |
CLR_A | 1 | LJMP | 4 | ORL_A_DIRECT | 2 | XRL_A_DIRECT | 2 |
CLR_BIT | 2 | MOV_A_ATRI | 2 | ORL_A_IMMEDIATE | 2 | XRL_A_IMMEDIATE | 2 |
CLR_C | 1 | MOV_A_DIRECT | 2 | ORL_A_RN | 1 | XRL_A_RN | 1 |
CPL_A | 1 | MOV_A_IMMEDIATE | 3 | ORL_C_BIT | 2 | XRL_DIRECT_A | 2 |
CPL_BIT | 2 | MOV_A_RN | 1 | ORL_C_NBIT | 2 | XRL_DIRECT_IMMEDIATE | 3 |
CPL_C | 1 | MOV_ATRI_A | 1 | ORL_DIRECT_A | 2 |
Прерывания
В текущей версии процессора 8051 предусмотрено 6 векторов прерываний.
Таблица. Описание прерываний и адрес перехода
Номер прерывания | Описание | Адрес перехода | Внутреннее название прерываний |
---|---|---|---|
0 | WDT | 0003h | IE0 |
WORK_FSM | |||
Резерв | |||
CMM | |||
1 | Внутренний таймер/счетчик T0 | 000Bh | TF0 |
2 | GPIO | 0013h | IE1 |
TIMER0 | |||
UART | |||
3 | Внутренний таймер/счетчик T1 | 001Bh | TF1 |
3 | TIMER1 | 0023h | IS0 |
3 | TIMER2 | 002Bh | IS1 |
Прерывания IS0 и IS1 всегда работают по уровню.
Подприоритеты прерываний
При одинаковом приоритете обработка прерываний выполняется в следующей последовательности
Таблица. Описание подприоритетов прерываний
Подприоритет | Название прерывания |
---|---|
1 – высший | IE0 |
2 | TF0 |
3 | IS0 |
4 | IE1 |
5 | TF1 |
6 – низший | IS1 |
Регистры управления прерываниями
При добавлении новых прерываний, в регистре приоритетов прерываний и регистре разрешения прерываний, были внесены изменения относительно стандартного ядра 8051.
IE
Измененный регистр разрешения прерываний
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Назначение | EA | Резерв | ES1 | ES0 | ET1 | EX1 | ET0 | EX0 |
Начальное значение | 0 |
ЕA – включение системы прерываний.
Изменение заключается в добавлении битов ES0, ES1, отвечающих за разрешение прерываний IS0, IS1 (биты ET0, ET1, EX0, EX1 отвечают за разрешение прерываний ТF0, TF1, IE0, IE1 соответственно).
IP
Измененный регистр приоритетов прерываний
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Назначение | Резерв | PS1 | PS0 | PT1 | PX1 | PT0 | PX0 | |
Начальное значение | 0 |
Изменение заключается в добавлении битов PS0, PS1, отвечающих за установку приоритетов прерываний IS0, IS1. (биты PT0, PT1, PX0, PX1 отвечают за установку приоритетов прерываний ТF0, TF1, IE0, IE1 соответственно).
SCON
Измененный регистр SCON представлен ниже.
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Назначение | Резерв | IS1 | IS0 | |||||
Начальное значение | 0 |
Изменение заключается в удалении битов, отвечающих за управление работой последовательного порта и добавление флагов прихода прерываний IS0, IS1.
Ручной вызов прерываний
Пользователь может самостоятельно вызвать прерывания IE0, IE1, IS0, IS1. Вызвать прерывания можно через регистры управления портом P1.
P1
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Назначение | Резерв | EN_N | IS1 | IS0 | IE1 | IE0 | ||
Начальное значение | 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 такту системной частоты.