Отчет МТ11-102(Группа 5) (Примеры старых отчётов)
Описание файла
Файл "Отчет МТ11-102(Группа 5)" внутри архива находится в папке "Примеры старых отчётов". Документ из архива "Примеры старых отчётов", который расположен в категории "". Всё это находится в предмете "системы автоматического управления (сау) (мт-11)" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "системы автоматического управления (сау) (мт-11)" в общих файлах.
Онлайн просмотр документа "Отчет МТ11-102(Группа 5)"
Текст из документа "Отчет МТ11-102(Группа 5)"
МГТУ им. Н.Э.Баумана
Отчёт по лабораторным работам
по курсу
«Системы автоматизированного управления»
Группа: МТ11-102
Выполнили: Арутюнян З.Р.
Березин С.А.
Березина Е.Ю.
Тарасов К.Ю.
Преподаватель: Рябов В.Т.
Москва, 2015 год
Цель лабораторных работ: получить навыки программирования микроконтроллеров на языке программирования «Ассемблер».
Лабораторная работа 1
«НАСТРОЙКА И ИСПОЛЬЗОВАНИЕ ДИСПЕТЧЕРА ПРОЦЕССОВ»
Задача: настроить резидентный таймер на заданный тик, подобрать задержку таймера. Задержка: 2,5 мс
Расчёт и отладка
Таймер считает машинные циклы микроконтроллера, длительность которых определяется подключенным к нему кварцевым резонатором. Частота резонатора составляет 11000кГц. Машинный цикл длится 12 периодов резонатора и составляет 12/11 мкс. За 2,5 мс должно пройти 2500х11/12 = 1100 = 2292 машинных цикла. 65535 - 2292 = 63243 = F70B. Значит, таймер должен считать от числа F70B и в ячейку 24h должно быть записано F7, а в ячейку 25h – 0В. Но это приблизительные значения, их нужно уточнить наилучшим образом экспериментально и здесь нам поможет сам диспетчер процессов вместе с аппаратно-программным эмулятором.
Средства эмулятора позволяют точно следить за временем. Чтобы начальная инициализация диспетчера не влияла на точность расчетов, задаем точку останова по адресу 4Eh. Это адрес перед входом в петлю диспетчера, после чего диспетчер начнет нормально работать. Запустив программу, в точке останова обнуляем счетчик времени эмулятора и снова запустим программу на исполнение. Подождем около минуты и остановим программу. Из окна службы времени считаем значение времени исполнения программы с точностью до микросекунды и определяем «тик» диспетчера:
Тик = Time x 10/DPTR.
Здесь время умножается на 10, так как наш процесс перезапускался через 10 тиков. Многократно повторяя перезапуск, подбираем значение ячейки 25h так, чтобы время тика наилучшим образом соответствовало заданному значению. Необходимо найти значение ячейки, дающее наилучший результат. Данные подбора такого значения приведены ниже.
Номер измерения | 1 | 2 | 3 | 4 |
Число в регистрах таймера |
|
|
|
|
Реальная задержка, мкс |
|
|
|
|
По результатам, представленным в таблице, видно, что наилучший результат под номером 3, где при установке в таймер задержки F71С реальная задержка составляет 2499,7 мкс наиболее близкое значение к заданной задержке в 2500,0 мкс.
Текст программы:
ORG 0
LJMP 2Bh ;-------v dispetcher------------
ORG 0bh
LJMP 0D0h ;-------vector timer-----------
ORG 2bh ;-------dispetcher--------------
MOV SP,#64h
MOV 24h,#0F7h
MOV 25h,#0Bh
MOV TH0,24h
MOV TL0,25h
MOV TMOD,#11h
MOV TCON,#10h
MOV IE,#82h
CLR A
MOV 20h,A
MOV 21h,A
MOV 26h,A
LCALL 0162h
org 4fh
PR0: JNB 21h.0h,PR1
JNB 20h.0h,PR1
CLR 21h.0h
LCALL 149h
JNB 26h.0h,PR0
PR1: JNB 21h.1h,PR2
JNB 20h.1h,PR2
CLR 21h.1h
LCALL 014Ch
JNB 26h.0h,PR0
PR2: JNB 21h.2h,PR3
JNB 20h.2h,PR3
CLR 21h.2h
LCALL 14Fh
JNB 26h.0h,PR0
PR3: JNB 21h.3h,PR4
JNB 20h.3h,PR4
CLR 21h.3h
LCALL 0152h
JNB 26h.0h,PR0
PR4: JNB 21h.4h,PR5
JNB 20h.4h,PR5
CLR 21h.4h
LCALL 0155h
JNB 26h.0h,PR0
PR5: JNB 21h.5h,PR6
JNB 20h.5h,PR6
CLR 21h.5h
LCALL 0158h
JNB 26h.0h,PR0
PR6: JNB 21h.6h,PR7
JNB 20h.6h,PR7
CLR 21h.6h
LCALL 015Bh
JNB 26h.0h,PR0
PR7: JNB 21h.7h,PR0
JNB 20h.7h,PR0
CLR 21h.7h
LCALL 015Eh
JNB 26h.0h,PR0
SJMP PR0
ORG 0D0h ;---------timer--------------
CLR EA
PUSH PSW
PUSH ACC
SETB RS0
MOV TH0,24h
MOV TL0,25h
DJNZ 23h,FL0
DJNZ R0,FH1
SETB 21h.0h
FH1: DJNZ R1,FH2 ;-----macro_tick--------------
SETB 21h.1h
FH2: DJNZ R2,FH3
SETB 21h.2h
FH3: DJNZ R3,FH4
SETB 21h.3h
FH4: DJNZ R4,FH5
SETB 21h.4h
FH5: DJNZ R5,FH6
SETB 21h.5h
FH6: DJNZ R6,FH7
SETB 21h.6h
FH7: DJNZ R7,EHDMT
SETB 21h.7h
EHDMT: SJMP 013Bh ;-------end_mackro_tick--------
FL0: JB 22h.0h,FL1 ;-------micro_tick-------------
DJNZ R0,FL1
SETB 21h.0h
FL1: JB 22h.1h,FL2
DJNZ R1,FL2
SETB 21h.1h
FL2: JB 22h.2h,FL3
DJNZ R2,FL3
SETB 21h.2h
FL3: JB 22h.3h,FL4
DJNZ R3,FL4
SETB 21h.3h
FL4: JB 22h.4h,FL5
DJNZ R4,FL5
SETB 21h.4h
FL5: JB 22h.5h,FL6
DJNZ R5,FL6
SETB 21h.5h
FL6: JB 22h.6h,FL7
DJNZ R6,FL7
SETB 21h.6h
FL7: JB 22h.7h,ENDTM
DJNZ R7,ENDTM
SETB 21h.7h ;----end_mickro_tick-----------
ENDTM: POP ACC
POP PSW
SETB EA
RETI
;--------------------USER PROGRAMM MEMORY----------------------
;------------------------user vectors--------------------------
ORG 149h ;-------name thread0-----------
LJMP TIC25
ORG 14Ch ;-------name thread1-----------
; LJMP NAME1
ORG 14Fh ;-------name thread2-----------
; LJMP NANE2
ORG 152h ;-------name thread3-----------
; LJMP NAME3
ORG 155h ;-------name thread4-----------
; LJMP NAME4
ORG 158h ;-------name thread5-----------
; LJMP NAME5
ORG 15Bh ;-------name thread6-----------
; LJMP NAME6
ORG 15Eh ;-------name thread7-----------
; LJMP NAME7
ORG 162h ;-------name user-start programm
; LJMP START
;----------------------USER PROGRAMM----------------------------
;------------------user start programm--------------------------
START:
MOV DPTR,#0 ;---obnulit' registr------------
CLR 22h.0h ;---sbros registra--------------
MOV 08h,#0Ah ;---vosstanavlivaem zaderzhku---
SETB 20h.0h ;---ustanovka nulevogo processa-
RET ;---vozvrat---------------------
;-----------------------user quants---------------------------
TIC25:
INC DPTR ;----uvelichit' dptr na 1-------
MOV 08h,#0Ah ;---vosstanavlivaem zaderzhku---
RET ;---vozvrat---------------------
;----------------------------------------------
END
Лабораторная работа 2
«ОТЛАДКА ДИСПЕТЧЕРА ПРОЦЕССОВ»
Задача: написать программу "дворник".
Программа "дворник" подразумевает то, что после нажатия на клавиатуре кнопки "пуск" шаговый двигатель должен сделать полный оборот (56 шагов), остановиться и сделать полный оборот в другую сторону. Так цикл повторяется, пока не будет нажата кнопка "стоп". Была изменена подпрограмма "step" программы из методических указаний к лабораторным работам, остальные части программы остались неизменны.
Сама программа проверена и отлажена на шаговом двигателе. Она работает корректно и в полном объёме.
Текст программы:
ORG 0
LJMP 2Bh ;-------v dispetcher------------
ORG 0bh
LJMP 0D0h ;-------vector timer-----------
ORG 2bh ;-------dispetcher--------------
MOV SP,#64h
MOV 24h,#0FCh
MOV 25h,#82h
MOV TH0,24h
MOV TL0,25h
MOV TMOD,#11h
MOV TCON,#10h
MOV IE,#82h
CLR A
MOV 20h,A
MOV 21h,A
MOV 26h,A
LCALL 0162h
org 4fh
PR0: JNB 21h.0h,PR1
JNB 20h.0h,PR1
CLR 21h.0h
LCALL 149h
JNB 26h.0h,PR0
PR1: JNB 21h.1h,PR2
JNB 20h.1h,PR2
CLR 21h.1h
LCALL 014Ch
JNB 26h.0h,PR0
PR2: JNB 21h.2h,PR3
JNB 20h.2h,PR3
CLR 21h.2h
LCALL 14Fh
JNB 26h.0h,PR0
PR3: JNB 21h.3h,PR4
JNB 20h.3h,PR4
CLR 21h.3h
LCALL 0152h
JNB 26h.0h,PR0
PR4: JNB 21h.4h,PR5
JNB 20h.4h,PR5
CLR 21h.4h
LCALL 0155h
JNB 26h.0h,PR0
PR5: JNB 21h.5h,PR6
JNB 20h.5h,PR6
CLR 21h.5h
LCALL 0158h
JNB 26h.0h,PR0
PR6: JNB 21h.6h,PR7
JNB 20h.6h,PR7
CLR 21h.6h
LCALL 015Bh
JNB 26h.0h,PR0
PR7: JNB 21h.7h,PR0
JNB 20h.7h,PR0
CLR 21h.7h
LCALL 015Eh
JNB 26h.0h,PR0
SJMP PR0
ORG 0D0h ;---------timer--------------
CLR EA
PUSH PSW
PUSH ACC
SETB RS0
MOV TH0,24h
MOV TL0,25h
DJNZ 23h,FL0
DJNZ R0,FH1
SETB 21h.0h
FH1: DJNZ R1,FH2 ;-----macro_tick--------------
SETB 21h.1h
FH2: DJNZ R2,FH3
SETB 21h.2h
FH3: DJNZ R3,FH4
SETB 21h.3h
FH4: DJNZ R4,FH5
SETB 21h.4h
FH5: DJNZ R5,FH6
SETB 21h.5h
FH6: DJNZ R6,FH7
SETB 21h.6h
FH7: DJNZ R7,EHT
SETB 21h.7h
EHT: SJMP 013Bh ;-------end_mackro_tick--------
FL0: JB 22h.0h,FL1 ;-------micro_tick-------------
DJNZ R0,FL1
SETB 21h.0h
FL1: JB 22h.1h,FL2
DJNZ R1,FL2
SETB 21h.1h
FL2: JB 22h.2h,FL3
DJNZ R2,FL3
SETB 21h.2h
FL3: JB 22h.3h,FL4
DJNZ R3,FL4
SETB 21h.3h
FL4: JB 22h.4h,FL5
DJNZ R4,FL5
SETB 21h.4h
FL5: JB 22h.5h,FL6
DJNZ R5,FL6
SETB 21h.5h
FL6: JB 22h.6h,FL7
DJNZ R6,FL7
SETB 21h.6h
FL7: JB 22h.7h,ENDTM
DJNZ R7,ENDTM
SETB 21h.7h ;----end_mickro_tick-----------
ENDTM: POP ACC
POP PSW
SETB EA
RETI
;--------------------USER PROGRAMM MEMORY----------------------
ORG 149h ;-------name thread0-----------
LJMP STEP
ORG 14Ch ;-------name thread1-----------
LJMP KLAV
ORG 14Fh ;-------name thread2-----------
; LJMP NANE2
ORG 152h ;-------name thread3-----------
; LJMP NAME3
ORG 155h ;-------name thread4-----------
; LJMP NAME4
ORG 158h ;-------name thread5-----------
; LJMP NAME5
ORG 15Bh ;-------name thread6-----------
; LJMP NAME6
ORG 15Eh ;-------name thread7-----------
; LJMP NAME7
ORG 162h ;-------name user-start programm
LJMP START
;----------------------USER PROGRAMM----------------------------
;------------------user start programm--------------------------
START: MOV R3,#0Ch ;00001100 в ФАЗУ
MOV R2,#0Ah ;00001010 в МАСКУ
CLR 20h.0h ;снять статус кванта STEP
MOV P1,R3 ;фазу в порт
MOV R1,#20h ;задержка кванта STEP 32 тика
MOV 08h,R1 ;переписать ее в регистр задержек кванта STEP
MOV 23h,#0FFh ;задержка кванта STEP
SETB 20h.1h ;установить статус кванта KLAV
MOV 09h,#80h ;записать 128 в регистр задержек кванта KLAV
MOV 28h,#0FFh ;можно не делать
MOV 22h,#00 ;все задержки в микротиках
MOV 30h,#38h ;загрузить в 30 ячейку константу 56
RET ;возврат из ПП
;-----------------------Step_SM---------------------------
STEP:
CLR A ;очистить аккумулятор
ORL A,P1 ;фазу в аккумулятор
XRL A,R2 ;исключающее или фазы и маски
MOV P1,A ;результат в порт
XRL 02h,#0Fh ;исключающее или и маски и 0Fh
MOV 08h,R1 ;установить задержку кванту из R1
MOV R3,A ;новую фазу в R3
DJNZ 30h,M00 ;вычесть из счетчика шагов 1 и в М00, если не 0
MOV 30h,#38h ;загрузить в 30 ячейку константу 56
XRL 02,#0Fh ;реверс
M00: RET ;возврат из пп
;------------------------KLAV--------------------------
KLAV: ORL P1,#0F0h
;-------------------------p1.7-----------------
P1_7: JB P1.7,N_P1_7
JNB 28h.7h,P1_6
LCALL PUSK_STOP
INV7: CPL 28h.7h
SJMP P1_6
N_P1_7: JB 28h.7h,P1_6
SJMP INV7
;------------------------p1.6-------------------
P1_6: JB P1.6,N_P1_6
JNB 28h.6h,P1_5
LCALL REVERS
INV6: CPL 28h.6h
SJMP P1_5
N_P1_6: JB 28h.6h,P1_5
SJMP INV6
;------------------------p1.5-------------------
P1_5: JB P1.5,P1_4
LCALL FASTER
;------------------------p1.4-------------------
P1_4: JB P1.4,EKL
LCALL SLOWLY
EKL: RET
;-----------------------------------------------
PUSK_STOP:
CPL 20h.0h
MOV P1,#0F0h
JNB 20h.0h,ENDPS
MOV P1,R3
ENDPS: RET
;-----------------------------------------------
REVERS:
XRL 02,#0Fh
RET
;-----------------------------------------------
SLOWLY:
INC R1
RET
;----------------------------------------------
FASTER:
DEC R1
RET
;----------------------------------------------
END