реклама на сайте
подробности

 
 
> Проблема с UART в atmega128
Whosthere
сообщение Dec 6 2011, 07:04
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 6-12-11
Пользователь №: 68 700



Добрый день.

Возникла проблема с приемом по UART от компа на микроконтроллер ATMEGA128.
Код программы такой:

Код
.cseg
in r15,UDR0
ldi r17, 47; устанавливаем скорость 9600
out UBRR0L,r17
ldi r16, 18; устанавливаем режим приема
out UCSR0B, r16; данных в 8битном пакете
Receive:
sbis UCSR0A, RXC0; ожидаем приема полного пакета данных
rjmp receive
in r15, UDR0; загружаем данные в R15
rjmp receive


Микроконтроллер тактируется от кварцевого генератора с частотой 7,3728 МГц. Программирую в AVRStudio5.

Суть самой проблемы:
Сигнал на вход микроконтроллера приходит такой, как надо (проверено осциллографом). Но! Посылая что-то, отличное от 0000 0000, я получаю в регистре R15 0хFF. Скорость передачи и там, и там выставлена 9600. Стоп-бит использую один.

Буду благодарен за любые идеи. Заранее спасибо.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slavik.ksu
сообщение Dec 19 2011, 18:00
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 15-12-11
Пользователь №: 68 876



; выполняемые функции: через модуль UART от компьютера принимаем числа
; которые отображаются на 8 СИДах в двоичном коде.

.device ATmega8515
.nolist
.include "m8515def.inc"
.list

;================
; Объявления

.def temp = r16

; FLASH ===========================================
.CSEG ; Кодовый сегмент

;====== Таблица векторов прерываний================

.ORG 0x0000 ; RESET - Аппаратный сброс
RJMP Init
.ORG 0x0001 ; INT0 - External Interrupt0 Vector Address; Внешнее прерывание 0 ;
RETI
.ORG 0x0002 ; INT1 - External Interrupt1 Vector Address; Внешнее прерывание 1 ;
RETI ; Ничего не делаем, возвращаемся в основную программу
.ORG 0x0003 ; ICP1 - Input Capture1 Interrupt Vector Address; Событие захват Таймера/Счетчика 1 ;
RETI
.ORG 0x0004 ; OC1A - Output Compare1A Interrupt Vector Address ;Событие "совпадение A" Таймера/Счетчика 1 ;
RETI
.ORG 0x0005 ; OC1B - Output Compare1B Interrupt Vector Address; Событие "совпадение B" Таймера/Счетчика 1 ;
RETI
.ORG 0x0006 ; OVF1 - Overflow1 Interrupt Vector Address; Переполнение Таймера/Счетчика 1 ;
RETI
.ORG 0x0007 ; OVF0 - Overflow0 Interrupt Vector Address; Переполнение Таймера/Счетчика 0 ;
RETI
.ORG 0x0008 ; SPI - SPI Interrupt Vector Address; Передача данных по SPI завершена
RETI
.ORG 0x0009 ; URXC - UART Receive Complete Interrupt Vector Address; Прием данных по UART завершена
rjmp PriemZavershen ; Переходим к обработчику прерывания
.ORG 0x000a ; UDRE - UART Data Register Empty Interrupt Vector Address; Регистр данных UART пуст
RETI
.ORG 0x000b ; UTXC - UART Transmit Complete Interrupt Vector Address; Передача данных по UART завершен
reti;
.ORG 0x000c ; ACI - Analog Comparator Interrupt Vector Address; Готов результат аналогового компаратора
RETI

.ORG 0x000d ; INT2 - External Interrupt2 Vector Address
RETI
.ORG 0x000e ; OC0 - Output Compare0 Interrupt Vector Address
RETI
.ORG 0x000f ; ERDY - EEPROM Interrupt Vector Address
RETI
.ORG 0x0010 ; SPM - SPM complete Interrupt Vector Address
RETI
;.ORG 0x0011 ; SPMR - SPM complete Interrupt Vector Address
; RETI

; .ORG INT_VECTORS_SIZE

;================ ; Конец таблицы векторов прерываний===

;============ Блок подпрограмм обработки прерываний ===========
PriemZavershen:
in temp,UDR
out PortB,temp
reti

;============ конец Блока подпрограмм обработки прерываний ===========

;=================== Основная программа ======================
Init:
;++++++++++++++ Сдержимое файла INITCORE.INC +++++++++++++++++++++++++
;==== Инициализация ядра: Память; Регистры; Стек =============
.include "INITCORE.inc"
;++++++++++++++ Конец Содержимого файла INITCORE.INC +++++++++++++++++

;======= Инициализация внутренних периферийных устройств:======
ldi temp , 0b11111111 ; определяем входы\выходы порта В,
out DDRB , temp ; 1 делает вывод выходом, 0 - входом!
ldi temp , 0b00000000 ; определяем в\в порта D
out DDRD , temp

ldi temp , 0b11111111 ; включаем подтяжку (1) для входов порта В
out portB , temp ; и задаем начальние состояния выходов
ldi temp , 0b00000000 ; то же самое для D
out portD , temp

ldi temp, 1<<RXEN|1<<RXCIE ; разрешаем прием и прерывание по приему по UART
out UCSRB, temp

ldi temp,25 ; задаем скорость UART = 9600
out UBRRL, temp

ldi r16, (1<<URSEL|1<<UCSZ0|1<<UCSZ1) ; 8-мибитный формат посылки
out UCSRC,r16
sei ; глобально разрешаем прерывания!


;==== Коенц Инициализация внутренних периферийных устройств====

;========================= Главный цикл =======================

Start:
nop
rjmp Start


;++++++++++++++ Сдержимое файла INITCORE.INC +++++++++++++++++++++++++
;==== Инициализация ядра: Память; Регистры; Стек =============
;================= Инициализация Памяти ======================
RAM_Flush: LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс
LDI ZH,High(SRAM_START)
CLR R16 ; Очищаем R16
Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти
CPI ZH,High(RAMEND) ; Достигли конца ОЗУ?
BRNE Flush ; Нет! Крутимся дальше!
; Старший байт достиг конца ОЗУ!!!
; Заполняем оставшиеся 255 байт ОЗУ нулями.
CPI ZL,Low(RAMEND) ; Младший байт достиг конца ОЗУ?
BRNE Flush ; Нет! Крутимся дальше, до конца ОЗУ.
ST Z , r16 ; Да? тогда очиаем последний адрес и выходим из цикла

;=============== Инициализация регистров =====================
; Очищаем 32 индексных регистра R0-R31
ldi ZL, 30 ; ZL есть регистр R30
CLR ZH ; ZH есть регистр R31
dec Zl
st Z,ZH
BRNE PC-2

;================ Инициализация стека ========================
LDI R16,Low(RAMEND) ; Обязательно!!!
OUT SPL,R16
LDI R16,High(RAMEND)
OUT SPH,R16
CLR R16
;++++++++++++++ Конец Содержимого файла INITCORE.INC +++++++++++++++++
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Whosthere   Проблема с UART в atmega128   Dec 6 2011, 07:04
- - Whosthere   Микроконтроллер установлен на плате savvy128 Прин...   Dec 6 2011, 08:11
- - Палыч   Цитата(Whosthere @ Dec 6 2011, 11:04) Буд...   Dec 6 2011, 09:40
|- - kolobok0   Цитата(Палыч @ Dec 6 2011, 13:40) ...C за...   Dec 6 2011, 11:05
|- - Палыч   Цитата(kolobok0 @ Dec 6 2011, 15:05) точн...   Dec 6 2011, 11:14
- - ILYAUL   Кодldi r16, 18; устанавливаем режим приема Когда р...   Dec 6 2011, 16:12
- - Whosthere   Насколько я понимаю, fuse 103C у меня отключен (в ...   Dec 7 2011, 17:46
|- - Палыч   Флаг RXC кто сбрасывать будет ?   Dec 7 2011, 18:33
- - ILYAUL   Код , плиз , приведите конечный   Dec 7 2011, 19:26
- - kolobok0   Цитата(Whosthere @ Dec 6 2011, 11:04) ..A...   Dec 7 2011, 19:48
- - Whosthere   Спасибо за советы. Пока проверить возможности нет....   Dec 8 2011, 13:54
- - Whosthere   Увы,проблема не решилась, но я заметил очень стран...   Dec 13 2011, 07:17
|- - kolobok0   Цитата(Whosthere @ Dec 13 2011, 11:17) Ув...   Dec 13 2011, 07:50
|- - Палыч   Цитата(Whosthere @ Dec 13 2011, 11:17) Пр...   Dec 13 2011, 08:13
- - Whosthere   Вероятно такая запись будет больше понятна. Код.c...   Dec 13 2011, 10:39
|- - kolobok0   Цитата(Whosthere @ Dec 13 2011, 14:39) Ве...   Dec 14 2011, 11:04
- - slavik.ksu   у меня вопрос очень похожий: что то прием идет не ...   Dec 15 2011, 12:22
|- - kolobok0   Цитата(slavik.ksu @ Dec 15 2011, 16:22) ....   Dec 16 2011, 07:57
- - slavik.ksu   Цитата(kolobok0 @ Dec 16 2011, 11:57) оче...   Dec 19 2011, 06:53
|- - kolobok0   Цитата(slavik.ksu @ Dec 19 2011, 10:53) п...   Dec 19 2011, 11:17
|- - kolobok0   Цитата(slavik.ksu @ Dec 19 2011, 22:00) l...   Dec 19 2011, 18:43
- - ILYAUL   Частота проца , что 4 мгц?   Dec 19 2011, 18:21
- - slavik.ksu   Да, МК работает на 4МГц. Добавил инициализацию вер...   Dec 20 2011, 14:12
|- - ILYAUL   Цитата(slavik.ksu @ Dec 20 2011, 18:12) Д...   Dec 20 2011, 18:51
|- - kolobok0   Цитата(slavik.ksu @ Dec 20 2011, 18:12) ....   Dec 21 2011, 11:11
- - slavik.ksu   Цитата(ILYAUL @ Dec 20 2011, 22:51) 1. По...   Dec 22 2011, 05:57
- - ILYAUL   Здесь , где жолжна быть cli CODEInit: cli ;++++...   Dec 22 2011, 12:15
- - slavik.ksu   Цитата(ILYAUL @ Dec 22 2011, 16:15) 2. Пр...   Dec 23 2011, 07:06
- - V_G   Фсе ниасилил, НО: Перед чтением UDR настоятельно р...   Dec 23 2011, 07:14
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 11:14) Фсе ниас...   Dec 23 2011, 08:30
|- - V_G   Цитата(slavik.ksu @ Dec 23 2011, 18:30) P...   Dec 23 2011, 11:39
- - ILYAUL   И уточните ещё , 4 мгц - внешний или внутренний   Dec 23 2011, 10:21
- - slavik.ksu   внутренний   Dec 23 2011, 10:33
|- - ILYAUL   Цитата(slavik.ksu @ Dec 23 2011, 14:33) в...   Dec 23 2011, 12:39
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 15:39) Если фун...   Dec 23 2011, 12:48
- - V_G   Возможно, я неправильно сформулировал вопрос, пере...   Dec 23 2011, 14:21
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 18:21) Возможно...   Dec 24 2011, 11:24
|- - zombi   Цитата(slavik.ksu @ Dec 24 2011, 14:24) ...   Dec 24 2011, 14:50
- - V_G   1. А старший разряд в нуле когда-нибудь бывает? Мо...   Dec 24 2011, 11:35
- - slavik.ksu   Цитата(V_G @ Dec 24 2011, 15:35) 1. А ста...   Dec 26 2011, 04:31
|- - V_G   Цитата(slavik.ksu @ Dec 26 2011, 14:31) н...   Dec 26 2011, 12:17
|- - zombi   Цитата(slavik.ksu @ Dec 26 2011, 07:31) Ц...   Dec 27 2011, 19:07
- - ILYAUL   Поставьте кварц из перечисленных в таблице , ...   Dec 26 2011, 10:11
- - slavik.ksu   Цитата(zombi @ Dec 27 2011, 23:07) Я про ...   Dec 28 2011, 07:51
- - V_G   Так и называется, кварц (или кварцевый резонатор, ...   Dec 28 2011, 10:30


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 21:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016