рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Контроль точності при програмуванні арифметичних операцій

Контроль точності при програмуванні арифметичних операцій - раздел Образование, СИСТЕМА КОМАНД ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРА КМ1816ВЕ51 Абсолютна Точність Виходить Тільки У Випадку Програмування Обчислень З Цілими...

Абсолютна точність виходить тільки у випадку програмування обчислень з цілими числами обмеженої величини. У загальному випадку при неправильному програмуванні результат обчислень може мати неприпустимо велику погрішність чи бути помилковим. Перший випадок відноситься до втрати значимості, коли у відведених для кодування числа розрядах використовуються тільки самі молодші. Другий випадок відноситься до переповнення розрядної сітки, коли число не міститься у відведених для його кодування розрядах. Тому при програмуванні обчислень необхідно вибирати такий масштаб представлення чисел, щоб, з одного боку, повніше використовувати розрядну сітку, а з іншого боку — не допустити її переповнення. Якщо підбором масштабів не удається вирішити задачу приведення результатів вимірів до цілочислового представлення, то можна використовувати представлення чисел з фіксованою комою (в англомовних країнах для поділу цілої і дробової частин числа використовується точка). Притім позицію коми можна фіксувати між розрядами якогось байта чи між байтами, що представляють число. Використання представлення чисел з фіксованою комою не означає якого-небудь додаткового кодування. Потрібно тільки внести ці зведення в документацію на програми (наприклад, у коментарі) і враховувати при програмуванні. При використанні представлення чисел з фіксованою комою перед додаванням і відніманням чисел з різними положеннями коми потрібен зсув одного з операндів, а після множення і ділення майже завжди потрібен зсув результату.

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

При використанні байтового формату абсолютна погрішність представлення чисел не може бути менше 0,4 % від максимального значення для позитивних чисел чи 0,8% від максимального модуля для позитивних і негативних чисел. Якщо не вдається підібрати масштаб і/або вимагаються менші погрішності, то приходиться представляти відповідні числа декількома байтами. При використанні двох байтів погрішність представлення чисел може бути значно знижена. Результати обчислень будуть містити великі чи менші погрішності в залежності від погрішностей вихідних чисел і від дій, виконаних над цими числами. Відомо, що при додаванні і відніманні абсолютна погрішність результату обмежена сумою абсолютних погрішностей операндів, а при множенні і діленні відносна погрішність результату обмежена сумою відносних погрішностей операндів. Якщо модулі операндів близькі, то при відніманні для однакових знаків операндів чи додаванні для різних знаків погрішність може перевищити результат операції. Тому варто ретельно перевіряти розрахункові формули з погляду нагромадження погрішностей рахунка. Найчастіше дві математично рівноцінні формули можуть давати істотно різні результати, тому що в дискретній математиці пересувальний і сполучний закони виконуються не завжди.

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

RLC A ; подвоїти ділене

ADD А, В ; додати дільник

RRC А ; розділити суму на 2

DIV АВ ; обчислити частку

Аналогічним чином можна більш-менш істотно зменшити систематичні погрішності обчислень, якщо такі вдається виявити за допомогою аналізу розрахункових формул.

Програмісту варто пам'ятати про можливість виходу результату за межі представлення чисел при заданому форматі і способі кодування. У ході розробки програми такі можливості повинні бути виключені, хоча від такого роду помилок ніхто не застрахований. Тут також можливі різні підходи. Наприклад, можна на етапі налагодження програми робити контроль результатів з видачею діагностичних сигналів на зовнішні порти мікроконтролера. Коли програма буде налагоджена, то ці блоки контролю можна забрати. Але при використанні такого підходу важко забезпечити всеосяжну перевірку програми.

Для контролю виходу результату за межі розрядної сітки можна використовувати біти С і OV регістра PSW. Індикатором виходу за межі розрядної сітки при додаванні і відніманні позитивних чисел є установка біта переносу в 1. Біт переповнення встановлюється в 1 у випадку переповнення результату при додаванні і відніманні чисел зі знаком. Його можна також використовувати для індикації ділення на 0 і виходу добутку за межі 255. Варто враховувати, що команди множення і ділення записують у біт переносу 0, тому вихід результату додавання чи віднімання позитивних чисел за межі розрядної сітки потрібно перевіряти відразу після виконання команд додавання і віднімання. Біт переносу використовується для арифметичних операцій з числами, що представлені декількома байтами. Він забезпечує інформаційний зв'язок між байтами, тому аналіз умісту бітів переносу і переповнення потрібно робити після обчислення старшого байта результату.

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

 

Розглянемо найпростіший випадок обмеження позитивного значення після виконання операції додавання:

top: .= 100 ; числова підстановка для максимуму

JC рmа ; перехід по виходу за межі байта

CJNE A, #top, chg ; порівняння з максимальним значенням

SJMP nch ; перехід при максимальному значенні

chg: JC nch ; перехід, якщо обмеження не потрібно

рmа: MOV A, #top ; запис максимального значення

nch: NOP ; для запису мітки

 

У результаті виконання наведеної послідовності команд результат додавання завжди буде знаходитися в заданих межах. Якщо значення top не перевищує 255, то наведений блок може бути використаний для обмеження не тільки після команди додавання, але і після команди прямого рахунку. Для обмеження результатів додавання і віднімання при використанні негативних чисел із записом у додатковому коді програма небагато ускладнюється. У цьому випадку значення top повинне бути позитивним, а значення bot — негативним.

 

top: .= 100 ; числова підстановка для максимуму

bot: .= -100 ; числова підстановка для мінімуму

JNB OV, chk ; перехід за відсутністю переповнення

JB А.7, рmа ; перехід, якщо більше

SJMP pmi ; перехід, якщо менше

chk: JB A. 7, neg ; перехід по негативному знаку

CJNE A, #top, chp ; перевірка за максимумом
SJMP nch ; перехід по рівності максимуму

chp: JC nch ; перехід, якщо обмеження не потрібно

рmа: MOV A, #top ; запис максимального значення

SJMP nch ; на вихід із блока

neg: CJNE A, #bot, chm ; перевірка за мінімумом

chm: JNC nch ; перехід, якщо обмеження не потрібно

pmi: MOV A, #bot ; запис мінімуму

nch: NOP ; для запису мітки

 

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

 

 

Зведення команд і8051 за абеткою

 

ACALL n ; ПЕРЕХІД ДО ПІДПРОГРАМИ ближній

ADD[З] A, {#|R|@|d} ; ДОДАВАННЯ [З УРАХУВАННЯМ

; ПЕРЕНОСУ]

AJMP n ; ПЕРЕХІД БЕЗУМОВНИЙ ближній

ANL. A, {#|R|@|d} ; І

ANL d, {A|#} ; І

ANL С, [/][ ; І з [зворотним] кодом біта

CJNE A, {#|d}, s ; ПЕРЕХІД ПО НЕРІВНОСТІ короткий

CJNE {R|@ #, s ; ПЕРЕХІД ПО НЕРІВНОСТІ короткий

CLR {А|b|С} ; ОЧИЩЕННЯ {накопичувача|біта}

CPL {А|b|С} ; ОДЕРЖАННЯ ЗВОРОТНОГО КОДУ

; {накопичувача|біта}

DA A ; КОРЕКЦІЯ двійково-десяткового коду

DEC {A|R|@|d} ; ЗМЕНШЕННЯ НА 1

DIV АВ ; РОЗПОДІЛ

DJNZ {R|d}, s ; ЗМЕНШЕННЯ НА 1 І ПЕРЕХІД ПО НІ

; 0 короткий

INC {A|R|@|d} ; ЗБІЛЬШЕННЯ НА 1

INC D ; ЗБІЛЬШЕННЯ НА 1

J{NB|B[C]} b, s ; ПЕРЕХІД ПО {0|1[з очищенням]} короткий

J[N]C s ; ПЕРЕХІД ПО 1 [0] ПЕРЕНОСУ короткий

JMP @A+D ; БЕЗУМОВНИЙ ПЕРЕХІД НЕПРЯМИЙ

J[N]Z s ; ПЕРЕХІД ПО НУЛЮ [НЕ НУЛЮ] короткий

LCALL f ; ПЕРЕХІД ДО ПІДПРОГРАМИ далекий

LJMP f ; БЕЗУМОВНИЙ ПЕРЕХІД далекий

MOV A, {#|R|@|d} ; ПЕРЕСИЛАННЯ

MOV d, {A|#|R|@|d} ; ПЕРЕСИЛАННЯ

MOV {R|@} {A|#|d} ; ПЕРЕСИЛАННЯ

MOV D, # ; ПЕРЕСИЛАННЯ

MOV {b,С|С,b} ; ПЕРЕСИЛАННЯ біта

MOVC A, @A+{D|P} ; ПЕРЕСИЛАННЯ з ПЗП

MOVX A, {@D|@} ; ПЕРЕСИЛАННЯ з зовнішнього ОЗП

MOVX {@D|@}, А ; ПЕРЕСИЛАННЯ в зовнішнє ОЗП

MUL АВ ; МНОЖЕННЯ

NOP ; НЕМАЄ ОПЕРАЦІЇ

ORL A, {#|R|@|d} ; АБО

ORL d, {A|#} ; АБО

ORL C, [ / ] b ; АБО з [зворотним] кодом біта

POP d ; ЧИТАННЯ ЗІ СТЕКА

PUSH d ; ЗАПИС У СТЕК

RET[I] ; ПОВЕРНЕННЯ [З ПЕРЕРИВАННЯ]

R{L|R}[C] А ; ЗСУВ {ВЛІВО|ВПРАВО}[через біт

; переносу]

SETB {b|С} ; ЗАПИС 1 у біт

SJMP s ; БЕЗУМОВНИЙ ПЕРЕХІД короткий

SUBB A, {#|R|@|d} ; ОБЧИСЛЕННЯ З УРАХУВАННЯМ

; ПОЗИКИ

SWAP А ; ОБМІН НАПІВБАЙТІВ

ХСН A, {R|@|d} ; ОБМІН БАЙТІВ

XCHD А, @ ; ОБМІН МОЛОДШИХ НАПІВБАЙТІВ

; МІЖ БАЙТАМИ

XRL A, {#|R|@|d} ; ВИКЛЮЧНЕ АБО

XRL d, {А|#} ; ВИКЛЮЧНЕ АБО

УМОВНІ ПОЗНАЧКИ

{ | } обов'язковий вибір одного із варіантів у дужках

[ ] використання варіанта при необхідності

# операнд записаний у ПЗП (відповідно до розміру

приймача)

@ непряма адресація через регістр RO чи R1

@A+D непряма адресація через суму DPTR і нагромаджувача

@А+Р непряма адресація через суму лічильника команд і

нагромаджувача

@D непряма адресація через DPTR

А операндом є вміст нагромаджувача

АВ операнди містяться в нагромаджувачі і регістрі В

З операндом є вміст біта переносу

D операндом є вміст регістра DPTR

R операндом є вміст регістра (від RO до R7)

b операндом є адресуємий біт

d операндом є адресуємий байт

f адреса в ПЗП від 0 до 64 кбайтів

n адреса в поточній сторінці ПЗП (розмір сторінки 4 кбайти)

s зсув щодо адреси команди від - 128 до + 127

 

 

_____________

– Конец работы –

Эта тема принадлежит разделу:

СИСТЕМА КОМАНД ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРА КМ1816ВЕ51

СИСТЕМА КОМАНД ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРА КМ ВЕ... Формати і способи адресації команд...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Контроль точності при програмуванні арифметичних операцій

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Формати і способи адресації команд
Команди можуть займати від одного до трьох байтів. Розмір команди визначається кодом операції, записаним у першому байті. Додаткові байти можуть містити адреси і/або дані. У символічному записі ком

Команди передачі даних
Незважаючи на передачу даних у незмінному вигляді, ці команди здійснюють один із способів обробки інформації. Як приклад такої обробки можна привести сортування. У командах пересилання використовую

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

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

Команди передачі управління
Опис керуючих команд почнемо з команд умовного переходу. Ці команди використовують тільки відносний спосіб адресації, тому для них будемо використовувати умовну позначку адреси переходу rel. Для ко

Арифметичні дії з великими числами
У мікроконтролерах сімейства і8051 відсутній набір команд для здійснення арифметичних дій у тих випадках, коли для представлення чисел потрібно використовувати більш одного байта. Тому розглянемо,

Арифметичні дії з негативними числами
  Команди множення і ділення дають правильні результати тільки у випадку позитивних операндів. Тому для правильного обчислення добутку чи частки у випадку негативних операндів потрібн

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги