Розроблена мікропрограма для керування виконанням команди “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 ; вибираєм наступну команду