Заманауи микроконтроллер



Pdf көрінісі
бет38/64
Дата31.12.2021
өлшемі3,85 Mb.
#21593
1   ...   34   35   36   37   38   39   40   41   ...   64
Ауысқан астындағы 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  регистрі 
көрсетіледі. 

регистрін ұстап константа байт адресі анықталады. Үлкен 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 
 
******************************************* 
; * * * * *  * 


Достарыңызбен бөлісу:
1   ...   34   35   36   37   38   39   40   41   ...   64




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет