Смекни!
smekni.com

Розробка структурної схеми процесорного елемента та мікропрограми керування для реалізації команди (стр. 3 из 3)

Розроблена мікропрограма для керування виконанням команди “SBRRm, B” написана на машинній мові з використанням команд мікроконтроллера сімейства MCS-51. Створена мікропрограма виконуєтьсяза 7 тактів процесора, з них 4 такти — це вибірка команди (коду операції та операнду), а 3 інших — безпосереднє виконання команди. Це дуже проста команда, що не потребує запитів до пам’яті, тому на її виконання треба всього 3 такти.

В результаті виконання роботи я поглибив свої знання про будову, принципи роботи процесорів та мікропроцесорних систем різних архітектур.


СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Будіщев М.С. Електротехніка, електроніка та мікропроцесорна техніка. – видавництво «Афіша», 2001.–421с.

2. А. Буняк. Електроніка та мікросхемотехніка. – СМП «Астон», 2001.

3. Н. Ершова, О. Ивашенков, С. Курсков, Микропроцессоры, Пособие к курсам "Микропроцессорные средства" и "Автоматизирован­ные системы для научных исследований"— http://dfe3300.karelia.ru/koi/posob/pos.html

4. Система команд AVR-контроллеров — http://ntlib.chat.ru/avr/instr.htm

5. Документація на мікроконтроллерифірмиIntel MCS-51/151/251. (каталог pdfфайлів) — http://www.intel.com/design/mcs51/docs_mcs51.htm


ДОДАТКИ

Додаток 1

Рис 2.Структурна схема процесорного елемента


Додаток 2

Розшифровка позначень на схемі

Таблиця1

Символьнепозначення Опис
R0, R1, R2, R3 Регістри загального призначення, використовуються програмістами для потреб програм.
Z Регістр, призначені для тимчасового збереження результату виконання певної операції арифметико-логічним пристроєм.
Y Регістр для тимчасового збереження операнду, який потрібно обробити в АЛП.
IR (Instruction register) Регістр, в якому зберігається код машинної команди.
ALU (Arithmetical-logical unit)Арифметико-логічний пристрій, АЛП
PC (Program counter) Лічильник команд
MAR (Memory address register) Регістр адрес пам’яті
MDR (Memory data register) Регістр даних пам’яті
PSW (Program status word) Регістр стану

Додаток 3

Лістинг мікропрограми

consts.inc

R0_inEQUp1.0

R0_out EQU p1.1

R1_in EQU p1.2

R1_out EQU p1.3

R2_in EQU p1.4

R2_out EQU p1.5

R3_in EQU p1.6

R3_out EQU p1.7

PC_in EQU p3.0

PC_out EQU p3.1

PC_to_MAR EQU p3.2

MFC EQU p3.3

MAR_in EQU p3.4

MRead EQU p3.5

MDR_in EQU p3.6

MDR_out EQU p3.7

IRcop_in EQU p0.0

IRcop_out_mc EQU p0.1

Y_in EQU p0.2

Y_out EQU p0.3

Z_in EQU p0.4

Z_out EQU p0.5

CLK EQU p0.6

PC_inc EQU p0.7

IR EQU p2

ALUe0 EQU p4.0

ALUe1 EQU p4.1

ALUe2 EQU p4.2

ALUe3 EQU p4.3

ALUm EQU p4.4

IRoff_in EQU p4.5

IRoff_out EQU p4.6

prog.asm

INCLUDE 80512.mc

INCLUDE consts.inc

Start:

fetch:

; ВИБІРКА КОМАНДИ

;...

; вибірка команди

;...

deshifr:

; ДЕШИФРАЦІЯ КОДУ КОМАНДИ

; Розпізнавання команди і перехід на відповідний код її виконання

MOVA, IR

ANLA, 11111100b ; залишаємо в А лише код операції, без номера регістру

my_cmd:

CJNE A, 00000100b, other_cmd

JMP SBR_Rm_B

other_cmd:

; ...

; ...

; ...

unknown_code:

JMP fetch

; ----------------------------------------------------------

; ВИКОНАННЯ КОМАНДИ

SBR_Rm_B:

; IRoff_out , Yin

SETB IRoff_out ; Пересилка бітової маски IRoff - > Y

SETB Y_in ;

SETB CLK ; Сигнал синхронізації

CLR CLK

CLR IRoff_out

CLR Y_in

; Rm_out, Yout, OR, Zin

; вибір потрібного регістру для пересилки в Y

MOVA, IR

ANLA, 00000011b ; залишаємо в А лише сам номер регістра

regR0out:

CJNE A, 00000000b, regR1out

SETB R0_out

JMP end_case1

regR1out:

CJNE A, 00000001b, regR2out

SETB R1_out

JMP end_case1

regR2out:

CJNE A, 00000010b, regR3out

SETB R2_out

JMP end_case1

regR3out:

SETB R3_out

end_case1:

SETB R1_out

SETB Y_out

SETB ALUe0 ; Код операції OR - 0001b

CLR ALUe1 ;

CLR ALUe2 ;

CLR ALUe3 ;

SETB Z_in ; результат - > Z

SETB CLK ; Сигнал синхронізації

CLR CLK

CLR R0_out ; закриваємо всі регістри

CLR R1_out ;

CLR R2_out ;

CLR R3_out ;

CLR Y_out

CLR ALUe0

CLR Z_in

; Z out , Rm_in , End

SETBZ_out ; пересилка результату в регістр R1

; вибір потрібного регістру для пересилки: Z- > Rm

regR0in:

CJNEA, 00000000b, regR1in; в А - лише номер потрібного регістра

SETB R0_in

JMP end_case2

regR1in:

CJNE A, 00000001b, regR2in

SETB R1_in

JMP end_case2

regR2in:

CJNE A, 00000010b, regR3in

SETB R2_in

JMP end_case2

regR3in:

SETB R3_in

end_case2:

SETB CLK ; Сигнал синхронізації

CLR CLK

CLR Z_out

CLR R0_in ; закриваємо всі регістри

CLR R1_in ;

CLR R2_in ;

CLR R3_in ;

JMP fetch ; вибираєм наступну команду