Микроконтроллеры для систем автоматики - часть 11

 

  Главная      Учебники - Производство     

 

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

 

 

 

 

 

 

 

 

 

содержание   ..  9  10  11  12   ..

 

 

Микроконтроллеры для систем автоматики - часть 11

 

 

 

43 

Список  выражений - последовательность  выражений,  разграниченных  запятыми. 

Каждое  выражение  должно  находится  в  пределах  от -32768 до 65535. Отрицательные 
числа записываются в дополнительном коде. 

Синтаксис: 
label: .dw expressionlist  
Например, 
.cseg  
varlist:  .dw 0, 0xffff, 0b1001110001010101, -32768, 65535  
.eseg 
eevarlst: .dw 0,0xffff,10  

def 

Директива def (Set a symbolic name on a register) присваивает символические имена 

регистрам. Один регистр может иметь несколько символических имен. Символическое имя 
регистра может быть переопределено позже в программе. 

Синтаксис: 
.def symbol=register  
Например,  
.def temp=r16  
.def ior=r0  
.cseg  
ldi temp,0xf0   

; запись $f0 в регистр temp   

in ior,$3f     

;чтение регистра статуса sreg в регистр ior 

eor temp,ior   

; исключающее ИЛИ регистров temp и ior  

equ 

Директива equ (Set a symbol equal to an expression) связывает константу с меткой. 

Эта метка может использоваться далее в программе. Метка, указывающая на константу в 
соответствии с директивой set, не может быть впоследствии переопределена. 

Синтаксис 
.equ label = expression  
Директива .equ обычно  используется  для  присвоения  символических  имен  всем 

регистрам микроконтроллера, отдельным битам регистров и ячеек памяти, как это сделано, 
например, в приложении 1 в файле описания файле ATmega163def.inc. 

set  

Директива set (Set a symbol equal to an expression) присваивает имя выражению. 

Это  имя  может  использоваться  далее  в  программе.  Имя,  присвоенное  выражению  в 
соответствии с директивой set, может быть впоследствии изменено. 

Синтаксис 
.set label = expression  

Например,  
.set pina = $19  

; имя pina присваивается числу $19 

 

44 

.set porta = pina + 2   ; имя porta присваивается выражению $19+2=$1b 
…… 
out porta,r2    

;Пересылка данных из регистра r2 в porta (по адресу $1B) 

У

П Р А В Л Е Н И Е   Ф А Й Л А М И

 

include 

Директива include (Include another file) вставляет в текст программы заданный файл. 

Включенный файл может также содержать директивы include. 

Синтаксис: 
.include "filename"  
Например,  
.include “m163def.inc “  ;подключаем файл описания микроконтроллера ATmega163 
 

М

А К Р О С Ы

 

Макросом  называется  участок  программы,  которому  присвоено  имя  и  который 

ассемблируется  всякий  раз,  когда  ассемблер  встречает  это  имя  в  тексте  программы. 
Макрос начинается директивой macro и заканчивается директивой endmacro. 

macro 

Директива macro (begin macro)  сообщает  ассемблеру  о  начале  макроса. 

Параметром  директивы  является  название  макроса.  Макрос  может  содержать  до  10 
параметров. Эти параметры упоминаются как @0 - @9 в пределах макроопределения. При 
вызове макроса параметры перечисляются списком через запятую.  

По умолчанию в листинге программы показывается только вызов макроса. Чтобы 

включить  в  листинг  макроопределение  необходимо  использовать  директиву LISTMAC. 
Макроопределения отмечаются в поле кода операции знаком «+». 

Синтаксис: 
.macro macroname  
Например, 
.macro subi16  

; начало определения мароса  

subi @1,low(@0) ; 

вычитание младшего байта 

sbci @2,high(@0)  

; вычитание старшего байта 

.endmacro     

; конец макроопределения  

.cseg                            ; начало сегмента кода  
subi16 0x1234,r16,r17   ; вычитание 0x1234 из r17:r16  

endmacro  

Директива endmacro (End macro) определяет конец макроса. Директива не имеет 

никаких параметров.  

Синтаксис: 
.endmacro   
Например, 

 

45 

.macro subi16  

; начало определения макроса 

subi r16,low(@0)    

; вычитание low byte  

sbci r17,high(@0)   

; вычитание high byte  

.endmacro  

У

П Р А В Л Е Н И Е   Л И С Т И Н Г О М

 

list  

Директива list (Turn the list file generation on) сообщает ассемблеру о необходимости 

генерации  листинга  программы.  Листинг – это  файл,  содержащий  исходный  текст 
программы,  адреса  и  коды  инструкций.  По  умолчанию  генерация  листинга  считается 
включенной. Вместе с директивой NOLIST она позволяет генерировать листинги отдельных 
частей исходного файла. 

Синтаксис: 
.list  
Например,  
.nolist   

 

; отключение генерации листинга  

.include "macro.inc" 

; подключение файла  

.include "const.def 

; подключение файла  

.list      

 

; включение генерации листинга  

listmac  

Директива listmac (Turn macro expansion on) включает в листинг программы текст 

макроса. По умолчанию в листинге показывается только вызов макроса с параметрами. 

Синтаксис: 
.listmac  
Например,  
.macro macx  

; определение макроса  

add  r0,@0    

  

eor  r1,@1     

 

.endmacro  

конец определения  

.listmac  

включение макроса в листинг программы 

macx r2,r1     

; выполнение макроса  

nolist  

Директива nolist (Turn listfile generation off)  выключает  генерацию  листинга.  По 

умолчанию  генерация  листинга  считается  включенной.  Директива  может  использоваться 
также вместе с директивой LIST для генерации листинга отдельных частей программы. 

Синтаксис: 
.NOLIST  
Например, 
.NOLIST     

; отключение генерации листинга программы  

.INCLUDE "macro.inc  ; подключение файла  

 

46 

.INCLUDE "const.def"  ; подключение файла  
.LIST  

включение генерации листинга  

У

С Т А Н О В К А   А Д Р Е С Н Ы Х   С Ч Е Т Ч И К О В

 

ORG  

Директива ORG (Set program origin) устанавливает счетчик адреса на определенное 

значение.  Устанавливаемое  значение  задается  как  параметр.  Если  директива ORG 
записана в сегменте данных, то она устанавливает счетчик адреса SRAM. если в сегменте 
кода – то  счетчик  адреса  программы,  если  в  сегменте EEPROM – то  счетчик  адреса 
EEPROM. Если директиве предшествует метка на той же самой строке исходного текста, nj 
метке  будет  присвоено  значение  параметра.  По  умолчанию  значения  счетчиков  адреса 
программы  и EEPROM нулевые,  а  счетчика  адреса  данных - 32 (после  регистров, 
занимающим адреса 0-31).  

Синтаксис: 
.org expression  
Например, 
.dseg                 

; сегмент данных  

.org 0x37            

; адрес $37 

variable: .byte 1    

; резервирование байта  

.cseg  

сегмент кода 

.org 0x10            

; установка программного счетчика на адрес $10  

mov r0,r1    

 ;  

В

Ы Х О Д

 

exit  

Директива exit (Exit this file)  прекращает  трансляцию  файла.  Обычно  ассемблер 

выполняет трансляцию до конца файла. Если директива exit появляется в подключенном 
файле ассемблирование продолжается от строки, следующей за директивой include. 

Синтаксис: 
.exit  
Например,  
.exit   

; конец трансляции  

 

5. ТАКТОВЫЙ ГЕНЕРАТОР 

Работа  процессорного  ядра  синхронизируется  тактовым  генератором.  Именно 

период  работы  генератора  определяет  время,  необходимое  для  выполнения 
элементарных операций в ядре. Простейшие операции, как правило, выполняются за один 
такт.  Операции,  связанные  с  извлечением  данных  из  памяти,  выполняются  за  два-три 
такта. 

Схемы тактовых генераторов могут быть различны.  
Простейшим  и  наиболее  дешевым  считается  внутренний  (реализованный  на 

кристалле) RC-генератор. Он строится без внешних компонентов, но на частоту колебаний 

 

 

 

 

 

 

 

содержание   ..  9  10  11  12   ..