Програмування пристроїв з шиною Microwire

У новій версії компілятора Bascom (починаючи з 120) додані оператори для роботи з мікросхемами, що мають послідовний інтерфейс Microwire Інтерфейс Microwire зовні багато в чому схожий на SPI – ті ж чотири лінії (DI – прийом даних, DO – видача даних, CS – вибір кристала, Clk – синхронізація) Однак, відмінність від SPI істотно – число посилаються біт не кратне восьми Таким чином, повноцінна реалізація інтерфейсу Microwire наявними операторами SPI або апаратним SPI скрутна Основне застосування інтерфейсу Microwire повязано з мікросхемами незалежній памяті серії 93С06 – 93С57, головне достоїнство яких повязане з високою надійністю зберігання даних і з дуже високою швидкістю зчитування Сучасні мікросхеми з інтерфейсом Microwire (серія 45Сххх) мають найбільшу ємність з усіх мікросхем з послідовним доступом

Мікросхеми з шиною Microwire можуть працювати з 8-ми і 16-розрядними даними Вибір довжини слова проводиться підключення виводу ORG шині живлення (16 розрядів) або до загального проводу (8 розрядів) Відповідно цього змінюється довжина адреси Компілятор «дізнається» про спосіб підключення мікросхеми за допомогою опції AL (довжина адреси) оператора конфігурації Config Microwire (см главу 4) Там же описується підключення ліній шини до мікроконтролера

Для роботи з шиною Microwire передбачено чотири оператора:

а) оператор MWINIT – встановлює висновки, призначені для інтерфейсу Microwire, в початковий стан Застосовується на початку програми, після скидання процесора

б) оператор MWREAD – зчитує значення в змінну з інтерфейсу Microwire Застосовується стільки разів, скільки треба виробити операцій зчитування даних Залежно від довжини слова даних

працює з одно або двох байтними змінними Адреса може бути заданий у безпосередньому вигляді або з

допомогою одно-або двухбайтного змінної

в) оператор MWWRITE – записує значення змінної в інтерфейс Microwire Записує одне або двобайтні дані Адреса також може бути заданий у безпосередньому вигляді або за допомогою одно- або двухбайтного змінної Після цього оператора необхідно застосовувати оператор тимчасової затримки на 2-10 мс (див опис застосовуваної мікросхеми), тому що опитування готовності пристрою, в який проводиться запис, не виконується

г) оператор MWWOPCODE – записує в пристрій код операції на шині Microwire Всі можливі операції наведені в довідкових даних мікросхем, але дві з них повинні застосовуватися завжди Це – Дозвіл запису (і стирання) перед початком роботи і заборона запису (стирання) після закінчення роботи Після деяких команд, наприклад, загального стирання або загальної записи також необхідно застосовувати оператор затримки на час, вказаний в описі застосовуваної мікросхеми Проте краще застосувати програму очікування готовності, наприклад, наступну:

Set Cs : Bitwait Dout Set : Reset Cs

Нижче наведена таблиця, яка містить зображення тимчасових діаграм, формованих описаними

операторами з 16-бітному та 8-бітному режимах

Далі пропонується приклад тестової програми з використанням шини Microwire У цій програмі створюється і записується в мікросхему EEPROM масив двобайтових чисел, а потім він зчитується назад Для ускладнення завдання і демонстрації можливостей Bascom мікросхема 93С46 включена в 8-розрядному режимі, а двобайтні значення записуються і зчитуються в два прийоми Таке рішення найбільш часто застосовується практично, коли доводиться зберігати значення змінних різної довжини У цьому прикладі застосована додаткова програма (Mwrdyw), написана на асемблері і забезпечує очікування появи сигналу готовності мікросхеми, в яку зроблено запис Особливість цієї підпрограми полягає в тому, що очікування готовності проводиться тільки 10 мс, завдяки чому стає неможливим «зависання» процесора при несправності мікросхеми EEPROM, а при справній мікросхемі швидкість роботи програми збільшується

Оператор

Тимчасова діаграма

16-бітний режим

Mwwopcode &ampB100110000 , 9

Генерувати команду дозволу запису і стирання (для 93С46 висновок ORG = 1)

                                                                       

|                                     |   CS

_  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |     |      |                    DI

SB OP1 OP2 1  1  0  0  0  0

Mwwopcode &ampB100000000 , 9

Генерувати команду заборони запису і стирання (для 93С46 висновок ORG = 1)

                                                                       

|                                     |   CS

_  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |                                    DI

SB OP1 OP2 0  0  0  0  0  0

Mwread X , &ampB110 , 0 , 2

Вважати значення з комірки за адресою 0 в змінну X (два байти)

(Для 93С46 висновок ORG = 1)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

|      |  X  X  X  X  X  X  \            _               DI SB OP1 OP2 A5 A4 A3 A2 A1 A0

0  0  0  0  0  0

         _ _        

————————————- X  X  X  X _ _X   X  X   DO

0 D15 D14 D13      D1  D0

Mwwrite X , &ampB101 , 0 , 2

Записати значення змінної X (два байти) в осередок з адресою 0

(Для 93С46 висновок ORG = 1)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

         _ _        

|  |  |  X  X  X  X  X  X  X  X  X  X _ _X  X  X   DI SB OP1 OP2 A5 A4 A3 A2 A1 A0 D15 D14 D13     D1 D0

0  0  0  0  0  0

8-бітний режим

Mwwopcode &ampB1001100000,10

Генерувати команду дозволу запису і стирання (для 93С46 висновок ORG = 0)

                                                                             

|                                        |   CS

_  _  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |     |      |                        DI

SB OP1 OP2 1  1  0  0  0  0  0

Mwwopcode &ampB1000000000,10

Генерувати команду заборони запису і стирання (для 93С46 висновок ORG = 0)

                                                                             

|                                        |   CS

_  _  _  _  _  _  _  _  _  _

      | |_| |_| |_| |_| |_| |_| |_| |_| |_| |    Clk

      

   |  |                                        DI

SB OP1 OP2 0  0  0  0  0  0  0

Mwread Y , &ampB110 , 0 , 1

Вважати значення з комірки за адресою 0 в змінну Y

(1 байт)

(Для 93С46 висновок ORG = 0)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

|      |  X  X  X  X  X  X  X  \         _              DI SB OP1 OP2 A6 A5 A4 A3 A2 A1  A0

0  0  0  0  0  0  0

         _ _        

—————————————– /  X  X _ _X   X  X   DO

0 D7  D6      D1  D0

Mwwrite Y , &ampB101 , 0 , 1

Записати значення змінної Y (1 байт) в осередок з адресою 0

(Для 93С46 висновок ORG = 0)

                                                                                                _           

|                                                              |   CS

_  _  _  _  _  _  _  _  _  _  _   _        _  _

    | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ _   | |_| |    Clk

         _ _        

|  |  |  X  X  X  X  X  X  X  X  X  X _ _X  X  X   DI SB OP1 OP2 A6 A5 A4 A3 A2 A1  A0 D7 D6      D1 D0

0  0  0  0  0  0  0

‘————————————————- ———— тестування пристрою на шині Microwire

‘————————————————————- Dim Tmp1 As Byte , Tmp2 As Byte

Dim Tmp3 As Byte , Tmp4 As Byte , Tmpw As Word Dim Tmp(20) As Word

‘——————————–

‘Застосуємо в 93C46 8-бітному режимі

Config Microwire = Pin , Cs = P10 , Din = P11 , Dout = P12 , _ Clock = P13 , Al = 7

Mw_cs Alias ​​P10: Mw_dout Alias ​​P12 визначимо імена портів ліній Cs і Dout —————————— –

Mwinit

Mwwopcode & B1001100000, 10 дозволимо запис і стирання Mwwopcode & B1001000000, 10 проведемо загальне стирання Gosub Mwrdyw почекаємо стирання

For Tmp1 = 1 To 20 заповнимо масив

Tmpw = Tmp1: Tmpw = Tmpw * Tmpw квадратом індексу

Tmp(tmp1) = Tmpw

Next таке значення

‘——————————–

Tmp2 = 0 встановимо початковий адресу EEPROM

For Tmp1 = 1 To 20 запамятаємо масив

Tmpw = Tmp (tmp1) в EEPROM

Mwwrite Low(tmpw) , &ampB101 , Tmp2 , 1 : Incr Tmp2 : Gosub Mwrdyw Mwwrite High(tmpw) , &ampB101 , Tmp2 , 1 : Incr Tmp2 : Gosub Mwrdyw

Next таке значення

‘——————————–

For Tmp1 = 1 To 20 очистимо масив

Tmp(tmp1) = 0

Next

‘——————————–

Tmp2 = 0 встановимо початковий адресу EEPROM

For Tmp1 = 1 To 20 вважаємо масив по одному байту

Mwread Tmp3, & B110, Tmp2, 1: Incr Tmp2 вважаємо по одному байту

Mwread Tmp4 , &ampB110 , Tmp2 , 1 : Incr Tmp2

Tmpw = Makeint (tmp4, Tmp3): Tmp (tmp1) = Tmpw зберемо з двох байт

Next таке значення

Mwwopcode & B1000000000, 10 заборонимо запис і стирання

‘——————————–

‘П / п очікування готовності пристрою на шині Microwire після операції запису

Mwrdyw:

$asm

Setb {mw_cs} виберемо мікросхему

Mov A, # 100 зможемо чекати 10 мс

Mwrw1:

Mov B, # 50 підцикл 100 мкс

Mwrw2:

Djnz B , Mwrw2

Jb {mw_dout}, Mwrw3 перевіримо наявність біта готовності

Djnz A, Mwrw1 якщо він не зявився чекаємо готовності 10 мс

Mwrw3:

Clr {mw_cs} знімемо сигнал вибірки

$end Asm Return End

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ BASCOM-8051, Краснодар 2001

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*