|
Проблема с UART в atmega128 |
|
|
|
Dec 6 2011, 07:04
|
Группа: Новичок
Сообщений: 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. Стоп-бит использую один. Буду благодарен за любые идеи. Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Dec 19 2011, 18:00
|
Участник

Группа: Участник
Сообщений: 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 +++++++++++++++++
|
|
|
|
Сообщений в этой теме
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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|