sasha_1973 у меня вопрос по теме "Исследование USART"
а именно "Связь по USART 4 х Atmega2560"
там при передаче пакета USART "сьедает" нулевой байт в пакете. как побороть эту беду?
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Связь проводная и бесп-ная, интерфейсы, протоколы » Вопрос по теме Исследование USART
sasha_1973 у меня вопрос по теме "Исследование USART"
а именно "Связь по USART 4 х Atmega2560"
там при передаче пакета USART "сьедает" нулевой байт в пакете. как побороть эту беду?
там при передаче пакета USART "сьедает" нулевой байт в пакете. как побороть эту беду?
Вы имели ввиду, byte = 0 или самый первый байт или что-то ещё ?
извиняюсь, был в командировке , не было возможности ответить..
все вроде решил:
в коде отправки в usart
......
Loadadr Usart_3_output_buffer_str , X
!add R26 , R16
!clr R16
!adc R27 , R16
!ld R16 , X
!cpi R16 , 0
!BRNE Transmitter_sumbol_usart_3
!lds R16 , Ucsr3b
!andi R16 , &B_1101_1111
!sts Ucsr3b , R16
!rjmp Exit_transmitter_data_usart_3
Transmitter_sumbol_usart_0:
..............
завенил на
......
!sts {Usart_3_count_transmitter} , R16
If Usart_3_count_transmitter = N_byte Then Goto Ttt2
Loadadr Usart_3_output_buffer_str , X
!add R26 , R16
!clr R16
!adc R27 , R16
!ld R16 , X
!jmp Transmitter_sumbol_usart_3
!cpi R16 , 254
!BRne Transmitter_sumbol_usart_3
Ttt2:
!lds R16 , Ucsr3b
!andi R16 , &B_1101_1111
!sts Ucsr3b , R16
!rjmp Exit_transmitter_data_usart_3
....
и все заработало, теперь посылка ограничивается не символом chr(13) а колвом байт N_byte
и все заработало, теперь посылка ограничивается не символом chr(13) а колвом байт N_byte
Чудненько, НО есть маленькое, или ОГРОМНОЕ НО !!!
Использовать синтаксис Bascom там, где используется инструкция Nosave, не совсем правильно, точнее, совсем не правильно.
Вам просто повезло, что Bascom использовал регистр "R16" для "If Usart_3_count_transmitter = N_byte Then Goto Ttt2", в другой раз, везение закончится и начнётся геморрой.
ага, а можно примерчик как правильно? я уже ломал голову но я в асме не очень ..
а можно примерчик как правильно?
'===============================================================================
Usart_3_output_data:
'-------------------------------------------------------------------------------
!Push R16
!In R16 , Sreg
!Push R16!in R16 , RAMPZ
!Push R16!push R26
!push R27!lds R16 , {Usart_3_count_transmitter}
!inc R16
!sts {Usart_3_count_transmitter} , R16'If Usart_3_count_transmitter = 10 Then Goto Ttt2
!lds R26 , {N_byte}
!cp R16 , R26
!BREQ Ttt2 'Перейти если равноLoadadr Usart_3_output_buffer_str , X
!add R26 , R16
!clr R16
!adc R27 , R16
!ld R16 , X
!jmp Transmitter_sumbol_usart_3
!cpi R16 , 254
!BRne Transmitter_sumbol_usart_3Ttt2:
!lds R16 , Ucsr3b
!andi R16 , &B_1101_1111
!sts Ucsr3b , R16!rjmp Exit_transmitter_data_usart_3
Transmitter_sumbol_usart_3:
!sts udr3 , R16Exit_transmitter_data_usart_3:
!pop R27
!pop R26!pop R16
!out RAMPZ , R16!pop R16
!Out Sreg , R16
!Pop R16!reti
'-------------------------------------------------------------------------------
Return
'===============================================================================
Вы здесь » Программирование ATMEL в BASCOM. » Связь проводная и бесп-ная, интерфейсы, протоколы » Вопрос по теме Исследование USART