Страница 1 из 3

Прошу прощения, можно за комментировать

Добавлено: Пн май 02, 2011 23:18:16
Masredis
Прошу прощения за такую просьбу но просто не знаю куда деваться, и прошу вас о маленькой просьбе... Можно пожалуйста за комментировать код для ассемблера на AVR

собственно сам код .

Код: Выделить всё

.equ portb = 0x05;

.equ ddrb = 0x04; 

.equ pinb = 0x03;

.equ portc = 0x08
.equ ddrc = 0x07
.equ pinc = 0x06

.equ portd = 0x0b
.equ ddrd = 0x0a
.equ pind = 0x09


    SER R16  ;
	OUT ddrd,R16 ;
	LDI R16,0xC7   ;
	OUT ddrb,R16
	LDI R16,0x30
	OUT ddrc,R16


start:
    	LDI R16, 0xfe ; 
 	OUT portd, R16
	IN R17, pinc ;
	
	ANDI R17, 0x02                  
	BREQ led  
   
rjmp start

led:

call led0
call w1s

call led1
call w1s

call led2
call w1s

call led3
call w1s

call led4
call w1s



led0:

ldi r16, 0b11000110
out portd,r16    
sbi portb, 0   ;Set Bit in I/O Register       
cbi portb, 0	;Clear Bit in I/O Register
ret             ; Return k mestu otkuda vizvali

led1:
ldi r16, 0b10000110
out portd,r16    
sbi portb, 0         
cbi portb, 0
ret
            
led2:
ldi r16, 0b11000001
out portd,r16   
sbi portb, 0  ; podaet 1       
cbi portb, 0  ; podaet 0
ret              

led3:
ldi r16, 0b10000110
out portd,r16    
sbi portb, 0         
cbi portb, 0
ret 
            
led4:
ldi r16, 0b10001100
out portd,r16    
sbi portb, 0        
cbi portb, 0
ret                

w1s:

	PUSH R16;Push Register on Stack
	LDI R16,50
    V4:
	RCALL w20ms ;Relative Subroutine Call
	DEC R16 ;Decrement
	BRNE V4 ;
	POP R16 ;Pop Register from Stack
	RET



Re: Прошу прощения, можно за комментировать

Добавлено: Вт май 03, 2011 10:25:43
Jack_A
Аррррыгинальна. Вопрос для "Что? Где? Когда?" -- " У меня есть неведомо откуда взявшийся код. Внимание, вопрос : будет ли он работать, а если будет, то что он будет делать, и вообще на фига он мне сдался ?"
Спасибо, приколол. А самому написать слабо - хотя бы пресловутое помигание диодом ?

Re: Прошу прощения, можно за комментировать

Добавлено: Вт май 03, 2011 20:41:39
Masredis
Код для AVR ATMega88 =) Я не прошу его переделывать или проверять, просто написать что происходит с ним =) К примеру что значит SET или ANDI и всё =)

Re: Прошу прощения, можно за комментировать

Добавлено: Вт май 03, 2011 21:34:49
ut1wpr
Masredis писал(а):Код для AVR ATMega88 =) Я не прошу его переделывать или проверять, просто написать что происходит с ним =) К примеру что значит SET или ANDI и всё =)
А если открыть описание системы команд МК - не поможет? :)

Re: Прошу прощения, можно за комментировать

Добавлено: Вт май 03, 2011 23:43:12
Masredis
Поможет но к сожалению только частично :) Вот например - ANDI R17, 0x02 ;Logical AND Register and Constant - Вот что ANDI делает я не понимаю... :(

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 00:17:21
DX168B
ANDI - сброс указанных битов в нули, это если совсем кратко и на простом языке.
Аналогична ей команда AND. Но та берёт маску уже не с константы, а с другого регистра.
Примеры:

Код: Выделить всё

ldi r16, 0b11101111
andi r16, 0b10110000
;В r16 стало 0b10100000

ldi r16, 0b11101111
ldi r17, 0b11110000
and r16, r17
;В r16 стало 0b11100000
ЗЫ: В коде я не увидел инициализацию стека, а процедуры вызова есть.

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 07:47:20
Masredis
Еще можно чуток подсказок :)

Код: Выделить всё

PUSH R16;Push Register on Stack  - ?
	LDI R16,50
    V4:
	RCALL w20ms ;Relative Subroutine Call  - ?
	DEC R16 ;Decrement  - ?
	BRNE V4 ;Противоположная по смыслу инструкция, совершающая переход если флаг нуля сброшен (числа не равны) называется BRNE (Branch if Not Equal).
	POP R16 ;Pop Register from Stack - ?
PUSH
RCALL
DEC
POP

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 08:09:38
testerplus
Masredis писал(а):Еще можно чуток подсказок :)
PUSH
RCALL
DEC
POP
PUSH - Команда применяется для нажима на регистр (например PUSH R16 - нажать на регистр r16)
RCALL - relative subroutine call - позвать родственную подпрограмму
DEC - (от decimal) первести регистр в десятичную систему (и почему там decrement в коментарии?)
POP - это не знаю, никогда не пользовался


P.S. В армию!

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 09:01:55
DX168B
Жжоте. :))) :))) :))) :))) :))) :)))

PUSH - поместить регистр(точнее, его содержимое) в стек.
POP - извлечь содержимое из стека в регистр.
RCALL - урезанная команда вызова подпрограммы.
DEC - Декремент, или, уменьшить содержимое регистра на 1.

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 09:04:34
Psych
Ухахахахахаха :))) :)))
DX168B Нет у вас не правильно))) Первый вариант намного веселей)

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 09:14:48
DX168B
Я тоже так подумал. :))) :))) :))) :)))

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 09:59:54
kras
Тестера в армию))) Никто круче не напишет:)

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 11:46:26
urry
Cпасибо, поржал :)
Тестера в армию, говоришь ? И это пишет жертва Карабельникова. :)
Погугли вначале, на кого булочку крошишь, www.pic24.ru, например...

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 11:59:17
ploop
ANDI - сброс указанных битов в нули, это если совсем кратко и на простом языке.
Аналогична ей команда AND. Но та берёт маску уже не с константы, а с другого регистра.
В данном случае да, это как бы наиболее частое его применение, а в общем - не совсем корректно.
Правильнее - логическое (побитовое) "И", т.е. бит в результате будет установлен, только если бит в первом И втором операнде установлен.
AND в качестве операндов принимает два регистра, ANDI - регистр и константу.

(DX168B - это не тебе замечание, а автору пояснение :) )

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 12:09:30
DX168B
Ну я так и понял. :) Это я так.... по простому. :)
Операция похожа на работу простого логического элемента "И"
Единица на выходе будет только тогда, когда на обоих входах элемента лог. 1
Если хотя-бы на одном из входов будет ноль, то и на выходе будет ноль.
Так-же и тут: Единица в бите результата будет только тогда,
когда в обоих операндах, в тех-же битах стоят единицы,
если хотя-бы в одном операнде будет ноль в бите, то и в результате будет ноль.

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 13:15:15
Мурик
urry писал(а):Cпасибо, поржал :)
Тестера в армию, говоришь ? И это пишет жертва Карабельникова. :)
Погугли вначале, на кого булочку крошишь, http://www.pic24.ru, например...
Спасибо, я тоже поржал. :)))
И с интерпретации тестера и с вашего высказывания. :hunger:

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 15:34:13
SubDia
testerplus писал(а): PUSH - Команда применяется для нажима на регистр (например PUSH R16 - нажать на регистр r16)
RCALL - relative subroutine call - позвать родственную подпрограмму
DEC - (от decimal) первести регистр в десятичную систему (и почему там decrement в коментарии?)
POP - это не знаю, никогда не пользовался
:))) :)))
Жесть, я аж ПЛИСину под стол уронил со смеху и полчаса в пыли ползал в ее поисках.
Кстати, у меня вопрос: "RCALL w20ms ;Relative Subroutine Call" - чойта такое? Где сама w20ms в тексте?
Такое ощущение, что вышеприведенная программа - эдакая дикая аппликация, собранная по нитке на просторах ру(и не только ру)нета.

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 16:02:04
testerplus
SubDia писал(а):Где сама w20ms в тексте?
Так тут и выложат весь исходник! Чтобы потом каждый халявщик бабло срубал?

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 16:12:14
murzila
kras писал(а):Тестера в армию)))
Это Вас, милейший, надо бы туда определить. Одна тема «Программирование МК без ассемблера и готовых приложений» чего стоит!

Re: Прошу прощения, можно за комментировать

Добавлено: Ср май 04, 2011 16:19:22
SubDia
testerplus писал(а):Так тут и выложат весь исходник! Чтобы потом каждый халявщик бабло срубал?
:))) Ах же ж..а я-то уже мешки побег заготавливать, под бабло-то оно мешков много понадобится. =)
А если серьезно, то мне кажется, что этот весь "код" - это все, что есть у автора.