Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

Энергоатомиздат. 1985. 184 с.

  • Уильямс Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. М.: Энергоатомиздат, 1988. 253с.
  • Угрюмов Е.П. Цифровая схемотехника. Спб.: БВХ Санкт-Петербург,
    2000. 528 с.
  • Алексенко А.Г., Шагурин И.И. Микросхемотехника. М.: Радио и связь,
    1990. 496 с.
  • Бродин Б.В., Шагурин И.И. Микроконтроллеры: Справочник. М.: ЭКОМ, 1999. 395 с.
  • Программируемые логические ИМС на КМОП-структурах и их применение. / П.П.Мальцев, Н.И.Гарбузов, А.П. Шарапов, А.А. Кнышев. М.: Энергоатомиздат, 1998. 158 с.
  • Соловьев В.В., Васильев А.Г. Программируемые логические интегральные схемы и их применение. Мн.: Беларуская наука, 1998. 270 с.
  • Bursky D. Embedded Logic and Memory Find a Home in FPGA. Electronic Design, 1999, №14, pp. 43-56.
  • Chang D., Mazek-Sadowska M. Dynamically Reconfigable FPGA. JEEE Transition on Computers, 1999, №6, pp. 565 578.
  • Bursky D. Advanced CPLD Architectures Challenge FPGA, Gas. Electronic Design, 1998, №22, pp. 78 86.
  • Takai Y. a.o. 250 Mbytes Synchronous DRAM Using a 3-Stage-Pipeline Architecture. JEEE. Journal of Solid-Stage Circuits. 1994, v.29, №4,
    pp. 426 429.
  • Лаптев В. Цифровой измеритель температуры на базе AVR микроконтроллера и RC-цепочки. Электронные компоненты, 2001. №2, с. 46 49.
  •  

    ПРИЛОЖЕНИЕ 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. Инструкции передачи данных.