Міністерство освіти та науки України
НУ "Львівська політехніка"
Кафедра ЕОМ
Курсова робота
“Проектування мікркомп'ютера”
Львів – 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