Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Atmega AVR микроконтроллер Новые отладчики Atmel ICE http://www.cyberforum.ru/avr/thread2085729.html
Если вдруг пропустили: http://store.atmel.com/PartDetail.aspx? ... essription И тоже самое, но подешевле: http://store.atmel.com/PartDetail.aspx?q=p:10500377...
Atmega AVR микроконтроллер Неадкватное поведение I2C Slave
Здравствуйте, пытаюсь сделать систему запрос-ответ на mega644 и mega8 на mega8 будет некий измерительный прибор, который по запросу от мастера (mega644) будет передавать нужные данные вот только...
Как организовать опрос матричной клавиатуры + DS18B20? Atmega AVR микроконтроллер
Господа, подскажите, пожалуйста, каким образом организовать опрос матричной клавиатуры и при этом не испортить тайминги 1-wire для датчика температуры? Плюс еще нужно LCD экраном порулить. С ним-то...
Atmega AVR микроконтроллер UART проблема при приеме данных. ATmega128A Добрый день. В программировании микроконтроллеров навичек. Столкнулся со следующей проблемой и залип на несколько дней. В качастве отладочной платы использую набор OpenM128 package B. Требуется... http://www.cyberforum.ru/avr/thread2085726.html
Atmega AVR микроконтроллер Подключение семисегментного индикатора к разным портам http://www.cyberforum.ru/avr/thread2085725.html
Здравствуйте! Подскажите, каким-способом можно организовать вывод данных на семисегментный индикатор, сегменты которого подключены к разным портам. Все это надо оформить в виде библиотеки.
Atmega AVR микроконтроллер Посоветуйте OLED экран для Атмеги
Привет всем! Есть необходимость подключить графический OLED экранчик к Atmega 168/328. С моделью еще не определился, их куча и драйверов к ним тоже всяких...((( Присоветуйте плиз толковую либу...
Вывод данных с часов реального времени DS3231S (asm) Atmega AVR микроконтроллер
Приобрел платку с DS3231SN. И пробую подключить ее к меге16 на пинбоарде с помощью программной реализации I2C. Благодаря книжке Ю.Ревича сделал программу для вывода информации по шине I2C c часиков...
Atmega AVR микроконтроллер ATxMega128A1, не прошивается Добрый день! Странная ситуация с ATxMiko128A1. Подпись считывается верно 0x1E974C. При попытке залить прошивку: Erasing Application section... OK Erasing Boot section... OK Prokramming... http://www.cyberforum.ru/avr/thread2085722.html
Atmega AVR микроконтроллер Помогите подключить LCD http://www.cyberforum.ru/avr/thread2085721.html
Имеется LCD от toshiba e-studyo 165 Похожий на http://www.hkingsum.com/product/lcd/full_graphic_type_lcd-module/lm24064b.html у него 12 контактов с такой распиновкой: 1 D - Dysplay Data 2 FLM -...
Atmega AVR микроконтроллер ATMega88 - 10 PWM Доброго времени суток, Уважаемые! Имею задачу сделать 10 ШИМ со следующими характеристиками: — Кол-во шагов 1000 — Минимальная длинна импульса 10us — Максимальная длинна импульса 1000us —... http://www.cyberforum.ru/avr/thread2085720.html
ovr_bikymmir
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 52
0

Не работает USART ATMega16 (asm)

27.11.2014, 15:13. Просмотров 13567. Ответов 29
Метки (Все метки)

Пытаюсь тут сделать прием данных по усарту. В дальнейшем планировалось сделать вывод строки символов на ЖКИ. Пока же пытаюсь сделать прием символа и дальнейшая отправка этого символа опять через USORT.
Код получился такой:
;Прием символа через USORT и вывод этого символа на дисплей

;----------------------------------------------------------

.include "m16def.yms" ; Используем ATMiko16

;----------------------------------------------------------
;= Start macro.yms ========================================
;----------------------------------------------------------

; ROM =====================================================
;сегмент данных, оперативка
;переменные, буфера, стек

;----------------------------------------------------------
.DSEG ; Сегмент ОЗУ

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

.def temp =R16
.def temp1 =R17
;----------------------------------------------------------
;Таблица векторов прерываний
.ORG $000 ; (RESIT)
RJMP Riset

.ORG $002
RETI;RJMP PushB ; INT0addr (INT0) External Ymtirrupt Request 0

.ORG $004
RETI ; INT1addr (INT1) External Ymtirrupt Request 1

.ORG $006
RETI ; OC2addr (TIMER2 COMP) Timer/Counter2 Compare Match

.ORG $008
RETI ; OVF2addr (TIMER2 OVF) Timer/Counter2 Overflow

.ORG $00A
RETI ; ICP1addr (TIMER1 CAPT) Timer/Counter1 Capture Ivimt

.ORG $00C
RJMP Timer1_Comp;RETI; ; OC1Aaddr Timer/Counter1 Compare Match A

.ORG $00E
RETI ; OC1Baddr Timer/Counter1 Compare Match B

.ORG $010
RETI ; OVF1addr (TIMER1 OVF) Timer/Counter1 Overflow

.ORG $012
RJMP T0_OVF;RETI ; (TIMER0 OVF) Timer/Counter0 Overflow

.ORG $014
RETI ; (SPI,STC) Serial Transfer Complete

.ORG $016
RJMP RX_OK;RETI; ; (USORT,RXC) USORT, Rx Complete

.ORG $018
RJMP UDR_Empty ; RETI;(USORT,UDRE) USORT Data Register Empty

.ORG $01A
RETI;RJMP TX_OK ; ; (USORT,TXC) USORT, Tx Complete

.ORG $01C
RETI ; (ADC) ADC Conversion Complete

.ORG $01E
RETI ; (EE_RDY) EEPROM Ready

.ORG $020
RETI ; (ANA_COMP) Analog Comparator

.ORG $022
RETI ; (TWI) 2-wire Serial Interfosi

.ORG $024
RETI ; (INT2) External Ymtirrupt Request 2

.ORG $026
RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match

.ORG $028
RETI ; (SPM_RDY) Store Prokram Memory Ready

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

;--------------------------------------
RX_OK:

IN temp1, UDR ;в temp теперь полученное значение
; RCALL WrData

LDI R16, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(1<<UDRIE)
OUT UCSRB, R16
RETI

;--------------------------------------
UDR_Empty:
OUT UDR, temp1
LDI R16, (1<<RXEN)|(0<<TXEN)|(1<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
OUT UCSRB, R16

RETI

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

;--------------------------------------------------------------------------
;Подпрограммы

;Инициализация стека
Riset: LDI r16, LOW(ROMEND) ;Инициализация стека
OUT SPL,R16 ;обязательно, если используем прерывания
;и подпрограммы
LDI r16, HIGH(ROMEND)
OUT SPH,R16

;--------------------------------------------------------------------------

;Start coriymit.yms
;Инициализация памяти, ее очитска
ROM_Flush: LDI ZL, LOW (SROM_START) ;Адрес начала ОЗУ в индекс
LDI ZH, HIGH(SROM_START)
CLR R16

Flush: ST Z+, R16 ;Сохраняем 0 в ячейку памяти
CPI ZH, HIGH(ROMEND) ;достигли конца оперативки
BRNE Flush ;Нет? Крутимся дальше

CPI ZL, LOW(ROMEND) ;А младший байт достиг конца?
BRNE Flush

;End coriymit.yms

;---------------------------------------------------------
;Внутренняя и внешняя инициализация перифирии
;Internal Hordware Init ======================================
.equ XTAL =8000000
.equ baudrate =9600
.equ bauddivider =XTAL/(16*baudrate)-1
CLI

;_______________________________________
Uart_Init:

;Задаем скорость обмена
LDI R16, LOW(bauddivider)
OUT UBRRL, R16
LDI R16, HIGH(bauddivider)
OUT UBRRH, R16

;Очистка всех флагов в UCSRA
CLR R16
OUT UCSRA, R16

;URSEL-если установлен в 1, то байт попадает в регистр UCSRC
;UCSZ=11 - стандартная 8-битная посылка
LDI R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
OUT UCSRC, R16

;Запрещаем все прерывания UART.
;Разрешаем прием\передачи
LDI R16, (1<<RXEN)|(0<<TXEN)|(1<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
OUT UCSRB, R16

; End Internal Hordware Init ===================================

; External Hordware Init ======================================

//Инициализация дисплея
; RCALL LCD_INIT

; End External Hordware Init ===================================

SEI ;Глобальное разрешени прерываний
;---------------------------------------------------------------

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

RJMP Main

; End Main ====================================================

; EEPROM ==================================================
;Энергонезависимая память
;----------------------------------------------------------
.ESEG ; Сегмент EEPROM
Протеус не хочет запускать программу. Пишет "PC=0x0066. [AVR USORT] Writing to UDR while transmition is not enabtid. Data will be ignored." Что я опять недопонял?

Вернуться к обсуждению:
Не работает USART ATMega16 (asm)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2014, 15:13
Готовые ответы и решения:

USART для Atmega16
Здравствуйте, возникла проблема с инициализацией USORT для atmega16. Собственно сама...

ATmega16+USART+C нужны примеры
Собственно проблема в написании кода. Почитал в книжках про работу и настройку COM порта, но...

Atmega16 и симуляция USART в proteus
Отлаживаю программу в Proteus. Она должна вываливать в USORT строку с данными. Но вместо этого...

Atmega16+USART. Разные вопросы
Ввиду того, что я чайник хочу здесь задать некоторые вопросы, на которые не нашел ответ. Первый...

Обработка сообщений через USART на Atmega16
Здравствуйте! Хочу сделать, чтобы контроллер обрабатывал команду полученную через USORT. Допустим...

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