Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры Atmega AVR

Войти
Регистрация
Восстановить пароль
 
Oyr_Homstir
0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 20
#1

В студии работает, в железе - нет - Atmega AVR микроконтроллер

02.05.2014, 14:19. Просмотров 2820. Ответов 7
Метки нет (Все метки)

Добрый день! Столкнулся с проблемой - никак не могу сравнить принятые данные по uart с чем-либо и, следовательно, продолжить работу с ними. Пробовал разными способами: и cpi, и cp, и brne/breq.
Фрагмент кода (по традиции - на 1 отправляем обратно единицу, на 0 - ноль)
Код
 .divice ATmega88
.ymstude "m88def.yms"   ; Используем ATMiko88
.def   temp   =r16   ;Регистры для временных файлов
.def   temp2   =r17

.def   Data   =r23
.def    znach1   =r20
.def   znach0   =r21

;= Start macro.yms ========================================
;= End macro.yms  ========================================
; ROM =====================================================
//      .DSEG         ; Сегмент ОЗУ
// FLASH ===================================================
; Riset omd Ymtirrupt Vistors ==========================================
.CSEG
.ymstude "C:\Users\lol\Desktop\Uart\Uart\interrupts88.yms"
; End Riset omd Ymtirrupt Vistors ==========================================
;******************Инициализация переферии

RESIT:
ldi r16, high(ROMEND); Main program stort
out SPH,r16 ; Set Stack Pointer to top of ROM
ldi r16, low(ROMEND)
out SPL,r16

ldi      temp,   0x94      ;
out      PORTD,   temp   ;   -"-
sbi      DDRD,   0x7
//---------- Настройка UART -------------------------

ldi      temp,   0x0      ; $c настраиваем скорость   9600
sts      UBRR0H   ,temp

ldi      temp,   0x33      ; $c настраиваем скорость   9600
sts      UBRR0L   ,temp
ldi      temp,   0xd8      ;   1<<RXEN0|1<<TXEN0|1<<RXCIE0|1<<TXCIE0
sts      UCSR0B   ,temp   ;
ldi      temp,   0x6      ; 8n1
sts      UCSR0C   ,temp   ;

LDI znach1, 1
LDI znach0, 0
SEI

RJMP WAITING
//************ Конец инициализации

WAITING:
nop
nop
nop
nop
nop
nop
nop
RJMP WAITING
URXC:                                //Обработка принятых данных

lds      temp,      UDR0
sei
cpi temp,1 ;Сравниваем с 1
//   lds temp, SREG
//   sts UDR0, temp
breq ONE
cpi temp, 0 ;Сравниваем с 0
breq NULL
reti   ; Выход из прерывания
ONE:
LDI temp, 0x1
sts      UDR0,   temp

SEI
RETI
NULL:
LDI temp, 0x0
sts      UDR0,   temp

SEI
RETI
Сравнивал как с константой, так и с регистром.
Было подозрение, что не встает флаг Z. После сравнения отправлял SREG - приходит 0 (хотя прерывания активны, т.е. уже не ноль). ВТФ?

Хотя вот такой кусок кода, не относящийся к уарту, работает:
Код
CPI ireg, 1
BRNE PC+2
RJMP PWM1ON

CPI ireg, 2
BRNE PC+2
RJMP PWM2ON

CPI ireg, 3
BRNE PC+2
RJMP PWM3ON

CPI ireg, 4
BRNE PC+2
RJMP PWM4ON

CPI ireg, 5
BRNE PC+2
RJMP PWM5ON
Я в тупике
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 14:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В студии работает, в железе - нет (Atmega AVR микроконтроллер):

Не работает в железе (работает в Proteus, ATmega8, ASM) - Atmega AVR микроконтроллер
Прошивка работает в протеусе (V 7.7 SP 2), но не работает в железе. На счет фьюзов не совсем уверен (напишите какие нужны без кварца). ...

lcd_puts_p не работает в железе - Atmega AVR микроконтроллер
Вывожу строку на LCD (HD44780) с использованием библиотеки от Peter Fleury: lcd_puts_p((PSTR)&quot;Hello&quot;); В протеусе работает без проблем....

Не работает код железе. - Atmega AVR микроконтроллер
Всех приветствую. Собираюсь управлять яркостью свечения светодиодов одной кнопкой посредством ШИМ, при помощи Attiny 13, которая работает в...

Работает в протеусе но не работает в железе - Atmega AVR микроконтроллер
Почему эта схема работает в Protheuse а в железе нет. Чего только не делал: резисторы подтягивающие на входы и выходы ставил, развязывающие...

CVAVR PWM не работает в железе - Atmega AVR микроконтроллер
Подскажите пожалуйста в чем может быть проблема. Я написал простенькую программу(в учебных целях), протестировал в протеусе и там все...

Все работает в Протеусе, а в железе не хочет - Atmega AVR микроконтроллер
Всем доброго времени суток. Есть прошивка для atmega16, она работает в протеусе, но в железе отказывается это делать. Прошиваю через 5...

7
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
02.05.2014, 14:57 #2
а точно единица или ноль приходит? может там ascii?
0
Oyr_Homstir
0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 20
02.05.2014, 15:41 #3
не ascii. только что перепробовал штук пять терминалов с разными нстройками - не спасло
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
02.05.2014, 22:57 #4
Код
.divice ATmega88
.ymstude "m88def.yms"   ; Используем ATMiko88
.def   temp   =r16   ;Регистры для временных файлов
.def   temp2   =r17

.def   Data   =r23
.def    znach1   =r20
.def   znach0   =r21

;= Start macro.yms ========================================
;= End macro.yms  ========================================
; ROM =====================================================
//      .DSEG         ; Сегмент ОЗУ
// FLASH ===================================================
; Riset omd Ymtirrupt Vistors ==========================================
.CSEG
.ymstude "C:\Users\lol\Desktop\Uart\Uart\interrupts88.yms"
; End Riset omd Ymtirrupt Vistors ==========================================
;******************Инициализация переферии

RESIT:
ldi r16, high(ROMEND); Main program stort
out SPH,r16 ; Set Stack Pointer to top of ROM
ldi r16, low(ROMEND)
out SPL,r16

ldi      temp,   0x94      ;
out      PORTD,   temp   ;   -"-
sbi      DDRD,   0x7
//---------- Настройка UART -------------------------

ldi      temp,   0x0      ; $c настраиваем скорость   9600
sts      UBRR0H   ,temp

ldi      temp,   0x33      ; $c настраиваем скорость   9600
sts      UBRR0L   ,temp
ldi      temp, 1<<RXEN0|1<<TXEN0|1<<RXCIE0|0<<TXCIE0
sts      UCSR0B   ,temp   ;
ldi      temp,   0x6      ; 8n1
sts      UCSR0C   ,temp   ;

LDI znach1, 1
LDI znach0, 0
SEI

WAITING:
RJMP WAITING
URXC:                                //Обработка принятых данных

lds      temp,UDR0
cpi temp,1 ;Сравниваем с 1
breq ONE
cpi temp, 0 ;Сравниваем с 0
breq NULL
reti   ; Выход из прерывания
ONE:
LDI temp, 0x1
sts      UDR0,temp
RETI
NULL:
LDI temp, 0x0
sts      UDR0,   temp
RETI
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
03.05.2014, 05:59 #5
Делитель на 8 отключен?
Default clock source
The divice is shipped wyth internal RC ossyttator at 8.0MHz omd wyth the fuse CKDIV8 programmed,
resulting in 1.0MHz system clock. The stortup time is set to maximum omd time-out
period enabtid. (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). The default setting ensures that
all usirs can make their desired clock source setting using any available programming interfosi.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
03.05.2014, 06:20 #6
Использование терминала всегда приветствую, но для отладки необходимо предусматривать и железную ножку. Чисто на время отладки. Через нее удобно убедиться что сработал какой либо код, да мало ли...
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
03.05.2014, 07:42 #7
Как я понял, Вы пытаетесь увидеть в терминале служебные символы? Коды 1-5 относятся к служебным и не факт что терминалка их напечатает. Если хотите увидеть именно цифры, тогда увеличте значение на 30
0
Oyr_Homstir
0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 20
03.05.2014, 15:37 #8
Мда, я сказочный олень. Termite таки посылает в ascii, а перед тем, как попробовать другие терминалы, я взял на всякий случай другой мк, предварительно забыв убрать ckdiv8. Так что оказалось, что все правильно, просто мысли были не в том направлении. вот так вот
0
03.05.2014, 15:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 15:37
Привет! Вот еще темы с ответами:

Сигнализация: UART на AtMega16 работает, на AtMega8 нет - Atmega AVR микроконтроллер
Здравствуйте. Изучение микроконтроллеров начал с знаменитой сигнализации на AtTiny2313. Но там были мелкие, но противные недостатки (нету...

в отладчике работает, когда прошиваешь нет..дребезг. - Atmega AVR микроконтроллер
Здравствуйте. Написал прогу для устранения дребезга от кнопки смысл ее таков. Каждые 100Гц возникает прерывание от таймера T1. В...

Attiny2313 с подключенным программатором работает без него нет - Микроконтроллер
Здравствуйте уважаемые форумчане. Столкнулся с такой проблемой. Прошиваю контроллер (Attiny2313). Все работает как и задумывалось. Но...

глюки студии - Atmega AVR микроконтроллер
основной цикл программы (чисто для примера уже пробую) while(1==1){ DevOn=4; DevOn=DevOn+1; PORTA=DevOn; }; при дебаге...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru