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

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

Помогите найти ошибку в коде (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
Qerio
 
Сообщения: 11
Зарегистрирован: 04 мар 2010, 16:00
прог. языки: asm, C, php, paskal

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

Сообщение avr123.nm.ru » 04 мар 2010, 17:33

Вы попробуйте в PROTEUS посимулировать там можно реально обмен с ПК отследить и даже подключиться к реальному COM порту ПК - http://proteus123.narod.ru
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

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

Сообщение Duhas » 04 мар 2010, 17:55

на счет почему символы - слету хз... а вот почему reti ? это же выход из прерывания...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение avr123.nm.ru » 04 мар 2010, 18:14

это не выход из прерывания, это возврат из подпрограммы с разрещением прерываний глобально - установка бит_7 в SREG.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

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

Сообщение Duhas » 04 мар 2010, 18:15

читаем список команд из ДШ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение blindman » 04 мар 2010, 18:25

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

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

Добавлено спустя 5 минут 47 секунд:
На первый взгляд вроде должно работать, если не считать что расшифровывать вот такое нету никакого желания
Код: Выделить всё
ldi r16,0b11111000   
out UCSRB,r16       
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Qerio » 04 мар 2010, 18:28

нету не только желания но и надобности( возмлжно в силу малого опыта ошибаюсь но помоему....) , так как символы и отправляют и принмаются успешно проблемы возникают именно когда пытаюсь отправить два символа подряд .
Qerio
 
Сообщения: 11
Зарегистрирован: 04 мар 2010, 16:00
прог. языки: asm, C, php, paskal

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

Сообщение blindman » 04 мар 2010, 18:31

Ну, не надо, так не надо
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение avr123.nm.ru » 04 мар 2010, 18:48

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

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

Попробуйте код из даташит.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

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

Сообщение Qerio » 04 мар 2010, 19:29

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

походу это от того что он склеивает байти
Qerio
 
Сообщения: 11
Зарегистрирован: 04 мар 2010, 16:00
прог. языки: asm, C, php, paskal

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

Сообщение Victorovych » 04 мар 2010, 19:50

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

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

Сообщение ALHIMIK » 04 мар 2010, 19:58

2 Victorovych неа
мб стоит сбрасывать\устанавливать TXB8 ?
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

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

Сообщение Qerio » 04 мар 2010, 20:02

Будте добры болие подробно ... как отправить по TXT ?
Qerio
 
Сообщения: 11
Зарегистрирован: 04 мар 2010, 16:00
прог. языки: asm, C, php, paskal

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

Сообщение ALHIMIK » 04 мар 2010, 20:07

вот -
345.JPG
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

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
непомгло тагже лагает .
Qerio
 
Сообщения: 11
Зарегистрирован: 04 мар 2010, 16:00
прог. языки: asm, C, php, paskal

След.

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

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

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