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

 

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

 

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

 

 

 

 

 

 

 

 

 

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

 

 

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

 

 

 

39 

Ф

У Н К Ц И И

 

Функции, определенные в языке ассемблера 

º low(expression) 

 

возвращает младший байт выражения; 

º high(expression) 

 

возвращает второй байт выражения; 

º byte2(expression) 

то же что high; 

º byte3(expression) 

возвращает третий байт выражения; 

º byte4(expression) 

 

возвращает четвертый байт выражения; 

º lwrd(expression) 

 

возвращает биты 0-15 выражения; 

º hwrd(expression) 

 

возвращает биты 16-31 выражения; 

º page(expression) 

 

возвращает биты 16-21 выражения; 

º exp2(expression) 

 

возвращает 2 в  степени,  определяемой  
выражением в скобках; 

º log2(expression) 

 

возвращает целую часть вычислений log2 от 
выражения в скобках. 

4.2. Директивы 

Директивы ассемблера не транслируются в коды операций, они используются для 

размещения  программы  в  памяти,  определяют  макрокоманды,  инициализируют  память 
данных и выполняют ещё целый ряд различных вспомогательных операций, облегчающих 
процесс программирования. Полный список директив ассемблера AVR приведен в таблице 
4.2. 

Таблица 4.2. 

Директивы языка Atmel AVR Assembler 

Директивы

 

Мнемоника

 

 Наименование 

byte

 

Reserve byte to a variable

 

Резервирование байта для 

переменной 

cseg

 

Code Segment

 

Сегмент памяти программ 

db

 

Define constant byte(s)

 

Определение однобайтной 

константы 

def

 

Define a symbolic name on a register

 

Определение символического 

названия регистра 

device

 

Define which device to assemble for

 

Определение устройства 

dseg

 

Data Segment

 

Сегмент памяти данных 

dw

 

Define Constant word(s)

 

Определение слова 

endmacro

 

End macro

 

Конец макроса 

equ

 

Set a symbol equal to an expression

 

Задание имени константы 

eseg

 

EEPROM Segment

 

Сегмент EEPROM 

exit

 

Exit from file

 

Конец файла 

include

 

Read source from another file

 

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

 

40 

list

 

Turn listfile generation on

 

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

listmac

 

Turn Macro expansion in list file on

 

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

nolist

 

Turn listfile generation off

 

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

org

 

Set program origin

 

Задание начального адреса памяти 

set

 

Set a symbol to an expression

 

Задание имени выражения 

Примечание: Любой директиве в тексте программы предшествует точка.  

В

Ы Б О Р   М И К Р О К О Н Т Р О Л Л Е Р А

 

device 

Директива device (Define which device to assemble for)  сообщает  ассемблеру  о 

используемом  контроллере.  При  использовании  этой  директивы  генерируется 
предупреждение,  если  команда  в  программе  не  поддерживается  точно  выбранным 
контроллером. Если сегмент программы или сегмент EEPROM в программе больше, чем в 
выбранном устройстве, ассемблер также формирует предупреждение. Если директива не 
используется,  то  считается,  что  все  команды  ассемблера  поддержаны  и  нет  никаких 
ограничений на EEPROM и память программ. 

 
Синтаксис: 
.device at90s1200 |at90s2313 | at90s2323 | at90s2333 | at90s2343 | at90s4414 | 

at90s4433 | at90s4434 | at90s8515 | at90s8534 | at90s8535 | attiny11 | attiny12 | attiny22 | 
atmega603 | atmega103 | atmega163 

 
Например,  
.device atmega163   

; выбираем atmega163  

О

Р Г А Н И З А Ц И Я   И   Р Е З Е Р В И Р О В А Н И Е   П А М Я Т И

 

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

памяти,  в  которой  размещаются  программы,  называют  сегментом  кода,  область  памяти 
данных – сегментом  данных,  а  область  энергонезависимой  памяти  данных – сегментом 
EEPROM.  Сегмент  кода  описывается  директивой CSEG, сегмент  данных – директивой 
DSEG, а сегмент EEPROM – ESEG. 

cseg  

Директива cseg (Code segment)  определяет  начало  сегмента  кода.  Файл 

ассемблера может состоять нескольких сегментов, которые связаны в одну программу. В 
пределах  сегмента  кода cseg нельзя  использовать  директиву byte. Для  размещения 
программ в сегменте кода используется директива org (см. далее). Директива cseg не имеет 
параметров. 

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

начало сегмента данных 

 

41 

vartab: .byte 4 

; резервируется 4 байта в sram  

.cseg  

 

; начало сегмента кода 

const: .dw 2   

; запись $0002 в память программ 

mov r1,r0  

пересылка  

dseg 

Директива dseg (Data segment)  определяет  начало  сегмента  данных.  Файл 

ассемблера  может  содержать  несколько  сегментов  данных.  Сегмент  данных  обычно 
состоит  только  из  директив byte. Для  размещения  переменных  в  определенных  байтах 
SRAM может использоваться директива org. Директива не имеет никаких параметров. 

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

 

; начало сегмента данных  

var1:  .byte 1  

;  резервируем 1 байт по адресу  var1 

table:  .byte tab_size   ; резервируем tab_size бай.  
.cseg  
ldi r30,low(var1)    

; запись в младший байт регистра z   

ldi r31,high(var1)    

; запись в старший байт регистра z   

ld r1,z  

 

; пересылка из  var1 в r1  

 

eseg -  

Директива eseg (EEPROM Segment) определяет начало сегмента EEPROM. Файл 

ассемблера  может  содержать  несколько  сегментов EEPROM. Сегмент EEPROM обычно 
состоит только из директив db и dw. Для размещения данных в сегменте EEPROM может 
использоваться директива org. Директива eseg не имеет параметров. 

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

 

; начало сегмента данных 

var1:   .byte 1          

; резервируется 1 байт для var1 

table:  .byte tab_size    ; резервируется tab_size байт  
.eseg  
eevar1: .dw 0xffff  

; инициализируется 1 слово в eeprom  

byte  

Директива byte (Reserve bytes to a variable)  резервирует  байты  в  памяти  данных 

(SRAM).  Директиве  должна  предшествовать  метка..  Директива  имеет  один  параметр, 
который  указывает  на  число  резервируемых  байт.  Директива  может  быть  использована 
только пределах сегмента данных (см. директиву dseg).  

Синтаксис:  
label: .byte expression  

 

42 

Например,  
.dseg  
var1:    .byte 1  

; резервируется 1 байт для var1 

table:   .byte tab_size  ; резервируется tab_size байт  
.cseg  
ldi r30,low(var1)   

; загрузка младшего байта регистра z  

ldi r31,high(var1)  

; загрузка старшего байта регистра z  

ld r1,z  

загрузка var1 из регистра 1  

О

П Р Е Д Е Л Е Н И Е   П Е Р Е М Е Н Н Ы Х

 

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

Они указывают ассемблеру, что в соответствующем месте памяти программ или EEPROM 
располагается  переменная,  устанавливают  её  тип  (байт или двухбайтное слово), задают 
начальные  значения  и  ставят  в  соответствие  переменным  метки,  которые  впоследствии 
можно использовать при обращении к данным. 

db  

Директива db (Define constant byte(s) in program memory and EEPROM ) определяет 

константы в памяти программ или EEPROM. Директиве db должна предшествовать метка. 
Директива db использует  список  выражений,  содержащий,  по  крайней  мере,  одно 
выражение.  Директива db должна  быть  размещена  в  сегменте  кода    или  в  сегменте 
EEPROM.  

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

Каждое  выражение  должно  иметь  значение  в  пределах  –128….255.  Если  выражение 
является отрицательным числом, оно будет представлено в дополнительном коде.  

Если директива db расположена в сегменте программы cseg и список выражений 

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

Синтаксис:    
label:  .db expressionlist 
Например,  
.cseg  
consts: .db 0, 255, 0b01010101, -128, $aa  
.eseg  
const2: .db 1,2,3  

dw  

Директива dw (Define constant word(s) in program memory and EEPROM) резервирует 

слово (2 байта)  в  памяти  программ  или EEPROM.  Директиве  должна  предшествовать 
метка.  Директива  использует  список  выражений,  состоящий  не  менее  чем  из  одного 
выражения.  Директива dw должна  быть  размещена  в  сегменте  кода  или  в  сегменте 
EEPROM.  

 

 

 

 

 

 

 

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