Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
Энергоатомиздат. 1985. 184 с.
2000. 528 с.
1990. 496 с.
pp. 426 429.
ПРИЛОЖЕНИЕ 1
Инструкции процессоров AVR.
Ниже приведен набор команд процессоров AVR, более детальное описание их можно найти в AVR Data Book [16,19].
Таблица А.1. Арифметические и логические инструкции.
МнемоникаОперандыОписаниеОперацияФлагиЦиклыADDRd,RrСуммирование без переносаRd = Rd + RrZ,C,N,V,H,S1ADCRd,RrСуммирование с переносомRd = Rd + Rr + CZ,C,N,V,H,S1SUBRd,RrВычитание без переносаRd = Rd - RrZ,C,N,V,H,S1SUBIRd,K8Вычитание константыRd = Rd - K8Z,C,N,V,H,S1SBCRd,RrВычитание с переносомRd = Rd - Rr - CZ,C,N,V,H,S1SBCIRd,K8Вычитание константы с переносомRd = Rd - K8 - CZ,C,N,V,H,S1ANDRd,RrЛогическое ИRd = Rd RrZ,N,V,S1ANDIRd,K8Логическое И с константойRd = Rd K8Z,N,V,S1ORRd,RrЛогическое ИЛИRd = Rd V RrZ,N,V,S1ORIRd,K8Логическое ИЛИ с константойRd = Rd V K8Z,N,V,S1EORRd,RrЛогическое исключающее ИЛИRd = Rd EOR RrZ,N,V,S1COMRdПобитная ИнверсияRd = $FF - RdZ,C,N,V,S1NEGRdИзменение знака (Доп. код)Rd = $00 - RdZ,C,N,V,H,S1SBRRd,K8Установить бит (биты) в регистреRd = Rd V K8Z,C,N,V,S1CBRRd,K8Сбросить бит (биты) в регистреRd = Rd ($FF - K8)Z,C,N,V,S1INCRdИнкрементировать значение регистраRd = Rd + 1Z,N,V,S1DECRdДекрементировать значение регистраRd = Rd -1Z,N,V,S1TSTRdПроверка на ноль либо отрицательностьRd = Rd RdZ,C,N,V,S1CLRRdОчистить регистрRd = 0Z,C,N,V,S1SERRdУстановить регистрRd = $FFNone1ADIWRdl,K6Сложить константу и словоRdh:Rdl = Rdh:Rdl + K6Z,C,N,V,S2SBIWRdl,K6Вычесть константу из словаRdh:Rdl = Rdh:Rdl - K6Z,C,N,V,S2MULRd,RrУмножение чисел без знакаR1:R0 = Rd * RrZ,C2MULSRd,RrУмножение чисел со знакомR1:R0 = Rd * RrZ,C2MULSURd,RrУмножение числа со знаком с числом без знакаR1:R0 = Rd * RrZ,C2FMULRd,RrУмножение дробных чисел без знакаR1:R0 = (Rd * Rr) << 1Z,C2FMULSRd,RrУмножение дробных чисел со знакомR1:R0 = (Rd *Rr) << 1Z,C2FMULSURd,RrУмножение дробного числа со знаком с числом без знакаR1:R0 = (Rd * Rr) << 1Z,C2
Таблица А.2. Инструкции ветвления.
МнемоникаОперандыОписаниеОперацияФлагиЦиклыRJMPkОтносительный переходPC = PC + k +1None2IJMPНетКосвенный переход на (Z)PC = ZNone2EIJMPНетРасширенный косвенный переход на (Z)STACK = PC+1, PC(15:0) = Z, PC(21:16) = EINDNone2JMPkПереходPC = kNone3RCALLkОтносительный вызов подпрограммыSTACK = PC+1, PC = PC+k+1None3/4*ICALLНетКосвенный вызов (Z)STACK = PC+1, PC = ZNone3/4*EICALLНетРасширенный косвенный вызов (Z)STACK = PC+1, PC(15:0) = Z, PC(21:16) =EINDNone4*CALLkВызов подпрограммыSTACK = PC+2, PC = kNone4/5*RETНетВозврат из подпрограммыPC = STACKNone4/5*RETIНетВозврат из прерыванияPC = STACKI4/5*CPSERd,RrСравнить, пропустить если равныif (Rd ==Rr) PC = PC 2 or 3None1/2/3CPRd,RrСравнитьRd -RrZ,C,N,V,H,S1CPCRd,RrСравнить с переносомRd - Rr - CZ,C,N,V,H,S1CPIRd,K8Сравнить с константойRd - KZ,C,N,V,H,S1SBRCRr,bПропустить если бит в регистре очищенif(Rr(b)==0) PC = PC+2 or 3None1/2/3SBRSRr,bПропустить если бит в регистре установленif(Rr(b)==1) PC = PC+2 or 3None1/2/3SBICP,bПропустить если бит в порту очищенif(I/O(P,b)==0) PC = PC+ or 3None1/2/3SBISP,bПропустить если бит в порту установленif(I/O(P,b)==1) PC = PC+2 or 3None1/2/3BRBCs,kПерейти если флаг в SREG очищенif(SREG(s)==0) PC = PC+k+1None1/2BRBSs,kПерейти если флаг в SREG установленif(SREG(s)==1) PC = PC+k+1None1/2BREQkПерейти если равноif(Z==1) PC = PC + k + 1None1/2BRNEkПерейти если не равноif(Z==0) PC = PC + k + 1None1/2BRCSkПерейти если перенос установленif(C==1) PC = PC + k + 1None1/2BRCCkПерейти если перенос очищенif(C==0) PC = PC + k + 1None1/2BRSHkПерейти если равно или большеif(C==0) PC = PC + k + 1None1/2BRLOkПерейти если меньшеif(C==1) PC = PC + k + 1None1/2BRMIkПерейти если минусif(N==1) PC = PC + k + 1None1/2BRPLkПерейти если плюсif(N==0) PC = PC + k + 1None1/2BRGEkПерейти если больше или равно (со знаком)if(S==0) PC = PC + k + 1None1/2BRLTkПерейти если меньше (со знаком)if(S==1) PC = PC + k + 1None1/2BRHSkПерейти если флаг внутреннего переноса установленif(H==1) PC = PC + k + 1None1/2BRHCkПерейти если флаг внутреннего переноса очищенif(H==0) PC = PC + k + 1None1/2BRTSkПерейти если флаг T установленif(T==1) PC = PC + k + 1None1/2BRTCkПерейти если флаг T очищенif(T==0) PC = PC + k + 1None1/2BRVSkПерейти если флаг переполнения установленif(V==1) PC = PC + k + 1None1/2BRVCkПерейти если флаг переполнения очищенif(V==0) PC = PC + k + 1None1/2BRIEkПерейти если прерывания разрешеныif(I==1) PC = PC + k + 1None1/2BRIDkПерейти если прерывания запрещеныif(I==0) PC = PC + k + 1None1/2* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI, необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ свыше 128KB , добавьте пять циклов плюс по три цикла на каждое ожидание.
Таблица А.3. Инструкции передачи данных.