Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 190
Из них просматривают:
Аналоги: 78. Даташиты: 89. Инструкции: 2. Новости: 4. Остальное: 6. Расчёты: 1. Форум: 10.
Участников: 2
Гостей: 188

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
передача числа через USART на atmega8515 с компьютера
Студент
Зарегистрирован:
29.07.2013 22:27
Сообщений: 4
Не в сети
Доброго времени суток! Написал прогу для atmega8515 для приема байта через USART, с компа через COM порт пытаюсь отправить биты байта, используя компонент Vacomm (для дельфи). Нужно вывести c контроллера на светодиоды (использую avr-овский kit). Но что-то не удается осуществить задачу посмотрите пожалуйста код - может подскажете что или ошибку увидите)

.include "m8515def.inc"

ldi r16,3;( 3 - для скорости, 115200, а кварц внешний 7 с лишним мега герц)
ser r20;
out DDRB, r20;(настройка на вывод)

clr r18;
clr r17;
out UBRRH,r18
out UBRRL,r17
ldi r18, (1<out UCSRB, r18
out UBRRH, r17
out UBRRl, r16
clr r16
(вышеописанную инициализацию пробовал помещать в подпрограмму init: ... ret, но тогда выполнение программы не после нее выскакивало обратно наверх, а вниз вообще не шло)
usart_recieve:
sbis UCSRA, RXC;
rjmp usart_recieve;
in r16, UDR;
out PortB, r16 (вывод на светодиоды)
ret
В делфи следующая строчка на кнопке: vacomm1.writechar('1'); - пытаюсь сначала послать стартовый бит, затем биты байта и стоп бит просто нажимая на кнопку, но результата на светодиодах не видно... Подскажите пожалуйста, что можно попробовать)Заранее спасибо!




Re: передача числа через USART на atmega8515 с компьютера
Студент
Зарегистрирован:
29.07.2013 22:27
Сообщений: 4
Не в сети
извиняюсь, инициализация выглядит так:
clr r18;
clr r17;
out UBRRH,r18
out UBRRL,r17
ldi r18, (1<out UCSRB, r18
out UBRRH, r17
out UBRRl, r16
clr r16



Re: передача числа через USART на atmega8515 с компьютера
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
а как выглядит инициализация стека?



Re: передача числа через USART на atmega8515 с компьютера
Студент
Зарегистрирован:
29.07.2013 22:27
Сообщений: 4
Не в сети
Имею дело с контроллерами не так давно, поэтому еще не понял - нужна ли здесь вообще инициализация стэка?

Прикрепляю более новую версию, сделано в AVR studio, программа для сom порта для компьютера (на делфи) - работает (по таймеру и вручную отправляет биты), а вот для контроллера так и не выводит на диоды, хотя в режиме отладки в AVR studio вроде выводит результат на пины порта В, возможно ошибка в подпрограмме приема байта)

Спасибо!



Re: передача числа через USART на atmega8515 с компьютера
Студент
Зарегистрирован:
29.07.2013 22:27
Сообщений: 4
Не в сети
на сколько понял архив с прогой не присоединился, поэтому выкладываю сам код:
.include "m8515def.inc"
.cseg
.org 0
rjmp reset;
NOP; rjmp INT0;
nop; rjmp INT1;
nop; rjmp TIMER1_capt;
nop; rjmp TIMER1_COMPA;
nop; rjmp TIMER1_COMPB;
nop; rjmp TIMER1_OVF;
nop; rjmp TIMER0_OVF;
nop; rjmp SPI, STC;
rjmp USART_RXC;
/// rjmp USART_UDRE;
nop; rjmp USART,TXC;
nop; rjmp ANA_COMP;
nop; rjmp INT2;
nop; rjmp TIMER0 COMP;
nop; rjmp EE_RDY;
nop; rjmp spm_rdy;



/////////////////////////инициализация USART///////////////////


RESET:
SEI //разрешение прерываний
ser r21
out DDRB, r21 // настройка порта B на вывод
clr r18;
clr r17;
out UBRRH, r18;
out UBRRl, r17;
ldi r18, (1< out UCSRB, r18;
out UBRRH, r17;
clr r16;
ldi r16,3; установка скорости( baud 115000)
out UBRRl, r16;
clr r16;
ldi r16, (1< out UCSRC, r16;
clr r16;
loop:
nop
rjmp loop
RETI
///////////////////подпрограмма приема байта///////////////////
USART_RXC:
sbis UCSRA, RXC;
rjmp USART_RXC
in r16, UDR;
out PortB,r16;так и не выводит на диоды, хотя в режиме отладки в AVR studio вроде выводит результат на пины порта В, возможно ошибка в этой подпрограмме)
reti



Re: передача числа через USART на atmega8515 с компьютера
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
.include "m8515def.inc"
.cseg
.org 0
rjmp Reset
.org INT_VECTORS_SIZE
Reset:
; Stack init
ldi R16 , high(RAMEND)
out SPH, R16
ldi R16 , low(RAMEND)
out SPL, R16
;Port init
ldi r16,255
out DDRB, r16
ldi r16,0
out PORTB, r16
; 115200
ldi r17,0
ldi r16,3
; Set baud rate
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Set frame format: 8data, 1stop bit
ldi r16, (1<<URSEL)|(3<<UCSZ0)
out UCSRC,r16
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get received data from buffer
in r16, UDR
out PORTB,r16
loop:
rjmp loop



Поиск по форуму


Расширенный поиск

Разное

Интересно

При пайке деталей над горловиной кинескопа накройте ее куском материи.
Этим Вы убережёте кинескоп от случайно падающего расплавленного припоя и, следовательно, от трещин в его стекле.