АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Приклади мікроконтролерних програм широкого застосування

Читайте также:
  1. Creating a VHDL Source (создание файла, содержащего текст программы на языке VHDL).
  2. II-й этап: Гала – концерт 25 июня 2013года. В программе празднования Дня города.
  3. II. Требования к структуре образовательной программы дошкольного образования и ее объему
  4. III. Обучение по образовательным программам
  5. III. ПРОГРАМА НАВЧАЛЬНОЇ ТА ВИРОБНИЧОЇ ПРАКТИКИ В ОРГАНАХ ДЕРЖАВНОЇ ВИКОНАВЧОЇ СЛУЖБИ УКРАЇНИ
  6. III. Требования к условиям реализации основной образовательной программы дошкольного образования
  7. IV ПРОГРАМА ПРАКТИКИ
  8. IV. Программа соревнований
  9. IV. Требования к результатам освоения основной образовательной программы дошкольного образования
  10. SWOT-анализ раздела «Цели образовательной программы»
  11. USB программатор ЭБУ.
  12. V. КРОССВОРД «ПУТЕШЕСТВИЕ ПО ТЕАТРАЛЬНОЙ ПРОГРАММКЕ»

 

Терміни проектування прикладного програмного забезпечення мікроконтролерів MCS-51 істотно скорочуються при використанні готових МК-програм, що реалізують типові процедури обробки даних (перетворення системи числення, робота з таблицями констант, формування заданої затримки й ін.). Розглянемо ряд МК-програм широкого застосування, написаних мовою АСМ51.

Перетворення системи числення. Підпрограма BINBCD виконує перетворення цілого двійкового 8-розрядного числа без знака, що міститься в акумуляторі A (значення в інтервалі 0-255), у тризначне двійково-десяткове число, що займає два байти і розміщається в регістрах R1 (сотні), R2 (десятки й одиниці).

 

BINBCD MOV B,#100

DIV AB;розділити на 100 для визначення

;числа сотень

MOV R1,A;зберегти число сотень у R1

MOV A,#10

XCH A,B;помістити залишок у A

DIV AB;розділити на 10 для визначення

;числа десятків

SWAP A;число десятків у старшої тетраді A

ADD A,B;число одиниць у молодшої тетраді A

MOV R0,A;зберегти число десятків і одиниць у R0

RET

 

Фрагмент МК-програми, запропонований нижче, забезпечує перетворення двозначного двоїчно-десяткового числа, що міститься в R3, у двійкове 8-розрядне число, розташовуване в регістрі DPH.

 

CONV MACRO BCD,BIN;початок макровизначення з

;формальними параметрами BCD і BIN

MOV A,BCD

MOV B,#10H

DIV AB;розділити на 16 для відділення

;старшої і молодшої тетрад A

MOV R1,B

MOV B,#10

MUL AB

ADD A,R1

MOV BIN,A

ENDM;кінець макровизначення

CONV R3,DPH;макрокоманда з фактичними

параметрами R3 і DPH

Зчитування таймера/лічильника в процесі роботи. Часто зустрічаються ситуації, коли необхідно визначити поточний стан працюючого T/Cj (j({0,1}). Зазначене може бути легко здійснено послідовним читанням регістрів THj і TLj, після якого обов'язково варто переконатися в тім, що вміст THj не змінився (зміна виникає при переповненні TLj). Якщо зміна все-таки відбулася, то варто повторити процедуру читання спочатку. Викладений алгоритм реалізований у підпрограмі RDT, приведеній нижче.

RDT MOV A,TH0

MOV R0,TL0;пересилання молодшого байта T/C0 у R0

CJNE A,TH0,RDT;контроль старшого байта T/C0

MOV R1,A;пересилання старшого байта T/C0 у R1

RET

Передача параметрів у підпрограму. Звичайно передача параметрів перед викликом підпрограми здійснюється шляхом їхнього завантаження в задані регістри. Однак, якщо велике число параметрів являють собою константи, то більш ефективним виявляється підхід, при якому параметри фактично є частиною програмного коду, які виходить безпосередньо за командою виклику підпрограми. У цьому випадку підпрограма визначає їхнє місцезнаходження за адресою повернення в стеці. Розглянемо підпрограму ADDBCD, що ілюструє зазначений підхід при підсумовуванні чотиризначної двоїчно-десяткової константи 1234H з чотиризначної двоїчно-десяткової перемінної, розміщеної в резидентній пам'яті даних.

LCALL ADDBCD

DW 1234H;BCD-константа

DB 56H;адреса мол. байта BCD-перемінної

DB 78H;адреса мол. байта BCD-суми

.........

ADDBCD POP DPH;розміщення в DPTR

POP DPL;адреси повернення

MOV A,#2

MOVC A,@A+DPTR;(A)=56H

MOV R0,A

MOV A,#3

MOVC A,@A+DPTR;(A)=78H

MOV R1,A

MOV A,#1

MOVC A,@A+DPTR;(A)=34H

ADD A,@R0;обчислення молодшого байта суми

DA A;десяткова корекція

MOV @R1,A

INC R0

INC R1

CLR A

MOVC A,@A+DPTR;(A)=12H

ADDC A,@R0;обчислення старшого байта суми

DA A;десяткова корекція

MOV @R1,A

MOV A,#4

JMP @A+DPTR;перехід до команди, що

;випливає за списком параметрів

 

 

Робота з таблицями констант. Існує досить широке коло задач, у яких використовуються великі багатомірні таблиці каліброваних констант, нелінійних параметрів і т.п. Підпрограма MATRX здійснює доступ до байтовх елементів двовимірної таблиці розмірності m´n (m,n£255), розміщеної в одномірній пам'яті програм мікроконтролера 8051 (мал.3), при цьому адреса ADR комірки ПП, що містить елемент , визначається по формулі:

,

де і є відповідно номер рядка і стовпця таблиці; STRT є адреса осередку ПП, що містить елемент .

Відзначимо, що адреса комірки ПП, що містить елемент , повинна задовольняти умови .

  Адреса
   
   
   
   
STRT
   
Рис.3. Схема розміщення табличних констант у ПП

 

;(R0)=i, (R1)=j, (DPTR)=STRT

MATRX MOV A,R0;(A)=i

DEC A

MOV B,#n

MUL AB

ADD A,DPL

MOV DPL,A;у DPL молодший байт STRT+n(і-1)

MOV A,B

ADDC A,DPH

MOV DPH,A;у DPH старший байт STRT+n(і-1)

MOV A,R1;(A)=j

DEC A

MOVC A,@A+DPTR;(A)=aij

RET

STRT DB a11,a12,...,a1n

DB a21,a22,...,a2n

..................

DB am1,am2,...,amn

 

Організація розгалуження на n напрямків припускає вибір однієї з n програмних процедур у залежності від виконання відповідного умови. Нижче приводиться приклад підпрограми, що ефективно реалізує зазначений вибір. Тут у залежності від значення вмісту програмно доступного елемента MEMSEL здійснюється перехід до однієї з команд з адресами MT1-MTn. При використанні підпрограми JMP_n необхідно враховувати, що кількість комірок пам'яті програм, відведена під таблицю адрес переходу і під область програмних процедур, обмежена адресами MT1 і MTn, не повинне перевищувати 256 байт.

 

;(MEMSEL)Î{0,...,n-1}

MEMSEL REG R3

JMP_n: MOV A,MEMSEL

MOV DPTR,#TBL

MOVC A,@A+DPTR

JMP @A+DPTR

TBL: DB MT1-TBL,MT2-TBL,...,MTn-TBL

MT1: RET

MT2: RET

..........

MTn: RET

 

Програмування послідовного порту. Послідовний порт мікроконтролера 8051 забезпечує широкі можливості по організації прийому/передачі даних, при цьому настроювання на задану швидкість прийому/передачі і необхідний протокол обміну досягається відповідною ініціалізацією регістрів PCON (табл.2.2), TMOD (табл.2.4), SCON (табл.2.5). Як приклад нижче приводяться три підпрограми, що спільно забезпечують роботу послідовного порту в режимі 3 зі швидкістю прийому/передачі даних 2400 бод.

;INIT - підпрограма ініціалізації

INIT: MOV SCON,#1101xx10B;x({0,1}

MOV TMOD,#0010xxxx;настроювання T/C1

MOV PCON,#0;скидання біта SMOD

MOV TH1,#<.NOT.K+1; , де

; МГц є частота синхронізації мікроконтролера

SETB TR1;включити T/C1

RET

;SP_OUT - підпрограма передачі даних і контрольного біта

SP_OUT: MOV C,P;пересилання контрольного біта з прапора

MOV TB8,C;паритету в SCON.3

M1: JNB TI,M1;синхронізація передачі

CLR TI;скидання біта SCON.1

MOV SBUF,A;передача контрольного біта і

;вмісту A через ост. порт

RET

;SP_IN - підпрограма прийому даних і контрольного біта

SP_IN: JNB RI,SP_IN;синхронізація прийому

CLR RI;скидання біта SCON.0

MOV A,SBUF;завантаження прийнятого байта даних у A

MOV C,RB8;завантаження дев'ятого прийнятого біта

;даних (контрольного біта) у C

RET

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

,

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

 

DELAY1: MOV R2,#n

M1: DJNZ R2,M1

RET

DELAY2: MOV R1,#n

MIT2: MOV R2,#m

MIT1: DJNZ R2,MET1

DJNZ R1,MET2

RET

Відзначимо, що максимальний час затримки, формованим підпрограмою DELAY2, буде складати .


1 | 2 | 3 | 4 | 5 | 6 | 7 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.)