проблема с UART attiny2313
проблема с UART attiny2313
Помогите пожалуйста, пишу midi синтезатор и пытаюсь разобраться с UART. Не принимает старший бит(всегда 0). По спецификации каждое сообщение состоит из нескольких байт: ведущий начинается с единицы, остальные с нуля, этот код выводит все подряд, но даже так светодиод моргает если в предыдущих байтах присутствовала единица. Смотрел вход RX - фронты не смазаны, поэтому с аппаратной частью все должно быть ок. Уже раз 10 перепроверил все настройки UART. Тактируется все от 20 МГц кварца, подключил еще сдвиговый регистр со светодиодами для отладки(функция send и регистр led для нее, с ней проблем нет, я проверял)
.include "2313def.inc"
.def temp = r16
.def led = r17
.org 0x0000
rjmp reset
reset:
ldi temp, RAMEND
out spl, temp
sbi DDRD, PD6
ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
ldi temp, 0
out UBRRH, temp
ldi temp, 39
out UBRRL, temp
ldi temp, (0b00000000)
out UCSRA, temp
ldi temp,(1<<UCSZ1|1<<UCSZ0)
out UCSRC, temp
ldi temp, (1<<RXEN)
out UCSRB, temp
rjmp main
main:
sbic UCSRA, RXC
rcall UART
rjmp main
UART:
in temp, UDR
mov led, temp
;sbrc temp, 7
rcall send
ret
send:
cbi PORTB, PB3
sbrs led, 7
cbi PORTB, PB0
sbrc led, 7
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 6
cbi PORTB, PB0
sbrc led, 6
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 5
cbi PORTB, PB0
sbrc led, 5
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 4
cbi PORTB, PB0
sbrc led, 4
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 3
cbi PORTB, PB0
sbrc led, 3
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 2
cbi PORTB, PB0
sbrc led, 2
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 1
cbi PORTB, PB0
sbrc led, 1
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 0
cbi PORTB, PB0
sbrc led, 0
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbi PORTB, PB3
ret
Upd: Всем спасибо, проблема видимо действительно была из-за скобок!
.include "2313def.inc"
.def temp = r16
.def led = r17
.org 0x0000
rjmp reset
reset:
ldi temp, RAMEND
out spl, temp
sbi DDRD, PD6
ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
ldi temp, 0
out UBRRH, temp
ldi temp, 39
out UBRRL, temp
ldi temp, (0b00000000)
out UCSRA, temp
ldi temp,(1<<UCSZ1|1<<UCSZ0)
out UCSRC, temp
ldi temp, (1<<RXEN)
out UCSRB, temp
rjmp main
main:
sbic UCSRA, RXC
rcall UART
rjmp main
UART:
in temp, UDR
mov led, temp
;sbrc temp, 7
rcall send
ret
send:
cbi PORTB, PB3
sbrs led, 7
cbi PORTB, PB0
sbrc led, 7
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 6
cbi PORTB, PB0
sbrc led, 6
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 5
cbi PORTB, PB0
sbrc led, 5
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 4
cbi PORTB, PB0
sbrc led, 4
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 3
cbi PORTB, PB0
sbrc led, 3
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 2
cbi PORTB, PB0
sbrc led, 2
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 1
cbi PORTB, PB0
sbrc led, 1
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 0
cbi PORTB, PB0
sbrc led, 0
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbi PORTB, PB3
ret
Upd: Всем спасибо, проблема видимо действительно была из-за скобок!
Последний раз редактировалось %MUSHRUM Сб май 10, 2025 15:40:41, всего редактировалось 1 раз.
- Реклама
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: проблема с UART attiny2313
в такой записи
ldi temp, (1<<PB0|1<<PB1|1<<PB3)
в скобки нужно брать каждое выражение. должно быть так:
ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3)
и ниже
ldi temp,(1<<UCSZ1|1<<UCSZ0)
такая же ошибка.
ldi temp,(1<<UCSZ1)|(1<<UCSZ0)
ldi temp, (1<<PB0|1<<PB1|1<<PB3)
в скобки нужно брать каждое выражение. должно быть так:
ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3)
и ниже
ldi temp,(1<<UCSZ1|1<<UCSZ0)
такая же ошибка.
ldi temp,(1<<UCSZ1)|(1<<UCSZ0)
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: проблема с UART attiny2313
Starichok51 Это не ошибки.
%MUSHRUM AT90S2313 и ATtiny2313 похожи, но имеют отличия. Поэтому, нужно инклудить точно. Как вариант...
%MUSHRUM AT90S2313 и ATtiny2313 похожи, но имеют отличия. Поэтому, нужно инклудить точно. Как вариант...
Спойлер
Код: Выделить всё
.include "tn2313def.inc"
;.include "2313def.inc"
.equ Fcpu=20000000
.equ BAUD=31250
.def temp = r16
.def led = r17
.org 0x0000
rjmp reset
reset:
ldi temp, RAMEND
out spl, temp
sbi DDRD, PD6
; ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
SBI PORTB, PB3
LDI R22,HIGH(Fcpu/16/BAUD-1)
OUT UBRRH,R22
LDI R22,LOW(Fcpu/16/BAUD-1)
OUT UBRRL,R22
;ldi temp, 0
;out UBRRH, temp
;ldi temp, 39
;out UBRRL, temp
;ldi temp, (0b00000000)
;out UCSRA, temp
;ldi temp,(1<<UCSZ1|1<<UCSZ0)
;out UCSRC, temp
ldi temp, (1<<RXEN)
out UCSRB, temp
IN R22,UDR ;псевдочтение для сброса RxC
;rjmp main
main:
SBIS UCSRA,RxC
RJMP MAIN
IN LED,UDR
RCALL SEND
RJMP MAIN
;sbic UCSRA, RXC
;rcall UART
;rjmp main
;UART:
;in temp, UDR
;mov led, temp
;sbrc temp, 7
;rcall send
;ret
send:
cbi PORTB, PB3
sbrs led, 7
cbi PORTB, PB0
sbrc led, 7
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 6
cbi PORTB, PB0
sbrc led, 6
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 5
cbi PORTB, PB0
sbrc led, 5
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 4
cbi PORTB, PB0
sbrc led, 4
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 3
cbi PORTB, PB0
sbrc led, 3
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 2
cbi PORTB, PB0
sbrc led, 2
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 1
cbi PORTB, PB0
sbrc led, 1
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbrs led, 0
cbi PORTB, PB0
sbrc led, 0
sbi PORTB, PB0
sbi PORTB, PB1
cbi PORTB, PB1
sbi PORTB, PB3
ret
.EXIT
Re: проблема с UART attiny2313
akl, я проверял def файл, все регистры и биты совпадают. Вернее там некоторых небыло но я, дурак, сначала думал что файл кривой и все поправил.
Re: проблема с UART attiny2313
Давненько не брался за АВР, но по-моему, это всё же ошибки. Если скобки не как у Starichok51, то результат м.быть х. зн. какой. Ведь оператор | приоритетней >> Можно прогнать через ассемблер тот и другой вариант и посмотреть - какая константа сгенерируется. Мне лень...
- Реклама
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: проблема с UART attiny2313
у меня уже была такая ошибка, поэтому я и написал, что это ошибка.
пока я не взял каждую часть выражения в скобки, не работало.
пока я не взял каждую часть выражения в скобки, не работало.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: проблема с UART attiny2313
Насчет скобок Starichok51 абсолютно прав.
А вот сами *.inc (и их размещение в папках) зависят от того, какой компилятор ассемблера в проекте АВР студии на вкладке project -> assembler option -> AVR assembler указан avrasm(version 1) или avrasm2(version 2).

А вот сами *.inc (и их размещение в папках) зависят от того, какой компилятор ассемблера в проекте АВР студии на вкладке project -> assembler option -> AVR assembler указан avrasm(version 1) или avrasm2(version 2).
Re: проблема с UART attiny2313
Проверил в студии все 3 записи. Всегда студия занесла в DDRB одно и тоже значение.
Код: Выделить всё
ldi temp,1<<PB0|1<<PB1|1<<PB3 ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
ldi temp, (1<<PB0)|(1<<PB1)|(1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp
ldi temp, (1<<PB0|1<<PB1|1<<PB3) ;PB0 - DO PB1 - sck PB3 - latch
out DDRB, temp- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: проблема с UART attiny2313
интересно, я сейчас тоже проверил, и тоже получил одинаковые значения.
а как же у меня тогда не работало, пока я не наставил скобок? наставил скобок и заработало.
а как же у меня тогда не работало, пока я не наставил скобок? наставил скобок и заработало.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: проблема с UART attiny2313
Возможно, от компилятора зависит? Или от набора данных?
Во всяком случае, даже для наглядности и читаемости скобки - полезная вещь, организуют правильную мысль, не напрягая зря мозги: а что там за чем следует.
Я когда-то так в Дельфи лоханулся: не учёл, что or приоритетней операции сравнения и очень удивлялся: куда это моих ifов заносит?
Один умный автор иронично заметил: "Некоторые программисты считают, что мировой запас скобок ограничен и поэтому применяют их крайне редко".
Во всяком случае, даже для наглядности и читаемости скобки - полезная вещь, организуют правильную мысль, не напрягая зря мозги: а что там за чем следует.
Я когда-то так в Дельфи лоханулся: не учёл, что or приоритетней операции сравнения и очень удивлялся: куда это моих ifов заносит?
Один умный автор иронично заметил: "Некоторые программисты считают, что мировой запас скобок ограничен и поэтому применяют их крайне редко".



