roboforum.ru

Технический форум по робототехнике.

Помогите,пожалуйста,разобраться в коде Ассемблера

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Angie » 07 дек 2010, 19:04

вот,это код на ассемблере,написанный для avr
хотелось бы понять его,ибо тяжко очень с пониманием того,что здесь происходит, не имея комментариев к каждой строчке)))

Код: Выделить всёРазвернуть
.include "m8def.inc" ; 
.org 0 //
   rjmp   RESET   
;   reti ;   reti
;   reti
;   reti

.equ   DD_MOSI = DDB3
.equ   DD_MISO = DDB4
.equ    DD_SCK  = DDB5
.equ    DDR_SPI = DDRB

RESET:
            ;
   ldi   r16,high(RAMEND) ;
   out   SPH,r16            ;
   ldi   r16,low(RAMEND)    
   out   SPL,r16

SPI_MasterInit: //
         
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
           
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret //
SPI_MasterTransmit:
         
out SPDR,r16
Wait_Transmit:
sbis SPSR,SPIF
rjmp Wait_Transmit
         
ret


SPI_SlaveInit:
           
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
             
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
         
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
           
in r16,SPDR
ret

timer:       
    ldi r18,9

loop:          ; prescaler Fosc/1
   ldi r16, (0<<ICNC1 | 0<<ICES1 | 0<<WGM13 | 0<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10)
            ;  ==   ldi r16, 0x07  ; == 00000100b
   out   TCCR1B, r16   

   ldi r16, (0<<COM1A1 | 0<<COM1A0 | 0<<COM1B1 | 0<<COM1B0 | 0<<FOC1A | 0<<FOC1B | 0<<WGM11 | 0<<WGM10)
            ; ==   ldi r16, 0x00
   out   TCCR1A, r16   

   in  r16, TIMSK   
   ori r16,1<<TOIE1 ; == 0000 0100 == 7 
            ; andi r16,~(1<<TOIE1) ; == 1111 1011 == 0xFB
   out   TIMSK, r16


            dec  r18     
   breq SPI_MasterInit
   rjmp loop
Angie
 
Сообщения: 4
Зарегистрирован: 07 дек 2010, 18:50

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Victorovych » 07 дек 2010, 20:25

какя-то фигня несвязная
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Angie » 07 дек 2010, 21:03

а что тут несвязного? сначала происходит инициализация стека,потом показывается,что передача происходит через SPI шину....а дальше уже сама программа
Angie
 
Сообщения: 4
Зарегистрирован: 07 дек 2010, 18:50

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Radist » 07 дек 2010, 21:04

Этот код работать не будет, разбираться в нем незачем. Кто-то что-то мутил с SPI. Сперва идет настройка стека, потом идут несколько подпрограмм, потом главный цикл. Вот только первая подпрограмма выполнится, а ее никто не вызывал, она попытается вернуться в точку вызова, которой нет - тут то программа и заглючит. Плюньте на это дело, не надо копаться в чужом глючном коде. Делайте свои глюки, зато вам будет все ясно. Изучайте даташиты, приходите на курсы - и будет вам счастье.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Angie » 07 дек 2010, 21:11

эх...вот этого я и ожидала,что там полный ппц будет...(
в программировании я полный ноль, а курсовик у нас такой вот веселый получается...
у меня есть цифровой термометр,где связь с ПК через RS-232 осуществляется,но,как я вижу в этом коде,тут вообще SPI шину инициализировать пытаются...ээх....печаль...
Angie
 
Сообщения: 4
Зарегистрирован: 07 дек 2010, 18:50

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Сергей » 07 дек 2010, 21:17

эм, если это курсовик, вам разве не рассказывали как его делать?
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Radist » 07 дек 2010, 21:18

Не время печалиться - сессия на носу :) . За вас никто из нас курсовик не напишет, но помочь мы можем. Нужно только чтобы вы дело делали, а тут задавали конкретные вопросы. Первое, что от вас нужно - это кратко сформулировать, что от вас требуется. Программа пишется под конкретное железо - значит надо привести схему вашей железки. Начнете делать - вопросов будет много. Только не спрашивайте КАК делать. На такой вопрос нельзя ответить кратко. Спрашивайте лучше: могу так сделать, могу эдак. Как лучше?
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Angie » 07 дек 2010, 21:34

есть МК Atmega8 и последовательный порт передачи данных RS-232.скорость передачи данных 115200 б/сек. тактовая частота процессора ( если это необходимо)=3.6864 МГц.хочется посмотреть в коде,как происходит инициализация этого RS-232 и процесс передачи данных. просто ума не приложу,как такое можно самой додумать!!!
Angie
 
Сообщения: 4
Зарегистрирован: 07 дек 2010, 18:50

Re: Помогите,пожалуйста,разобраться в коде Ассемблера

Сообщение Radist » 07 дек 2010, 21:39

Читаем отсюда и далее. Все просто, все по русски, есть примеры кода. Знаете ли английский? Есть еще куча инфы на буржуйском.
http://www.gaw.ru/html.cgi/txt/doc/micr ... 128/17.htm
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67