Ауысқан астындағы 1 байтты резервтеу
table: .BYTEtab_size; tab_sizeбайтын кейінге сақтау.
.ESEG
eevarl: .DWOxffff;E
EPROM 1 сөзін жазу
ORG директиві локальды есептеуіштің мағынасын ұстап алады. CSEG,
.DSEG, .ESEG директивтерімен біріккендерді ғана қолдан.
Синтаксис:
ORG
адрес
Үлгі:
.DSEG;
Басталу сегментінің мәліметі
“ORG
0x37
; СОЗУ адресін 37h-қа орнату
variable: .BYTE1;
СОЗУ байтын 37h-қа кейінге
сақтау.CSEG
ORG 0x10; 1 0h
адрес командасына есептеуіш орнату
movr0,rl;
бірдеңе істеу керек
DB байтын бағдарлама жады арқылы анықтап немесе EEPROM арқылы
DB директиві бағдарлама жады арқылы ресурс жадымен резервтеледі
немесе EEPROM арқылы. Директивте таңба алдында болу керек. DB тізім
мәнерін қояды, болмай бара жатқан жағдайда бір ғана мәнер болуы қажет.
Директивті сегмент коды ақылы немесе EEPROM сигменті арқылы
арналастыру қажет.
Тізім мәнері өзіне тізбек мәнерін ұсынып, бөлінген үтірлермен.
Егер директив сегмент коды және тізім мәнері үшін екі ауқымды ұстап
көрсетіп, онда мәнер былай жазылып, Flash-жадының әрбір сөзі 2 байтты
былғайды.
86
Синтаксис:
LABEL:. DB
тізім мәнері
Үлгі:
-CSEG
consts: .DB 0, 255, 0b01010101, -128, 0
хаа
- ESEG
const2: .DB 1, 2, 3
DW
байтын бағдарлама жады арқылы анықтап немесе EEPROM арқылы
DW директиві бағдарлама жады арқылы ресурс жадымен резервтеледі
немесе EEPROM арқылы. Директивте таңба алдында болу керек. DB тізім
мәнерін қояды, болмай бара жатқан жағдайда бір ғана мәнер болуы қажет.
Директивті сегмент коды ақылы немесе EEPROM сигменті арқылы
арналастыру қажет.
Тізім мәнері өзіне тізбек мәнерін ұсынып, бөлінген үтірлермен. Әрбір
мәнер 32768 және 65535ауқымды болуы керек.
Синтаксис:
LABEL: .DW
тізім мәнері
Үлгі:
. CSEG
varlist: .DW0, Oxffff, OblOOlllOOOlOlOlOl, -32768, 65535
.ESEG
eevarlst: .DW 0,0xffff,10 DEF
—
Регистр
атын иемленеді
DEF директиві таңбалың регистрдің атын иеленіп алады. Регистр көптеген
рәміз атын иеленеді.
Синтаксис:
.DEFИмя=Регистр
Үлгі:
.DEF temp=Rl6 .DEF ior=R0 .CSEG
ldi temp,Oxf0
; temp регистріне OxfO жүктеу
inior,0x3f
; ior регистрінен SREG-ты оқу
eortemp,
EQU -
Мәнер атын иемдену
EQU директивін таңба мәні иеленеді. Бұл таңба басқа мәнерде қолданылуы
мүмкін. Бұл таңбаның мазмұнын өзгертуге немесе анықтауға болмайды.
Синтаксис:
.EQUтаңба=мәнер
Үлгі:
.EQU io_offset= 0x23
.EQU porta= io_offset+ 2
.CSEG;
Басталу сегментінің коды
clrr2;
г2 регистрін өшіру
outporta,г2 ; А портына жазу
INCLUDE-
басқа файлға қою
INCLUDE директивін айтады ассемблерді басқа файлдан оқи бастайды.
Ассемблер бұл файлды ассемблерлейді файлдың аяғына дейін немесе EXIT
директивке дейін. Қосылған файл INCLUDE директивін өзі қосуы мүмкін.
87
Синтаксис:
.INCLUDE"файлдың аты"
Үлгі:
; iodefs.asm:
.EQUsreg=0x3f
; Мәртебе регистрі
.EQUsphigh=ОхЗе ; Үлкен байт стек көрсеткіші.
.EQUsplow=0x3d;
Кіші байт стек көрсеткіші.
; incdemo.asm
.INCLUDEiodefs.asm; Файлды қосу«iodefs.asm» inr0,sreg; Регистр
мәртебесіноқу
EXIT-
файлдан шығу
EXIT директивін ассемблерді тоқтату үшін ассемблерлеудің алдыңғы
файлы. Әдетте ассемблер файл соңына дейін жұмыс істейді. Егер ол EXIT
директивін кездестірсе, онда жол бойын ассемблерлеп жалғастырып, INCLUDE
директивін келесісіне дейін жалғастырады.
Синтаксис:
EXIT
Үлгі:
EXIT
; бұл файлдан шығу
DEVICE-
Кез келген микробақылаушыға ассемблерлеп көрсетеді.
Директив қолданушысын ассемблер хабарлап, қандайда бір құрылғы
бағдарламаға жазылады. Егер ассемблер команда тапса, микробақылаушылар
көрсетілген түрін қолдамаса, онда хабарлама беріледі. Қондырғы жадында
көлем қолданысын бағдарлама көлемі арқылы хабарлама пайда болады.
ПА.4 Бағдарламалаудың кейбір ерекшеліктері
Мәлімет жады түгелдей дерлік қолданушы бағдарламаға жеңіл және
көптеген
ассемблер
командалары
оның
мәліметтерімен
арнаулы
айырбасталған. Команданы жіберу мәліметі тікелей мүмкіндікке әкелініп және
жанама СОЗУ ұйым адресациясын, енгізу/қорытынды регистрлерінің тікелей
адресациясын және регистрдің жалпы белгіленуі. Сондай-ақ әрбір регистрға
жад ұйымы салыстырылған, оларға енди тек командалық адресация
регистрімен емес, оған қоса СОЗУ ұйым командалық адресацияға да үндену
керек.
Мысалы, команда:
MOVR10,R15 ;
регистрді көшіру R15 регистрге деR10
;
абсолютті бұл командаға да соны істейді:
LDSR10,$0015; R10
регистрін жүктеп $0015 адресі арқылы ұйымдап ұстау;
88
Енгізу/қорытынды регистрларына да бұл қатысты. Бұларға арнайы
командалар қаралған:
INRd, Р ;Rd регистрін Р номерімен I/O портынан мәлімет жүктеу
OUTP,Rd;
Rd регистрінен Р нөмірімен I/O портына мәлімет жүктеу
0<Р<63 диапазонында бұл командалар порт нөмірінің көрсеткішін
қолданады. Команда адресациясын қолдану кезінде ұйым жады жұмысқа
регистрмен енгізу/орытынды арқылы $0020-$005F мәлімет жады регистр
атымен көрсетіледі.
LDIR16,$FF
OUT $12,R16;PORTD-
ға 255 санын жазу.
STS$0032,R16;
ұяшығына жазылады $0032 ұйымға 255 санын
тікелей жазу.
Енгізу/қорытынды СОЗУ регистр адресіне $20 санына порт нөмірінен
алынып қосылады.
ПЗУ бағдарлама жадында және тек кристалл бағдарламашығы кезінде
өзгереді. Константтар бағдарлама жадында сөз ретінде бөледі.
Мысалы:
dw $033f,$676d,$7653,$237е,$777
Жұмыс үшін мәлімет, бағдарлама жадында бөлінген, команда көрсетілген.
LPM –
байтын бағдарлама жадында жүкеу, R0 регистріне Z регистрі
көрсетіледі.
Z
регистрін ұстап константа байт адресі анықталады. Үлкен 15 бит адрес
(0-
ден 4к-ға дейін) сөзін анықтап кіші бит жағдайына кіші бит (0) таңдауын
анықтап немесе үлкен битті (1).
Енгізу/қорытынды портымен жұмыс кезінде келесі ерекшеліктерін есте
сақтау керек. Егер порт қорытындысы шығу ретінде сконфигурланған, онда
оның қосылуы регистр мәліметі арқылы шығарып (PORTA, PORTB, PORTC,
PORTD), егер қорытынды шығу ретінде сконфигурланса, онда оны регистр
қорытындысы арқылы шығу порты ретінде сұрастырып өңдейді (PINA, PINB,
PINC, PIND).
Арифметикалық және логикалық команданың ерекшеліктерін қолданып,
олардың көбісі R16-R31 регистрімен ғана жұмыс істейді.
Үлгі:
CPIRd,K-
Rd регистрін К. 16CBIжәнеSBI командалары енгізу/қорытынды кіші 32 регистрмен жұмыс
істейді.
Бағдарламаны қолданар кезінде стекті міндетті түрде анықтап алу керек!
Ол үшін SPH жәнеSPL регистрларына стектіңжоғарғы адрестерін шығару
керек.
ПА.5 Бағдарламаның жазуы
Бағдарлама, ассемблерде жазылғандай, анықталған құрылысты иемдену керек.
Келесі қалып ұсынылады (ATmega8535 үшін)
.*******************************************
; бағдарламаның аты,
;қысқаша
жазу,
кейбір
түсіндірулер.
89
*******************************************
; * * * * * *
31>63> Достарыңызбен бөлісу: |