Рябов В.Т. - Разработка и отладка программного обеспечения микропроцессорной системы управления на базе однокристальных микроЭВМ, страница 10
Описание файла
PDF-файл из архива "Рябов В.Т. - Разработка и отладка программного обеспечения микропроцессорной системы управления на базе однокристальных микроЭВМ", который расположен в категории "". Всё это находится в предмете "системы автоматического управления (сау) (мт-11)" из 8 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "системы автоматического управления (сау)" в общих файлах.
Просмотр PDF-файла онлайн
Текст 10 страницы из PDF
Задание на лабораторную работу №2"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ УПРАВЛЕНИЯ ШАГОВЫМДВИГАТЕЛЕМ.1. Изучить методы разработки и отладки программного обеспечения (ПО) для локальных микроконтроллеров на однокристальных микроЭВМ.2. Изучить устройство, работу и программирование шагового двигателя. Сколькозубьев на статоре и роторе шагового двигателя ДШИ 200, делающего 200 шагов наоборот?3. Составить и оттранслировать программу управления ШД с помощью клавиатуры.4.
Откомментировать квант опроса клавиатуры.Первые четыре пункта следует выполнить в качестве домашнего задания.5. Ускорение и замедление двигателя слишком мало заметно на малых скоростяхвращения, как это исправить?6. Сохранить и распечатать текст программного обеспечения.7. Сохранитьираспечататьдиассемблированныйаппаратного эмулятора.- 34 -кодпамятипрограммно-ПРИЛОЖЕНИЕП1. Система команд микроконтроллеров семействаMCS-51.Таблица 1. ГРУППА КОМАНД ПЕРЕДАЧИ ДАННЫХНазвание командыМнемокодЦиклы1Байты1ОперацияMOV A, RnКод операции11101rrПересылка в аккумулятор из регистра(n=0-7)Пересылка в аккумулятор прямо адресуемого байтаПересылка в аккумулятор байта изРПД (i=0,1)Загрузка в аккумулятор константыПересылка в регистр из аккумулятораПересылка в регистр прямо адресуемого байтаЗагрузка в регистр константыПересылка по прямому адресу аккумулятораПересылка по прямому адресу регистраПересыпка прямо адресуемого байтапо прямому адресуПересылка байта из РПД по прямомуадресуПересылка по прямому адресу константыПересылка в РПД из аккумулятораПересылка в РПД прямо адресуемогобайтаПересылка в РПД константыЗагрузка указателя данныхПересылка в аккумулятор байта изПППересылка в аккумулятор байта изПППересылка в аккумулятор байта изВПДПересылка в аккумулятор байта израсширенной ВПДПересылка в ВПД из аккумулятораПересылка в расширенную ВПД изаккумулятораЗагрузка в стекMOV A, ad1110010112(A)(ad)MOV A, @R11110011i11(A)((R1))MOV A, #dMOV Rn, AMOV Rn, ad01101001111irrr1010rrr112212(A)#d(Rn)(A)(Rn)(ad)MOV Rn, #dMOV ad, A01111rrr111101012112(Rn)#d(ad)(A)MOV ad, Rn10001rrr22(ad)(Rn)MOV add, ads1000010123(add)(ads)MOV ad, @Pi1000011i22(ad)((Ri))MOV ad, #d0111010123(ad)#dMOV @Ri, AMOV @Ri, ad1111011i0110011i1212((Ri))(A)((Ri))(ad)MOV @Ri, #dMOV DPTR, #d16MOVCА,@А+DPTRMOVC A,@A+PC0111011i100100111001001i122211((Ri))#d(DPTR)#d16(А) ((А)+(DРТR))1000001i21(A)((A)+(PC))MOVX А,@Ri1110001i21(A)((Ri))MOVX A,@DPTR1110000021(A)((DPTR))MOVX @Ri, AMOVX @DPTR,A1111001i111100002211((Ri))(A)((DPTR))(A)PUSH ad1100000022Извлечение из стекаPOP ad1101000022Обмен аккумулятора с регистромОбмен аккумулятора с прямо адресуемым байтомОбмен аккумулятора с байтом из РПДОбмен младшей тетрады аккумулятора с младшей тетрадой байта из РПДXCH A, RnXCH A, ad11001rrr110001011112(SP)(SP)+1,((SP))(ad)(ad)((SP)),(SP)(SP)-1(A)(Rn)(A)(ad)XCH A, @RiXCHO A, @Ri1100011i1101011i1111(A)((Ri))(A0–A3)(Ri)0-3- 35 -(A)(Rn)Таблица 2.
ГРУППА КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯHaзвание командыДлинный переход и полном объёмеАбсолютныйпереходвнутристраницы в 2 КбКороткий относительный переходвнутри страницы в 256 БайтКосвенный относительный переходПереход, если аккумулятор равеннулюПереход, если аккумулятор не равен нулюПереход, если перенос равен единицеПереход, если перенос равен нулюМнемокодLJMP ad16КОП00000010Ц2Б3Операция(PC)ad16AJMP ad1122SJMP relА10А9А8 000011000000022JМР @А+DPTR0111001121(РС)(РС)+2,(PC)(PC)+rel(РС)(РС)+2,(PC)(PC)+rel(РС)(А)+(DPTR)JZ rel0110000022JNZ rel0111000022JC rel0100000022JNC rel0101000022Переход, если бит равен единицеJB bit, rel0010000023Переход, если бит равен нулюJNB bit, rel0011000023Переход, если бит установлен, споследующим сбросом бита.Декремент регистра и переход, если не нульJВС bit, rel0001000023DJNZ Rn, rel11011rrr22Декремент прямо адресуемогобайта и переход, если не нульDJNZ ad, rel1101010123Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равноСравнение аккумулятора с константойСравнение регистра с константойи проход, если не равноСравнение байта РПД с константой и переход, если не равноCJNE A, ad, rel1011010123CJNE A, #d, rel1011010023СJNE Rn, #d, relA10A9A8100101011011i2223CJNE @Ri, #d,relДлинный вызов подпрограммыLCALL ad160001001023Абсолютный вызов подпрограммыв пределах страницы в 2 КбACALL ad110001001022Возврат из подпрограммыRET0010001021Возврат из подпрограммы обработки прерыванияRETI0011001021Холостая командаNOP0000000011- 36 -(РС)(РС)+2,при (А)=0:(PC) (PC)+rel(РС)(РС)+2, при (А)0:(PC)(PC)+rel(РС)(РС)+2, при (С)=1:(РС)(РС)+rel(PC)(PC)+2, пpи (С)=0:(PC)(PC)+rel(PC)(PC)+3, пpи (b)=1:(PC)(PC)+rel(PC)(PC)+3, пpи (b)=0:(PC)(PC)+rel(РС)(РС)+3,при(b)=1:(b)0, (PC)(PC)+rel.(PC)(PC)+2, (Rn)(Rn>1,пpи(Rn)0:(PC)(PC)+rel(PC)(PC)+2, (ad)(ad)1,при(ad)0:(PC)(PC)+rel(PC)(РС)+3,при(A)(ad): РС)(РС)+rel(PC)(PC)+3,пpи (A)#d:(PC)(PC)+rel(PC)(PC)+3, npи (Rn)d:(PC)(PC)+rel(PC)(PC)+3,при((Ri))#d:(PC)(PC)+rel(РC)(РС)+З, (SP)+(SP)+l,((SP))(PC0-7),(SP)(SP)+1, ((SP))(PC815), ((SP))=(PC0/15)(PC)ad11, (SP)(SP)+1,((SP))(PC0-7),(SP)(SP)+1, ((SP))(PC811)(PC8-15)((SP)),(SP)(SP)-1,(PC8-15)((SP)),(SP)-(SP)-1(PC8-15)((SP)),(SP)(SP)-1,(PC0-7)((SP)), (SP)(SP)1(PC)(PC)+1Таблица 3.
ГРУППА КОМАНД АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙНазвание командыСложение аккумулятора с регистром(n=0-7)Сложение аккумулятора с прямо адресуемым байтомСложение аккумулятора с байтом изРПДСложение аккумулятора с константой .Сложение аккумулятора с регистром ипереносомСложение аккумулятора с прямо адресуемым байтом и переносомСложение аккумулятора с байтом изРПД и переносомСложение аккумулятора с константой ипереносомДесятичная коррекция аккумулятораВычитание из аккумулятора регистра изаемаВычитание из аккумулятора прямо адресуемого байта и заемаВычитание из аккумулятора байта РПДи заемаВычитание из аккумулятора константыи заемаИнкремент аккумулятораИнкремент регистраИнкремент прямо адресуемого байтаИнкремент байта а РПДИнкремент указателя данныхДекремент аккумулятораДекремент регистраДекремент прямо адресуемого байтаДекремент байта в РПДУмножение аккумулятора на регистр ВДеление аккумулятора на регистр ВМнемокодADD A, RnКОП00101rrrЦ1Б2Операция(A)(A)+(Rn)ADO A, ad0010010112(A)(A)+(ad)ADO A, @R10010011111(A)(A)+((Ri))ADD A, #dADDC A, Rn0010010000111rrr1121(A)(A)+#d(А)(А)+(Rn)+(С)ADD A, ad0011010112(A)(A)+(Rn)+(C)ADDC A, @Ri11(A)(A)+((Ri))+(C)ADDC A, #d00110100001001110011010012(A)(A)+#d+(C)DA ASUBB A, Rn1101010010011rrr1111(A)(A)-(C)-(Rn)SUBB A, Ad1001010111(A)(A)-(C)-((ad))SUBB A, @Ri1001011111(A)(A)-(C)-(Ri)SUBB A, #d1001010012(A)(A)-(C)-#dINC AINC RnINC adINC @RiINC DPTRDEC ADEC RnDEC adDEC @RiMUL ABDIV AB0000010000001rrr000001010000011i101000110001010000011rrr000101010001011i10100100100001001111211114411211112111(A)(A)+1(Rn)(Rn)+1(ad)(ad)+1((Ri))((Ri))+1(DPTR)(DPTR)+1(А)(А)-1(Rn)(Rn)-1(ad)(ad)-1((Ri))((Ri))-1(B)(A)(A)X(B)(B).(A)(A)/(B)Таблица 4.
ГРУППА КОМАНД ОПЕРАЦИЙ С БИТАМИНазвание командыСброс переносаСброс битаУстановка переносаУстановка битаИнверсия битаИнверсия переносаЛогическое И бита и переноса.Логическое ИЛИ бита и переносаЛогическое И инверсии бита и переносаЛогическое ИЛИ инверсии бита и переносаПересылка бита в переносПересылка переноса в битМнемокодCLR СCLR bitSETB СSETB bitCPL bitCPL СANL С, bitORL С, bitANL С, /bitORL C, /bitКОП11000011110000101101001111010010101100101011001110000010011100101011000010100000Ц1111112222Б1212212222Операция(С)0(b)0(С)1(b)1(b)(-b)(С)(-С)(С)(С)(b)(C)(C)(b)(C)(C)(-b)(C)(C)(-b)MOV C, /bitMOV bit, С10100010100100101222(C)(b)(b)(c)- 37 -Таблица 5.
ГРУППА КОМАНД ЛОГИЧЕСКИХ ОПЕРАЦИЙНазвание командыЛогическое И аккумулятора и регистраЛогическое И аккумулятора и прямо адресуемого байтаЛогическое И аккумулятора и РПДЛогическое И аккумулятора и конст.Логическое ИЛИ аккумулятора и прямоадресуемого байтаЛогическое ИЛИ аккумулятора и регистраЛогическое ИЛИ аккумулятора и РПДЛогическое ИЛИ аккумулятора и константыЛогическое ИЛИ прямо адресуемого байтаи аккумулятораЛогическое ИЛИ прямо адресуемого байтам константыЛогическое ИЛИ прямо адресуемого байтаи аккумулятораИсключающее ИЛИ аккумулятора м регистраИсключающее ИЛИ аккумулятора и прямоадресуемого байтаИсключающее ИЛИ аккумулятора и байтаРПДИсключающее ИЛИ аккумулятора и константыИсключающее ИЛИ прямо адресуемогобайта и аккумулятораИсключающее ИЛИ прямо адресуемогобайта и аккумулятораСброс аккумулятораИнверсия аккумулятораСдвиг аккумулятора влево через CСдвиг аккумулятора вправо циклическийСдвиг аккумулятора вправо через CОбмен местами тетрад в аккумулятореМнемокодANL A, RnANL A, adКОПO1Ollrrr01010101Ц11Б11Операция(А)(А)(Rn)(А)(А)(ad)ANL A, @RiANL A, #dORL A, ad01010111O1Ollrrr01000101111221(А)(А)((Ri))(А)(А)#d(A)(A)(ad)ORL A, RnORL A, @RiORL A, #dO1001rrr0100011101000100111112(A)(A)(Rn)(A)(A) ((R1))(A)(A) #dORL ad, A0100001012(ad)(ad) (A)ORL ad, #d0100001023(ad)(ad) #dORL ad, A0100001012(ad) (ad) (A)XRL A, RnOl101rrr11(A) (A)¤(Rn)XRL A, ad0110010112(A) (A)¤(ad)XRL A, @Ri0110011111(A) (A) ¤ ((R1))XRL A, #d0110010012(A) (A)¤ #dXRL ad, A0110001012(ad) (ad)(A)XRL ad, #d0110001123(ad) (ad) ¤ #dCLR ACPL ARLC ARR ARRC ASWAP A111001001111010000110011000000110001001111000100111111112111(A)0(A) - (A)П2.
Диспетчер процессов. Прокомментированный код программы0000 02002B LJMP 002B ;зона векторов... .........;аппаратных000B 0200D0 LJMP 00D0;прерываний устройств... .........;микроконтроллера;--------------Начальная настройка микроконтроллера---------------002B 758164 MOVSP,#64 ;перенос вершины стека002E 7524FC MOV24,#FC ;настройка Т/С0, установка начальных0031 752582 MOV25,#79 ;значений регистров для счета в 1 мс0034 85248C MOVTH0,24 ;перенос начальных значений0037 85258A MOVTL0,25 ;в регистры Т/С0003A 758911 MOVTMOD,#11;задание режимов Т/С0003D 758810 MOVTCON,#10;задание режимов Т/С00040 75A882 MOVIE,#82 ;разрешение прерываний от Т/С00043 E4CLRA;обнуление0044 F520MOV20,A;регистра статусов квантов0046 F521MOV21,A;регистра флагов квантов0048 120162 LCALL 0162 ;переход к П/П начальной настройки пользователя;---------Пультовая петля диспетчера квантов---------004C 00NOP;начало пультовой петли диспетчера 004A004D 00NOP004E 00NOP- 38 -004F 30080B JNB21.0(08),005D;если не установлен флаг PR0 – в 5D:0052 300008 JNB20.0(00),005D;если не установлен статус PR0 – в 5D:0055 C208CLR21.0(08);иначе, очистить флаг PR00057 120149 LCALL 0149;идти к вектору PR0 (запустить)005A 3030F2 JNB26.0(30),004C;если приоритет не круговой – в 4C:005D 30090B JNB21.1(09),006B;если не установлен флаг PR1 – в 6B:0060 300108 JNB20.1(01),006B;если не установлен статус PR1 – в 6B:0063 C209CLR21.1(09);иначе, очистить флаг PR10065 12014C LCALL 014C;идти к вектору PR1 (запустить)0068 3030E4 JNB26.0(30),004C;если приоритет не круговой – в 4C:006B 300A0B JNB21.2(0A),0079;если не установлен флаг PR2 – в 79:006E 300208 JNB20.2(02),0079;если не установлен статус PR2 – в 79:0071 C20ACLR21.2(0A);иначе, очистить флаг PR20073 12014F LCALL 014F;идти к вектору PR2 (запустить)0076 3030D6 JNB26.0(30),004C;если приоритет не круговой – в 4C:0079 300B0B JNB21.3(0B),0087;если не установлен флаг PR3 – в 87:007C 300308 JNB20.3(03),0087;если не установлен статус PR3 – в 87:007F C20BCLR21.3(0B);иначе, очистить флаг PR30081 120152 LCALL 0152;идти к вектору PR3 (запустить)0084 3030C8 JNB26.0(30),004C;если приоритет не круговой – в 4C:0087 300C0B JNB21.4(0C),0095;если не установлен флаг PR4 – в 95:008A 300408 JNB20.4(04),0095;если не установлен статус PR4 – в 95:008D C20CCLR21.4(0C);иначе, очистить флаг PR4008F 120155 LCALL 0155;идти к вектору PR4 (запустить)0092 3030BA JNB26.0(30),004C;если приоритет не круговой – в 4C:0095 300D0B JNB21.5(0D),00A3;если не установлен флаг PR5 – в А3:0098 300508 JNB20.5(05),00A3;если не установлен статус PR5 – в A3:009B C20DCLR21.5(0D);иначе, очистить флаг PR5009D 120158 LCALL 0158;идти к вектору PR5 (запустить)00A0 3030AC JNB26.0(30),004C;если приоритет не круговой – в 4C:00A3 300E0B JNB21.6(0E),00B1;если не установлен флаг PR6 – в B1:00A6 300608 JNB20.6(06),00B1;если не установлен статус PR6 – в B1:00A9 C20ECLR21.6(0E);иначе, очистить флаг PR600AB 12015B LCALL 015B;идти к вектору PR6 (запустить)00AE 30309E JNB26.0(30),004C;если приоритет не круговой – в 4C:00B1 300F0B JNB21.7(0F),00BF;если не установлен флаг PR7 – в BF:00B4 300708 JNB20.7(07),00BF;если не установлен статус PR7 – в BF:00B7 C20FCLR21.7(0F);иначе, очистить флаг PR700B9 12015E LCALL 015E;идти к вектору PR7 (запустить)00BC 808ESJMP 004C;возврат к началу пультовой петли...