Програмування мікроконтроллерів - Программирование, компьютеры и кибернетика реферат

Програмування мікроконтроллерів - Программирование, компьютеры и кибернетика реферат



































Внутрішня побудова мікроконтроллера: процесор, пам'ять, порти вводу-виводу, таймери, мультиплексори, пристрої для послідовної передачі даних, контролер переривань та спеціалізовані регістри. Режими адресації даних. Система команд мікроконтроллерів.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Міністерство освіти і науки України
Національний університет львівська політехніка
на тему: Програмування мікроконтроллерів
Мікроконтроллери - це прості однокристальні ЕОМ, які можна програмувати. Після програмування програма залишається в пам'яті такої мікросхеми і зберігається в ній після відключення живлення. Якщо користувачу необхідно внести корективи в програму мікроконтроллера, то він робить це за допомогою спеціального програматора.
В даному курсі вивчається структура і система команд мікроконтроллеру ST7FLITE29F2B6 (див. рис. 1), що розроблений фірмою ST Microelectronics. Вартість цього продукту на території України складає біля 3.5 USD і має тенденцію здешевлення до міжнародної ціни в 1.9 USD. В подальшому, під словом “мікроконтроллер” ми будемо розуміти саме ST7FLITE29F2B6.
На відміну від класичних ЕОМ мікроконтроллери мають малий об'єм оперативної пам'яті, скорочений набір команд процесора і не велику тактову частоту. Але, незважаючи на такі недоліки їх можна повноцінно використовувати для підвищення рівня інтелектуальності приладів. Спираючись на певну частку універсальності, їх можна також використовувати для швидкої розробки різноманітного електронного обладнання, а також замінити ними застарілі або несправні компоненти існуючого обладнання. Фактично, мікроконтроллери є першим кроком до програмованої електроніки, коли електронна схема не створюються, а програмуються. В ідеалі від схеми залишається лише контролер та виконавчі елементи.
Внутрішня побудова мікроконтроллера
Мікроконтроллер складається з 8-бітного процесора, спеціалізованих регістрів, за допомогою яких організовується настройка його роботи та взаємодія із зовнішніми пристроями, оперативної пам'яті, FLASH-пам'яті для збереження програми, а також спеціалізованих пристроїв: генератора тактів, портів, дільника частоти, таймерів, аналого-цифрового перетворювача, широтно-імпульсного модулятора, мультиплексорів, контролера переривань та пристрою для послідовної передачі і прийому даних.
Процесор містить 6 регістрів: A, X, Y, PC, CC, SP.
A Accumulator (8 біт). В цьому регістрі як правило накопичуються дані;
PC Program Counter (16 біт). Містить адресу команди, яку треба виконати;
CC Condition Code (8 біт). Містить бітові ознаки прапорці, кожен з яких має свою назву:
SP Stack Pointer (16 біт). Містить адресу першої вільної комірки верхівки стеку. Адреса початку стеку = $1FF. Ця адреса встановлюэться автоматично пысля команди “RSP” (див. Список команд мікроконтроллера в кінці).
X, Y допоміжні індексні регістри (по 8 біт). Використовуються як правило для передачі даних з акумулятора в пам'ять та навпаки, а також при зверненні до пам'яті по індексу комірки.
Контролер має оперативну пам'ять та енергонезалежну пам'ять, яка зберігає значення після відключення живлення (EEPROM). Оперативна пам'ять починається з адреси $80 і закінчується адресою $FF. Після неї іде стек - 64 комірки по 2 байти - до адреси $1FF. Стек належить до оперативної пам'яті. Час запису в EEPROM в 1000 разів довший, ніж в оперативну пам'ять, тому після запису в EEPROM необхідно робити затримку (див. Приклад програми в кінці). Адреси EEPROM починаються з адреси $1000 і її розмір залежить від марки контроллера.
Порти вводу-виводу позначені на рис.2 через PA0PA7, PB0PB6:
На кожний порт можна виводити дані а також читати дані. Окрім того, PB0PB6 можна використовувати для вводу аналогових даних.
1. вимірювати довжину вхідних імпульсів на ніжках PA0 або PA1 методом захоплення значень таймера у регістр захоплення;
2. генерувати послідовність із заданою шириною імпульсів на ніжках PA2PA5 (це необхідно для широтно-імпульсної модуляції);
3. виконувати RESET через заданий час за допомогою сторожового таймера;
4. формувати точну затримку між імпульсами;
5. задавати час знаходження у „сплячому” стані.
Мультиплексори в явній формі доступу не мають, але дозволяють за допомогою спеціалізованих регістрів перенаправляти потоки даних і сигнали управління на різні ніжки мікроконтроллера.
Пристрої для послідовної передачі і прийому даних існують 2-х типів. Перший (SCI) може працювати в стандарті RS232, таким чином, його можна використати для реалізації зв'язку з будь-яким комп'ютером. Другий є більш швидкодіючий (стандарт SPI), але він вимагає додаткової лінії синхронізації. Стандарт SPI можна використати для зв'язку з іншими контролерами або інтерфейсними схемами, які його підтримують. На рис. 3 показано з'єднання по стандарту SPI.
Контролер переривань дозволяє викликати програми обробки переривань по різноманітним подіям:
Адреса адреси підпрограми обробки переривання
Настав час прокидатись від “сплячки”
Зміна станів ніжок PA0 - PA6 і PB0 - PB6
Завершення прийому/передачі по RS232
Напруга живлення вийшла за межі допустимої
Значення таймеру CNTR1 стало більше наступного чергового значення DCRx
Після закінчення передачі/прийому SPI
Перед виконанням переривання в стек записується: адреса наступної команди на яку треба повернутись після обробки переривання, регістри X, A, CC. Зміну всіх параметрів, що зв'язані з перериваннями рекомендують робити при заборонених перериваннях.
Спеціалізовані регістри це комірки пам'яті (по 8 біт) з адресами від $00 до $7F. В них кожний біт або набір біт грає певну роль в роботі пристроїв контролера. Перелік спеціалізованих регістрів дається в нижчеподаній таблиці. Буква (E) після значення біту означає, що це значення встановлюється електронним, а не програмним чином.
Port A Data Register (містить дані порту A)
Біти порту виводяться на ніжки (або вводяться з ніжок): PA0 - PA7
Port A Data Direction Register (вказує напрямки сигналів порту A)
1 - ніжка знаходиться в режимі виводу
Port A Option Register (визначає режим вводу-виводу на порт A)
1 в режимі виводу - звичайний логічний вихід
Port B Data Register (містить дані порту B)
Біти порту виводяться на ніжки (або вводяться з ніжок): PB0 - PB6
Port B Data Direction Register (вказує напрямки сигналів порту B)
1 - ніжка знаходиться в режимі виводу
Port B Option Register (визначає режим вводу-виводу на порт B)
1 в режимі виводу - звичайний логічний вихід
Lite Timer Control Status Register 2 (дозволяє активізувати підпрограму обробки переривання при переповненні LTCNTR)
Lite Timer 2 Auto-reload Register (містить початкове значення таймера LTCNTR після його переповнення)
(дозволяє активізувати підпрограму обробки переривання при переповненні і захваті даних з тіньового LITE-таймера 1)
Lite Timer Input Capture Register (містить дані від останнього захоплення тіньового LITE-таймера 1.
Захват є можливим при зміні стану ніжки PA0 і наявності дозволу: ICFL = 0).
Таймер CNTR1 починає рахувати від заданого наперед значення в ATICR)
якщо CMPIE = 1, то дозволяється переривання $FFEA-$FFEB, коли CNTR1 > DCR1, DCR2, DCR3
Counter Register High (старша частина 12-ти розрядного таймеру від вбудованого генератора)
Counter Register Low (молодша частина 12-ти розрядного таймеру від вбудованого генератора)
Auto-Reload Register 1 High (початкове значення CNTR1H після переповнення)
Auto-Reload Register 1 Low (початкове значення CNTR1L після переповнення)
Якщо ATRxx < DCRxx, то PA2 - PA5 = 1
Pulse Width Modulated Control Register (регістр дозволу широтно-імпульсної модуляції (ШИМ) на ніжках PA2 - PA5)
Duty Cycle Register 0 High (старша частина нульового регістру для порівняння з таймером)
Duty Cycle Register 0 Low (молодша частина нульового регістру для порівняння з таймером)
Duty Cycle Register 1 High (старша частина першого регістру для порівняння з таймером)
Duty Cycle Register Low (молодша частина першого регістру для порівняння з таймером)
Duty Cycle Register High (старша частина другого чергового регістру для порівняння з таймером)
Duty Cycle Register Low (молодша частина другого чергового регістру для порівняння з таймером)
Duty Cycle Register High (старша частина третього чергового регістру для порівняння з таймером)
Duty Cycle Register Low (молодша частина третього чергового регістру для порівняння з таймером)
Переноситься в поточний регістр порівняння
Auto-Reload Input Capture Register High (старша частина регістру захоплення, що копіює значення таймера CNTR1H
Захоплення відбувається, при умові ICF=0 і при зміні значення на ніжці PA0 (якщо ICS=1), або на ніжці PA1 (якщо ICS=0)).
Auto-Reload Input Capture Register Low (молодша частина регістру захоплення: копіює значення таймера CNTR1L
Захоплення відбувається, при умові ICF=0 і при зміні значення на ніжці PA0 (якщо ICS=1), або на ніжці PA1 (якщо ICS=0))
та умовами захоплення від тіньового таймера CNTR2, а також містить подію його переповнення, задає частоту рахунку, дозволяє режим двох таймерів.
Безпосереднього доступу до таймера CNTR2 немає. Таймер починає рахувати від заданого наперед значення в ATR2)
0,0, ICS, OVFIE2, OVF2, ENCNTR2, TRAN2, TRAN1
ICS = 1 - для захоплення значення таймера (8+12 біт) використовується ніжка PA0.
OVFIE2 = 1 дозвіл на переривання $FFE0 - $FFE1 при переповненні лічильника CNTR2
OVF2 = 0(E) - після читання ATCSR2.
якщо ENCNTR2 = 1, то дозволено режим двох таймерів (CNTR2 і ATR2 керують сигналами на PA4 і PA5. ATR2 задає частоту 0 - 4095 чим вища частота, тим гірша роздільна здатність регулювання широти імпульсів)
якщо TRAN2 = 1, то регістр порівняння стає
активним після переповнення лічильника CNTR2 і TRAN2 := 0.
якщо TRAN1 = 1, то регістр порівняння стає активним після переповнення лічильника CNTR1 і TRAN1 := 0.
Break Control Register (керує режимом паузи ШИМ на виходах PA2 - PA5 від таймерів. Пауза включається при низькому рівні на ніжці PA6)
BA = 1(E) при низькому рівні на PA6.
BA = 1 - програмна емуляція “BREAK”
BA = 0 - паузи немає, таймери працюють.
BPEN = 1 дозвіл паузи (BREAK) при низькому рівні на PA6.
PWM0 - PWM3 - шаблон впливу “BREAK” на PA2 - PA5. PWMi = 1 - пауза дозволена.
Auto-Reload Register 2 High (початкове значення старшої частини тіньового лічильника CNTR2 після переповнення)
(початкове значення молодшої частини тіньового лічильника CNTR2 після переповнення)
Dead Time Generator Register (генерація затримки міжPA2 і PA3 при умові OP0=0 і OP1=0)
Якщо DTE = 1, то PA3 вставляється міжPA2 з затримкою DT6 - DT0.
Watchdog Control Register (сторожовий таймер: коли біт T6 стає нульовим, WDGA = 1, WDGRF = 1, то виникає переривання RESET)
Лічильник, що зменшується до 0 приблизно за 1 сек. Програма повинна постійно записувати в нього максимальне значення.
Data EEPROM Control Status Register
(Регістр управління станом FLASH-пам'яті)
E2LAT = 0(E,P(E2PGM=0)) читання з EEPROM
E2PGM = 0(E) програмування закінчено
E2PGM =1(P) почався цикл програмування
(Після запису в цей регістр дані починають автоматично передаватися через SPI. Після передачі він буде містити дані, які були підтверджені)
Наступні дані можуть передаватися лише тоді, коли вони були перед тим прочитані з цього регістру (SPIF = 0).
(Містить настройки та дозвіл для передачі через SPI. Цей регістр програмується в першу чергу. Його значення повинні бути однаковими як для прийомного так і передаючого пристрою.)
SPIE, SPE, SPR2, MSTR, CPOL, CPHA, SPR1, SPR0
SPIE = 1 - після закінчення передачі (прийому) виникає переривання $FFE2 - $FFE3.
SPE = 1 - дозволяє використовувати PB0-PB3 для передачі даних по SPI.
SPE = 0(E) - ззовні змінився передавач.
SPR2-SPR0 - тактова частота передавача:
(011,010,110,001,000,100), 011=f/128, 100=f/4
MSTR = 1(E) - підтвердження режиму передачі, якщо існує більше одного передавача.
CPOL - визначає стан PB1 при відсутності передачі.
CPHA - визначає тип фронту (0-зростаючий 1-спадаючий) для синхроімпульсів на PB1.
(Визначає напрямок передачі. При будь-яких змінах рекомендовано скидати і знову встановлювати біт SPE. При помилці (OVR=1, WCOL=1, або MODF=1) рекомендовано циклічно читати SPICSR і SPIDR доки вона не зникне, а потім перезаписати регістр управління SPICR).
SPIF, WCOL, OVR, MODF,0, SOD, SSM, SSI
SPIF = 1(E) - передача закінчена. Можна програмувати SPI або читати байт.
SPIF = 0(E) - після читання даних (з SPIDR).
WCOL = 1(E) - спроба запису в SPIDR коли дані ще передаються.
OVR = 1(E) - приймач не встиг прочитати передані дані або втрата даних.
MODF = 1(E) - змінилися біти настройки (наприклад, змінився передавач).
SOD = 0 - дозволяється прийом і передача
SOD = 1 - дозволяється лише прийом даних
SSM = 0 - джерело чи приймач визначається станом ніжки PB0.
SSM = 1 - програмний вибір джерело чи приймач (визначається бітом SSI).
SSI = 1 - контролер є джерелом інформації
SSI = 0 - контролер є приймачем інформації
Analog to Digital Converter Control Status Register
(Регістр визначає параметри АЦП - аналогово-цифрового перетворювача)
EOC = 1(E) - перетворення закінчено
EOC = 0(E) - після читання регіт. ADCDRH.
SPEED = 1 - максимальна швидкість = fcpu, якщо SLOW = 0
CH2 - CH0 - задає номер каналу відповідає ніжкам PB0 - PB6.
Analog to Digital Converter Data Register High
Старша частина результату перетворення
Analog to Digital Converter Data Register Low
SLOW = 1 - обмеження швидкості до fcpu/4
D1 - D0 - молодша частина результату перетворення
External Interrupt Control Register (події генерації переривань INT3 - INT0)
IS31-IS30, IS21-IS20, IS11-IS10, IS01-IS00
00 - спадаючий фронт і низький рівень
(Визначає швидкість роботи синхро-генератора)
MCO = 0(E) вихід таймера не задіяний
MCO = 1 таймер є доступним ( A6 = 1 )
SMS = 0 швидкість таймера нормальна
SMS = 1 швидкість сповільнена у 32 рази
RC - Control Register (регулює швидкість RC-генератора в межах до 1%)
$00 - максимально можлива швидкість
System Integrity Control Status Register (регістр визначає можливість виникнення переривання RESET. Якщо всі біти = 0, то RESET виникає через сигнал на ніжці)
0,CR1,CR0, WDGRF, LOCKED, LVDRF, AVDF, AVDIE
AVDF = 1 дозвіл на переривання $FFEC - $FFED при підвищенні рівня живлення
LVDRF = 1 дозвіл на переривання $FFEC - $FFED при заниженому живленні
WDGRF = 1 дозвіл на переривання від сторожового таймера
External Interrupt Selection Register (зв'язує вектори переривань INT0 - INT3 з зміною сигналів на ніжках PA0 - PA6 і PB0 - PB6)
(Регістр стану пристрою передачі по стандарту RS232)
TDRE, TC, RDRF, IDLE, OR/LHE, NF, FE, PE
TDRE =1(E) -.регістр передачі порожній
NF = 1(E) - сигнал засмічений шумами.
(Регістр даних для передачі по стандарту RS232)
Пауза - це тривалий проміжок стану “0”
Вільно - це тривалий проміжок стану “1”
(Містить настройки швидкостей передачі і прийому)
SCP1-SCP0 - загальний дільник частоти.
SCT2-SCT0 - дільник частоти при передачі.
SCR2-SCR0 - дільник частоти при прийомі.
(Містить загальні настройки протоколу RS232)
R8, T8, SCID, M, WAKE, PCE, PS, PIE
SCID = 1 - режим енергозбереження після прийому або передачі.
WAKE - визначає метод прокидання лінії
PIE - активізує переривання при помилці парності
(Визначає типи переривань під час передачі даних по протоколу RS232)
TIE, TCIE, RIE, ILIE, TE, RE, RWU, SBK
TIE = 1 - після прийому символу виникає переривання $FFEE - $FFEF
TCIE = 1 - після передачі виникає переривання
RIE = 1 - дозволяє SCI-переривання.
ILIE - активізує переривання, якщо лінія вільна.
RWU = 1 - перериває (відключає) прийом
SBK = 1 - встановити паузу на лінії.
(Визначає режими роботи приймача під час прийому даних по протоколу RS232)
LDUM, LINE, LSLV, LASE, LHDM, LHIE, LHDF, LSF
LINE = 1 - включ. синхронізуюча послідовн.
LASE = 1 - автоматична синхронізація
LHDM = 1 - визначення паузи по синхронізуючій послідовності.
LHIE = 1 - після синхроніз. послідовності генерується переривання $FFEE - $FFEF
LHDF = 1(E) - зафіксована синхронізуюча послідовність
LSF = 1 - приймач буде шукати синхронізуючу послідовність.
SCI Extended Receive Prescaler Register (Регулює швидкість прийому даних)
SCI Extended Transmit Prescaler Register (Регулює швидкість передачі даних)
AWU Prescaler Register (визначає час перебування в режимі HALT)
(задає режим автоматичного прокидання від “сплячки” через переривання:)
AWUF = 1(E) вказує на те, що контролер прокинувся (виникло AWU-переривання)
AWUM = 1 дозволяє рахувати такти за допомогою регістрів ATRxx
AWUEN = 1 дозволяє прокидатись в режимі HALT
мікроконтроллер процесор мультиплексор адресація
Для команд, які працюють з пам'яттю можливі наступні режими адресації:
1. Регістрова, в якій значення з одного регістру передається в інший. Приклад: LD A,X.
2. Безпосереднє вказування значення. Характеризується наявністю значка “ # ” перед самим значенням. Приклад: LD A,#$0A - завантажити в акумулятор число 10; аналогічно: LD X,#$81 - завантажити в індексний регістр X число 129.
3. Пряме звернення до комірки пам'яті (або спеціалізованого регістру) з вказуванням адреси. Приклад: LD A,$0A - завантажити в акумулятор число, що знаходиться за адресою $0A, тобто, вміст регістру LTCNTR, або LD $81,Y - вивантажити в комірку пам'яті за адресою $81 індексний регістр Y.
4. Звернення до комірки за індексом. Приклад: LD A,(12345,X) - завантажити в акумулятор число, що знаходиться за адресою (X +12345). Замість регістру X може бути регістр Y. Можливі варіанти, коли відсутнє зміщення, наприклад: LD A,(X) або
LD (X),A. В цьому випадку адреса комірки буде не більше $FF.
5. Непряма адресація використовує комірку як індекс. Приклад: LD A,([$80],X) - адреса формується як сума регістру X та вмісту комірки $80. З отриманої адреси значення передається в акумулятор. Замість регістру X може бути регістр Y, наприклад:
LD ([$80],Y),X - переписати регістр X в пам'ять за адресою (Y + вміст комірки $80).
С истема команд мікроконтроллерів St7flite
В наступній таблиці використані такі скорочення:
@ - адреса у формі мітки в програмі;
Кома між цими значеннями означає обов'язкову присутність операнду, а знак “/” - вибір.
Очистити регістр або комірку пам'яті
Скинути вказівник стеку в початковий стан
Порівняти регістр або комірку з нулем
Бітове порівняння одиниць в акумуляторі й комірці
Інвертування регістру або комірки пам'яті
Зміна знаку регістру або комірки пам'яті
Переписати певний біт в CF і перейти, якщо CF = 1
Переписати певний біт в CF і перейти, якщо CF = 0
Додати до акумулятора вміст комірки
Додати до акумулятора вміст комірки і CF
Відняти від акумулятора вміст комірки
Відняти від акумулятора вміст комірки і CF
Множення без знаку регістру X або Y на акумулятор
Логічний зсув вліво через перенос CF
Логічний зсув вправо через перенос CF
Арифметичний зсув вправо через перенос CF
Циклічний зсув вліво через перенос CF
Циклічний зсув вправо через перенос CF
Чотирьохкратний циклічний зсув: (0-3) - (4-7)
Короткий перехід (не більше ніж на 128 байт )
Перехід на абсолютну адресу (довгий перехід)
Виклик підпрограми за абсолютною адресою
Виклик підпрограми за відносною адресою
Повернення з підпрограми (абсолютне)
Перехід, якщо сигнал на ніжці порту,
яка спричинила переривання - високий
Перехід, якщо сигнал на ніжці порту,
яка спричинила переривання - низький
Перехід, якщо переривання заборонені ( I = 1 )
Перехід, якщо переривання дозволені ( I = 0 )
Перехід, якщо відбувся перенос між 3 і 4 бітами
Перехід, якщо не відбувся перенос між 3 і 4 бітами
Перехід, якщо результат від'ємний (-)
Перехід, якщо результат додатній (+)
Перехід, якщо результат нульовий (=)
Перехід, якщо результат не нульовий (?)
Перехід, якщо перенос (CF=1): Операнд1 < Операнд2
Перехід, якщо переносу немає (CF=0)
Перехід, якщо Операнд1 > = Операнд2
Виклик немаскованого переривання $FFFC - $FFFD
Встановити прапорець переносу ( CF = 1 )
Скинути прапорець переносу ( CF = 0 )






Історія розвитку обчислювальної техніки. Особливості IBM-структури. Основні пристрої: материнська плата, процесор, системна шина, BIOS, внутрішня пам’ять. Стандартні типи інтерфейсів. Пристрої вводу-виводу інформації. Інші пристрої. реферат [112,1 K], добавлен 04.10.2004
Мова асемблер для кожного типу комп'ютера своя. Асемблер орієнтований саме на специфіку комп'ютера або на специфіку процесора. Мікропроцесори, що належать до різних сімейств, мають свої системи команд. Система команд МП ІA 32 - режими адресації. лекция [36,2 K], добавлен 13.04.2008
Розрахунок часових затримок для формування імпульсів у програмі передачі даних через послідовний порт мікроконтролера, а також розрахунок швидкості передачі даних через послідовний порт. Алгоритм підпрограми обробки переривань від послідовного порту. курсовая работа [29,9 K], добавлен 07.06.2010
Проектування інформаційної системи; концептуальне (інфологічне) проектування, побудова ER-діаграми, нормалізація даних. Даталогічне проектування баз даних, фізичне проектування інформаційних систем. СУБД Access: об'єкти, створення таблиць, запитів, форм. курсовая работа [13,9 M], добавлен 09.01.2010
Функціонування мікрокомп’ютерів з шинною організацією. Системні локальні шини. Організація та структура пам’яті. Базова система введення-виведення. Режими роботи процесора I80286. Програмна модель процесора. Регістри процесора та умови програмування. курсовая работа [326,1 K], добавлен 06.06.2013
Розробка програми для отримання відомостей про відвантаження готової продукції: програмування головного блоку та процедур вводу даних з первинних документів, їх виводу на дисплей, сортування записів вхідного файлу, підрахунку підсумків по коду утримання. курсовая работа [64,2 K], добавлен 23.04.2010
Створення вжитків зі сторони сервера баз даних. Оголошення обмежень цілісності в таблиці визначень або з використанням механізму тригерів баз даних. Описання мови команд SQL*Plus як інтерактивної системи, невід'ємної для бази даних Oracle і вжитків. реферат [17,3 K], добавлен 09.08.2011
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Програмування мікроконтроллерів реферат. Программирование, компьютеры и кибернетика.
Курсовая работа по теме Особенности влияния средств массовой информации на формирование общественного сознания
Почему Люди Враждуют Сочинение
Детское Сочинение Поленова Золотая Осень
Проблема Равнодушия Сочинение Егэ
Курсовая работа по теме Договор безвозмездного пользования
Реферат: Происхождение и эволюция жизни
Реферат по теме Вологда: культурологический очерк
Реферат: Розничные продажи на Московском рынке гречки
Реферат по теме Европейская интеграция
Реферат по теме 'Отцы и дети' в русской критике
Курсовая работа по теме Расчет камеры жидкостного ракетного двигателя
Курсовая работа по теме Методика выполнения живописной работы в жанре сельского пейзажа
Сочинение по теме Духовное перерождение Ниловны в романе Горького "Мать"
Реферат: Ручное огнестрельное и холодное оружие (конец XV - первая половина XVII вв.)
Деловое Общение И Этикет Реферат
Доклад по теме Александр Иванович Куприн
Реферат: Петти
Курсовая работа: Проектирование и обеспечение функционирования системы управления предпринимательской организации . Скачать бесплатно и без регистрации
Правила Игры В Большой Теннис Реферат
Реферат: Интегральный расчет тяжести труда. Скачать бесплатно и без регистрации
Физиология сна - Биология и естествознание реферат
Рязанское княжество в XI-XIII вв. и его материальная культура - История и исторические личности научная работа
Органы Федеральной службы исполнения наказаний Российской Федерации - Государство и право курсовая работа


Report Page