Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕОМ тема 1.doc
Скачиваний:
9
Добавлен:
25.02.2016
Размер:
416.26 Кб
Скачать

5.3.2 Обчислення квадратного корня

Квадратний корінь з числа з плаваючою комою Z=Sqrt(X) обчислюється наступним чином:

, якщо рх – парний

Z=

, якщо рх – непарний

Таким чином, число приводиться до парного порядку, якщо це необхідно. Порядок результату дорівнює половині отриманого порядку операнда, а мантиса – квадратному корню з мантиси операнда, яка тепер змінюється в межах від ¼ до 1.

Для виконання операції використовується алгоритм /8/ який дозволяє найбільш просто обчислити квадратний корінь в системі команд МК51. Операційна система обчислення квадратного корня наведена на рис. 15 і містить n-розрядні регістри X i D для збереження операнда та результатів. На суматорі виконується додавання вмсіту регістрів B i D, а результат додавання може записатись в регістр В. входи двох молодших розрядів СМ під'єднані до логічної одиниці. Всі три регістра мають можливість зсуву коду вліво.

Х RG1 n

C

B RG2 n+2

CM n+2

1 1

 D RG3 n

Рис.-15. Операційна схема обчислення квадратного корня

Увисхідному стані регістри Х та В скинуті, розряди регістра D встановлено у висхідне положення. Обчислення виконуєтся в n-циклах, в кожному з яких виконується наступна дія:

-- двічі виконується зсув вліво регістрів Х та В, при чому зсовуємі з Х розряди записуєтсья в В;

-- виконується додавання B+D ; по значенню переносу визначається значення наступного розряда результату: Zi=-C (зауважимо, що результат формується в зворотньому коді);

-- у випадку, якщо С=0, виконується відновлення остачі, тобто операція В-D;

-- виконується лівий зсув регістра D, причому інверсне значення наступного розряду результату записується в молодший розряд регістра D.

В розглядаємій підпрограмі виконується 25 циклів обчисленнь. В останніх 13-ти циклах цифри операнда дорівнюють нулю, в цих циклах зсув регістра Х не виконується. В цих останніх циклах виконується аналіз на нуль останку. Якщо В=0, операція закінчується. Після цього в регістрі D виконується інвертування результату і його округлення, в результаті чого формується 24-розрядна мантиса результату.

Програма виконує 25 ітерацій обчислення квадратного корня мантиси наведено нижче. Регістру Х на рис 15 відповідають комірки РПД

OpXp – OpX0, регістру В - РОН R5-R2, регістру D – комірки OpYp – OpY0. При виконані програми використовуються підпрограми перетворення 4-байтних чисел – зсуву вліво, складання, віднімання та перевірки на нульове значення.

;підпрограма зсуву вліво

;в R0- початкова адреса слова з 4-х байт

RcsNortn: MOV R7,#4 ;

Riiorrn: MOV A,@RO ;

RLC A ;

MOV @RO,A ;

INC RO ;

DJNZ R7,RNorm ;

RET ;

; підпрограма додавання мантис <R5,R4,R3,R2> + @RO

AdMantI: CLR С ;

MOV R1,#2 ;

MOV R7,#4 ;

AdMant: MOV A.@R1 ;

ADDC A,@RO ;

MOV @R1,A ;

INC RO ;

INC R1 ;

DJNZ R7,AdManl ;

RET ;

;підпрограма віднімання мантис <R5,R4,R3,R2> - @RO

SuManll: CLR С ;

MOV Rl.#2 ;

MOV R7.#4 ;

SuMant: MOV A,@Rl ;

SUBB A,@RO ;

MOV @R1, A ;

INC RO ;

INC Rl ;

DJNZ R7,SuMant ;

RET ;

; підпрограма перевірки операнда на нульове значення; операнд в 4-х байтах РПД, адреса старшого в RO.

;прапорець нуля —и біті Sg.3.

Zero: CLR Sg.3 ;

MOV R7,#4 ;

Zerol: CJNE @RO,#0,ZEnd ;

DEC RO ;

DJNZ R7,Zerol ;

SETB Sg.3 ;

Zend: RET ;

OpZIp EQU 29h. ;

; добування квадратного корня з мантиси числа

MOV OpZlp,#25 ;лічильник

Qx4: MOV A,OpZlp ;

CLR С ;

SUBB A,#13 ;

MOV Sg.l,C ;Sg. 1—признак номера цикла

JB Cy.Qx5 ;i>13

; цикл для i<13

MOV R0,#20h ;

CLR С ;

ACALL ResNorm ;зсув Х

MOV R0,#2 ;

ACALL ResNorm ;Xi->b0; зсув В

MOV R0,#20h ;

CLR С ;

ACALL ResNorm ;зсув Х

MOV R0,#2 ;

ACALL ResNorm ;X(i+l) ->b0; зсув В

AJMP Qx6 ; ; цикл для i>==13

Qx5: MOV R0,#2 ;

CLR С ;

ACALL ResNorm ;зсув В на 2 розряди

MOV R0,#2 ;вліво

CLR С ;

ACALL ResNorm ; : додавання B+D

Qx6: MOV R0,#24h ;

ACALL AdMant1 ;

CPL С ;

MOV Sg.6,C ;збереження Zi

JNB Cy,Qx7 ;остача додатня ;відновлення остачі

MOV R0,#24h ;

ACALL SuMant1 ;

Qx7: MOV R0,#24h ;

SETB С ;

ACALL ResNorm ;зсув D вліво

MOV C,Sg.6 ;Zi ->d2

MOV OpY0.2.C ;

JNB Sg.LQx10 ;

; якщо в останніх 13-ти циклах остача=0, кінець операції

MOV RO.#5 ;

ACALL Zero ;

JB Sg.3,Qx4 ;остача =0

Qx10: DJNZ OpZlp,Qx4 ;

Qxll: NOP ;кінець

Час виконання операції становить 3000-5000 циклів роботи мікроконтролера для різних операндів.

2.5.4 Формування контрольної суми при передачі даних по каналам зв'язку.

При передачі даних по каналам зв'язку контроль вірності передачі можна виконати за допомогою контрольних сум. Отримувач інформації, отримуючи дані, формує на їх основі контрольну суму (КС) а потім порівнює її з КС, отриманою від передатчика інформації. КС формується наступним чином /9/. Інформаційний поліном z(x), що представляє собою двійкову послідовність, поступаючу на вхід отримувача, ділиться на утворюючий поліном виду

де аі  {0,1}

Остача від ділення і є контрольною сумою. Як правило, N=16, тобто контрольна сума представляє собою двобайтне число. Вид утворюючого полінома залежить від конкретних умов передачі даних. Наприклад, ГОСТом визначено утворюючий поліном

y(x)=x16+xl2+x5+1

для передачі даних по послідовному каналу в системах числового програмного керування (ЧПК).

Ділення z(z) на y(x) зазвичай виконуються на N-розрядному регістрі зсуву з зворотніми зв'язками. В кожному циклі на вхід поступає наступний біт вхідної послідовності. Зсув в регістрі виконується, причому в молодший розряд записується біт, що представляє собою суму по модулю 2 вхідного біта і тих розрядів регістра, коефіцієнти аі яких в утворюючому поліномі дорівнюють 1. Наприклад, при обчисленні КС по наведеному вище поліному систем ЧПУ, на вхід регістра поступить біт

d1=zq16q12q5

де qi – вміст відповідного розряду регістра, z – наступний біт вхідної послідовності.

Нижче наведено програма SumKn формування КС для одного байта вхідних даних підпрограма може реалізувати обчислення контрольної суми для утворюючого полінома будь-якого виду, що досягається заданням констант Polynom1 (старший байт полінома) і Polynom0, в котрих вказані коефіцієнти аі.

Використовувати програму можна наступним чином. Після отримання байта даних, наприклад, із UART, цей байт записується в R4 і виконується звертання до підпрограми. Після звертання до підпрограми для всіх отриманих даних в ячейках Ksm1 і Ksm0 резидентної пам'яті даних формується шуканий результат.

Наприклад, для наступної послідовності байт: 6D, 58, 72, 68, 52, 79, 61, 47, 5A, 6B сформувалась контрольна сума 41, 2C. Час виконання підпрограми – 280 циклів.

;підпограма формування контрольної суми

;наступний байт в R4

Ksm1 EQU 3Dh ;старший байт контрольної суми

Ksm0 EQU 3Eh ;молодший байт контрольної суми

Znak1 EQU 0Ah ;біт для формування КС

Znak2 EQU 0Bh ;біт для формування КС ;утворюючий поліном задається константами Polynom1, Polynom0

Polynom1 EQU l000l000b ;y(x)=x16+x16+x5+1

Polynom0 EQU 000l0000b ;

SumKn: MOV R5,#8 ;лічильник

Sum2: MOV A,Ksml ;

ANL A,#Polynoml ;

MOV C.PSW.0 ;бiт парності

MOV A, Ksm0 ;

ANL A,#Polynom0 ;

;в Znak2- сумма по mod2 бітів С і Р

MOV Znaki,С ;

ANL C,/PSW.0 C*(-P) ;

MOV Znak2,C ;

MOV C,PSW.0 ;

ANL С,/Znaki P<C) ;

ORL C,Znak2 ;

MOV Znak2,C ;

MOV A,R4 ;

JNB ACC.7,Suml ;

CPL Znak2 ;

Surn1: RL A ;

MOV R4,A ;

;зсув контрольної суми

MOV A, Ksm0 ;

MOV C,Znak2 ;

RLC A ;

MOV Ksm0,A ;

MOV A,Ksml ;

RLC A ;

MOV Ksml,A ;

DJNZ R5.Sum2 ;

RET ;

5.5. Контроль часу при роботі з зовнішніми пристроями

Часто при роботі з зовнішніми пристроями (ЗП) необхідно виконувати контроль часу

Приходу сигналів від них. Це необхідно, наприклад, у випадках, коли час роботи ЗП може вийти з ладу і від нього перестануть поступати керуючі сигнали.

Такий контроль можна організувати за допомогою таймерів мікроконтролера, наприклад, наступним чином.

  1. В трьох ячейках РПД (Tim2, Tim1, Tim0) організований лічильник часу. При кожному переповненні таймера Т0 в лічильник добавляється 1. При частоті тактовогогенератора 11 М Гц переповнення таймера будуть слідувати кожні 71.4 Мс. В цьому випадку трьохбайтний лічильник забезпечить 332 години роботи. Програма обробки перериваня по таймеру Т0 наведена нижче.

;корекція годин (+71.4 ms)

Tim2 EQU 40h ;старший байт годин

Tim1 EQU 41h ;средній байт годин

Tim0 EQU 42h ;молодший байт годин

Shr4 EQU 4Ch ;комірка збереження параметрів PrerT0. XCH A,Shr4 ;

MOV A,#1 ;

ADD A.Tim0 ;

MOV Tim0,A ;

CLR A ;

ADDC A,Timl ;

MOV Timl,A ;

CLR A ;

ADDC A.Tim2 ;

MOV Tim2,A ;

XCH A,Shr4 ;

RETI ;

  1. В точці програми, де необхідно почати контроль часу, поточний час запам'ятовується в комірках РПД (TmFs2, TmFs1, TmFs0). Такі ячейки мають бути для кожного ЗП, що потребує контроль часу.

  2. В точках контролю виконується підпрограма CompTm. Підпрограма виконує порівняня поточного часу tT ty tT>ty+Delta, встановлюється прапорець переповнення FlagPr.

Delta задається в R4, одиниця тут відповідає71.4 мс, а максимальне значення Delta відповідає 18 с. встановлений час в R5, R6, R7, R5-старший байт. Cy – біт переносу.

CompTm:

;визначення ty+Delta

MOV A.R4 ;

ADD A.R7 ;

MOV R7.A ;

CLR A ;

ADDC A.R6 ;

MOV R6.A ;

CLR A ;

ADDC A,R5 ;

;порівняння

CLR С ;

SUBB A.Tim2 ;

JB Cy,CompTm2 ;

JNZ CompTml ;

MOV A,R6 ;

SUBB A.Tim1 ;

JB Cy,CompTm2 ;

JNZ CompTml ;

MOV A,R7 ;

SUBB A.Tim0 ;

JNB Cy,CompTml ;

CompTm2: SETB FlagPr ;установка прапорця

CompTml: RET ;

Наведемо приклад використання підпрограми. При ініціалізації години обнуляються, запускається таймер Т0 і дозволяються переривання від нього:

MOV Tim2,#0 ; скид годин

MOV Timl,#0 ; скид годин

MOV Tim0,-#0 ;скид годин

MOV TMOD,#0000000lb ;Т/СО - режим 1

SETB IE.1 ;ТО- дозвіл преривань

SETB IE.7 ;дозвіл всіх преривань

SETB TRO ;Т/СО – пуск

Нехай МК чекає установки ввід ЗП керуючого сигнала, що поступає на вхід порта Р1.4. Якщо сигнал не поступить протягом 1 с, необхідно сигналізувати про це (оператору чи системі, в якій працює контролер) установкою одиничного сигнала на вході Р1.5 порту 1.

;зупинка часу

CLR TR0 ;зупинка Т0

MOV TmFs2.Tim2 ;

MOV TmFsl,Timl ;

MOV TmFs0,Тim0 ;

SETB TR0 ;пуск TO

; Чекаємо установки керуючого сигналу

Sf5: JNB P1.4,Sfl0 ;

; сигнал встановлено

SJMP Sf20 ;

;сигнал не встановлено, контроль часу

SflO: MOV R5,TmFs2 ;

MOV R6,TmFsl ;

MOV R7,TmFs0 ;

MOV R4,#14 ;toж= 1s

LCALL CompTm ;

JNB FlagPr,Sf5 ;

;время перевищено

CLR FlagPr ;

SETB PI.5 ;

Sf20: NOP ;кінець операції

Список уживаних скорочень

УАПП – універсальний асинхронний прийомопередатчик

РПП – резидентна пам'ять прогроами

РПД – резидентна пам'ять даних

РЗП – регістр загального призначення

АЛБ – арифметично-логічний блок

ЗПД – зовнішняпам'ять даних

КС – контрольна сума

ЧПК – числове програмне керуваня

ЗП – зовнішній пристрій

36