Початкова ініціалізація системи Bascom-8051

Під ініціалізацією системи слід розуміти визначення всіх початкових умов, необхідних компілятору для повного розуміння подальшого тексту програми і правильної установки всіх, використовуваних пристроїв мікроконтролера На прикладі програми розглянемо кроки початкової ініціалізації системи в тій послідовності, в якій вони записуються в программеПріведенний приклад всі можливі

установки і тому явно надмірний

Визначити модель мікроконтролера зазначенням імені файлу, що містить імена і адреси використовуваних регістрів Можна не вказувати, але тоді імя файлу компілятор возмет з меню  “Option”- “Compiler”-“Misc”

$Regfile &quot8052DAT &quot

У більшості випадків потрібно більше 2 КБ програмної памяті

$ Large визначимо модель велику памяті

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

‘——– Визначення констант ——–

Dim Cit As Const & H10 константа інтегратора температури * 10 мс Const Cit = & H10 так потрібно записувати в останніх версіях Змінні: визначення бітів ——–

Dim N_dat As Bit біт Є нові дані Dim B_entx As Bit дозволений прийом

Dim B_temp As Bit тимчасові бітові дані

Таким чином, можна визначити звичні імена бітів SFR

Ri Alias ​​Scon0 біт RI Ti Alias ​​Scon1 біт TI Ren Alias ​​Scon4 біт Ren ——– визначення байтів ———-

Dim Temp As Byte тимчасові дані Dim R_ch As Byte прийнятий символ Dim R_cch As Byte покажчик буфера

Dim Rang As Byte межа рівня (ослаблення) Dim Frng As Byte межа частоти

‘——– Визначення двобайтових —-

Dim R_bw As Integer 16-розр двійковий код завантаження

Dim R_rd As Integer 16-розр резервний код ЦАП

‘——– Визначення чотирьохбайтового –

Dim R_bd As Long 32-розр двійковий код завантаження

Dim Tmpl As Long 32-розр Тимчасово дані

‘——– Визначення змінних в форматі з плаваюшей точкою

Dim R_frq As Single регістр значення частоти

Dim R_fld As Single регістр коду завантаження

‘——– Визначення строкових змінних

Dim R_lin As String * 6 введений рядок Dim R_tmp As String * 5 временая рядок ———————

При використанні в програмі процедур їх потрібно оголосити в цьому місці

‘Declare Sub Wrb_24c01(badr As Byte , Value As Byte) Declare Sub Rdb_24c01(badr As Byte , Value As Byte) ———————

Визначимо імена портів, підключених до фізичних пристроїв

‘Підключення синтезатора AD9850

B_data Alias P13 : B_clk Alias P14 : B_fqud Alias P15 : B_ress Alias P17 ———————

‘Підключення ЦАП опорного рівня AD766

B_datu Alias P10 : B_clku Alias P11 : B_ldu Alias P12 ———————

Далі передбачено два варіанти підключення: першими для цільової програми (робочий), другий – для

отдадкі в емуляторі, побудованому на процесорі з шістьма портами – 80C51GB, де порт P5 заміщає порт P0, а порт P4 використовується замість P2

‘Підключення поляризованих реле з 87C52

‘B_dar0 Alias P00 : B_dar1 Alias P01 : B_dar2 Alias P02 : B_dar3 Alias P03 B_cor0 Alias P27 : B_cor1 Alias P04 : B_cor2 Alias P05 : B_cor3 Alias P06

‘———————

‘! тільки в емуляторі підключення поляризованих реле з 80C51GB

B_dar0 Alias P50 : B_dar1 Alias P51 : B_dar2 Alias P52 : B_dar3 Alias P53

B_cor0 Alias P47 : B_cor1 Alias P54 : B_cor2 Alias P55 : B_cor3 Alias P56

‘———————

Починаючи з цього рядка, компілятор формує виконуваний код – команди установки внутрішніх

регістрів Перша команда в блоці ініціалізації компілятора – установка стека, слідом за масивом змінних, визначених вище Якщо стек встановлюється вручну, це саме відповідне місце для того, щоб записати вставити директиву, яка забороняє такий спосіб обчислення стека

$Nosp

Sp = & h7f початок стека 80h

‘———————

Варіант установки конфігурації внутрішніх пристроїв мікроконтролера без застосування спеціальних

операторів Bascom

‘$ Noinit встановлювати конфігурацію будемо вручну

‘Tcon = &amph50 : Tmod = &amph22 : T2con = &amph34 : Scon = &amph70 : Load Timer2 = &amphffd9 ———————

Нормальна установка конфігурації внутрішніх пристроїв мікроконтролера

‘TIMER0 в режимі 16-біт таймера з внутр тактується для годинника реального часу

Config Timer0 = Timer , Gate = Internal , Mode = 1 : Start Timer0 ———————

Установка режиму послідовного каналу

‘TIMER2 в режимі 16-біт таймера з внутр тактується для синхронізації UART

$ Baud = 9600 швидкість 96 кБ

$ Crystal = 12000000 при кварці 12 МГц

Config Timer2 = Timer , Gate = Internal , Mode = 2

Якщо в тексті програми відсутні оператори Print і Input необхідно додати наступні

рядка

‘Варіант з тактуванням від таймера 1

‘TIMER1 в режимі 8-біт таймера з внутр тактується для синхронізації UART Config Timer1 = Timer, Gate = Internal, Mode = 2

Scon = & H52 режим приемопередатчика

Th1 = 243 константа швидкості

Pcon = & H80: Start Timer1 вимкнути доп дільник на 2 і стартувати

‘———————

‘Варіант з тактуванням від таймера 2

‘Timer2 в режимі 16-біт таймера з внутр тактується для синхронізації Uart

Config Timer2 = Timer , Gate = Internal , Mode = 2

Scon = & H52 режим приемопередатчика

Rcap2h = &ampHFF : Rcap2l = &ampHA5 : Start Timer2 ———————

Оголошення використовуваних переривань Вказується звязок джерела переривання з імям

відповідної програми обробки, встановлюється пріоритет, вирішуються окремі види переривань і виробляється дозвіл усіх призначених переривань Якщо використовується переривання від таймера, то іноді потрібно перед цим встановити лічильник в стан, що забезпечує своєчасне наступ переривання Призначення режимів переривань

On Timer0 Timer_0_int Nosave вектор переривання

On Serial Ser_int Nosave вектор переривання послід каналу

Enable Timer0 дозволити переривання таймера 0

Enable Serial дозволити переривання послід каналу Priority Set Serial найвищий пріоритет послід каналу Enable Interrupts взагалі дозволити переривання

‘———————

Виконуємо дії, наприклад, що забезпечують працездатність програми в емуляторі,

виконаному на іншому типі процесора

‘!!! —————–

‘Тільки в емуляторі 80C51GB додатково инициализируем

Th0 = & HD8: Tl0 = & HFD щоб прерів настала не пізніше 10 мс Oscr = & HE1: Oscr = & H1E вимкнути контроль частоти генератора Wdtrst = & H1E: Wdtrst = & HE1 Скинути будильник

P4 = & HFF: P5 = & HFF вуст емулюють порти як в емульованого

‘———————

Виробляємо очищення памяті і всіх будующих змінних

Clr_mem:

$asm

Mov R0, # & hff від верхнього значення

; Mov R0, Sp або від покажчика стека (він вже встановлений)

Clrmem:

$end Asm

‘———————

; До нуля

Встановлюємо змінні в стан, що забезпечує правильний початок роботи програми або її перехід в певний режим Якщо проводилася очистка памяті, то встановлюються тільки пернеменние, значення яких має відрізнятися від нуля

‘Ініціалізувати змінні

N_dat = 1 біт Нові дані R_cch = Varptr (r_lin) покажчик буфера

R_ot = 0 інтегратор термодатчика – ні перегріву

‘———————

Встановлюємо порти процесора в стан, безпечний для зовнішніх пристроїв або забезпечує

їх нормальне функціонування (ще краще, якщо цей стан відповідає режиму скиду)

‘Підготувати лінії управління до роботи

Reset B_data: Reset B_clk: Reset B_fqud: Reset B_ress з синтезатором

Set B_datu: Set B_clku: Set B_ldu з опорним ЦАП

‘———————

Настав час провести більш глибоку ініціалізацію і перевірку всієї системи, керованої

мікроконтролером Коли в системі використовується символьний індикатор, то це краще місце для його ініціалізації Ініціалізація індикатора займає близько 100 мс і якщо цей час критично для системи переривань, то можна дозволяти переривання після закінчення ініціалізації індикатора або всього блоку

ініціалізації

‘Визначимо розмір індикатора

Config Lcd = 16 * 2

‘Визначимо підключення ліній управління індикатора до портів

Config Lcdpin, Db4 = P14, Db5 = P15, Db6 = P16, Db7 = P17, E = P32, Rs = P34

‘Визначимо зображення додаткових символів

Deflcdchar 0 , 31 , 17 , 17 , 17 , 17 , 17 , 31 , 0

Deflcdchar 1 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 31

Deflcdchar

2

,

241

,

234

,

228

,

224

,

228

,

234

,

241

,

224

Deflcdchar

3

,

241

,

234

,

228

,

241

,

234

,

228

,

224

,

224

Deflcdchar

4

,

228

,

234

,

241

,

228

,

234

,

241

,

224

,

224

Deflcdchar

5

,

228

,

234

,

241

,

234

,

228

,

224

,

224

,

224

Deflcdchar

6

,

228

,

234

,

241

,

234

,

245

,

241

,

241

,

224

Deflcdchar

7

,

238

,

234

,

234

,

234

,

255

,

241

,

241

,

224

Cls підготуємо індикатор до роботи

Lcd V7-64 ver3_7 видамо стартове повідомлення

‘———————

При наявності послідовного каналу, повязаного з іншого ЕОМ, зараз необхідно послати

повідомлення, яке встановлює логічне зєднання

Print 1_ON повідомимо про включення

‘———————

Після цього починаємо тестування підключених пристроїв У першу чергу, перевіряємо збереження

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

початкові значення, які забезпечать правильну працездатність системи) Якщо є ще які-небудь

пристрою, наявність і справність яких потрібно перевірити, то виробляємо відповідні дії

Gosub Test_CS_EEPROM Перевіряємо контрольну суму

If b_ER = 1 Then Є помилка

Print Error_CS_Mem”: Waitkey Так – вивести повідомлення і чекати натискання

Gosub Ini_EEP Переініціалізіровать память

End If

‘———————

У системі, яка містить ЦАП, АЦП, цифрові синтезатори, реле і тп виробляємо завантаження в ЦАП і

синтезатори кодів початкового значення напруги і частоти, включаємо самокалібрування АЦП, перемикаємо контакти реле в початкове положення

Gosub Self_Cal: Gosub Init_DAC: Gosub Reset_Relay иниц аналог частина схеми

‘———————

Система готова до роботи, всі пристрої, підключені до мікроконтролера, чекають прийому або

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

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ 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>

*

*