Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Приклади програмування




5.1. Приклад використання команди косвеного переходу

Нехай задано таблицю переходів на різні чистини програми, розміщена, починаючи з адреси 30h:

ORG 30h;(Таблиця переходів

LJMP Reset1; 3 байта на команду)

LJMP LoadMem;

LJMP GetMem;

LJMP Go;

LJMP ContAddr;

LJMP Step;

Параметр переходу (номер N=0-5) передається з порту Р1 і розміщується в розрядах 6-4. Тоді перехід по значенню параметра (наприклад, якщо N=0, то на Reset1; N=2, то на GetMem; N=5, то на Step) відбудеться в результаті виконання наступної програми:

 

MOV A, P1;зчитування параметра

ANL A,#01110000b;обнуління розрядів 7, 3-0

SWAP A;N – в розрядах 3-0

MOV B, #3;

MUL AB;в А – значення N*3

MOV DPTR, #30h;базова адреса таблиці переходів

JMP @A+DPTR; перехід по параметру

5.2. Програмування послідовного порту

Обмін даними між двома контролерами виконується по чотирьом лініям (рис. 11). Виходи TxD, RxD – відповідно вихід і вхід дозволу передачі.

 

 
 

 


 

У висхідному стані на виходах RTS обох контролерів рівень логічної “1” (отримання заборонено). Отримання даних (обнуління RTS) дозволяється підпрограмою ReceA. Тут поле установки біта RI (закінчення прийому байта) передача знову забороняється й отриманий байт пересилається в акумулятор. Знак $ є спец символом адреси текучої команди.

RQTS EQU P1.1

; підпрограма отримання байта в ACC по RS232

ReceA: CLR RQTS;Дозволити передачу

JNB RI, $;Чекати закінчення сеансу прийому

SETB RQTS;Заборонити передачу

CLR RI;Очистити прапорець закінчення

;сеансу прийому

MOV A, SBUF;Переслати прийнятий байт в АСС

RET;Повернення з підпрограми

В підпрограмі передачі байту TranA при отриманні дозволу байт байт записується в SBUF, потім виконується очікування закінчення передачі, і очищається біт ТІ.

 

CTS EQU P1.1

;підпрограма передачі байта з АСС по RS232

TranA: JB CTS, $;Чекати дозволу передачі

MOV SBUF, A;Почати передачу

JMB TI, $;Чекати закінчення сеансу передачі

CLR TI;Очистити прапорець сеансу передачі

RET;Повернення з підпрограми

 

Нехай частота задаючого генератора складає fr=11.5 МГц. Необхідно отримати швидкість передачі по послідовному інтерфейсу, що дорівнює 9600 біт/с. УАПП працює в режимі 1, при якому формат посилки 10 біт, а швидкість передачі керується таймером Т/С1 у режимі 2. Із виразу (1) визначимо значення біта SMOD і величину, що завантажується в старший байт таймера ТН1, при якому швидкість роботи послідовного порта F має значення, найбільш близьке до 9600 біт/с. отримаємо, що при SMOD=1 і ТН1=250 частота обміну F=9982 біт/с. відносна похибка швидкості приблизно дорівнює 4%, що є прийнятним, так як максимально допустима похибка складає 5%.

Нехай контролер 1 отримує від контролера 2 байт лічильника, а потім байти даних, число яких передано в лічильнику. Якщо лічильник дорівнює нулю, програма закінчується. Контролер 1 модифікує отриманий байт шляхом операції АБО з байтом із зовнішньої пам'яті даних (ці байти послідовно розміщуються в комірках ВПД, починаючи з адреси 100h) і передає результат контролеру 2. Програма ініціалізації й обміну даними контролера 1 може мати вид:

MOV IE, #0;Заборона переривань

MOV TMOD, #00100000b;Т/С1: режим 2

MOV TH1, #0FAh;ТН1=250d для швидкості 9600 бод

MOV TL1, TH1;Ініціалізація TL1

MOV PCON, #10000000b;SMOD=1 подвоєна швидкість

MOV SCON, #01010000b;УАПП-режим 1, дозвіл

;отримуваня

SETB TR1;пуск Т/С1

ACALL ReceA;Отримати байт лічильника

JZ PEnd;Кінець, якщо лічильник =0

MOV R3, A;

MOV DPTR, #100h;

LdM: ACALL ReceA;Отримати байт даних

MOV B, A;Зберегти байт

MOVX A, @DPTR;Зчитування байта з ВПД

INC DPTR;

ORL A, B;Модифікація байта

ACALL TranA;Передача байта

DJNZ R3, LdM;Цикл

Pend: NOP;

END;

5.3 Арифметичні операції з плаваючою комою

Розглядається реалізація операцій з плаваючою комою, в яких числа представлено в форматі, що прийното фірмою INTEL /6/. Число М з плаваючою комою представляється у вигляді

M=m*2Pm

де m – нормалізована мантиса, тобто мантиса представлена в діапазоні від 0.5 до 1; Pm – порядок.

При записі нормалізованого числа в ЕОМ опускається стакший розряд мантиси m[1], по визначено рівний 1. Такий запис розширяє поле порядка на один розряд. Машиний порядок числа Р представлений в зміщеній формі і записується в виді P+Pm+126. Максимальне значеня Р складає 254, мінімальне – 1. Значення Р, що дорівнюють 255 та 0 використовуються для представлення спеціальних чисел. Число нуль записується нульовим порядком і нульовою мантисою. Формат чисел наведено на рис.12, звідки видно, що сім старших розрядів порядку розміщені в старшому, 3-ому байті, а його молодший біт – в 2-ому байті.

 

30 31 23 22 0

+ - порядок+126 P[7-1] P[0] мантиса m[2-24]

3-й байт байти 2, 1, 0

 

Рис.-12. Формат представлення чисел з плаваючою комою

 

5.3.1. Програма множеня

Помноживши числа А та В, що представлені в форматі з плаваючою комою, отримаємо:

Y=A*B=(a*2Pa)*(b*2Pa)=(a*b)*2(Pa+pb)

Звідси видно, що мантиса результату дорівнює добутку мантис операндів, а порядок – сумі порядків операндів.

 

a2*b2
47

   

a2*b1 a1*b2
39

   
   

a2*b0 a0*b2 a1*b1
31

   
   
   

a0*b1 a1*b0
23

   
   

a0*b0
15 0

   

 

Рис.-13. Матриця частичних добутків при перемноженні мантис

 

Множення 3-х бітних мантис виконується за допомогою команди MUL, входячу в систему команд мікроконтроллера. Вказана команда виконує множення однобайтних чисел з отриманням двобайтового результату. Кінцевий результат отримується додаванням окремих добутків з врахуванням позицій кожного з них. Матрицю окремих добутків при перемножуванні мантис наведено на рис. 2.13, де ai, bi – байти множимого та множника, причому a2 та b2 старші, а a0 та b0 – молодші байти. Звідси видно, що

 

A*b=232*a2*b2+224*(a2*b1+a1*b2)+216*(a2*b0+a1*b1+a0*b2)+ 28*(a1*b0+a0*b1)+a0*b0

 

Як відомо /7/, ддля отримання n – розрядного результату операційний пристрій має містити (n+log2n) розрядів, що в даному випадку складає 30 розрядів. Тоді, як видно з рис.13, немає необхідності використоння молодших байтів частичних добутків a0*b1 i a1*b0, а також частичного добутку a0*b0, що дозволяє прискорити отримання результату. Результат множення мантис може вийти ненормалізованим. В цьому випадку необхідно нормалізувати мантису добутку з відповідною корекцією порядку.

Програма множення виконується наступним чином:

1. Аналіз операндів на нуль та присвоєння результату нульового значення, якщо один з операндів дорівнює нулю.

2. Обробка порядків і визначення знака результату.

3. Множення мантис.

4. Округлення мантиси; при необхідності виконується нормалізація з корекцією порядку.

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

Обробка порядків і визначення виходу результату за межі розрядної сітки. Рядки операндів перетворюються зі зміщеної форми шляхом віднімання константи 126 і представляються в додатковому коді і в вигляді двобайтного числа, причому в старшому байті – розмножений знаковий розряд. Перетворені порядки двох операндів додаються. Операнд А розміщується в комірках 20h-30h, а операнд В – в комірках 24h-27h резидентної пам'яті даних, причому старші байти розміщуються в старших адресах (наприклад, порядок в байті 23h і т.д.). приклад програми (для операції Y=A*B) наведено нижче.

OpX0 EQU 20h;молодший байт мантиси А

OpX1 EQU 21h;середній байт мантиси А

OpX2 EQU 22h;старший байт мантиси А

OpXp EQU 23h;порядок А

OpY0 EQU 24h;молодший байт мантиси В

OpY1 EQU 25h;середній байт мантиси В

OpY2 EQU 26h;старший байт мантиси В

OpYp EQU 27h;порядок В та У

Sg EQU 2Ah;прапорці

SgX EQU 2Bh;знаковий байт порядка А та У

SgY EQU 2Ch;знаковий байт порядка В

;обробка порядків

MOV SgX, #0;

MOV SgY, #0;

;

MOV A, OpYp;

MOV C, OpY2.7;молодший розряд порядка

RLC A;

CLR C;

SUBB A, #126;

MOV OpYp, A;збереження порядка В

JNB Cy, Xx1;формування знакового байта

MOV SgY, #0FFh;порядка В

;формування порядка А

Xx1: MOV A, OpXp;

MOV C, OpX2.7;молодший розряд порядка

RLC A;

CLR C;

SUBB A, #126;порядок А

JNB Cy, Xx2;формування знакового байта

MOV SgX,#0FFh;порядок А

Xx2: ADD A, OpYp;додавання порядків

MOV A, SgX;збереження Рмл

ADDC A, SgY;

MOV SgY, A;збереження Рст

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

 
 

 

 


Алгоритм визначення виходу за межі розрядної сітки наведено на рис. 4. Спочатку визначається, чи було переповнення при складанні молодших байтів мантис операндів. Це має місто при Pc=254d=011111110b i визначає антипереповнення результату, а також при Рс=1 (переповнення). Якщо переноса з молодшого байта в старший при складанні не було, необхідно проаналізувати значення молодшого порядку результату. Максимальне значення зміщеного порядку дорівнює 254, що в перетвореному порядку становить 254-126=128=80h. Тому, якщо молодший байт додатнього порядку більше 80h, фіксується переповнення.

Мінімальне значення зміщеного порядку дорівнює 1, що в перетвореному порядку складає

0.00000001

-- 0.01111110

1.10000011

Тому, якщо молодший байт від'ємного порядку менш ніж 80h, фіксується антипереповнення.

Алгоритм рис.14 можна реалізувати, наприклад, за допомогою наступної програми, яка є продовженням наведеної вище (в А – старший байт порядку).

JNB P,Xx5;аналіз на парність ст. байта порядка

;був перенос в старший байт порядка

JNB SgY.7, Xx4;

Xx20: SETB Sg.4;установка прапорця антипереповненя

AJMP Xx9;перехід на кінець

Xx4: SETB Sg.5;уст. прапорця переповненя

;не було переносу в старший байт порядку

Xx5: MOV A, OpYp;молодший байт порядку

CLR C;

JNB SgY.7, Xx6;

SUBB A, #83h;порядок від'ємний

JB Cy, Xx20;антипереповнення

AJMP Xx9;перехід на кінець

Xx6: SUBB A, #81h;порядок додатній

JNB Cy, Xx4;переповнення

Xx9: NOP;кінець обровки порядків

 

Програма множення 3-байтних мантис. Добуток накопичується в регістрах R5(старший), R4, R3 i R2. Вв програмі використовується підпрограма множення Mul3, котра призначена для множення і додавання часних добутків a2*b0, a0*b2, a1*b1.

;підпрограма множення

Mul3: MUL AB;

ADD A, R2;

MOV R2, A;

MOV A, B;

ADDC A, R3;

MOV R3, A;

CLR A;

ADDC A, R4;

MOV R4, A;

RET

;перемноження мантис

SETB OpY2.7;установка старших

SETB OpX2.7;розрядів мантис

MOV A, OpX1;формування

MOV B, OpY0;a1*b0

MUL AB;

MOV R2,B;

MOV A,OpX0;формування

MOV B, OpY1;a0*b1

MUL AB;

MOV A, B;формування старшого байта

ADD A,R2;у1=a0*b1+a1*b0

MOV R2, A;

CLR A;

ADDC A,#0;

MOV R3, A;

MOV A, OpX2;

MOV B,OpY0;a2*b0

ACALL Mul3;у2=a2*b0+у1

MOV A, OpX1;формування

MOV B, OpY1;a1*b1

ACALL Mul3;у3=a1*b1+у2

MOV A, OpX0;формування

MOV B, OpY2;a0*b2

ACALL Mul3;у4=a0*b2+у3

MOV A, OpX1;формування

MOV B, OpY2;a1*b2

MUL AB;

ADD A, R3;у5=у4+a1*b2 мол. байт

MOV R3, A;

MOV A, B;

ADDC A, R4;у5=у4+a1*b2 ст. байт

MOV R4.A;

CLR A;

ADDC A, #0;

MOV R5, A;

MOV A, OpX2;формування

MOV B, OpY1;a2*b1

MUL AB;

ADD A, R3;у6=у5+a2*b1 мл. байт

MOV R3, A;

MOV A, B;

ADDC A, R4;у6=у5+a2*b1 ст. байт

MOV R4, A;

CLR A;

ADDC A, R5;

MOV R5, A;

MOV A,OpX2;a2*b2

MOV B, OpY2;

MUL AB;

ADD A, R4;у7=у6+a2*b2 мол. байт

MOV R4, A;

MOV A, B;

ADDC A, R5;у7=у6+a2*b2 ст. байт

MOV R5, A;

 

Програма множення чисел з плаваючою комою, частини якої були наведені вище, потребує 275 байт пам'яті програм. Час множення чисел складає 350-410 циклів роботи мікроконтролера, що, наприклад, при частоті кварцевого резонатора, рівному 12 мГц складає 0,35-0,41 мс.

 

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=zÄq16Äq12Äq5

де 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;

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

3) В точках контролю виконується підпрограма 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;кінець операції

 

 

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

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

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

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

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

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

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

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

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

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




Поделиться с друзьями:


Дата добавления: 2015-04-29; Просмотров: 537; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.