[an error occurred while processing this directive]
Может этот опус поможет
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено _Bill 21 декабря 2005 г. 14:20
В ответ на: Ответ: отправлено <font color=gray>Kanzler</font> 21 декабря 2005 г. 14:09

А вообще, вот пример:


;********************************************************
;* *
;* (c) Copyright Êíÿçåâ Â.À. 2004 *
;* *
;* *
;********************************************************
;
; File: rand.s90
;
; 08-Sep-05 BK Initial edit
; 28-Sep-05 BK Last update
;
;
; ** ENTRY$ -- âõîä â ïðîöåäóðó (ôóíêöèþ)
;
; Îïèñàíèå:
; Ìàêðîêîìàíäà îïðåäåëÿåò name êàê ãëîáàëüíóþ òî÷êó âõîäà â ïðîöåäóðó
; èëè ôóíêöèþ.
;
; Âûçîâ: ENTRY$ name
;
ENTRY$ macro name
public name
name:
endm

rseg CODE ; Code segment
;
;
ENTRY$ Rand
ldi r30, LOW(_rand) ; Point at random number
ldi r31, HIGH(_rand) ;
tst r16 ; See the seed value
breq _1 ; Branch if zero

clr r17 ; Initialize the generator
clr r18 ; and return initial value
clr r19 ;
rjmp _2 ;

_1: ; Calculate new random number
ld r16, Z ; Load the previous value into registers
ldd r17, Z+1 ;
ldd r18, Z+2 ;
ldd r19, Z+3 ;
eor r16, r19 ; Calculate feedback bit
bst r16, 6 ;
eor r16, r19 ;
lsl r16 ; Shift the number left
rol r17 ;
rol r18 ;
rol r19 ;
andi r19, ~(1<<7) ; Clear high (sign) bit
bld r16, 0 ; Insert feedback bit in the new value
_2: st Z, r16 ; Save the number
std Z+1, r17 ;
std Z+2, r18 ;
std Z+3, r19 ;
ret

rseg NEAR_Z ; Data segment

_rand: ; Random number
ds 4 ;

end



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru