Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Вот тебе на десерт(+)

Отправлено MBedder 24 октября 2009, г. 03:05
В ответ на: Спасибо ;) Я в свободное время пытаюсь наверстать упущенное, но чтоб не было скучно просто изучать, изучаю на домашних примитивных проектах..:) отправлено пользователем Fantomas 24 октября 2009, г. 00:51


;---------------------------------------------------------------------------------
; Useful defines, equates and macros:
;---------------------------------------------------------------------------------
; Register aliases:
.def nul = r2 ; Zero (0x00) value register - must be cleared in init
.def one = r3 ; One (0x01) value register - must be initialized to 1 in init
.def stsav = r4 ; SREG save register
.def tmp = r16 ; Temporary register
.def tmp2 = r17 ; Temporary register 2

; Constant equates:
.equ fosc = 16000000 ; Clock oscillator frequency, Hz
.equ mips = fosc/1000000 ; MIPS
.equ baud = 9600 ; Baud rate, Baud - useful for delay subroutines
.equ brrval = (fosc/(16*baud))-1 ; Calculated UBRR value - no need to do it manually

; Literal substitutes:
#define @ 1<< ; Now (@ foo) can be used instead of (1 << foo)

;---------------------------------------------------------------------------------
.macro ldiw
; Writes a 16-bit immediate value to a 16-bit xyzH/xyzL register pair.
; Usage: ldiw X[or Y, or Z],value.
ldi @0H,high(@1)
ldi @0L,low(@1)
.endm
;.................................................................................

.macro outi
; Writes a 8-bit immediate value to an 8-bit i/o SFR.
; Usage: outi IOREG8,value.
; Uses/trashes a tmp register for operation.
ldi tmp,@1
out @0,tmp
.endm
;.................................................................................

.macro outiw
; Writes a 16-bit immediate value to a 16-bit xxxH/xxxL i/o SFR pair.
; Usage: outiw IOREG16,value.
; Uses/trashes a tmp register for operation.
ldi tmp,high(@1) ; @1 = second macro argument,
out @0H,tmp ; @0 = first macro argument.
ldi tmp,low(@1) ; Up to 10 macro arguments can be used (@0...@9)
out @0L,tmp ; H/L is appended to an argument literally
.endm
;.................................................................................

.macro adi
; Adds 8-bit immediare value to a high register
; Usage: adi r16{or r17...r31],value
subi @0,-@1
.endm
;.................................................................................

.macro adci
; Adds 8-bit immediare value and carry to a high register
; Usage: adci r16{or r17...r31],value
sbci @0,-@1
.endm
;.................................................................................

.macro addiw
; Adds 16-bit immediare value to a L/H named register pair
; Usage: addiw W[or X, Y, Z],value
subi @0L,low(-@1)
sbci @0H,high(-@1)
.endm
;.................................................................................

;---------------------------------------------------------------------------------
; Usage examples:
msg1:
.db "This is a message"
Code:
clr nul ; Initialize zero (0x00) holding byte register
clr nul ; Initialize constant (0x01) holder byte register

ldiw z,msg1*2 ; Load a msg1 BYTE address to ZH:ZL
outi UBRR,brrval ; Load a 8-bit i/o register with immediate 8-bit value
outi ADMUX,(@ REFS0)|(@ ADLAR)|(4<<MUX0) ; Example: ADC setup: Vref = int, left adjust, ADC input = PINA4
outiw SP,RAMEND ; Load a 16-bit i/o register with immediate 16-bit value
adi temp,0xAB ; Add 8-bit immediate to an 8-bit register
adci temp2,0xCD ; Add 8-bit immediate to an 8-bit register with carry
addiw x,0x1234 ; Add 16-bit immediate to a 16-bit register pair (XH:XL, YH:YL, ZH:ZL)

add xl,temp ; Add 8-bit register to 16-bit register pair (XH:XL = XH:XL + temp)
adc xh,nul ;

cp r0,one ; Compare an 8-bit register to "1"

ISRexample:
in stsav,SR ; Save Status Register
; Your ISR code goes here
out SR,stsav ; Restore Status Register
reti
;---------------------------------------------------------------------------------



Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 6 на 2:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru