roboforum.ru

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

Помогите найти ошибку в коде (asm)

Помогите найти ошибку в коде (asm)

Qerio » 04 мар 2010, 17:04

Здрвствуйте. Хочу сделать робо манипулятор и вроде все потехоньку получалось, но этот вопросы уже третий день не могу решить. Подскажите пожалуйста что не так, буду оч рад обьективной критики. Попрошу сильно не пинать , всётоки первый пост на форуме .

Схема предстовляет из себя Atmega8 + L293D(пара калекторных электроматоров) + max232 . Работает таким образом, я отправляю через терминал символ, мк отправляет его обратно и выполняет подпрограмму этого символа( скважность шим , управления драйвером моторочиков). Все в общем работало как надо, но когда я в подпрограмме (si8:) указал отправить на пк символ (t) в терминал приходит кракозябра (єієіє»єkt·єµ) а должны приходить (kt). Не как не могу понять почему это происходит, вед отправка осуществляется тока после проверки на пустой UDR . Темболие этот-же код отправляет символ обратно и все работает без сбоев.


Компилятор - AvrStudio


Код: Выделить всёРазвернуть
.include "m8def.inc"

rjmp init
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp t1
reti
reti
reti
reti
reti
reti
reti



;================================

init:   

;инициализация uart
         LDI r16, low(47)
         OUT UBRRL,r16
         LDI r16, high(47)
         OUT UBRRH,r16

         ldi r16,0b11111000   
         out UCSRB,r16       
         
         ldi r16,0b10000110   
         out UCSRC,r16   

         
         ldi r16,0b11111111
         out   DDRB,r16

         ldi r16,0b00000000
         out   PORTB,r16


         ldi r16,0b11111110
         out   DDRC,r16

         ldi r16,0b00000001
         out   PORTc,r16


         ldi r16,0b00100000
         out MCUCR,r16

;         SBI      DDRB,1
         SBI      DDRB,2

         LDI   R16,(0<<COM1A1)|(1<<COM1B1)|(1<<WGM10)   ; Инициализация PWM
         OUT   TCCR1A, R16

         LDI   R16,(1<<WGM12)|(1<<CS10)       ; Режим Fast PWM   
         OUT   TCCR1B, R16

         LDI   R16,100      ; Скважность 0%
         OUT   OCR1BL,R16


         sei

      

; и понеслась


pause:         sleep
         rjmp pause

;=========================================================================================
;t1- срабатывает по приходу символа
t1:         
         in r16,UDR


;отправляю символ обратно
uart_snt:   
         SBIS UCSRA,UDRE      
         RJMP uart_snt       
         OUT UDR, R16

;поиск подпрограммы, их в оригенале больше просто чтобы не отнимать ваше время сократил код.


         cpi r16,'k'
         breq si8
         
         reti



;============================================================================================

si8:      
         ldi r16,'t'
         SBIS UCSRA,UDRE      
         RJMP si8
         OUT UDR, R16
         reti






Если когонебудь из начинающих интерисует данная тема обращайтесь буду рад помоч ICQ 2003751 .
В данный момент реализованна программа на Delphi7(на уровне терминала) для связи с мк и сам мк с несложным обвесом.
Планируется усовршеснтвовать прогу на делфи чтобы она использовала своего рода списки, где каждая строчка содержит информацию какому мотору надо крутится и сколько , эти строки ( команды) будут отправлятся на мк он в совю очередь будет подсчитывать сколько оборотов сдел указанный движок и сообщать о результатах обратно.
А списки будут создаватся путем ручного перемещения манипулятора и сохранения кардинат всех осей.
Вложения
prog2.rar
Архив с проектом проги
(5.31 КиБ) Скачиваний: 1

Re: Помогите найти ошибку в коде (asm)

avr123.nm.ru » 04 мар 2010, 17:33

Вы попробуйте в PROTEUS посимулировать там можно реально обмен с ПК отследить и даже подключиться к реальному COM порту ПК - http://proteus123.narod.ru

Re: Помогите найти ошибку в коде (asm)

Duhas » 04 мар 2010, 17:55

на счет почему символы - слету хз... а вот почему reti ? это же выход из прерывания...

Re: Помогите найти ошибку в коде (asm)

avr123.nm.ru » 04 мар 2010, 18:14

это не выход из прерывания, это возврат из подпрограммы с разрещением прерываний глобально - установка бит_7 в SREG.

Re: Помогите найти ошибку в коде (asm)

Duhas » 04 мар 2010, 18:15

читаем список команд из ДШ...

Re: Помогите найти ошибку в коде (asm)

blindman » 04 мар 2010, 18:25

Duhas писал(а):а вот почему reti ? это же выход из прерывания...

потому что джампом переходит из прерывания

Добавлено спустя 5 минут 47 секунд:
На первый взгляд вроде должно работать, если не считать что расшифровывать вот такое нету никакого желания
Код: Выделить всёРазвернуть
ldi r16,0b11111000    
out UCSRB,r16       

Re: Помогите найти ошибку в коде (asm)

Qerio » 04 мар 2010, 18:28

нету не только желания но и надобности( возмлжно в силу малого опыта ошибаюсь но помоему....) , так как символы и отправляют и принмаются успешно проблемы возникают именно когда пытаюсь отправить два символа подряд .

Re: Помогите найти ошибку в коде (asm)

blindman » 04 мар 2010, 18:31

Ну, не надо, так не надо

Re: Помогите найти ошибку в коде (asm)

avr123.nm.ru » 04 мар 2010, 18:48

Qerio писал(а): именно когда пытаюсь отправить два символа подряд .

Наверно проц матерится ! :ROFL:

Попробуйте код из даташит.

Re: Помогите найти ошибку в коде (asm)

Qerio » 04 мар 2010, 19:29

попробовал заменить символ 't' на '0' теперь выдаед
µ˜·˜µ˜µ˜k0і˜k0і˜»˜µ˜k0-滘k0»˜-滘і˜µ˜µ˜і˜k0k0»˜µ˜µ˜µ˜µ˜µ˜k0-浘k0k0і˜µ˜-淘»˜·˜»˜·˜»˜·˜»˜·
˜»˜·˜·˜»˜·˜»˜·˜»˜·˜»˜·˜»˜·˜»˜·˜»˜·˜·˜·˜µ˜·˜k0і˜-浘-淘k0k0k0k0k0і˜µ˜k0-浘

походу это от того что он склеивает байти

Re: Помогите найти ошибку в коде (asm)

Victorovych » 04 мар 2010, 19:50

может стоит отправлять второй не по UDRE, а по TXC?

Re: Помогите найти ошибку в коде (asm)

ALHIMIK » 04 мар 2010, 19:58

2 Victorovych неа
мб стоит сбрасывать\устанавливать TXB8 ?

Re: Помогите найти ошибку в коде (asm)

Qerio » 04 мар 2010, 20:02

Будте добры болие подробно ... как отправить по TXT ?

Re: Помогите найти ошибку в коде (asm)

ALHIMIK » 04 мар 2010, 20:07

вот -
345.JPG

Re: Помогите найти ошибку в коде (asm)

Qerio » 04 мар 2010, 20:12

попробовал

Код: Выделить всёРазвернуть
si8:      
         ldi r16,'1'
         SBIS UCSRA,UDRE      
         RJMP si8
         OUT   UDR, R16
         bclr TXB8
aaa         ldi r16,'2'
         SBIS UCSRA,UDRE      
         RJMP aaa
         OUT   UDR, R16
         bclr TXB8
bbb:         ldi r16,'3'
         SBIS UCSRA,UDRE      
         RJMP bbb
         OUT   UDR, R16
         bclr TXB8
                  reti
непомгло тагже лагает .


Rambler\'s Top100 Mail.ru counter