roboforum.ru

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

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

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

ALHIMIK » 04 мар 2010, 20:13

а BAUD RATE компа и мк совпадают ?

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

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

Наверняка да.

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

Qerio » 04 мар 2010, 20:21

поржал над своим прошлым кодом )).

Код: Выделить всёРазвернуть
si8:      
         ldi r16,'1'
         SBIS UCSRA,UDRE      
         RJMP si8
         sbi UCSRB, TXB8
         OUT   UDR, R16

aaa:      ldi r16,'2'
         SBIS UCSRA,UDRE      
         RJMP aaa
         sbi UCSRB, TXB8
         OUT   UDR, R16
         
bbb:      ldi r16,'3'
         SBIS UCSRA,UDRE      
         RJMP bbb
         sbi UCSRB, TXB8
         OUT   UDR, R16
         
                  ret


3k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k1
23k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k1
23k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k123k1
23k123k123k123k123k123k123k123k123k123k123k123k123k1љ3k123k123k123k123k123k123k1
23k123k123k123k123k123k123k123k1љ3k1љ3k1™3k1љ3k123k123k123k123k123k123k123k123k1
23k1™3k1™3k123k1™3k123k123k123k123k1љ3k123k1™3k123k1™3k1љ3k123k123k1™3k123k1™3k1
23k1™3k123k1љ3k123k123k123k123

Сделал с начало тагже тока reti попробовал вроде тагже тупила потом пенял на ret и если не глючит стал работать нормальней .. возможно что это изза кривова применениЯ reti ???

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

Victorovych » 04 мар 2010, 20:22

А чем тх комплит не приглянулся? тхв8 - это на случай девятибитной передачи, тогда именно нужно смотреть очистку удр и впихивать его туда
а передачу второго байта нужно делать по тхс=1 причем потом его зачистить надо - это если руцями, логичнее следующий байт слать по прерыванию тхс

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

Qerio » 04 мар 2010, 20:28

черт ,, ТОЧНО... так и есть надо слать по прирыванию txc а так он отсылает их но так быстро что терминал склеивает их вот и вылетают русские сиволы .. ладно убегаю на треньку вот досада не успеваю протестить, потом отпешусь..

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

boez » 05 мар 2010, 00:33

Хм. Все время для передачи пользовался UDRE на аврках - проблем не было никогда... Использование TXC уменьшит реальную скорость передачи - дырки могут появиться между байтами. Кстати, может в этом и дело, может там 2 стопбита надо?

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

Qerio » 05 мар 2010, 01:21

Спасибо вам ребята выручили, отдельный респект Victorovych .

выкладываю конечный на 100% рабочий код может кому пригодится.

Код: Выделить всёРазвернуть
.include "m8def.inc"
         
         ;инициализация таблицы прерываний
rjmp init
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp t1      ;RXCIE(UCSRB)    RXC(UCSRA) Прерывания прием по USART завершен.
reti
reti
reti
reti
reti
reti
reti



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

init:       ;инициалищация уарт
         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

         ;разрешения режима sleep
         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,0      ; Скважность 0%
         OUT   OCR1BL,R16


         ;разрешения прерываний
         sei


         ; укладываем мк спать , подьём по прерыванию.
pause:      sleep
         rjmp pause

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

t1:         in r16,UDR


uart_snt:   SBIS UCSRA,UDRE      
         RJMP uart_snt
         OUT   UDR, R16
            
         cpi r16,'k'
         breq si8

         cpi r16,'z'
         breq ledon

         cpi r16,'x'
         breq ledoff

         cpi r16,'+'
         breq plus

         cpi r16,'-'
         breq min
         
         cpi r16,'9'
         breq speed9
         
         cpi r16,'1'
         breq speed1

         cpi r16,'0'
         breq speed0

         cpi r16,'q'
         breq mot1left

         cpi r16,'w'
         breq mot1stop

         cpi r16,'e'
         breq mot1right

         cpi r16,'a'
         breq mot2left

         cpi r16,'s'
         breq mot2stop

         cpi r16,'d'
         breq mot2right         

                  
         reti
;============================================================================================

si8:      
         ldi r16,'1'
         SBIS UCSRA,UDRE      
         RJMP si8
         SBIS UCSRA,TXC
         RJMP si8
         sbi UCSRA, TXC
         OUT   UDR, R16

aaa:      ldi r16,'2'
         SBIS UCSRA,UDRE      
         RJMP aaa
         SBIS UCSRA,TXC
         RJMP aaa
         sbi UCSRA, TXC
         OUT   UDR, R16
         
bbb:      ldi r16,'3'
         SBIS UCSRA,UDRE      
         RJMP bbb
         SBIS UCSRA,TXC
         RJMP bbb
         sbi UCSRA, TXC
         OUT   UDR, R16
         
         reti



ledon:      ldi r16,0b00000010
         out PORTC,r16
         reti

ledoff:      ldi r16,0b00000000
         out PORTC,r16
         reti

plus:      in r16,OCR1BL
         inc r16      
         OUT   OCR1BL,R16
         reti

min:      in r16,OCR1BL
         dec r16      
         OUT   OCR1BL,R16
         reti

speed9:      LDI   R16,255      
         OUT   OCR1BL,R16
         reti

speed1:      LDI   R16,150   
         OUT   OCR1BL,R16
         reti

speed0:      LDI   R16,0
         OUT   OCR1BL,R16
         reti

mot1left:   cbi portC, 5
         sbi portC, 4
         reti

mot1stop:   cbi portC, 4
         cbi portC, 5
         reti

mot1right:   cbi portC, 4
         sbi portC, 5
         reti


mot2left:   cbi portC, 3
         sbi portC, 2
         reti

mot2stop:   cbi portC, 2
         cbi portC, 3
         reti

mot2right:   cbi portC, 2
         sbi portC, 3
         reti

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

Qerio » 05 мар 2010, 10:23

Люди киньте пожалуста куски кода, как вы реализивали эту задачу(отправка по uart нескольких символов).

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

Victorovych » 05 мар 2010, 11:12

Тупо и цинично :D
Вложения
nod.rar
(1.25 КиБ) Скачиваний: 7


Rambler\'s Top100 Mail.ru counter