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

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

Да тоже не проблема, считай только циклы, или отладочный счетчик циклов добавь(+)

Отправлено =AVR= 23 декабря 2006 г. 13:34
В ответ на: Можно ожидать неудобства в отладке. Но это, если рекурсия замороченная. отправлено quark 23 декабря 2006 г. 13:19

Можно посмотреть вот это в симуляторе - все прекрасно отлаживается:


.nolist
#include "m88def.inc"
.list

main:
ldi r16,low(ramend) ;Stack initialization
out spl,r16
ldi r16,high(ramend)
out sph,r16

ldi r16,$FF&('K' << 1)|('e' >> 6)
ldi r17,$FF&('e' << 2)|('y' >> 5)
ldi r18,$FF&('y' << 3)|('b' >> 4)
ldi r19,$FF&('b' << 4)|('o' >> 3)
ldi r20,$FF&('o' << 5)|('a' >> 2)
ldi r21,$FF&('a' << 6)|('r' >> 1)
ldi r22,$FF&('r' << 7)|('d' >> 0)
ldi r23,0

rcall unpack

foo:
rjmp foo

;--------------------------------------------------------------------------------------------------------
; Autorecursive 7-bit stream-to-byte unpacking routine
; Input = 0:aaaaaaab 1:bbbbbbcc 2:cccccddd 3:ddddeeee 4:eeefffff 5:ffgggggg 6:ghhhhhhh
; Output = 0:0aaaaaaa 1:0bbbbbbb 2:0ccccccc 3:0ddddddd 4:0eeeeeee 5:0fffffff 6:0ggggggg 7:0hhhhhhh
; 15 program words, 84 cycles (5.25 uS @16 MHZ)
unpack:
ldi ZH,high(iter1) ;Initialize iteration entry address pointer
ldi ZL,low(iter1)
ldi r24,low(it_lim) ;Set recursion limit checkpoint

; Iter.1 Iter.2 Iter.3 Iter.4 Iter.5 Iter.6 Iter.7 Iter.8
iter1: lsr r16 ;0aaaaaaa --//-- --//-- --//-- --//-- --//-- --//-- --//--
iter2: ror r17 ;bbbbbbbc 0bbbbbbb --//-- --//-- --//-- --//-- --//-- --//--
iter3: ror r18 ;ccccccdd cccccccd 0ccccccc --//-- --//-- --//-- --//-- --//--
iter4: ror r19 ;dddddeee ddddddee ddddddde 0ddddddd --//-- --//-- --//-- --//--
iter5: ror r20 ;eeeeffff eeeeefff eeeeeeff eeeeeeef 0eeeeeee --//-- --//-- --//--
iter6: ror r21 ;fffggggg ffffgggg fffffggg ffffffgg fffffffg 0fffffff --//-- --//--
iter7: ror r22 ;gghhhhhh ggghhhhh gggghhhh ggggghhh gggggghh gggggggh 0ggggggg --//--
iter8: ror r23 ;h0000000 hh000000 hhh00000 hhhh0000 hhhhh000 hhhhhh00 hhhhhhh0 0hhhhhhh

it_lim: adiw ZH:ZL,1 ;Advance iteration entry pointer
cpse ZL,r24 ;Check for recursion limit, exit if reached. Note that CY is cleared - see below
ijmp ;Do next iteration (iter+1) recursively. ROR becomes LSR because CY = 0 on entry

ret
;--------------------------------------------------------------------------------------------------------



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

Ответы


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

Сообщение:

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

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

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

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