Учебник съвременни микропроцесорни системи. Разработване на микропроцесорни системи Vst метод за проектиране на микропроцесорни системи

Учебник съвременни микропроцесорни системи.  Разработване на микропроцесорни системи Vst метод за проектиране на микропроцесорни системи
Учебник съвременни микропроцесорни системи. Разработване на микропроцесорни системи Vst метод за проектиране на микропроцесорни системи

Процесът на проектиране на микропроцесорни системи включва три етапа (фиг. 1.1): 1) система; 2) функционално-схемни; 3) отстраняване на грешки и оценка на производителността.

Ориз. 1.1. Етапи на проектиране на MPS

На етапа на проектиране на системата първо се извършва системен анализ на задачата, възложена на MPS, предназначението, основните свойства, нуждите, идеите за изпълнение, размера на финансирането и други характеристики, достатъчни за вземане на решение за пътеките на проектиране. са идентифицирани. След това функционалното поведение на системата и изискванията към нея се формулират от гледна точка на осигуряване на набор от изпълнявани функции, необходимата производителност, идентифициране на критични функции, определяне на състава на периферното оборудване на системата, структурата на входа и изхода. данни, характеристиките на потоците от данни и контролна информация. Разработват се разширен алгоритъм за функциониране на системата и формализирано описание на алгоритъма за работа на МПС. Следващата стъпка на етапа на проектиране на системата е да се определи броят на нивата на йерархията на MPS, връзките между тях и външната среда или система. Определят се изискванията към системната архитектура, извършва се разпределението на функциите, изпълнявани от хардуер и софтуер, обосновават се изискванията за интерфейси. Необходимо е да се балансират изискванията към хардуера и софтуера на системата, като се вземе предвид дадената скорост и възможността за намаляване на сложността и разходите и намаляване на времето за разработка. как повече функцииимплементиран в хардуера, толкова по-висока е производителността, но колкото по-сложна е системната архитектура и толкова по-дълго е времето за разработка.

Понастоящем, във връзка с развитието на възможностите на LSI и VLSI, има тенденция да се възлагат на хардуера такива функции, които доскоро се изпълняваха само програмно. Интеграция функции на софтуерав хардуерния дизайн, главно под формата на ROM фърмуер или "математически" чипове, посока, която все повече широко приложениев микропроцесорни системи. Много функции операционна системавече започват да се реализират по хардуерен метод чрез поставяне на програми в ROM чипове. Може би ще дойде ред и на хардуерното изпълнение на функциите на езиците за програмиране.

Важен моментетапът на проектиране на системата е изборът на елементната база, основният IPC, т.е. тип семейство микропроцесори и други LSI. Въз основа на този етап се изготвя техническа задача (TOR).

Етапът на проектиране на системата е предимно евристичен и резултатът от него е блокова схема на микропроцесорната система и технически спецификации, които посочват всички изисквания, на които трябва да отговаря разработеният MPS.

Функционалният и схемният етап е разделен на три области: разработка на хардуер, разработка софтуерни инструментии разработването на помощни средства, които от своя страна съдържат както хардуер, така и софтуер. Основните характеристики на този етап са следните:

1) необходимостта от съвместно разработване и отстраняване на грешки технически средстваИ софтуер, фокусирани върху специфична структура от технически средства;

2) използването на фундаментално нови методи и инструменти за разработване и отстраняване на грешки на микропроцесорни системи, като вътрешносхемни емулатори, анализатори на логика и сигнатура, комплекси за отстраняване на грешки и инструменти за автоматизация на програмирането;

3) силна взаимосвързаност и дори интеграция на етапите на проектиране, при които разработчикът трябва едновременно да има опит в проектирането на микропроцесорни системи, както и да разбира конкретна област на тяхното приложение.

На етапа на проектиране на функционална схема на базата блокова схема MPS разработва функционални и принципни схеми на технически средства, алгоритми и модули приложни програми. Този етап се характеризира с широкото използване на стандартна схема и софтуерни решенияи силната взаимозависимост на хардуера и софтуера, които трябва да се разработват паралелно на всички етапи. Етапът завършва с интегрирането на хардуер и софтуер, което започва етапа на отстраняване на грешки в целия MPS като цяло.

Отстраняването на грешки в MPS е най-отнемащият време етап, така че разработването на вградени инструменти за управление и методологията за използване на стандартни инструменти за отстраняване на грешки трябва да се обърне същото внимание като разработването на хардуер и софтуер. Отстраняването на грешки изисква вградени инструменти, софтуер и хардуер, както и специални устройства като анализатори на логика и сигнатура, комплекси за отстраняване на грешки и вътрешни емулатори. Вграждането на инструменти за диагностика и контрол донякъде разтяга и увеличава разходите за разработване на системата, но значително улеснява нейното отстраняване на грешки и по-нататъшна работа.

Проектирането на системата е завършено чрез експериментално тестване на разработения MPS в системата, за която е предназначен, чрез оценка на получените характеристики. Ако резултатите от оценката не отговарят на изискванията на ТЗ, тогава се извършва анализ на причините и въз основа на него се преработват отделните модули на MPS или цялата система като цяло.

Проектирането завършва с разработването на методическа подкрепа, съдържаща препоръки за рационално използване на проектирания MPS и цялата необходима документация.

Разглежданите етапи се провеждат като правило под формата на изследователска работа с участието на сравнително малък брой висококвалифицирани специалисти.

Допълнителните етапи на проектиране обикновено се извършват под формата на развойна работа и изискват участието на голям брой изпълнители.

логиката на прекъсването запомня нивото на приоритет на обслужваното прекъсване. Когато се изпълни инструкцията RET, нивото на приоритет се запазва и само прекъсването с по-високо ниво на приоритет може да бъде обслужено следващо. Инструкцията RETI се различава от инструкцията RET по това, че нулира нивото на приоритет, което позволява обслужването на заявки за прекъсване с ниско ниво на приоритет.

ДА СЕ типичните условни операции включват команди JZ и JNZ, JC

И JNC. Последните две са включени в булевата група. В командата CJNE първо се сравняват два байта, съгласно правилата за изваждане на цели числа.

И според резултата от сравнението се задава флаг C. След това, ако не съвпадат, се извършва разклоняване.

В инструкцията DJNZ като брояч може да се използва не само един от регистрите на текущата регистрова банка Rn, n=0...7, но и директно адресируема клетка от паметта за данни DSEG. При изпълнение на инструкцията броячът първо се намалява и ако съдържанието на брояча не е равно на нула, се извършва разклоняване.

3. Проектиране на микропроцесорни системи

Технологията за проектиране на MPS, базирана на микроконтролери, напълно отговаря на концепцията за непрекъснатост на процеса на проектиране и отстраняване на грешки на хардуерни и софтуерни компоненти, възприета в микропроцесорната технология. Важна характеристика на използването на микроконтролери е работата в реален мащабвреме, т.е. гарантирана реакция на външни събития в рамките на определен интервал от време. Очевидно е, че решаването на проблема за съвместно отстраняване на грешки на хардуерни и софтуерни компоненти в реално време с произволна структура и схема на микропроцесорна система е много сложна, скъпа и дългосрочна работа.

3.1. Етапи на проектиране

Характеристика на MPS е, че самите те са вградени (интегрирани) в някакъв обект. Това предполага, че разработчикът на MPS от този вид е изправен пред задачите на пълен цикъл на проектиране, от разработването на функциониращ алгоритъм до сложни тестове като част от продукт и евентуално поддръжка по време на производството. Основните етапи на проектиране на MPS са показани на фиг. 28.

Технически изисквания стартирайте цикъла на проектиране на MPS. Възможността за програмиране на микропроцесорна система стимулира клиента да й повери изпълнението на максимален брой функции. Критерият за избор трябва да бъде икономическата осъществимост на всяко увеличаване на количеството хардуер, което се определя в резултат на проучване на пазара на инструменти. от този тип, а максимално подобрение на показател цена/функционални възможности -

сти. На този етап явно или неявно се формулират изискванията към типа.

използван микропроцесор или микроконтролер.

Етап на разработване на алгоритъме най-отговорният

тъй като грешките на този етап се откриват при тестване на закона

произведен продукт и водят до скъпоструващо рециклиране на целия MPS.

Няколко варианта на алгоритъма се разработват за осигуряване

изпълнение на технически изисквания с помощта на разработените

по-ранни функционално-топологични модули. Основни опции

се различават в съотношението на количеството софтуер и апарати

Технически изисквания към микропроцесорната система

Корекция

алгоритъм

управление

Разработка на алгоритъм

Библиотека

функционален-

Разработване на структурата на хардуера и

топологичен

софтуерни инструменти

Корекция

Разработка на програма

Разработка на хардуер

Корекция

оригинален

(оригинален текст)

(схеми,

топология на платката)

топология

Излъчване на програмата

Монтаж на оформление

Отстраняване на грешки в програмата

Офлайн отстраняване на грешки

върху модела

оборудване

Съвместно отстраняване на грешки на софтуер и хардуер

системни инструменти в реално време

Интегриране на микропроцесорната система в продукта

Тест на продукта

Микропроцесорна система отговаряща на техн

нически изисквания

ратура. Критерият за избор е внедряването на максимален брой функции в софтуера при най-ниски хардуерни разходи, осигуряващи зададените показатели за производителност и надеждност в пълния диапазон от експлоатационни въздействия. Често определящо изискване е възможността за поставяне на програмния код във вътрешната памет на микроконтролера, което прави възможно защитата му от неоторизиран достъп. На този етап окончателно се определят типът на микроконтролера и най-важните рамкиращи схеми (памет, FPGA, интерфейс, ADC и др.).

На етапа на разработване на структурата на MPS накрая определя

Пълният състав от налични и предстои разработване хардуерни модули, протоколи за обмен между модулите, видове конектори. Тъй като MPS е вграден в продукта, се извършва предварително проучване на дизайна на платките. По отношение на софтуера се определят съставът и връзките на програмните модули, езикът за програмиране. Тук също се прави изборът на инструменти за проектиране и отстраняване на грешки.

Етап на създаване на програмаобразува вътрешен, често повтарящ се цикъл. Състои се от етапите на разработване на изходния код, превод, отстраняване на грешки в програмата на модела и коригиране на изходния код. Съдържанието на тези етапи по същество зависи от използваните системни инструменти. Понастоящем ресурсите на микропроцесорите и микроконтролерите са достатъчни, за да поддържат програмиране на езици от високо ниво. Това ви позволява да използвате всички предимства на структурираното програмиране, да разработвате софтуер като проект, като използвате отделно преведени модули. В момента най-мощният инструмент за разработване на софтуер за микропроцесори и микроконтролери са интегрирани системи за кръстосано програмиране на езици от високо ниво като Pascal, C. Например интегрираната система за разработка на софтуер Pascal-51 съдържа текстов редактор, компилатор с редактор на връзки, библиотека от стандартни функции за изпълнение и програма за отстраняване на грешки. Такива системи могат значително да намалят времето, прекарано в този вътрешен цикъл. Въпреки това програмите, написани на езици от високо ниво, са по-големи и по-бавни от подобни програминаписан на асемблер. Следователно асемблерният език продължава да се използва широко, особено при ограничени ресурси на MPS и необходимостта да се осигури изпълнението на контролирани времеви интервали.

На тези етапи се откриват и елиминират синтактични и логически грешки на програмата. Синтактичните грешки са свързани с нарушаване на синтаксиса на команди, директиви за транслатор и използване на недефинирани преди това етикети и имена. Логическите грешки причиняват неправилно функциониране на програмата. Те са свързани с програмни грешки (посочен е неправилен преход на разклоняване, неправилен

тази команда и т.н.) и грешки в алгоритъма. Съдържанието на тези етапи в разработването на програми на асемблер е дадено по-долу.

Етап на създаване на оборудванепредставлява друг вътрешен цикъл, който работи успоредно с първия. Съдържа развитието на общ електрическа схема, топологично оформление на платката, сглобяване на оформление и офлайн отстраняване на грешки. Тези етапи могат да се считат за завършени, след като магистралата на системата MPS "оживее" и чрез нея можете да получите достъп до паметта, входно-изходните устройства. Времето за изпълнение на този етап зависи от наличния набор от тествани функционално-топологични модули и квалификацията на разработчика. Общите системи за проектиране, използвани на етапа на въвеждане на електрическата схема и разработване на топологията, са

PCAD и OrCAD (CAD - computer aided design - компютърно проектиране). Ефективността на работата с тях значително зависи от обема на библиотеките от използвани елементи, достъпни за разработчика.

Етап на съвместно отстраняване на грешки в хардуера и софтуера в реално време е най-трудоемкотои непременно изисква използването на такива високопроизводителни инструменти като вътрешносхемен емулатор, ROM емулатор и логически анализатор. Изборът на един от изброените инструменти се определя от използвания метод за отстраняване на грешки. На този етап се идентифицират динамични грешки, които възникват по време на взаимодействието на софтуера и хардуера в реално време. Тези грешки се дължат на различни закъснения в разпространението на сигнали по линиите на системния гръбнак и взаимни смущения между линиите, които възникват, когато те са лошо позиционирани. Динамичните грешки са много по-трудни за откриванезащото тяхната нередовност.

За локализация динамични грешкиизползват се логически анализатори. Логическите нива на сигналите на системната шина или отделни шини и линии в режим на приемане се записват постоянно в паметта тип FIFO. Записът се прекратява при настъпване на избраното събитие (съвпадение на зададения и действителния адрес на SM, командни кодове на SM или поява на кратък шумов импулс). В този момент паметта съдържа цялата информация, предхождаща това събитие. Анализирайки историята на записаното в паметта събитие, можете също да определите причината за повредата в работата на MPS. Информацията на дисплея може да бъде представена в графичен вид, под формата на двоичен, шестнадесетичен код или командна мнемоника. Анализаторите на логическо състояние записват на тактовата честота на MPS. За коригиране на бързи процеси се използват временни логически анализатори, при които тактовата честота на запис в паметта значително надвишава тактовата честота на MPS.

Съвместното отстраняване на грешки на хардуера и софтуера в реално време се извършва с помощта на ROM емулатори и вътрешносхемни емулатори под контрола на компютър за разработка.

Проектиране на микропроцесорни системи

Въведение

Задачата за разработване на компютърни системи, използващи микроконтролери, изисква познаване и разбиране на принципите на тяхната работа, но основното е да се пишат програми за управление. Целта на тази книга е да научите как да проектирате микроконтролерни устройства.

Базовият чип за всички примери в тази книга е чипът Atmega 128 от популярния микропроцесор Семейство AVRот Atmel. Предполага се, че читателят има основно разбиране както за принципите на микропроцесорната технология, така и за архитектурата на този микроконтролер.

Програмата за микроконтролера е набор от кодове, който се записва в неговия специален програмна памет. Програмата трябва да бъде написана от програмист, който разработва тази или онази микропроцесорна система, но никога не се занимава с кодове. По-удобно е човек да работи с команди, всяка от които има свое собствено смислено име. Следователно езикът за програмиране се използва за писане на програма.

Основната задача на езика е да опише недвусмислено последователността от действия, които микроконтролерът трябва да извърши. В същото време езикът трябва да е разбираем за човек.

В процеса на създаване на програма, програмистът просто пише нейния текст на компютъра по същия начин, както всеки друг текст. След това програмистът работи специална програма- преводач, който превежда текста, написан от програмиста, в машинни кодове, разбираеми за микропроцесора.

Извиква се текстът на програмата, написан от програмиста оригиналенили обектен код. Кодът, получен в резултат на превода, се извиква в резултатили машинен код. Именно този код се записва в програмната памет на микроконтролера. За да напишете получения код, се използват специални устройства - програмисти.

Всички езици за програмиране са разделени на две групи:

езици на ниско ниво (машинно ориентирани);

езици на високо ниво.

Типичен примермашинно-ориентираният език е асемблерният език. В близкото минало асемблерът беше единственият програмен език за микроконтролери. В момента езиците на високо ниво се използват за програмиране, като напр ОСНОВЕН, Xiи така нататък. Тези езици първоначално са разработени за големи компютри. Но сега те се използват широко за микроконтролери.

Предимството на езиците на високо ниво е значително ускоряване на процеса на разработване на програми. От всички езици на високо ниво C е може би най-ефективният. Затова в бъдеще ще изберем този език за илюстрация. Разработени са различни версии на езици за различни семейства микропроцесори. Например за микропроцесори от семейството AVR - C AVR.

Глава 1. Писане на програми за микроконтролери

Елементи на езика C

MK регистрите (регистрите са клетки-байтове в паметта на MK AVR) в C програма имат имена и тъй като числата в повечето от тях могат да се променят, регистрите са по същество променливи за програмата.
Променлива- това е набор от клетки в паметта, в които можете да съхранявате число или числа и да ги променяте. Променливата има адрес и име.

Константа- това е като променлива, но не можете да промените съдържанието.

Константи

Константите са изброените стойности в програмата. В езика C има четири вида константи: целочислени константи, константи с плаваща запетая, символни константи и низови литерали.

Целочислена константа: това е десетична, осмична, шестнадесетична или двоично число, което представлява цяло число в един от следните форми: десетичен, осмичен, шестнадесетичен или двоичен.

Десетичната константа се състои от една или повече десетични цифри, като първата цифра не трябва да е нула (в противен случай числото ще се третира като осмично).

Осмичната константа се състои от задължителна нула и една или повече осмични цифри (сред цифрите трябва да липсват осем и девет, тъй като тези цифри не са включени в осмичната бройна система).

Шестнадесетичната константа започва със задължителната последователност 0x или 0X и съдържа една или повече шестнадесетични цифри (цифри, представляващи набор от шестнадесетични цифри: 0,1,2,3,4,5,6,7,8,9,A,B , C, D, E, F).

Двоичната константа се записва с помощта на двоични знаци, които трябва да бъдат предшествани от последователността 0b.

например - Цели числаможе да се напише:

Десетично: 12 234 -5493

В двоична форма с префикс 0b по следния начин: 0b101001

В шестнадесетична форма с префикс 0x по следния начин: 0x5A

В осмична форма с префикс 0 така: 0775

Ако искате да формирате константа с отрицателно цяло число, използвайте знака "-", преди да напишете константата (която ще се нарича унарен минус). Например: -0x2A, -088, -16.

На всяка целочислена константа се присвоява тип, който определя преобразуванията, които трябва да бъдат извършени, ако константата се използва в изрази. Типът на константата се определя, както следва:

Десетичните константи се третират като стойности със знак и им се присвоява типът int (цяло число) или long (дълго цяло число) според стойността на константата. Ако константата е по-малка от 32768, тогава й се присвоява тип int, в противен случай long.

На осмичните и шестнадесетичните константи се присвоява тип вътр, unsigned int(цяло число без знак), дългоили неподписан дълъгв зависимост от стойността на константата съгласно таблица 1.1.

Таблица 1.1

Диапазон от шестнадесетични константи Диапазон от осмични константи Тип
0x0 - 0x7FFF 0 - 077777 вътр
0X8000 - 0XFFFF 0100000 - 0177777 unsigned int
0X10000 - 0X7FFFFFFF 0200000 - 017777777777 дълго
0X80000000 - 0XFFFFFFFF 020000000000 - 037777777777 неподписан дълъг

Числото с плаваща запетая се състои от цяла част, дробна част и/или степен. Константите с плаваща запетая представляват положителни стойности с двойна точност (от тип double). За да се определи отрицателна стойност, е необходимо да се формира постоянен израз, състоящ се от знак минус и положителна константа.

Примери: 115.75, 1.5E-2, -0.025, .075, -0.85E2

Символна константа е представена от знак, ограден с апостроф. Стойността на символна константа е цифровият код на символа.

Например "Q" е буквата Q.

Символните константи са от тип int и се допълват със знак по време на преобразуването на типа.

Низова константа (литерал) е поредица от символи (включително низ и главни букви на руски и латински букви, както и числа), оградени в кавички (") .

Например „Heloo“

Литералите на низа се съхраняват в обхвата оперативна памет. Компилаторът добавя нулев знак, представен от последователността за избягване \0, в края на всеки низов литерал. Литералът на низ е от тип char.

1.1.2. Идентификатор

Идентификаторът е поредица от цифри и букви, както и специални знаци, при условие че буквата или специалният знак е на първо място. За формиране на идентификатори могат да се използват малки или главни букви от латинската азбука. Като специален характерможе да се използва долната черта (_). Два идентификатора, които са формирани с помощта на съвпадащи малки и главни букви, се считат за различни. Например: abc, ABC, A128B, a128b.

Идентификаторът се създава на етапа на деклариране на променлива, функция, структура и др. след това може да се използва в следващите оператори на разработената програма. Идентификаторът не трябва да е същият като ключови думи, запазени думи или имена на функции на библиотека на C компилатор.

Ключови думи

Типове данни и тяхното деклариране

Важна разлика между езика C и другите езици е липсата на принципа по подразбиране, което води до необходимостта да се декларират изрично всички променливи, използвани в програмата, заедно с указание за съответните им типове.

Форматът за деклариране на променлива е следващ изглед:

[]

- Спецификатор на класа на паметта - определя се от една от четирите ключови думи на езика SI: auto, extern, register, static и показва как ще бъде разпределена паметта за декларираната променлива, от една страна, и от друга, обхват на тази променлива, т.е. от кои части на програмата можете да получите достъп до нея. Не е задължително и е необходимо само в някои случаи.

- ако променливата може да се използва в други файлове програмен кодпрограми;

- ако променливата е локална, тогава тя се декларира в някаква функция след скобата и трябва да запази стойностите си до следващото извикване на тази функция;

- поставете променливата в MK регистрите.

Глобални променливисе декларират, преди да се появят в текста на която и да е функция. Веднъж декларирани, глобалните променливи са налични във всяка програмна функция.

Локални променливисе декларират в самото начало на функциите - т.е. след фигурната скоба.

- спецификаторът на типа на данните, които променливата може да съхранява.

Използват се различни ключови думи за дефиниране на данни от целочислен тип, които определят диапазона от стойности и размера на областта на паметта, разпределена за променливи.

Например,

Unsigned char - съхранява число от 0 до 255(байта);

Unsigned Int - съхранява число от 0 до 65535 (два байта);

Unsigned long Int - съхранява число от 0 до 4294967295 (четири байта).

Можете да напишете само char вместо Unsigned char, защото компилаторът третира char като unsigned по подразбиране.

Signed char - означава променлива със знак и съхранява число от -128 до 127.

Ключовите думи signed и unsigned показват как се интерпретира нулевият бит на декларираната променлива, т.е. ключова дума unsigned, тогава нулевият бит се интерпретира като част от числото, в противен случай нулевият бит се интерпретира като знак. При липса на ключова дума unsigned, целочислената променлива се счита за подписана. Ако спецификаторът на типа се състои от подписан или неподписан тип ключ, последван от идентификатор на променлива, тогава той ще се третира като int променлива. Например:

unsigned int n; unsigned int b; int c; (приема се signed int c);unsigned d; (приемайки unsigned int d);signed f; (приемайки signed int f).

Променлива от всякакъв тип може да бъде декларирана като непроменяема. Това се постига чрез добавяне на ключовата дума const към спецификатора на типа. Обектите от тип const представляват данни само за четене, т.е. на тази променлива не може да се присвои нова стойност. Обърнете внимание, че ако няма спецификатор на типа след думата const, тогава се подразбира спецификатор на тип int. Ако ключовата дума const е преди декларацията съставни типове(масив, структура, смес, изброяване), тогава това води до факта, че всеки елемент също трябва да бъде немодифицируем, т.е. може да му бъде присвоена стойност само веднъж.

const двойно A=2.128E-2;const B=286; (приемайки const int B=286) consnant char_string constant ="това е низова константа"

плаващи данни

За променливи, представляващи число с плаваща запетая, се използват следните модификатори на типа: float, double, long double (няма SI в някои реализации на езика long double).

Стойност с модификатор тип float заема 4 байта. От тях 1 бит се отделя за знака, 8 бита за експонентата и 23 бита за мантисата. Обърнете внимание, че най-значимият бит на мантисата винаги е 1, така че не е подплатен, така че диапазонът на променливата с плаваща запетая е приблизително 3,14E-38 до 3,14E+38. Двойна стойност заема 8 байта в паметта. Форматът му е подобен на float формата. Битовете на паметта се разпределят, както следва: 1 бит за знака, 11 бита за експонентата и 52 бита за мантисата. Като се има предвид пропуснатият висок бит на мантисата, диапазонът от стойности е от 1.7E-308 до 1.7E+308.

float f, a, b; двойно x, y;

- име на променлива. Например imy променливи.

Обичайно е да се използват малки букви за променливите и за да се разграничат имената на променливите от имената на функциите, имената на променливите могат да започват с буква, а имената на функции (с изключение на main) с долна черта.

Например, моя ресто , _вашата funkzia.

Глобалните променливи, както и локалните променливи със статичен модификатор, са равни на 0 при стартиране и рестартиране на програмата, освен ако не са им присвоени други стойности.

Някои примери за декларации на променливи:

Unsigned Char my_change=34 ; /* my_peremen се дефинира като Unsigned Char със стойност 34 (по избор) */

Unsigned Int big_ change=34634; /* голяма_ промяна се декларира като Unsigned Int */.

Декларация на масив

Масивите са група от елементи от един и същи тип (double, float, int и т.н.). От декларацията на масива компилаторът трябва да получи информация за вида на елементите на масива и техния брой. Декларацията на масив има два формата:

дескриптор на спецификатор на тип [const - израз];

дескриптор на спецификатор на типа;

Дескрипторът е идентификатор на масив.

Спецификаторът на типа указва типа на елементите на декларирания масив. Елементите на масива не могат да бъдат функции или празни елементи.

Константният израз в квадратни скоби указва броя на елементите в масива. Константен израз може да бъде пропуснат от декларация на масив в следните случаи:

Когато се декларира, масивът се инициализира;

Масивът се декларира като формален функционален параметър.

Езикът C дефинира само едномерни масиви, но тъй като елементът на масив може да бъде масив, можете също да дефинирате многомерни масиви. Те са формализирани като списък от постоянни изрази, следващи идентификатора на масива, като всеки постоянен израз е ограден в собствени квадратни скоби.

Всеки постоянен израз в квадратни скоби дефинира броя на елементите по дадено измерение на масива, така че декларацията за двумерен масив съдържа два постоянни израза, декларацията за триизмерен масив съдържа три и т.н. Обърнете внимание, че в C първият елемент на масива има индекс 0.

Char маса - номерацията на елементите започва от 0, т.е. елементите на този масив се наричат ​​маса, маса и съхраняват числата 11, 22, 33. Някъде в програмата на елемента може да бъде присвоена стойност, например маса = 210. Не можете да присвоявате стойности на елементи.

Низова променлива или масив, съдържащ низ от знаци, например

Char stroke =”Hello” дефинира 6 елемента, въпреки че съдържа само пет знака. Шестият елемент е контролният знак, който се добавя в края на низа \0.

Масив от символи може да бъде деклариран и без да се посочва броя на елементите.

Например,

Char str =” декларация на масив от знаци”

Изрази и задачи

Операнди и операции

Комбинация от операторни знаци и операнди, която води до конкретна стойност, се нарича израз. Операторните знаци определят операциите, които трябва да се извършат върху операндите. Всеки операнд в израз може да бъде израз. Стойността на израза зависи от местоположението на знаците на операциите и скобив израза, както и върху приоритета на изпълнение на операциите.

В езика C присвояването също е израз и стойността на такъв израз е стойността, която се присвоява.

Операндът е константа, литерал, идентификатор, извикване на функция, израз на индекс, израз на селектор на елемент или по-сложен израз, образуван от комбинация от операнди, операторни знаци и скоби. Всеки операнд, който има постоянна стойност, се нарича постоянен израз. Всеки операнд има тип.

За да поставите число в променлива (в регистър), езикът C има оператора за присвояване „ = ". Този символ в C означава да се изчисли резултатът от това, което е вдясно от оператора за присвояване и да се постави този резултат в променлива, разположена налявооператор за присвояване.

1.PORTB=PINB+34; /* Този C ред означава Вземете (прочетете) стойността на променливата (регистрирайте) PINB, след това добавете числото 34 към нея и поставете резултата в променливата PORTB */

2. ПРОМЕНЛИВА=PINC; /* Този C ред означава да вземете (четете) стойността на променливата (регистрирате) PINC и да поставите резултата в променлива с име VARIABLE */
3. Ред, където променливата е вляво от “=”, но през знака & PORTB& =0x23; в C това означава да прочетете съдържанието на променливата PORTB, след това да изпълните "побитово (побитово) логическо И" между прочетената стойност и числото 0x23 и да поставите (запишете, присвоите) резултата в променливата PORTB 4. Редът, където променливата е непосредствено вляво от “=” PORTB= 0x23; в C означава - без да четете съдържанието на променливата PORTB, присвоете й стойност 0x23, унищожавайки това, което е имало преди.
Вместо & "И" (И - само 1 и 1 дават 1) може да има други побитови логически операции: | "ИЛИ" (ИЛИ само 0 и 0 дава 0) ^ "XOR" (XOR променя бит срещу "1") ~ "битово обръщане" (INV променя битовете в регистъра към противоположни знаци) и аритметични операции: + - * / %
Операторът за присвояване използва съкращения:
ДЪЛЪГ ЗАПИС ЗНАЧЕНИЕ НАМАЛЕНО ДО
x = x + 1; добавете 1 x++; или ++x;
х = х - 1; извадете 1 х--; или --x;
x = x + y; добавете y x += y;
x = x - y; извадете y х -= у;
x = x * y; умножете по у x *= y;
x = x / y; разделете на y x /= y;
x = x % y; остатък от делението x %= y;
х--; извадете 1 х -= 1;
x++; добавете 1 x += 1;

В C има операции, които променят стойността на променлива без оператор за присвояване:

PORTA++;/* Този C ред означава Вземете стойността на променливата PORTA, добавете 1 към нея и запишете резултата обратно в PORTA. Той казва: нарастванерегистрирайте PORTA */

PORTC--;/* Този C ред означава обратното! Намаляване- извадете 1 от стойността на регистъра PORTC */

Когато в израз се използва увеличение или намаление, има значение къде са двата знака + или - преди или след променливата:

а=4; b=7; a = b++;/* Този C ред означава: вземете стойността на b, присвоете я на a, след това добавете 1 към b и съхранете резултата в b. Сега a ще съдържа числото 7, b ще съдържа числото 8 */ а=4; b=7; a = ++b;/* Този ред на C означава: вземете стойността на променлива b, след това добавете 1 към нея и запазете резултата в b и присвоете същия резултат на променлива a. Сега a ще съдържа числото 8 и b ще съдържа числото 8 */ 1.2 .2 Аритметични операциив C x + y// събиранеx - y// изважданеx * y// умножение x / y/* деление. Ако числата са цели числа, резултатът е цяло число с изхвърлена дробна част - не е закръглена. Тези. ако резултатът от деленето е 6.23411 или 6.94, тогава резултатът ще бъде просто цяло число 6. Ако числата с плаваща запетая, тоест float или double, са написани с точка и число след точката, тогава резултатът ще бъде число с плаваща запетая без изхвърляне на дробната част 131.9739 / 6.18 ще даде 21.355 */ x % y// изчисляване на остатъка след целочислено деление Примери:

х< y // X меньше Y
x > y // още
х<= y // меньше или равно
x >= y // по-голямо или равно
x == y // е равно
x != y /* не е равно Резултатът от тези изрази: "true" е "1" (по-точно "не е нула"), "false" е "0". Стойности, съхранявани в променливи (в регистри)
х
И прине се променят. Стойностите, съхранени (или съдържащи се) в променливи, се вземат (четат) и се сравняват */

1.2.5.Булеви операции:

|| // "ИЛИ" - само "false" и "false"

// даде "false"

&& // "И" - само "вярно" и "вярно"
// даде "вярно"

! // "НЕ" - логическо отрицание

Резултатът от логическата операция НЕ Е ЧИСЛО, а логическата стойност "true" или "false".

За логически операции && и || резултатите от изразите се вземат отляво и отдясно на знака на операцията преобразуван в "вярно" или "невярно"и се определя логическият резултат от операцията.

Компилаторът превръща резултата "true" в 1, а не в число, различно от 0.

Логическите операции могат да комбинират няколко условия, които трябва да бъдат проверени.

Например:

ако((израз1)&&((израз2)||(израз3)))
{ /* Програмният код тук ще бъде изпълнен, ако:

Израз1 е „Истински“ (което означава, че не е нула) и поне един от изразите 2 и 3 също е „Истински“ (което означава, че не е нула).
} ;

1.3. Използвани конструкции в C

1.ако(){} друго(); идеална конструкция, ако трябва да изпълните част от програмата при наличие или липса на условия:

} друго( Не задължителен елементконструкция, без нея конструкцията изглежда така:

ако (изразяване) ( C код /* направете този код, ако изразяване"истина" - т.е. резултатът от изчислението му не е нула */
};

ако(PINB.5) (изпълни C код);
/* Акоима "1" на крака PB5 (не "0" означава "вярно"), след това програмата ще изпълни кодаи ако има "0" (което означава "false"), няма да го направи, а просто ще отиде по-нататък, на следващия ред */

2.докато()(); условен цикъл (цикъл с условие) - използва се, ако трябва да изпълните някакъв програмен код, докато се изпълнява (има,
"вярно" означава "не нула") някакво условие, резултатът от оценяването на израза:

докато(изразяване ) (C код /* изпълнява този код, ако изразът е "истинен" - т.е. резултатът от неговото изчисление не е нула. Докато този код се изпълнява, изразът не се проверява за истинност. След като кодът бъде изпълнен, преходът към линията докатопроверете отново истинността на израза */
};

Например:

докато(PINA.6) (изпълнете C код);
/* Чаоима "1" на крака на PA6 (не "0" означава "вярно"), тогава програмата ще изпълни кода и отново ще провери дали е на PA6 */ Ако bit_6 стане "0", тогава програмата ще тръгне по-нататък, без да правите това, което е в ( )

Цикъл докатоима опция

Направете - докато

където кодът в ( ) се изпълнява поне веднъж, независимо дали условието е вярнов скоби:

do(C code /* изпълни този код веднъж, след това, ако изразът е "true" - т.е. резултатът от неговата оценка не е нула - отново изпълни кода от началото и така нататък, докато изразът е true */ ) докато ( израз); for(;;) и while() циклите често се използват по следния начин: while(1); за(;;); /* Така написаните тези цикли означават: MK изпълнява този ред, докато има захранване, без нулиране и без прекъсване. Когато възникне прекъсване, програмата преминава към манипулатора на прекъсване и (ако няма преход в манипулатора към друго място в програмата) след завършване на кода на манипулатора, се връща отново към този цикъл. */ докато(1)( програмен код); за (;;)( програмен код); 4.за(;;)(); - този цикъл ви позволява да изпълните част от програмата необходимия брой пъти:

въглен i; /* декларация на променлива за затова е нормална C променлива и следователно може да има всяко валидно име и тип, които искате */

за(i=5; i<20; i+=4) {
код в C /* Първо ще бъде определен "true" или "false" контролен израз i<20. Так как переменной i присвоено значение 5 то контрольное выражение "истинно" и код цикла заще се изпълни за първи път за i=5, след това чрез израза i+=4, i ще стане 9, сега истинността (справедливостта, изпълнението) на контролния израз i ще бъде проверена отново<20 и так как 9<20 код цикла заще се изпълни отново, но за i=9. Това ще се случи, докато резултатът от оценката на контролния израз дава "true". Когато резултатът стане "false" - програмата ще излезе от цикъла забез изпълнение на кода. */
};

i = 5 е началният израз, това, което ще бъде в променливата в началото i.Числото 5 е само пример, то може да бъде каквото позволява декларацията на типа променлива аз, в нашия случай е така въгленв повечето компилатори по подразбиране това е тип символ без знак - той може да съхранява числа от 0 до 255

аз< 20 - контрольное выражение. Может быть с разными операторами отношения, само важнотака че в хода на цикъла да стане понякога "невярно" - в противен случай цикълът ще "цикли", т.е. никога няма да свърши.

i += 4 е броячът или промяната на променливата на цикъла. Обикновено това i++тези. 1 се добавя към променливата при всяко "изпълнение" на цикъла. Но пак казвам, може да е каквото пожелаете.

Първоначално състояние- може да бъде всеки израз, валиден в C, който се оценява на цяло число.

Контролен израз- определя колко дълго ще се изпълнява цикълът.

Брояч- показва как се променя първоначалният израз преди всяко изпълнение на нов цикъл.

Изразяване- може да бъде не просто променлива, а функция на други променливи, например:

i =(7 + i*4) или i = (функция на други променливи).

5. превключвател()(); - операторът за множествен избор, ви позволява да направите избор от няколко опции.

Изразът след ключовата дума switch в скоби може да бъде всеки израз, разрешен в езика C, чиято стойност трябва да бъде цяло число. Стойността на този израз е ключът към избора от множество опции. Тялото на израза switch се състои от няколко оператора, маркирани с ключовата дума case, последвана от константен израз. Всички константни изрази в команда за превключване трябва да бъдат уникални. В допълнение към изразите, маркирани с ключовата дума case, може да има, но винаги един, фрагмент, маркиран с ключовата дума по подразбиране. Списъкът с оператори може да е празен или да съдържа един или повече оператори. Освен това в командата за превключване не се изисква последователността от инструкции да се огражда във фигурни скоби.

Схемата за изпълнение на оператора switch е следната:

Изразът в скоби се оценява;

Изчислените стойности се сравняват последователно с константните изрази след ключовите думи за case;

Ако един от постоянните изрази съвпада със стойността на израза, тогава контролът се прехвърля към израза, маркиран със съответната ключова дума case;

Ако никой от постоянните изрази не е равен на израза, тогава контролът се прехвърля към оператора, маркиран с ключовата дума по подразбиране, а ако липсва, контролът се прехвърля към оператора, следващ оператора switch.

Всички изрази между началния оператор и края на тялото се изпълняват независимо от ключовите думи, освен ако някой от операторите не прехвърли контрола от тялото на оператора switch. По този начин програмистът трябва да се погрижи за излизане от случая, ако е необходимо. Най-често срещаният начин да направите това е да използвате командата break.

превключвател(израз) (

случай 5: C код
/* този код ще бъде изпълнен, ако резултатът от изчислението на израза е равен на числото 5 от работата на този оператор превключвателзавършва */
прекъсване;

случай-32: C код
/* този код ще бъде изпълнен, ако резултатът на израза е отрицателно число -32. Това е работа на оператора превключвателзавършва */
прекъсване;

случай "G": C код
/* този код ще бъде изпълнен, ако резултатът от изчисляването на израза е равен на числото, съответстващо на знака G в ASCII таблицата. Това е работа на оператора превключвателзавършва */
прекъсване;

по подразбиране: C код
/* този код ще бъде изпълнен, ако резултатът от изчисляването на израза не е нито 5, нито -32, нито "G", а също и след изпълнението на кода не е
почивка в края;

Това е работа на оператора превключвателзавършва */
};

/* превключвателзавършено - изпълнява се допълнителен програмен код */

случай- може да бъде толкова, колкото е необходимо, за да работи програмата по-бързо - най-вероятните опции трябва да бъдат поставени по-високо.

по подразбиране- не е задължително. Може да се постави и не в края.

прекъсване;- ако не го използвате, след като намерите желаната опция, програмата ще изпълни и следните условия случай.

6.гото- оператор на безусловен (незабавен) преход.

Операторът goto прехвърля контрола към оператора, означен като етикет-име. Маркираният оператор трябва да бъде в същата функция като goto оператора, а използваният етикет трябва да е уникален, т.е. едно и също име на етикет не може да се използва за различни програмни изрази. Label-name е идентификатор. някакъв код на нашата C програма... mesto_5:/* ще стигнем до тук след изпълнение на програмния ред goto mesto_5 */ кодът ще бъде изпълнен след goto mesto_5; ... някакъв код от нашата C програма... mesto_1:/* ще стигнем до тук след изпълнение на програмния ред goto mesto_1 */ кодът ще бъде изпълнен след goto mesto_1; ... някакъв код от нашата C програма... goto mesto_1;/* отидете до мястото в програмата, където mesto_1 е написано в началото на реда: */ ... някакъв код от нашата C програма... goto mesto_5; /* отидете на мястото в програмата, където mesto_5 е написано в началото на реда: */ ... някакъв код на нашата C програма.

Примерна C програма

/*параграф 1заглавие на програмата

Той е форматиран като коментар и обикновено съдържа информация

За името, предназначението, версията и автора на програмата
- кратко описание на алгоритъма на програмата
- обяснения за предназначението на заключенията на МК и режима на неговата работа, предпазители
- компилатор, инструменти и техните версии
- друга информация, която смятате за полезно да посочите

// точка 2включително външни файлове

#включи

/* преди компилиране препроцесорът на компилатора ще вмъкне съдържанието (текста) вместо този ред заглавен файл"hidera" mega16.h - този файл съдържа списък с регистри, налични в ATmega16 MK и съответствието на имената им с физическите им адреси в MK. Трябва да посочите кой MK използвате в свойствата на проекта в компилатора */

#включи
/* преди компилиране препроцесорът на компилатора ще вмъкне текста "header" вместо този ред delay.h - този файл съдържа функции за създаване на паузи в програмата. Сега всичко, което трябва да направите, за да направите пауза, е да напишете: */

/* пауза N (число) микросек. Трябва да е константа - НЕ променлива!!!
Например:

delay_us(12 + 7*3);
delay_us(117);

забавяне_ms(x); /* пауза x мисек
x - може да бъде променлива, израз или число
0 до 65535 (тип unsigned int)
Например:

delay_ms(3280);
delay_ms(променлива);
delay_ms(променлива*4 + 760); */

//точка 3потребителски дефиниции

#дефинирай ADC_BUSY PINB.0
#дефинирай NCONVST PORTB.1
/* след тези два реда, преди компилация, препроцесорът на компилатора ще замени ADC_BUSY с PINB.0 и NCONVST с PORTB.1 в текста на програмата
По този начин, вместо да помните, че заетият щифт AD7896 е свързан към вашия PB0 щифт, можете да проверите стойността на смислената концепция ADC_BUSY - "ADC е зает". И вместо да контролирате абстрактен пин PB1 (чрез PORTB.1), можете да контролирате - NCONVST - "стартиране на ново AD преобразуване".

#define - Удобно е! Но ИЗОБЩО не е необходимо.
*/

Например:

#дефинирай invbit(p,n) (p=p^bit(n))

Тук променливите са "p" и "n". Сега да обърнем бит 5 в регистъра PORTBпросто трябва да напишете в програмата:

invbit( PORTB,5);

Освен това в най-дясната част тези променливи могат да бъдат свързани с аритметични операции и може да има много такива променливи.

Алгоритъм

Разработването на всяка програма започва с разработването на алгоритъм. В нашия случай алгоритъмът е следният: след първоначалните операции по настройка, микроконтролерът трябва да влезе в непрекъснат цикъл, по време на който трябва да анкетира входа, свързан към нашия бутон, и в зависимост от състоянието му да управлява светодиодите. Нека го опишем по-подробно.

C програма

Когато създаваме C програма, ние използваме компилатора C PRO for AVR. Тази софтуерна среда е специално проектирана за разработване на C програми за AVR микроконтролери.

Всяка съвременна среда за програмиране работи не просто с текста на програмата, а с т.нар проект.

Задачата на програмиста е само да напише текста на програмата, за който в проекта е отделен отделен файл с разширение „c“. Компилаторът превежда изходната програма в шестнадесетична система (създава шестнадесетичен файл), за да я въведе (фърмуер) в паметта на микроконтролера.

В бъдеще ще разгледаме подробно процеса на инсталиране и работа със софтуерната среда C PRO for AVR. Сега смятаме, че е инсталиран и стартиран.

Веднага след стартиране на компилатора всички параметри се връщат към стойностите си по подразбиране (всички вътрешни устройства са изключени, вътрешните I / O портове са настроени на вход, използва се вътрешен осцилатор с тактова честота 4 MHz). Това съответства на първоначалното състояние на микропроцесора след нулиране на системата. Няма да докосваме тези параметри, които все още не трябва да докосваме (ще ги оставим по подразбиране).

Програмата C изглежда така:

1 #Включи< Atmega 128.h >

2 бита старо състояние; // старо държавно знаме

3 Void main() (

4 DDB0 бит=0; // задаване на пин PB0 като вход

5 DDRC = 0xFF; // конфигуриране на компютър като изход

6 PORTC=0xAA; // изходният код се записва на порт C

9 If (Button (& PINB,0,1,1)) ( // открива логическа единица

10 Oldstate=1; // актуализиране на флаг

11 if (oldstate && Button (& PINB, 0,1,0)) ( // откриване на преход от 1 към 0

12 PORTB= ~ PORTB; //инвертиране на PORTC

13 старо състояние=0; // актуализиране на флаг

14) Докато (1); // безкраен цикъл

Министерство на науката и образованието на Република Казахстан

Многопрофилен колеж

Държавен университет в Северен Казахстан

на името на академик М. Козибаев

Обяснителна бележка

към курсовия проект

дисциплина: "Цифрови устройства и микропроцесорни системи"

на тема: "Проектиране на микропроцесорна система на базата на микропроцесор I 8086"

Вариант номер 16

Завършени: студент гр. РЕС-к-09

Сафронов С.В.

Проверява: учител

Михайлова А.Н.

Петропавловск 2010 г

1. Въведение

2. Обща структура на IPU

3. 16-битов микропроцесор i8086

3.1 Командна система

4.Вътрешна структура

5. Запаметяващи устройства

6. RAM. Принципи на изграждане

7. Памет само за четене (ROM)

8.Цифрово-аналогови преобразуватели (DAC)

9. Разработване на функционална схема на входно-изходния модул

10 Заключение

Библиография

Приложение А

1. Въведение

Целта на дисциплината "Цифрови устройства и микропроцесори" е изучаването на принципите на изграждане на цифрови устройства с различна функционална сложност - от логически елементи до микропроцесори и микрокомпютри.

Компактната микроелектронна "памет" се използва широко в съвременното електронно оборудване за различни цели. В компютър паметта се дефинира като функционална част, предназначена да записва, съхранява и издава команди и обработени данни. Комплексът от технически средства, които изпълняват функцията на паметта, се нарича устройство за съхранение (памет). За да се осигури работата на процесора (микропроцесора), е необходима програма, т.е. последователност от команди и данни, върху които процесорът изпълнява операциите, предписани от командите. Командите и данните влизат в основната памет на компютъра през входното устройство, на изхода от което получават цифрова форма на представяне, т.е. под формата на кодови комбинации O и 1. Основната памет, като правило, се състои от две видове оперативна памет (RAM) и постоянна (ROM).

Паметта с произволен достъп е предназначена за съхраняване на променлива информация; тя позволява нейното съдържание да се променя в процеса на извършване на изчислителни операции с данни от процесора. Това означава, че процесорът може да избере (режим на четене) от RAM кода на инструкциите и данните и след обработка да постави резултата в RAM (режим на запис).

Тази курсова работа е посветена на изучаването на блока памет. А именно, задачата е да се изгради пространство на паметта с даден размер и конфигурация.

2. Обща структура на IPU

Микропроцесор (MP) - централната част на всяка микропроцесорна система (MPS) - включва аритметично логическо устройство (ALU) и централно управляващо устройство (CCU), което изпълнява командния цикъл. MP може да функционира само като част от MPS, който в допълнение към MP включва памет, входно / изходни устройства, спомагателни вериги (тактов генератор, контролери за прекъсване и директен достъп до паметта (DMA), драйвери на шини, ключалки и др.

Във всяка MPS могат да се разграничат следните основни части (подсистеми):

    процесорен модул;

  • външни устройства (външно съхранение + входно/изходни устройства);

    подсистема за прекъсване;

    подсистема за директен достъп до паметта.

Фигура 1 - Структурата на MPS с интерфейс "Обща шина"

Комуникацията между процесора и други MPS устройства може да се осъществява съгласно принципите на радиални връзки, обща шина или комбиниран метод. В еднопроцесорните MPS, особено 8- и 16-битовите, най-широко се използва комуникационният принцип "Common bus", при който всички устройства са свързани към интерфейса по един и същи начин (Фигура 1).

Всички интерфейсни сигнали се разделят на три основни групи - данни, адрес и управление. Множество разновидности на интерфейси "Обща шина" осигуряват предаване по отделни или мултиплексирани линии (шини). Например, интерфейсът Microbus, с който работят повечето базирани на i8080 8-битови MSM, предава адрес и данни по отделни шини, но някои контролни сигнали се изпращат по шината за данни. Интерфейсът Q-bus, използван в микрокомпютрите DEC (домашни аналогови - микропроцесори от серия K1801), има мултиплексирана шина за адрес/данни, през която тази информация се предава с разделяне на времето. Естествено, при наличието на мултиплексирана шина е необходимо в контролните линии да се включи специален сигнал, който идентифицира вида на информацията в шината. По интерфейса се обменя информация между две устройства, едното от които е активно, а другото е пасивно. Активното устройство генерира адреси на пасивни устройства и управляващи сигнали. Активното устройство по правило е процесорът, а пасивното устройство винаги е паметта и някои VU.

Въпреки това, понякога високоскоростното VU може да действа като главно (активно устройство) на интерфейса, контролирайки обмена с паметта. Концепцията за "Обща шина" предполага, че всички MPS устройства са достъпни в едно адресно пространство, но за да се разшири броят на адресируемите обекти, в някои системи адресните пространства на паметта и VU са изкуствено разделени, а понякога дори програмни памет и памет за данни.

3.16-битов микропроцесор i8086

Първият 16-битов процесор i8086 е пуснат от Intel през 1978 г. Честота - 5 MHz, производителност - 0,33 MIPS за инструкции с 16-битови операнди (по-късно се появиха 8 и 10 MHz процесори). 3 микрона технология, 29 000 транзистора. Адресируема памет 1 MB. Година по-късно се появи i8088 - същият процесор, но с 8-битова шина за данни. С него започва историята на IBM PC, неразривно свързана с цялото по-нататъшно развитие на процесорите на Intel.Масовото разпространение и отвореността на архитектурата на IBM PC доведе до лавина от нов софтуер, разработен от големи, средни и малки фирми, както и като самотни ентусиасти. Техническият прогрес тогава и сега би бил немислим без разработването на процесори, но предвид огромното количество съществуващ софтуер за персонални компютри, принципът на обратна софтуерна съвместимост възникна още тогава - старите програми трябва да работят на нови процесори. По този начин всички иновации в архитектурата на следващите процесори трябваше да бъдат прикрепени към съществуващото ядро.

16-битовият MP i8086 беше по-нататъшно развитие на линията едночипови MP, стартирана от i8080. Заедно с увеличаването на битовата дълбочина, i8086 прилага редица нови архитектурни решения:

разширена е командната система (с набор от операции и методи за адресиране);

MP архитектурата е ориентирана към многопроцесорна работа. Разработена е група от спомагателни LSI (контролери и специализирани процесори) за организиране на мултимикропроцесорни системи с различни конфигурации;

е започнало движение в посока на припокриване във времето за извършване на различни операции. MP включва две паралелни устройства

обработка на данни и комуникация с гръбнака, което ви позволява да комбинирате във времето процесите на обработка на информация и предаването й по гръбнака;

беше въведена нова (в сравнение с i8080) организация на паметта, която беше допълнително използвана във всички по-стари модели от семейството INTEL - сегментиране на паметта. За да запази приемствеността на модела с i8080, i8086 осигурява два режима на работа - "минимум" и "максимум", като в минималния режим i8086 работи точно като доста бърз 16-битов i8080 с разширена система от инструкции (архитектурата на MPS, базирана на i8086-min, прилича на архитектурата на базата на i8080).

Максималният режим е предназначен за работа на i8086 в многомикропроцесорни системи, в които в допълнение към няколко централни процесора i8086 могат да функционират специализирани процесори за вход / изход i8089, копроцесори i8087 "плаваща аритметика". Нека дефинираме по-горе въведените понятия по-ясно:

Централен процесор - поддържа свой собствен команден цикъл, изпълнява програма, съхранена в системната памет, при нулиране на системата управлението обикновено се прехвърля към централния процесор (или един от процесорите, ако има няколко в системата). Специализиран процесор - поддържа собствен цикъл на инструкции, изпълнява програма, съхранена в системната памет, но се инициализира само с команда от CPU, в края на програмата информира CPU за завършване на работата. Копроцесорът не поддържа собствен команден цикъл, той изпълнява команди, избрани за него от процесора от общия команден поток. Всъщност копроцесорът е разширение на процесора.

3.1 Командна система

Имаше 98 инструкции в набора от инструкции на микропроцесора 8086: 19 инструкции за прехвърляне на данни, 38 инструкции за обработка на данни, 24 инструкции за различни условни и безусловни скокове и 17 инструкции за управление на процесора.

Всяка инструкция се състоеше от код за операция (наречен код за операция) и операнди. Обикновено първият байт на командата и трите средни бита на втория байт или (в случай на еднобайтова команда) високата част на първия байт на командата се присвояват на кода на операцията. Общо има почти 4000 различни командни опции в i8086.

По предназначение командите на микропроцесора I8086 са разделени на 6 групи:

1 Команди за трансфер на данни: MOV, XCHG, PUSH, POP, PUSHF, POPF, LEA, LDS, LES, LAHF, SAHF, XLAT, IN.

2 аритметични команди: ADD, ADC, INC, AAA, DAA, SUB, SBB, DEC, NEG, CMP, AAS, DAS, MUL, IMUL, DIV, IDIV, AAM, AAD.

3 логически команди: NOT, SHL / SAL, SHR, SAR, ROL, ROR, RCL, RCR,

И, ТЕСТ, ИЛИ, XOR.

4 команди за манипулиране на низове: CMPS, LODS, MOVS, REP, SCAS, STOS.

5 команди за прехвърляне: JMP, CALL, RET, LOOP/LOOPE, LOOPZ, LOOPNE/LOOPNZ, JCXZ, JE/JZ, JNE/JNZ, JL/JNGE, JLE/JNG, JB/JNAE, JBE/JNA, JP/JPE, JNP/JPO, JO, JNO, JS, JNS, JG/JNLE, JGE/JNL, JA/JNBE, JAE/JNB.

6 команди за управление на процесора: CLC, CMC, STC, CDL, STD, CLI, HLT WAIT, ESC, LOCK

4.Вътрешна структура

Блоковата схема на MP i8086 е показана на фиг. MP включва три основни устройства:

УОД - устройство за обработка на данни;

USM - комуникационно устройство с магистралата;

УУС - устройство за управление и синхронизация.

UOD е проектиран да изпълнява инструкции и включва 16-битово ALU, системни регистри и други спомагателни вериги; блок от регистри (RON, основен и индекс) и блок за микропрограмно управление.

USM осигурява формирането на 20-битов физически адрес на паметта и 16-битов адрес на VU, избор на команди от паметта, обмен на данни с паметта, VU и други процесори през шината. USM включва разширител на адреси, блок от регистри на опашка от команди и блок от сегментни регистри.

CUS осигурява синхронизация на работата на MP устройства, генериране на управляващи сигнали и сигнали за състояние за обмен с други устройства, анализ и подходящ отговор на сигнали от други MPS устройства.

MP може да работи в един от двата режима - "минимум" (min) и "максимум" (max). Минималният режим е предназначен за реализиране на еднопроцесорна конфигурация на MPS с организация, подобна на MPS, базирана на i8080, но с увеличено адресно пространство, по-висока производителност и значително разширен набор от инструкции. Максималната конфигурация предполага наличието в системата на няколко MP и специален магистрален арбитър (с помощта на интерфейса Multibus).

На външните изходи на i8086 MP широко се използва принципът на мултиплексиране на сигнала - предаване на различни сигнали по общи линии с разделяне във времето. В допълнение, едни и същи щифтове могат да се използват за предаване на различни сигнали в зависимост от режима (мин. - макс.) хардуерен дизайн ... изпълнен курсов проект микропроцесор система Намикроконтролер база - ... работа на устройството На базахарактеристики на устройството...

  • Дизайн микропроцесорустройства за обработка на данни

    Други >> Информатика, програмиране

    курсова работа дизайне системасъбиране и обработка на данни, реализирани На базасъвременна елементна база - микропроцесор ... На базадруг MP е подобен, въпреки че има някои характеристики, свързани с разликите в архитектурите микропроцесори ...

  • Микропроцесор системи

    Доклад от практиката >> Информатика

    от учебна практика « Микропроцесор системи"Вариант No1 Изпълнява се ... КОМПЮТЪР за автоматизирани дизайн, научни изследвания, ... който трябва да знае Основиорганизация и функциониране на универсален... курсорът надясно Наедна позиция. Насимвол...

  • Хардуер и софтуер на периферни устройства системисъбиране на показанията на измервателните уреди

    Резюме >> Информатика

    Сравним с 16-битов микропроцесории микроконтролери за производителност и ... изчислителна технология За дизайн На базаизчислителни машини надеждни ... запояване начин за изграждане микропроцесор системи На база AVR е придобиване...

  • Доведоха до качествени и количествени промени в елементната база на VT инструментите

    промяна на установените принципи на техния дизайн (като твърд

    структура, последователно централно управление, линейна организация

    памет и невъзможност за адаптиране на структурата на компютъра към характеристиките

    проблемът се решава).

    Класическите принципи на фон Нойман за организиране на компютърни системи бяха заменени от идеите за проблемна ориентация на MPS, паралелна и конвейерна обработка на информация, използване на таблични методи за обработка на данни, принципите на редовност и еднаквост на MPS структурите; става истинско

    възможност за идеята за създаване на адаптивно-регулируеми системи, както и

    хардуерна реализация на софтуерни функции. Следователно, в момента

    време при проектирането на изчислителни системи, базирани на получените MPS

    прилагане на така наречения принцип "3M": модулност, багажник,

    микропрограмируемост.

    Принципът на модулната организациявключва изграждането на изчислителни и

    управление на MPS на базата на набор от модули: структурно, функционално и

    електрически завършени изчислителни устройства, които ви позволяват самостоятелно

    или във връзка с други модули за решаване на проблеми от този клас. Модулен

    подходът при проектирането на микрокомпютри и системи позволява (когато се реализира като

    универсални и специализирани модули) осигуряват създаването на семейства

    (редове) MPS, различни функционалности характеристики,

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

    разходи за проектиране, както и опростява разширяването на капацитета и

    преконфигуриране на системи, отблъсква остаряването на компютрите

    Гръбначен метод за обмен на информацияразлични от организацията

    произволни връзки (според принципа "всеки с всеки") ви позволява да рационализирате и

    за минимизиране на броя на връзките в MPS. Той осигурява обмен на информация между

    използване на функционални и конструктивни модули от различни нива

    магистрали, които комбинират входни и изходни автобуси. Има един, двама,

    три- и многолинейни комуникации. Трябва да се отбележи връзката

    схемотехника и конструктивни решения, които се появяват при изпълнението

    този методобмен под формата на създаване на специален двупосочен буфер

    каскади с три стабилни състояния и използване на временни

    мултиплексиране на канали за обмен.

    Контрол на фърмуераосигурява най-голяма гъвкавост при организиране

    многофункционални модули и дава възможност за ориентиране в проблема

    MPS, както и да използват макро операции в тях, което е по-ефективно от използването


    стандартни съчетания. В допълнение, предаването на контролирани думи във формата

    криптираните кодови последователности съответстват на условията за минимизиране

    броя на VLSI щифтовете и намаляване на броя на връзките в модулите.

    В допълнение към основните характеристики на дизайна на MPS, изброени по-горе, трябва да бъде

    обърнете внимание на принципа на редовността, който предполага редовност

    повторяемост на елементите на структурата на MPS и връзките между тях. Приложение на това

    Принципът ви позволява да увеличите интегралната плътност, да намалите дължината на връзките

    на чип, намаляване на времето за оформление и дизайн на веригата

    Дизайн на LSI и VLSI, намаляване на броя на пресичания и видове функционални

    и структурни елементи.

    При разработването на архитектурата на MPS (системен етап) е необходимо да се реши следното

    Дайте описание на концептуалната структура на функционалното поведение на система с

    позиции за отчитане на интересите на потребителя при неговото изграждане и организация

    изчислителен процес в него;

    Определете структурата, номенклатурата и особеностите на изграждането на софтуера и

    фърмуер;

    Опишете характеристиките вътрешна организацияпоток от данни и контрол

    информация;

    Извършете анализ на функционалната структура и особеностите на физическото

    внедряване на системни устройства от гледна точка на софтуерния баланс,

    микропрограма и хардуер.

    Основните етапи на проектиране на MPS са показани на фиг. 3.1.

    В началния етап на проектиране MPS може да бъде описан в един от

    следните концептуални нива: “черна кутия”, структурно, програмно,

    логично, схема.

    На ниво „черна кутия“ MPS се описва чрез външни спецификации, където

    изброени са външни характеристики.

    Ориз. 3.1. Етапи на проектиране на MPS

    Структурното ниво се създава от хардуерните компоненти на МПС, които

    описва функциите на отделните устройства, тяхната връзка и информация

    потоци.

    Нивото на софтуера е разделено на две поднива (инструкции на процесора и

    език) и MPS се интерпретира като последователност от оператори или

    команди, които предизвикват едно или друго действие върху някаква структура от данни.

    Логическото ниво е присъщо изключително на дискретни системи и се разделя на

    две поднива: комутационни вериги и регистрови трансфери.

    Първото подниво се формира от гейтове (комбинационни схеми и елементи на паметта) и изградени на тяхна база оператори за обработка на данни. Второто подниво се характеризира с по-висока степен на абстракция и представлява описание на регистрите и преноса на данни между тях. Тя включва две

    части: информационна и контролна: първата се формира от регистри,

    оператори и пътища за пренос на данни, вторият предоставя в зависимост от

    времеви сигнали, които инициират прехвърлянето на данни между регистрите.

    Нивото на веригата се основава на описанието на работата на елементите на дискретните устройства.

    IN жизнен цикъл MPS, като всяка дискретна система, има три етапа:

    проектиране, производство и експлоатация.

    Всеки от етапите се подразделя на няколко фази, за които има вероятности за възникване на структурни или физически повреди. Дефектите се класифицират според причините за тях: физически, ако са причинени от дефекти на елемента, и субективни, ако са причинени от грешки в дизайна.

    Субективните грешки се разделят на дизайнерски и интерактивни. Дизайн

    неизправностите са причинени от недостатъци, въведени в системата на различни етапи

    изпълнение на първоначалната задача. Възникват интерактивни грешки в

    процесът на работа по вина на обслужващия персонал (оператор). резултат

    проявлението на неизправност е грешка и една неизправност може

    причинява редица грешки и същата грешка може да бъде причинена

    много грешки.

    Съществува и концепцията за дефект - физическа промяна в параметрите

    системни компоненти, които са извън обхвата. Дефектите се наричат

    неуспехи, ако са временни, и неуспехи, ако са постоянни.

    Дефектът не може да бъде открит, докато не се създадат условия за

    появата на неизправност, дължаща се на него, резултатът от който би трябвало сам по себе си

    опашка, предадена на изхода на изследвания обект, за да направи

    видим неуспех.

    Отстраняването на неизправности е процес на определяне на причината за грешка чрез

    Резултати от тестовете.

    Отстраняването на грешки е процес на откриване на грешки и определяне

    източници на тяхното възникване според резултатите от тестването при проектирането на MPS.

    Средствата за отстраняване на грешки са устройства, комплекси и програми. Понякога под

    отстраняване на грешки разбират откриването, локализирането и отстраняването на грешки. Успех

    отстраняването на грешки зависи от това как е проектирана системата, дали

    свойства, които улесняват отстраняването на грешки, както и използваните инструменти

    за отстраняване на грешки.

    За отстраняване на грешки проектираният MPS трябва да има

    свойства на управляемост, наблюдаемост и предвидимост.

    управляемост -свойство на система, в което нейното поведение е податливо

    управление, т.е. е възможно да се спре работата на системата в

    определено състояние и рестартирайте системата.

    наблюдаемост- свойство на системата, което ви позволява да проследявате поведението

    система, след промяна на нейните вътрешни състояния.

    Предсказуемост– свойство на системата, което ви позволява да инсталирате системата

    състояние, от което могат да бъдат предвидени всички следващи състояния.

    MPS могат да се различават значително по своята сложност, изисквания и функции.

    работни параметри, количество софтуер, вид

    микропроцесорен комплект и др. В резултат на това процесът на проектиране може

    промяна в зависимост от изискванията на системата.

    Процесът на проектиране е итеративен процес. Неизправностите, открити по време на фазата на теста за приемане, могат да доведат до коригиране на спецификацията и

    следователно до началото на проектирането на цялата система. намирам

    неизправността е необходима възможно най-рано; трябва да се контролира

    коректността на проекта на всеки етап от развитието. Има следните методи

    контрол на дизайна: проверка (формални методи

    доказателство за коректността на проекта); моделиране; тестване.

    Напоследък се появи много работа по проверката на софтуера.

    софтуер, фърмуер, хардуер. Въпреки това, тези произведения са все още

    теоретичен характер. Затова в практиката по-често се използва моделирането

    поведение на обекта и тестване на различни нива на абстрактното

    представяне на системата.

    На етапа на формализиране на изискванията към системата, контрол върху коректността на проекта

    особено необходимо, тъй като много цели на дизайна не са формализирани или

    по принцип не може да се формализира. Функционалната спецификация може

    да бъдат анализирани от екип от експерти или моделирани и тествани

    експериментален ред за идентифициране на постигането на желаните цели. След одобрение

    функционалната спецификация започва разработването на тестови програми,

    предназначени да установят правилната работа на системата в съответствие с

    неговата спецификация. В идеалния случай тестовете се разработват изцяло

    въз основа на тази спецификация и позволяваща проверка на всякакви

    внедряване на система, която е обявена за способна да изпълнява функциите

    посочени в спецификацията. Този метод е точно обратното на останалите.

    където се изграждат тестове за конкретни реализации. На практика обаче

    разработването на тестове често се дава по-нисък приоритет от

    проект, така че тестовите програми се появяват много по-късно от него