Проектування мікркомп'ютера

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2002
Тип роботи:
Курсова робота
Предмет:
Інші
Група:
КІ

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України НУ "Львівська політехніка" Кафедра ЕОМ Курсова робота “Проектування мікркомп'ютера” Львів – 2002 Зміст 1. Початкові дані на проектування 2 2. Розробка схеми електричної функціональної мікрокомп’ютера та основних режимів функціонування 3 2. 1. Основні технічні характеристики C8051F000 Mixed-Signal ISP FLASH MCU (комбінованого сигнального мікропроцесора) 3 2. 2. Структура МП C8051F000 3 2. 3. Основні вузли МП C8051F000 та їх опис 5 2.3.1. Мікроконтролер CIP-51 5 2.3.2. АЦП 12-Bit 8 2.3.3. Аналоговий мультиплексор та PGA 9 2.3.4. ЦАП 12 Bit 10 2.3.5. Компаратори 10 2.3.6. Система живлення 11 2.3.7. Система синхронізації 12 2.3.8. UART 12 2.3.9. JTAG 14 3. Розробка схеми електричної-принципової мікрокомп'ютера 16 4. Розробка програмної моделі та програми початкової ініціалізації мікрокомп'ютера 20 4. 1. Структура пам’яті 20 4. 2. Програмна конфігурація вузлів МП 22 4. 3. Контроль перетворень та передача даних 22 4. 4. Відображення та збереження інформації 23 4. 5. Сканування аналогових величин 23 Література 25 Додаток 1. Лістинг програми керування та ініціалізації мікрокомп’ютера 26 Додаток 2. Перелік елементів 33 1. Початкові дані на проектування Спроектувати мікро ЕОМ на базі мікропоцесора Cygnal C8051F000. Розробити функціональну та принципову електричні схеми мікрокомп’ютера. Розробити програму ініціалізації та керування мікрокомп’ютером. Основні вузли мікрокомп’ютера: Центральний процесор – C8051F000 мікропроцесор; вузол початкової установки; вузол синхронізації; вузол формування магістралі адресу (МА); вузол формування магістралі даних (МД); вузол формування магістралі керування (МК); вузол початкової установки (ПУ); Постійна пам’ять (ПЗП); Оперативна пам’ять (ОЗП); Підсистема вводу/виводу (ПВВ); 2. Розробка схеми електричної функціональної мікрокомп’ютера та основних режимів функціонування 2. 1. Основні технічні характеристики C8051F000 Mixed-Signal ISP FLASH MCU (комбінованого сигнального мікропроцесора) швидкодія до 20MIPS на 20MHz; 22 вектори переривань; використання режимів IDLE-Mode та SLEEP-Mode; можливість роботи із RC, LP, XT, HP схемами генератора; вбудована схема підтримки емулювання; 32 кБ FLASH-пам’яти програм, внутрисхемне програмування; 256 байт ОЗП (стандарт), зовнішнє не підтримується; 4 таймера 16-біт, 5 модулів Capture/Compare; Watchdog-таймер; сенсор температури з точністю до +2 °C; вхідний мультиплексор з кофігуруванням 1/8, або диференційні входи; програмований підсилювач (PGA) з коефіцієнтами 16, 8, 4, 2, 1, 0.5; АЦП 12-біт з інтегральною нелінійністю до +1LSB; Data Dependent Windowed Interrupt Generator; 2 ЦАПа 12-біт; компаратор з 16 рівнями гістерезісу з виходом на переривання або скидом; прецезійний монітор напруги живлення ; порти RS232, SPI, SMBus (IIC) ; напруги живлення 2.7-3.6 В; споживання 10 мА, на 1MHz; типове споживання 2 мА; 2. 2. Структура МП C8051F000 Схема розміщена вузлів МП показана на Рис 2.1. А його структурна схема на Рис 2.2. Структуру МП можна розділити на 2 частини: аналогову та цифрову.  Рис. 2.1.Схема розміщення вузлів МП В аналоговій частині МП розміщені: сенсор температури з точністю до +2 °C; вхідний мультиплексор з кофігуруванням 1/8, або диференційні входи; програмований підсилювач (PGA) з коефіцієнтами 16, 8, 4, 2, 1, 0.5; АЦП 12-біт з інтегральною нелінійністю до +1LSB; Data Dependent Windowed Interrupt Generator; 2 ЦАПа 12-біт; компаратор з 16 рівнями гістерезісу з виходом на переривання або скидом; прецизійний монітор напруги живлення ; джерело опорної напруги (30 ppm/°C) з виводом назовні і відключенням; В цифровій часині МП представлені власне мікропроцесорне ядро СІР-51, основна (SRAM) та флеш пам’ять, модуль JTAG логіки, системи керування перериваннями, системи інтерфейсів портів вводу/виводу.  Рис. 2.2. Структурна схема МП 2. 3. Основні вузли МП C8051F000 та їх опис 2.3.1. Мікроконтролер CIP-51 Мікро контролер системи має такі характеристики: швидкодія до 20MIPS на 20MHz; 22 вектори переривань; використання режимів IDLE-Mode і SLEEP-Mode; напруги живлення 2.7-3.6 В; можливість роботи із RC, LP, XT, HP схемами генератора; вбудована схема підтримки емулювання; 32 кб FLASH-пам’яти програм, внутрисхемне програмування; 256 байт ОЗП (стандарт), зовнішня не підтримується; 4 таймера 16-біт, 5 модулів Capture/Compare; Watchdog-таймер; Структурна схема мікроконтролерного ядра представлена на Рис 2.3.  Рис. 2.3. Структурна схема ядра CIP-51 Основні елементи схеми: ALU – арифметико – логічний пристрій; Stack pointer – вказівник стеку; B reg. – В регістр; Accumulator – акумулятор; PC increment – інкремент лічильника; Program counter – лічильник; Data pointer – вказівник даних; Buffer – буферні регістри; Program address reg. – рег. адреси команд; Power control reg. – рег. контролю живлення; Interupt int. – інтерфейс переривань; Memory int. – інтерфейс пам’яті; SFR Bus int. – шина регістрів спеціального призначення; Data Bus – шина даних; Система команд мікропроцесорного ядра містить набори команд для виконання арифметичних, логічних, бітових операцій, операцій роботи із пам’яттю та портами і наведена у Таблиці 2.1. Таблиця 2.1. Система команд СІР-51 Мнемоніка команди Опис команди К-сть байт К-сть тактів  Арифметичні операції  ADD A,Rn Add Додати регістр до A 1 1  ADD A,direct Додати безпосередньо байт до A 2 2  ADD A,@Ri Додати з комірки RAM до A 1 2  ADD A,#data Додати до A 2 2  ADDC A,Rn Додати регістр до A з переносом 1 1  ADDC A,direct Додати безпосередньо байт до A з переносом 2 2  ADDC A,@Ri Додати з комірки RAM до A з переносом 1 2  ADDC A,#data Додати до A з переносом 2 2  SUBB A,Rn відняти регістр з A з запозиченням 1 1  SUBB A,direct відняти безпосередньо байт з A з запозиченням 2 2  SUBB A,@Ri відняти з комірки RAM з A з запозиченням 1 2  SUBB A,#data відняти з A з запозиченням 2 2  INC A збільшити A 1 1  INC Rn збільшити регістр 1 1  INC direct збільшити безпосередньо байт 2 2  INC @Ri збільшити з комірки RAM 1 2  DEC A зменшити A 1 1  DEC Rn зменшити регістр 1 1  DEC direct зменшити безпосередньо байт 2 2  DEC @Ri зменшити з комірки RAM 1 2  INC DPTR збільшити Data Pointer 1 1  MUL AB перемножити A та B 1 4  DIV AB поділити A на B 1 8  DA A десяткова корекція 1 1  Логічні операції  ANL A,Rn AND регістр A 1 1  ANL A,direct AND безпосередньо байт в A 2 2  ANL A,@Ri AND з комірки RAM в A 1 2  ANL A,#data AND в A 2 2  ANL direct,A AND A з безпосередньо байтом 2 2  ANL direct,#data AND з безпосередньо байт 3 3  ORL A,Rn OR регістр з A 1 1  ORL A,direct OR безпосередньо байт з A 2 2  ORL A,@Ri OR з комірки RAM до A 1 2  ORL A,#data OR з A 2 2  ORL direct,A OR A з безпосередньо байтом 2 2  ORL direct,#data OR з безпосередньо байтом 3 3  XRL A,Rn Exclusive-OR рег. з A 1 1  XRL A,direct Exclusive-OR безпосередньо байт з A 2 2  XRL A,@Ri Exclusive-OR з комірки RAM до A 1 2  XRL A,#data Exclusive-OR з A 2 2  XRL direct,A Exclusive-OR A з безпосередньо байтом 2 2  XRL direct,#data Exclusive-OR з безпосередньо байтом 3 3  CLR A очистити A 1 1  CPL A доповнити A 1 1  RL A зсув A вліво 1 1  RLC A зсув A вліво з переносом 1 1  RR A зсув A вправо 1 1  RRC A зсув A вправо з переносом 1 1  SWAP A поміняти з A 1 1  Команди пересилки  MOV A,Rn перенести регістр до A 1 1  MOV A,direct перенести безпосередньо байт до A 2 2  MOV A,@Ri перенести з комірки RAM до A 1 2  MOV A,#data перенести до A 2 2  MOV Rn,A перенести A до регістру 1 1  MOV Rn,direct перенести безпосередньо байт до регістру 2 2  MOV Rn,#data перенести до регістр 2 2  MOV direct,A перенести A до безпосередньо байту 2 2  MOV direct,Rn перенести регістр до безпосередньо байту 2 2  MOV direct,direct перенести безпосередньо байт 3 3  MOV direct,@Ri перенести з комірки RAM до байту 2 2  MOV direct,#data перенести до байту 3 3  MOV @Ri,A перенести A до з комірки RAM 1 2  MOV @Ri,direct перенести безпосередньо байт з комірки RAM 2 2  MOV @Ri,#data перенести з комірки RAM 2 2  MOV DPTR,#data16 Зчитати вказівник з константою 3 3  MOVC A,@A+DPTR перенести code байт DPTR до A 1 3  MOVC A,@A+PC перенести code байт PC до A 1 3  MOVX A,@Ri перенести (8-біт address) до A 1 3  MOVX @Ri,A перенести A до (8-біт address) 1 3  MOVX A,@DPTR перенести (16-біт address) до A 1 3  MOVX @DPTR,A перенести A до (16-біт address) 1 3  PUSH direct Занести безпосередньо байт в стек 2 2  POP direct Зчитати безпосередньо байт з стека 2 2  XCH A,Rn поміняти регістр з A 1 1  XCH A,direct поміняти безпосередньо байт з A 2 2  XCH A,@Ri поміняти з комірки RAM з A 1 2  XCHD A,@Ri помяніти комірки RAM з A 1 2  Бінарні операції  CLR C очистити перенос 1 1  CLR bit очистити безпосередньо біт 2 2  SETB C встановити перенос 1 1  SETB bit встановити безпосередньо біт 2 2  CPL C доповнити перенос 1 1  CPL bit доповнити безпосередньо біт 2 2  ANL C,bit AND безпосередньо біт з переносом 2 2  ANL C,/bit AND з доповненням безпосередньо до біту з переносом 2 2  ORL C,bit OR безпосередньо біт з переносом 2 2  ORL C,/bit Or з доповненням безпосередньо до біту з переносом 2 2  MOV C,bit перенести безпосередньо біт з переносом 2 2  MOV bit,C перенести перенос до безпосередньо біту 2 2  JC rel перехід якщо перенос встановлено 2 2/3  JNC rel перехід якщо перенос не встановлено 2 2/3  JB bit,rel перехід якщо безпосередньо встановлено біт 2 ¾  JNB bit,rel перехід якщо безпосередньо біт не встановлено 2 ¾  JBC bit,rel перехід якщо безпосередньо встановлено біт в скид 3 ¾  Команди переходів  ACALL addr11 виклик процедури 2 3  LCALL addr16 виклик дальньої процедуриl 3 4  RET повернення з процедури 1 5  RETI повернення з переривання 1 5  AJMP addr11 безумовний перехід 2 3  LJMP addr16 довгий перехід 3 4  SJMP rel короткий перехід 2 3  JMP @A+DPTR перехід з комірки + DPTR 1 3  JZ rel перехід якщо A = 0 2 2/3  JNZ rel перехід якщо A недорівнює 0 2 2/3  CJNE A,direct,rel Порівняти безпосередньо байт з A та перейти якщо не 0 3 ¾  CJNE A,#data,rel Порівняти до A та перейти якщо не 0 3 ¾  CJNE Rn,#data,rel Порівняти до регістр та перейти якщо не 0 3 ¾  CJNE @Ri,#data,rel порівняти до з комірки та перейти якщо не 0 3 4/5  DJNZ Rn,rel зменшити регістр та перейти якщо не 0 2 2/3  DJNZ direct,rel зменшити безпосередньо байт та перейти якщо не 0 3 ¾  NOP нема операції 1 1   Є лише один невикористовуваний код операції (0xA5) це виконання деякої функції NOP, яка нічого невиконує і являється порожнім оператором. Умовні позначення в таблиці про регістри, операнди та режими адресації: Rn - Регістри R0-R7 поточно вибраного регістрового банку @Ri - Непряма адресація в пам’ть даних Data RAM через регістри R0-R1 rel - 8-ми бітне, знакове (доповняльний код) зміщення відносно першого байту наступної інструкції. Використовується командами SJMP та всіма командами умовних переходів direct - 8-ми бітна адреса внутрішньої пам’яті даних. Це може бути пряма адресація до Data RAM (0x00-0x7F) чи до SFR (0x80-0xFF) #data - 8-ми бітна константа #data 16 - 16-ти бітна константа bit – Біт прямої адресації в пам’яті даних Data RAM чи SFR addr 11 - 11-ти бітна адреса призначеня, використовується командами ACALL та AJMP. Ціль повинна бути в межах деякої 2К-байтної сторінки пам’яті програм, визначається як перший байт наступної інструкції addr 16 - 16-ти бітна адреса призначеня, використовується командами LCALL та LJMP. Ціль може бути де небуть в межах 64К-байтного простору пам’яті програм 2.3.2. АЦП 12-Bit Підсистема АЦП складається з: 9-канального аналогового мультиплексора з переналаштованою конфігурацією (AMUX), програмованого підсилювача напруг (PGA), 100ksps, 12-ти розрядного SAR АЦП з інтегрованим модулем track-and-hold та програмованим детектором вікон. AMUX, PGA, Data Conversion Modes, та Window Detector є повністю програмно керовані через спеціальний функціональній регістр (регістр спеціального призначення)  Рис. 2.4. Структура ADC 12-Bit  Рис 2.5. Процес перетворення в АЦП 2.3.3. Аналоговий мультиплексор та PGA Вісім каналів мультиплексора є доступні для зовнішніх сигналів (вимірів) тоді як дев’ятий канал під’єднаний до вбудованого температурного давача. Вхідні пари можуть бути запрограмовані для операцій в differential та single-ended режимах. Це дозволяє користувачу обирати на найбільш зручний режим вимірів для вхідних каналів “on-the-fly”. Два регістри є пов’язані з AMUX це Channel Selection регістр AMX0SL та Configuration регістр AMX0CF. Значення по замовчуванню заносяться під час скиду. 2.3.4. ЦАП 12 Bit МП цього сімейства містять два 12-біт ЦАП (використовують напруговий режим). ЦАП мають вихідний рівень коливань від 0В до VREF-1LSB що дає можливість отримувати код від 0x000 до 0xFFF. Використовує сигнали керування: DAC0EN – дозвіл використання DAC0DF – має три біти для вибору режиму представлення коду Вивід результатів відбувається в 2 регістри (старший та молодший) DAC0H та DAC0L.  Рис. 2.6. Структура DAC 12-Bit 2.3.5. Компаратори Дане сімейство МП містить 2 інтегровані компаратори напруг. Вхід компараторів є доступний через виводи МС. Вихід – опціонально – через систему переривань, або на виводи МС. Обидва компаратори програмно можна встановити у прозорий (проточний) режим або у двотактний режим. Гістерезіс обох компараторів встановлюється програмним шляхом (регістри CPT0CN, CPT1CN). На вхід можна подавати сигнали в межах -0.25V до (AV+) + 0.25V. Величини негативного/позитивного гістерезісу визначаються у регістрах бітами CP0HYN/CP0HYP відповідно.  Рис. 2.7. Структура компаратора 2.3.6. Система живлення Дана схема (схема формування/пов’язання напруг) містить генератор та gain-of-two вихідний підсилювач і може під’єднуватись до зовнішніх пристроїв схеми + термічний сенсор. Керування вузлами схеми та режимами роботи відбувається 3 бітами регістру REF0CN.  Рис. 2.8. Структура інтегрованої системи живлення 2.3.7. Система синхронізації Кожен MCU включає зовнішний та внутрішний схеми генерації, які використовуються для синхронізації роботи МП. Загрузка починається з використанням внутрішньої синхронізації після буть якого скиду. Цей внутрішний генератор може бути включений чи виключений і його частота може юути використана регістром OSCICN. Обидва генератори є виключені коли на ножці /RST утримується низький рівень. MCU може пацювати на внутрішньому генераторі дуже довго, проте може бути переключений використовуючи вище зазначений регістр. Зовнішний генератор потребує використання резонатора, кристала, конденсатора або RC ланки що під’єднані до ножок XTAL1/XTAL2, як це показано на Рис 2.8.  Рис 2.9. Схема підключення зовнішньої синхронізації 2.3.8. UART UART – це універсальний порт з асинхронною передачею даних. Він може функціонувати в повно дуплексному режимі. У всіх режимах передача даних є буферизується за допомогою регістра тимчасового зберігання даних. Це дозволяє UART приймати наступні дані ще до того коли програма завершить читання попередніх. UART здатний генерувати переривання, якщо вони дозволені. Він має два начтупних джерела переривань: коли передача даних завершена та коли прийом даних інформації завершився.  Рис 2.10. Структура UART UART має чотири режими роботи (один синхронний та три асинхроних) які визначаються бітами регістра керування SCON. Ці чотири режими описані в Таблиці 2.2. Таблиця 2.2. Режими UART Режим Синхронізація Тактові імпульси Розрядність даних Старт/Стоп Біти  0 Синхронна SYSCLK чи SYSCLK/12 8 Відсутні  1 Асинхронна Timer1 чи Timer2 переповнення 8 1 Старт, 1 Стоп  2 Асинхронна SYSCLK/32 чи SYSCLK/64 9 1 Старт, 1 Стоп  3 Асинхронна Timer1 чи Timer2 переповнення 9 1 Старт, 1 Стоп    Рис 2.11. Взаємозв’язок в режимі 0 UART  Рис 2.12. Режим 0 UART  Рис 2.13. Взаємозв’язок в режимі 1 UART  Рис 2.14. Режим 1 UART 2.3.9. JTAG Сімейство С8051F000 має інтегровану JTAG та емуляційну логіку. JTAG інтерфейс повністю сумісний з IEEE 1149.1 специфікацією, забезпечує повне скануваня та тестування процесора, операції читання / запису Flash пам’яті та легкого внутрйшньо-схемного емулювання. Емуляційна система Сignal підтримує контроль та модифікацію пам’яті, регістрів, встановленя точок переривань, точок спостереження, монітор стеку і покрокове виконання. Вся цифрова та аналогова апаратура лишається функціональною та працює коректно на протязі емуляції. C8051F000DK - це розширений набір що включає все програмне та апаратне забезпечення, яке необхідне для внутрішнього налагодження процасора.  Рис 2.15. Схема під’єднаня JTAG інтерфейса JTAG інтерфейс в даному процесорі представляє собою чотири ножки: TCK, TMS, TDI та TDO. Доступ до інтерфейсу відбувається за допомогою регістрів IR (регістр інструкцій 16 біт) та DR (регістр даних). IR може виконати одну із восьми інструкцій які наведені в Таблиці 2.3. Таблиця 2.3. JTAG інтрукції Значення IR Інструкція Примітки  0x0000 EXTEST Вибір Boundary Data Register для контролю та спостареженням  0x0002 SAMPLE/PRELOAD Вибір Boundary Data Register для спостареженням та встановлення значень  0x0004 IDCODE Вибір ID регістра  0xFFFF BYPASS Вибір Bypass Data регістра  0x0082 Flash Control Вибір FLASHCON регістра для контролю за відповідями інтарфейсної логіки на читання та запис до FLASHDAT регістра  0x0083 Flash Data Вибір FLASHDAT рагістра для читання чи запису до Flash пам’яті  0x0084 Flash Address Вибір FLASHADR регістру який містить адресу для всіх операції читання, запису та стирання Flash  0x0085 Flash Scale Вибір FLASHSCL регістра який контролює дільник частоти що використовується для генерування сигналів Flash операцій   Як було сказано више JTAG інтарфейс забезпечує доступ до Flash пам’яті це дає змогу препрграмовувати її використовуючи Flash Control, Flash Data, Flash address, Flash Scale регістри. 3. Розробка схеми електричної-принципової мікрокомп'ютера Використовуючи як основу мікропроцесор C8051F000 спроектуємо модель мікрокомп'ютера, яка виконуватиме функції цифрового осцилографа. Мікропроцесор C8051F000 виконуватиме роль повнофункціонального вузла для перетворення і обробки аналогових та цифрових сигналів. Відображення та збереження отриманої інформації відбуватиметься засобами персонального комп'ютера. МП C8051F000 фірми Cygnal є потужний сигнальний процесор. Він містить багатофункціональний аналоговий модуль, який може виконувати швидке захоплення вхідного сигналу (до 100 КГц) в досить широкому діапазоні. Він не має можливості розширення та доступу до зовнішньої пам'яті, проте мікропроцесор містить вмонтований високошвидкісний (до 115,200 бод) UART який дозволяє передавати дані до персонального комп'ютера із швидкістю приблизно 5000 елементів за сек. Персональний комп'ютер може зберігати отримані виміри або відображати результати у реальному масштабі часу. МП C8051F000 виконаний у 64 контактному корпусі типу TQFP-64:  Рис. 3.1. TQFP-64 діаграма виводів Таблиця 3.1. Призначення виводів мікросхеми МП Назва Номер ніжки  Тип Пояснення   F000 F010 F001 F011 F002 F012    VD 31,40,62 31,40,62 18,20  Цифрове значення напруги  DGND 30,41,61 22,33,27,19 17,21  Цифрове значення землі  AV+ 16,17 13,43 9,29  Позитивне аналогове значення подачі живлення  AGND 5,15 44,12 8,30  Аналогове значення заземлення  TCK 22 18 14 D In JTAG Тест годинника внутрішньою напругою  TMS 21 17 13 D In JTAG перевірка роботи вибірки SELECT внутрішньою напругою  TDI 28 20 15 D In JTAG Тест вхідних даних внутрішньою напругою. TDI є тригерно замкнений на час TCK  TDO 29 21 16 D Out JTAG Тест вихідних даних . Дані заблоковані від TDO, що є тригерно замкнений на час TCK  XTAL1 18 14 10 D In Вхід кристалу. Належить до внутрішньої схеми генератора , до кристалічного чи керамічного резонатора. Для точності внутрішній годинник, з’єднує кристал чи керамічний резонатор від XTAL1 до XTAL2.  XTAL2 19 15 11 D Out Вихід з кристалу. Ця ніжка призначеня для керамічного чи кристального генератора.  /RST 20 16 12 D I/O Скид процесора.  VREF 6 3 3 A I/O Контроль живлення  CPO+ 4 2 2 A In Компаратор № 0. Неінверсний вхід  CPO- 3 1 1 A In Компаратор № 0. Інверсний вхід  CP1+ 2 45  A In Компаратор № 1. Неінверсний вхід  CP1- 1 46  A In Компаратор № 1. Інверсний вхід  DAC0 64 48 32 A Out ЦАП вихід №0  DAC1 63 47 31 A Out ЦАП вихід №1  AIN0 7 4 4 A In Канал входу №0 аналогового мультиплексора  AIN1 8 5 5 A In Канал входу №1 аналогового мультиплексора  AIN2 9 6 6 A In Канал входу №2 аналогового мультиплексора  AIN3 10 7 7 A In Канал входу №3 аналогового мультиплексора  AIN4 11 8  A In Канал входу №4 аналогового мультиплексора  AIN5 12 9  A In Канал входу №5 аналогового мультиплексора  AIN6 13 10  A In Канал входу №6 аналогового мультиплексора  AIN7 14 11  A In Канал входу №7 аналогового мультиплексора  P0.0 39 31 19 D I/O Port0 Bit0. Cистеми вводу/виводу  P0.1 42 34 22 D I/O Port0 Bit1. Cистеми вводу/виводу  P0.2 47 35 23 D I/O Port0 Bit2. Cистеми вводу/виводу  P0.3 48 36 24 D I/O Port0 Bit3. Cистеми вводу/виводу  P0.4 49 37 25 D I/O Port0 Bit4. Cистеми вводу/виводу  P0.5 50 38 26 D I/O Port0 Bit5. Cистеми вводу/виводу  P0.6 55 39 27 D I/O Port0 Bit6. Cистеми вводу/виводу  P0.7 56 40 28 D I/O Port0 Bit7. Cистеми вводу/виводу  P1.0 38 30  D I/O Port1 Bit0. Cистеми вводу/виводу  P1.1 37 29  D I/O Port1 Bit1. Cистеми вводу/виводу  P1.2 36 28  D I/O Port1 Bit2. Cистеми вводу/виводу  P1.3 35 26  D I/O Port1 Bit3. Cистеми вводу/виводу  P1.4 34 25  D I/O Port1 Bit4. Cистеми вводу/виводу  P1.5 32 24  D I/O Port1 Bit5. Cистеми вводу/виводу  P1.6 60 42  D I/O Port1 Bit6. Cистеми вводу/виводу  P1.7 59 41  D I/O Port1 Bit7. Cистеми вводу/виводу  P2.0 33   D I/O Port2 Bit0. Cистеми вводу/виводу  P2.1 27   D I/O Port2 Bit1. Cистеми вводу/виводу  P2.2 54   D I/O Port2 Bit2. Cистеми вводу/виводу  P2.3 53   D I/O Port2 Bit3. Cистеми вводу/виводу  P2.4 52   D I/O Port2 Bit4. Cистеми вводу/виводу  P2.5 51   D I/O Port2 Bit5. Cистеми вводу/виводу  P2.6 44   D I/O Port2 Bit6. Cистеми вводу/виводу  P2.7 43   D I/O Port2 Bit7. Cистеми вводу/виводу  P3.0 26   D I/O Port3 Bit0. Cистеми вводу/виводу  P3.1 25   D I/O Port3 Bit1. Cистеми вводу/виводу  P3.2 24   D I/O Port3 Bit2. Cистеми вводу/виводу  P3.3 23   D I/O Port3 Bit3. Cистеми вводу/виводу  P3.4 58   D I/O Port3 Bit4. Cистеми вводу/виводу  P3.5 57   D I/O Port3 Bit5. Cистеми вводу/виводу  P3.6 46   D I/O Port3 Bit6. Cистеми вводу/виводу  P3.7 45   D I/O Port3 Bit7. Cистеми вводу/виводу   Повнофункціональна модель повинна містити такі вузли: аналогову інтерфейсну частину; вузол контролю перетворень та передачі даних; систему збереження та відображення даних; В свою чергу для створення аналогового інтерфейсу на базі C8051F000 будуть задіяні такі модулі мікпроцесора: 8-ми канальний аналоговий мультиплексор; програмований підсилювач; 12-бітний ЦАП/АЦП конвертер; Мультиплексор можна запрограмувати як для роботи у 4-х канальному диференційному режимі так і для роботи в режимі 8-ми канального одиночного мультиплексора. Диференційний (вибірковий) режим є більш практичний. Вихід мультиплексора під’єднаний до програмованого підсилювача (PGA). PGA може отримувати диференційний сигнал та видавати (генерувати) єдиний вихідний сигнал. Коефіцієнт підсилення можна змінювати в реальному масштабі часу (на льоту) але він може приймати лише такі фіксовані значення: 0,5; 1; 2; 4; 8; 16. Сигнал з виходу підсилювача спрямований на 12-бітний ЦАП/АЦП конвертер. Максимальна пропускна здатність цього перетворювача близько 100,000 перетворень за секунду. Пропускна здатність (швидкодія) може бути контрольована та визначена програмним шляхом. Цикл перетворення може змінюватись через Timer0, Timer3, External signal або внутрішнім програмним шляхом. Модель мікропроцесорної системи складається з: мікропроцесора C8051F000; інтерфейсу RS-232 IC; узгоджувача напруг; Основні характеристики та часові діаграми режимів роботи комунікаційного інтерфейсу RS-232 на базі МС МАХ-232 Таблиця 3.2. Харектиристики МС МАХ-232 Тип МС МАХ232 (МАХ202)  Живлення +5В  К-сть портів вв/вив 2/2  Номінальна ємність нав. (мкФ) 1,0 (0,1)  Пропускна здатність 120 Кбіт/с   Рис. 3.2. УГП та структура МС МАХ232  Рис. 3.3. Часові діаграми режимів пересилки (а) та прийому даних (б) Початкове внутрішнє налагодження системи відбувається через фізичне замикання відповідних керуючих виводів. Так ініціалізація UART відбувається через виводи Р0.6-Р0.7. Коли на мікропроцесор подається живлення по замовчуванню відбувається самоініціалізація всіх вузлів МП. Ініціалізація програми примусово переводить МП на використання зовнішнього тактового генератора. 4. Розробка програмної моделі та програми початкової ініціалізації мікрокомп'ютера 4. 1. Структура пам’яті Пам’ять МП розділяється на програмну та пам'ять даних. Пам'ять програм виконана як флеш пам'ять. Однак у цій області пам'яті можна зберігати як дані так і програмний код. Ємність 32КБ + 128 байт. У випадку розміщення у флеш пам'яті коду даних він зберігається у секторі 0x8000 – 0x807F.  Рис. 4.1. Структура внутрішньої пам’яті Першу половину пам'яті даних (128 байт) займають регістри спеціального призначення їх опис приведено у Таблиці 4.1. Таблиця 4.1. Перелік регістрів спеціального призначення Адреса Регістр Призначення  0xE0 ACC Акумулятор  0xBC ADC0CF ADC конфігурація  0xE8 ADC0CN ADC контроль  0xC5 ADC0GTH ADC Greater-Than Data Word (High Byte)  0xC4 ADC0GTL ADC Greater-Than Data Word (Low Byte)  0xBF ADC0H ADC Data Word (High Byte)  0xBE ADC0L ADC Data Word (Low Byte)  0xC7 ADC0LTH ADC Less-Than Data Word (High Byte)  0xC6 ADC0LTL ADC Less-Than Data Word (Low Byte)  0xBA AMX0CF ADC MUX конфігурація  0xBB AMX0SL ADC MUX вибір каналу  0xF0 B B регістр  0x8E CKCON Clock контроль  0x9E CPT0CN компаратор 0 контроль  0x9F CPT1CN компаратор 1 контроль  0xD4 DAC0CN DAC 0 контроль  0xD3 DAC0H DAC 0 Data Word (High Byte)  0xD2 DAC0L DAC 0 Data Word (Low Byte)  0xD7 DAC1CN   0xD6 DAC1H DAC 1 Data Word (High Byte)  0xD5 DAC1L DAC 1 Data Word (Low Byte)  0x83 DPH Data Pointer (High Byte)  0x82 DPL Data Pointer (Low Byte)  0xCE DSROP DSR Options  0xE6 EIE1 Extended Interrupt Enable  0xE7 EIE2 Extended Interrupt Enable  0xF6 EIP1 External Interrupt Priority 1  0xF7 EIP2 External Interrupt Priority 2  0xB7 FLACL Flash Memory Read Limit  0xB6 FLSCL Flash Memory Timing Prescaler  0xA8 IE Interrupt Enable  0xB8 IP Interrupt Priority контроль  0xB2 OSCICN Internal Oscillator контроль  0xB1 OSCXCN External Oscillator контроль  0x80 P0 Port 0 Latch  0x90 P1 Port 1 Latch  0xA0 P2 Port 2 Latch  0xB0 P3 Port 3 Latch  0xD8 PCA0CN програмований лічильник Array 0 контроль  0xFA PCA0CPH0 PCA модуль захоплення Data Word (High Byte)  0xFB PCA0CPH1 PCA модуль захоплення Data Word (High Byte)  0xFC PCA0CPH2 PCA модуль захоплення 2 Data Word (High Byte)  0xFD PCA0CPH3 PCA модуль захоплення 3 Data Word (High Byte)  0xFE PCA0CPH4 PCA модуль захоплення 4 Data Word (High Byte)  0xEA PCA0CPL0 PCA модуль захоплення 0 Data Word (Low Byte)  0xEB PCA0CPL1 PCA модуль захоплення 1 Data Word (Low Byte)  0xEC PCA0CPL2 PCA модуль захоплення 2 Data Word (Low Byte)  0xED PCA0CPL3 PCA модуль захоплення 3 Data Word (Low Byte)  0xEE PCA0CPL4 PCA модуль захоплення 4 Data Word (Low Byte)  0xDA PCA0CPM0 програмований лічильник Array 0 Capture/Compare 0  0xDB PCA0CPM1 програмований лічильник Array 0 Capture/Compare 1  0xDC PCA0CPM2 програмований лічильник Array 0 Capture/Compare 2  0xDD PCA0CPM3 програмований лічильник Array 0 Capture/Compare 3  0xDE PCA0CPM4 програмований лічильник Array 0 Capture/Compare 4  0xF9 PCA0H PCA лічильник/Timer Data Word (High Byte)  0xE9 PCA0L PCA лічильник/Timer Data Word (Low Byte)  0xD9 PCA0MD програмований лічильник Array 0 Mode  0x87 PCON Power контроль  0xA4 PRT0CF Port 0 Configuration  0xA5 PRT1CF Port 1 Configuration  0xAD PRT1IF Port 1 Interrupt Flags  0xA6 PRT2CF Port 2 Configuration  0xA7 PRT3CF Port 3 Configuration  0x8F PSCTL Program Store RW контроль  0xD0 PSW Program Status Word  0xCB RCAP2H лічильник/Timer 2 Capture (High Byte)  0xCA RCAP2L лічильник/Timer 2 Capture (Low Byte)  0xD1 REF0CN Voltage Reference контроль Register  0x99 SBUF Serial Data Buffer (UART)  0x98 SCON Serial Port контроль (UART)  0xC3 SMB0ADR SMBus 0 Address  0xC0 SMB0CN SMBus 0 контроль  0xCF SMB0CR SMBus 0 Clock Rate  0xC2 SMB0DAT SMBus 0 Data  0xC1 SMB0STA SMBus 0 Status  0x81 SP Вказівник стеку  0x9A SPI0CFG Serial Peripheral Interface Configuration  0x9D SPI0CKR SPI Clock Rate  0xF8 SPI0CN SPI Bus контроль  0x9B SPI0DAT SPI Port 1Data  0xC8 T2CON лічильник/Timer 2 контроль  0x88 TCON лічильник/Timer контроль  0x8C TH0 лічильник/Timer 0 Data Word (High Byte)  0x8D TH1 лічильник/Timer 1 Data Word (High Byte)  0xCD TH2 лічильник/Timer 2 Data Word (High Byte)  0x8A TL0 лічильник/Timer 0 Data Word (Low Byte)  0x8B TL1 лічильник/Timer 1 Data Word (Low Byte)  0xCC TL2 лічильник/Timer 2 Data Word (Low Byte)  0x89 TMOD лічильник/Timer Mode  0x91 TMR3CN Timer 3 контроль  0x95 TMR3H Timer 3 High  0x94 TMR3L Timer 3 Low  0x93 TMR3RLH Timer 3 Reload High  0x92 TMR3RLL Timer 3 Reload Low  0xFF WDTCN Watchdog Timer контроль  0xE1 XBR0 Port I/O Crossbar Configuration 1  0xE2 XBR1 Port I/O Crossbar Configuration 2  0xE3 XBR2 Port I/O Crossbar Configuration 3   Пам’ять може бути перепрограмована використовуючи JTAG інтерфейс або MOVX інтрукції. Перед початком перепрограмування Flash повинна бути очищенна нулями а потім одиницями. Передбачено до 10000 циклів перезапису. Перед записом у Flash з використанням MOVX інструкції, повинно бути дозволений запис настройкою біта PSWE (PSCTL.0). Операція запису не може очистити попередні значення, це може зробити тільки операція стирання. Тому перед записом всі попередні значання повинні бути стерті. 32 Кб Flash пам’ять організована 512-ти байтними секторами. Наступні кроки демонструють процес перепрограмування Flash пам’яті програмним методом. Дозволити запис / стирання використовуючи біти регістра FLASCL Встановити PSEE (PSCTL.1) – дозволити стирання сектора Встановити PSWE (PSCTL.0) – дозволити запис Використати MOVX для запису даних в буть яке місце 512-ти байтного сектора що був стертий Очистити PSEE – заборонити стирання сектора Використати MOVX для запису даних в очищений 512-ти байтний сектор Очистити PSWE – заборонити запис 4. 2. Програмна конфігурація вузлів МП Мультиплексор можна запрограмувати як для роботи у 4-х канальному диференційному режимі так і для роботи в режимі 8-ми канального одиночного мультиплексора. Диференційний (вибірковий) режим є більш практичний. Вихід мультиплексора під’єднаний до програмованого підсилювача (PGA). PGA може отримувати диференційний сигнал та видавати (генерувати) єдиний вихідний сигнал. Коефіцієнт підсилення можна змінювати в реальному масштабі часу (на льоту) але він може приймати лише такі фіксовані значення: 0,5; 1; 2; 4; 8; 16. 4. 3. Контроль перетворень та передача даних Timer3 завжди встановлюється в режим автоперевантаження, він генерує імпульс коли 16-бітний лічильник перекидається з FFFF в 0000. Після кожного переповнення 16-бітне значення з регістру Timer3 RL зчитується в Timer3 і починається новий відлік. Значення перекиду знаходиться в межах від 0000 до FFFF, що дає змогу задавати період від 10000 циклів до 1. Частотний діапазон для кожного з випадків визначається від величини SYSCLK до SYSCLK/12. Коли процес оцифровки завершено 16-бітний результат зчитується з вихідного регістру АЦП і через послідовний порт поступає в персональний комп'ютер. Порт функціонує на частоті 11,0582 МГц та надає пропускну здатність 115,200 бод. Це дозволяє передавати приблизно 10,000 байт за секунду. Перетворення даних у представлення ASCII подвоює інформаційний потік, що вдвічі зменшує швидкодію. Тому максимальна швидкодія досягається лише при використанні двійкового формату даних. 4. 4. Відображення та збереження інформації Керування мікропроцесорною системою відбувається повністю програмним шляхом. З персонального комп'ютера можна всією роботою моделі. Мікропроцесорна система отримує від користувача вихідні дані та налагоджує згідно них ЦАП/АЦП. Коли настройка завершена система готова для обробки та пересилки сигналу. Дані які отримує комп'ютер можуть бути збережені у файлі або виводитись на екран у режимі реального часу. Проте на практиці зручніше спочатку зафіксувати інформаційний потік а потім вже його візуалізувати. Програмне забезпечення вимагає від користувача такі початкові умови: аналоговий канал; тип каналу (одиночний чи диференціальний); коефіцієнт підсилення; частота опрацювання; кількість вимірів; ім'я файлу для збереження результатів; Ця інформація частково пересилається в мікропроцесорну систему для налагодження її параметрів. Після цього система готова для роботи. Коли виміри завершено – користувачу надається можливість відобразити отримані результати, поновити виміри або вийти з програми. 4. 5. Сканування аналогових величин ЦАП/АЦП запускається командою яка поступає від програми керування ПК. Формат команди є універсальним і має вигляд: $ NNNN TTTT M C G 0dh 0ah $ символ початку команди NNNN – ASCII значення об'єм вимірів ТТТТ – ASCII значення інтервалу між вибірками М – ASCII значення режиму роботи мультиплексора С – ASCII значення номеру каналу G – ASCII значення коефіцієнта підсилення 0dh 0ah символ переводу каретки Максимальна довжина команди – 16 символів. Дані передаються у 16-й формі. Для спрощення програмного забезпечення не відбувається жодної перевірки та корекції синтаксису команд. У випадку виникнення помилки мікропроцесорну систему слід перезавантажити шляхом повторного вмикання та ініціалізації. Лістинг програми яка виконує початкову ініціалізацію, запуск мікрокомп'ютера та передачу даних до ПК наведено у Додатку 1.  Рис. 4.2. Блок-схема рограми початкової ініціалізації Література PDF Document, title “C8051F000”, subject Product Spec, author Danny Allred, ver 1.2 25.09.2000 PDF Document, title “MAX232 full Data Sheet”, subject Product Spec, author Maxim, ver 1.3 15.11.2000 Web-HTML Document, title “Digital Storage Scope Using Cygnal - C8051F000 Mixed Signal Processor”, Part I, author Sudhir Gupta http://www.cygnal.com   Додаток 1. Лістинг програми керування та ініціалізації мікрокомп’ютера ;============================================================================= ; Equates ;============================================================================= $MOD8F000 ;============================================================================= ; RAM змінні ;============================================================================= BSEG org 0h adc_done: DBIT 1 ; Флаг відображення статусу adc err_flag: DBIT 1 ; Флаг відображення помилки DSEG at 30h mux_config: ds 1 ; Конфігурація мультиплексора chan_num: ds 1 ; Визначення каналу adc_config: ds 1 ; Величина коефіц. підсилення adc_control: ds 1 ; l_time: ds 1 ; Величина оновлення таймера h_time: ds 1 ; l_num: ds 1 ; К-ксть перетворень h_num: ds 1 ; adc_data_l: ds 1 ; Тимчасове зберігання результату adc_data_h: ds 1 counter: ds 1 ; лічильник buf_start: ds 16 ; початок рядкового буферу ; ============================================================================ ; Визначення адресного ропстору ; ============================================================================ ISEG at 80h STACK_TOP: DS 1 ; Початок апаратного стеку ;============================================================================= ; Скид та таблиця переривань ;============================================================================= CSEG org 00h ljmp Main ; Вектор скиду org 7bh ljmp adc_isr ; ADC0 переривання "кінець перетворення" ;============================================================================= ; Основна програма ;============================================================================= org 0B3h Main: mov SP, #STACK_TOP ; встановвлення вказівника стеку acall initialize ; ініціалізація системи acall init_serial ; ініціалізація порту вв/виводу Again: acall sign_on acall get_cmd acall set_timer_ticks acall set_adc ; встановлення системи числення acall start_adc_scan ; Початок сканування setb EA ; дозвіл глобальних переривань acall send_header wait_for_conversion: jnb adc_done,wait_for_conversion ; очікування готовності АЦП mov a,adc_data_h ; читання старшого байту даних acall tx_char ; його передача mov a,adc_data_l ; читання молодшого байту даних acall tx_char ; його передача clr adc_done ; скид прапорця ; Перевірка стану лічильника перетворень mov a,#0ffh dec l_num cjne a, l_num, wait_2 dec h_num wait_2: cjne a,h_num,not_done acall send_trailer ; Повідомлення jmp again ; "скануання завершено" not_done: jmp wait_for_conversion ; очікування наступного перетворення в АЦП jmp $ ; ; ============================================================================ ; Вектори переривань ; ============================================================================ ; adc_isr ; ============================================================================ adc_isr: clr ADCINT ; скид вказівника переривань jbc adc_done,adc_isr_2 ; Якщ дані не зчитались - setb err_flag ; "помилка" jmp adc_isr_9 ; Вихід без оновлення adc_isr_2: ; "OK" - дані передано mov adc_data_l, ADC0L ; LSB результуту АЦП mov adc_data_h, ADC0H ; MSB результату АЦП setb adc_done adc_isr_9: reti ;============================================================================= ; Процедури ;============================================================================= initialize: clr EA ; Disable interrupts mov WDTCN, #0adh mov XBR0,#07h ; Дозвіл SMBus,SPI, UART ; Tx at P0.6 & Rx at P0.7 mov XBR1,#00h ; Заборона доступу до sysclk,T1,T2,INT0 & INT1 mov XBR2, #40h ; Ініціалізація параметрів mov OSCXCN, #01100101b ; Sysclk = Xtal osc (div by 1) ; 11.0592MHz Xtal initialize_2: mov a, OSCXCN ; зчитування OSCXCN регістру rl a ; Cy = XTLVLD (bit 7 of OSCXCN) jnc initialize_2 ; ; mov OSCICN, #88h ; mov adc_control,#00000100b clr adc_done ; Скид флагу готовності АЦП clr err_flag ; Скид флагу помилки ret ;============================================================================= ; ініціалізація інтерфейсів (портів) ;============================================================================= ; Xtal 11.0592MHz (sysclk) ; Використання Timer1 ; Baud 115,200 8-N-1 init_serial: mov SCON,#50h ; режим 1, 8 bit, дозвіл RX mov TMOD, #20h ; Використати Timer1 в режимі 2 (8 bit auto-reload) mov TH1,#0f9h ; Перечитати значення 115.2kbps @ 11.0592MHz sysclk setb TR1 ; Запуск Timer1 anl CKCON,#00001111b ; Скид Timer1 orl CKCON,#00010000b ; Використовувати sysclk як CLK. ; Не використовувати решта біт регістра CKCON orl PCON,#80h ; Встановити біт (SMOD = 1) setb TI ; TI = 1. Опитати TX на готовність ret ;============================================================================= ; початок ;============================================================================= ; До ПК передається сигнал готовності ; sign_on: push acc ; збереження acc push dph ; збереження вказівника на дані push dpl mov dptr,#sign_msg ; вказівник ініціалізації sign_on_2: clr a movc a,@a+dptr ; зчитати символ cjne a,#00h,sign_on_3 ; Якщо символ не NULL переслати його jmp sign_on_9 ; інакше exit. sign_on_3: acall tx_char ; пересилка символу inc dptr ; jmp sign_on_2 ; перевірка та пересилка наступного символу sign_on_9: pop dpl ; регістр отримання pop dph pop acc ret sign_msg: db 0dh,0ah db ' MC Journal',0dh,0ah db 'Digital Storage Scope',0dh,0ah db ' using',0dh,0ah db 'Cygnal C8051F00 uC',0dh,0ah db 0dh,0ah,00h ;============================================================================= ; заголовок пересилки ;============================================================================= ; Вказує на початок буферу даних send_header: push acc ; зберігти асс push dph ; зберігти вказівник на дані push dpl mov dptr,#header_msg ; вказівник ініціалізації send_header_2: clr a movc a,@a+dptr ; прочитати символ cjne a,#00h,send_header_3 ; jmp send_header_9 ; send_header_3: acall tx_char ; передати символ inc dptr ; jmp send_header_2 ; отримати наступний символ send_header_9: pop dpl ; оновити регістри pop dph pop acc ret header_msg: db 0dh,0ah db 'MCJ-DSS> ' db 0dh,0ah,00h ;============================================================================= ; пересилка ;============================================================================= ; Вказує на кінець буфера даних send_trailer: push acc push dph push dpl mov dptr,#trailer_msg; send_trailer_2: clr a movc a,@a+dptr cjne a,#00h,send_trailer_3 jmp send_trailer_9 send_trailer_3: acall tx_char inc dptr jmp send_trailer_2 send_trailer_9: pop dpl ; оновлення регістрів pop dph pop acc ret trailer_msg: db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0dh,0ah,00h ;============================================================================= ; встановлення таймера ;============================================================================= set_timer_ticks: anl EIE2, #11111110b ; заборона переривання Timer3 mov TMR3CN, #02h ; зупинка таймера Timer, скид флагу TF3 ; Встановити SYSCLK як базову mov TMR3RLH, h_time ; ініціалізація частоти оновлення mov TMR3RLL, l_time mov TMR3H, #0ffh ; mov TMR3L, #80h ; ret ;============================================================================= ; встановлення ADC ;============================================================================= ; Відбувається налагодження АЦП set_ADC: clr ADCEN ; заборона ADC mov REF0CN, #00000011b ; блокування давача температури ; активація ref та ref buffer mov AMX0CF, mux_config ; конфігурація мультиплексора mov AMX0SL, chan_num ; встановлення канала mov ADC0CF, adc_config ; встановлення коефіц. підсилення mov ADC0CN, adc_control ret ;============================================================================= ; Start_Timer ;============================================================================= ; Активація Timer3 Start_Timer: orl TMR3CN, #00000100b ; Запуск TR3 ret ;============================================================================= ; start_adc_scan ;============================================================================= ; Відбувається запуск АЦП та дозвіл переривань start_adc_scan: setb ADCEN ; Ініціалізація АЦП orl EIE2, #00000010b ret ;============================================================================= ; get_cmd ;============================================================================= ; Аналіз та опрацювання командного рядка get_cmd: acall get_line ; зчитування рядка mov r1,#buf_start ; Ініціалізація вказівника ; Зцитування кількості вимірів acall scan_byte ; Читання mov h_num,a ; Збереження старшого байта acall scan_byte ; Читання молодшого байта mov l_num,a ; Оновлення змінних ; Параметри Timer3 acall scan_byte mov h_time,a acall scan_byte mov l_time,a ; Конфігурація мультиплексора acall scan_hex mov mux_config,a ; Кількість каналів acall scan_hex mov chan_num,a ; Конфігурація АЦП, підсилювача acall scan_hex mov adc_config,a ret ;============================================================================= ; scan_byte ;============================================================================= ; Процедура опрацювання значень в кодах ASCII scan_byte: mov a,@r1 inc r1 anl a, #7Fh clr c subb a, #'A' jnc scan_byte_2 add a,#7h scan_byte_2: add a,#0Ah swap a mov b,a mov a,@r1 inc r1 anl a, #7Fh clr c subb a,#'A' jnc scan_byte_3 add a,#7h scan_byte_3: add a,#0Ah orl a,b ret ;============================================================================= ; scan_hex ;============================================================================= ; Перетворення інформації з формату ASCII в HEX scan_hex: mov a,@r1 inc r1 anl a, #7Fh clr c subb a,#'A' ; char = char - 'A' jnc scan_hex_2 add a,#7h scan_hex_2: add a,#0Ah ret ;============================================================================= ; get_line ;============================================================================= ; Отримання командного рядка, аналіз синтаксису get_line: mov r1,#buf_start ; Вказівник ptr mov counter,#10h ; Лічиліник символів get_line_1: acall get_char ; Отримання символу cjne a,#'$', get_line_1 get_line_2: acall get_char cjne a, #0Dh, get_line_3 ; Чи це кінець рядка jmp get_line_9 get_line_3: anl a,#7fh mov @r1,a inc r1 djnz counter, get_line_2 get_line_9: ret ;============================================================================= ; get_byte ;============================================================================= get_byte: acall get_hex swap a mov b,a acall get_hex orl a,b ret ;============================================================================= ; get_hex ;============================================================================= get_hex: acall get_char ; Отримання символу anl a, #7Fh clr c subb a,#'A' ; char = char - 'A' jnc get_hex_2 add a,#7h get_hex_2: add a,#0Ah ; Додати 10d для корекції. ret ;============================================================================= ; get_char ;============================================================================= get_char: jnb RI, get_char ; Зачекати доки встановиться флаг прийняття даних clr RI ; Скинути флаг mov a, SBUF ; прочитати символ ret ;============================================================================= ; tx_char ;============================================================================= tx_char: jnb TI, tx_char ; Зачекати доки встановиться флаг пустого буфера clr TI ; Скинути флаг mov SBUF, a ; Відіслати символ ret ;============================================================================= ; Кінець END Додаток 2. Перелік елементів Позначення Найменування Кількість Примітки   Конденсатори    С1, C12, C13 0.1 мкФ 1   С2, C11 1.0 мкФ 2   С3, С4 22 пф 2   С5 ... С9 10 мкФ 5   C10 100 пФ 1    Резистори    R1 510 Ом 1   R2 500 Ом 1    Інтегральні мікросхеми    D1 C8051F000 1   D2 MAX232 1   D3 К174УН14 1    Кварцові резонатори    BQ1 11.059 Мгц 1    Роз’єми    X1 RS 232 1   
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!