Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 10.02.2007, 12:08  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию Помогите разобраться с UART

Никогда раньше не работал с UART. Сейчас написал тестовую програмку для ATmega128, хочу ее юзать совместно с програмой COM Port Toolkit, но что то не получаю ответа от проца. Заранее благодарен.
Вот исходный код:
.device ATmega128 ;Prohibits use of non-implemented instructions
.include "m128def.inc"
.def UartSt_r =r16 ;Регистр состояния драйвера UART
.def tmp1_r =r19 ;Оперативный регистр 1
.def tmp2_r =r20 ;Оперативный регистр 2
.def point_uart =r17
.def UART_IN =r21 ;Регистр принятого байта в UART



.org 0 ;Прерывание сброса микроконтроллера
rjmp start
.org URXC1addr ;Прерывание по RX
rjmp IN_UART



;Начало программы***************************************** *****

start: ldi tmp1_r, LOW(RAMEND) ;Установка стека
Out spl, tmp1_r
ldi tmp1_r, HIGH(RAMEND)
Out sph, tmp1_r



ldi tmp1_r,0b0001000 ;маска порта D
out ddrd,tmp1_r ;устанавливаем режим работы порта D

ldi tmp1_r,0b00000011 ;маска порта C
out ddrc,tmp1_r ;устанавливаем режим работы порта B

rcall Init_uart
sei ;Разрешение всех разрешенных прерываний



LOOP:
rjmp LOOP



;ПП инициализации UART
;************************************************* ***************
Init_uart: ldi tmp1_r, $98 ;Инициализация UART
STS UCSR1B,tmp1_r ;RXCIE1=1,RXEN1=1,TXEN1=1, //UCSZ12=1

ldi tmp1_r,3 ;115200 бит/c при fclk=7,3728МГц
STS UBRR1L,tmp1_r
ret



;ПП передачи данных UART (9 байтов в порт)
;************************************************* ********************
OUT_UART:
LDS tmp2_r, UCSR1A
sbrs tmp2_r, $05 ;Если бит UDRE в USR1A установлен, то
;пропустить cледующую команду
rjmp OUT_UART ;Вернуться на метку trans
STS UDR1, tmp1_r ;Вывести в регистр данных передатчика UART
;содержимое r15
ret;
;ПП передачи данных UART(9 байтов в порт)
;************************************************* ********************
IN_UART: LDS tmp1_r,UDR1 ;Прием в переменную tmp1_r
rcall OUT_UART
reti ;Возврат из подпрограммы
Реклама:
masterpc вне форума  
Непрочитано 10.02.2007, 16:24  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Помогите разобраться с UART

Сообщение от masterpc
Никогда раньше не работал с UART. Сейчас написал тестовую програмку для ATmega128, хочу ее юзать совместно с програмой COM Port Toolkit, но что то не получаю ответа от проца.
может это поможет ?

avr123.nm.ru/z5.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 10.02.2007, 21:00  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Спасибо, почитаю. Хоть я пишу эту прогу на асме, Си тоже использую часто. Думаю разберусь.
Еще что интересно, если использовать UART0, то вместо команд STS, LDS используються соответственно OUT и IN. может кто-то объяснить почему?
masterpc вне форума  
Непрочитано 10.02.2007, 23:23  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Пример работы с двумя USART есть в CVAVR.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 11.02.2007, 00:21  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Пример работы с двумя USART есть в CVAVR.
Да есть такой пример, только что посмотрел, но это не обьясняет почему для UART0 в асме используються команды OUT и IN, а для UART1 STS и LDS.
А чо касается Вашего курса (мне он очень нравится и часто в него заглядываю как в справочное пособие), то я в своей асмовской проге вроде как сделал правильно, нужно еще раз проверить аппаратную часть. Но буду благодарен если кто-нибудь прокоментирует мою прогу для тестирования UART
masterpc вне форума  
Непрочитано 11.02.2007, 03:24  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

я ни чего не имею против АСМа ...

но читать вот эти "закорючки" просто не выносимо ...

другое дело на Си или Бэйсике - нормальные английские слова и почти обычные математические операции и числа.

вы в 128-й меге память чтоль экономите ???
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 11.02.2007, 16:31  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Ну может быть переделаю "закорючки" на Си, но в завтра, сегодня выходной, я принципиально не работаю в воскренье. Если что продолжим разговор в болнее понятной форме.
masterpc вне форума  
Непрочитано 11.02.2007, 22:07  
lsa
Почётный гражданин KAZUS.RU
 
Аватар для lsa
 
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
lsa на пути к лучшему
По умолчанию

Сообщение от masterpc
Да есть такой пример, только что посмотрел, но это не обьясняет почему для UART0 в асме используються команды OUT и IN, а для UART1 STS и LDS.
Команды OUT и IN могут адресовать только 64 байта адресного пространства. Для UART0 этого достаточно.
Большое количество периферии в М128 забросило регистры управления UART1 в дальнее адресное пространство.
Для того чтобы к ним обращаться приходится использовать STS и LDS, у которых возможно обращение к 65536 ячейкам.
lsa вне форума  
Непрочитано 11.02.2007, 23:17  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Цитата:
если использовать UART0, то вместо команд STS, LDS используються соответственно OUT и IN. может кто-то объяснить почему?
__________________________________________________ _________
Смотрим в AVR Studio-Help-AVR Tools User Guide-AVR Assembler-
Instruction
команды in, out, LD/LDS/LDD and ST/STS/STD.

Видим:
IN Rd,A 0 ‹= d ‹= 31, 0 ‹= A ‹= 63 PC ‹- PC + 1
Words: 1 (2 bytes) Cycles: 1

(i)LDS Rd,k 0 ‹= d ‹= 31, 0 ‹= k ‹= 65535 PC ‹- PC + 2
Words: 2 (4 bytes) Cycles: 2


То есть, команды in, out выгоднее использовать чем lds, sts.
Занимают меньше места в памяти, выполняются быстрее.
Но, могут работать только с регистрами расположенными по адресам
в пространстве адресов ввода-вывода 0...63 (0...$3F),
или, что то же самое $20...$5F в общем пространстве памяти.
__________________________________________________ _______
Для того, чтобы выяснить с какими регистрами работает
команды IN/OUT, а с какими LD/LDS/LDD and ST/STS/STD
открываем полный даташит (например для ATmega128 - doc2467),
Register Summery и смотрим на адреса регистров.

Или смотрим в файле m128def.inc
(...:Program FilesAtmelAVR ToolsAvrAssemblerAppnotesm128def.inc)
раздел
; I/O Register Definitions

;**** Memory Mapped I/O Register Definitions ($FF-$60) ****
Работают только с LD/LDS/LDD and ST/STS/STD
(Кроме USART1 тут, например, регистры DDRF, PORTF.)

;**** I/O Register Definitions ($3F-$00) ****
Работают только с IN/OUT.
(С LDS/STS эти регистры можно, конечно, тоже использовать (но не нужно),
только нельзя написать lds tmp, UDR0, получится не то, что ожидается).
Laksus вне форума  
Непрочитано 11.02.2007, 23:24  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Огромное спасибо, за разъяснение, сам бы я не додумался сразу
masterpc вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобраться ctefan Делимся опытом 26 05.01.2008 17:01
Помогите разобраться Mihail-1 Информация по радиокомпонентам 5 02.03.2007 00:13
Помогите разобраться с приёмом символов через UART в ATmeg8 cscbyflex Микроконтроллеры, АЦП, память и т.д 10 19.12.2006 19:17
Помогите с UART !!! alll Микроконтроллеры, АЦП, память и т.д 0 15.11.2006 22:15
Помогите разобраться Skt Микроконтроллеры, АЦП, память и т.д 7 26.08.2005 08:23


Часовой пояс GMT +4, время: 15:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot