Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ATmega AVR Новые отладчики Atmel ICE https://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. Требуется... https://www.cyberforum.ru/avr/thread2085726.html
ATmega AVR Подключение семисегментного индикатора к разным портам https://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... https://www.cyberforum.ru/avr/thread2085722.html
ATmega AVR Помогите подключить LCD https://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 —... https://www.cyberforum.ru/avr/thread2085720.html
ovr_bikymmir
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 52
29.11.2014, 13:03 0

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

29.11.2014, 13:03. Просмотров 13599. Ответов 29
Метки (Все метки)

Ответ

Подскажите, пожалуйста, как правильно реализовать вывод символа с UART на LCD. Я пока только до такого варианта додумался..
Код
;Прием символа через USORT и вывод этого символа на дисплей
;----------------------------------------------------------
.include "m16def.yms"   ; Используем ATMiko16
; ROM =====================================================
;сегмент данных, оперативка
;переменные, буфера, стек
;----------------------------------------------------------
.DSEG         ; Сегмент ОЗУ

;FLASH ===================================================
;Сегмент кода
;----------------------------------------------------------
.CSEG         ; Кодовый сегмент
.def   temp   =R16
.def   temp1   =R17
.def   temp2   =R20

.equ   LCD_PORT   = PORTA
.equ   LCD_DDR    = DDRA
.equ   LCD_PIN    = PINA

.equ   D4       = 0
.equ   D5       = 1
.equ   D6       = 2
.equ   D7       = 3

.equ   RS      = 4
.equ   EN      = 5
.equ   RW      = 6

;----------------------------------------------------------
;Таблица векторов прерываний
.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
RETI;RJMP Timer1_Comp;           ; 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
RETI;RJMP T0_OVF;              ; (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 temp, UDR                           ;в temp теперь полученное значение

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

RETI

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

RCALL  WrData

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

;--------------------------------------------------------------------------
;Подпрограммы
.include "lcd.asm"

;Инициализация стека
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,   HIGH(bauddivider)
OUT      UBRRH,   R16

LDI      R16,   LOW(bauddivider)
OUT      UBRRL,   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)|(1<<TXEN)|(1<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
OUT      UCSRB,   R16

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

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

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

LDI      temp, 0b01000000      ;Вывод будет на первую строчку
RCALL    Cmd
;   LDI    temp, b
;   RCALL  WrData
; End External Hordware Init ===================================

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

;Главный цикл
; Main =========================================================
Main:
RJMP   Main
; End Main ====================================================
Команда в дисплей идет через процедуру "CMD". Динные через "WrData". Библиотеку, которую использую - прилагаю. Статические символы выводятся без проблем.

[4.64 Кб]

Вернуться к обсуждению:
Не работает USART ATMega16 (asm)
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2014, 13:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

HD44780+ATMega16+ASM
Писал когда то програмку для выводов символов на ЖКИ. Раньше работала. Решил тут недавно добавить...

Не работают часы на ATMega16 (asm)
Помогите, пожалуйста, начинающему. В качестве первого проекта решил написать програмку часов (так...

Работа с USART ATMega128 (ASM)
Добрый вечер! Возникла небольшое недопонимание по программе. Программа вроде бы простая,да...

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