Форум

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

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

В сети

Пользователей: 111
Из них просматривают:
Аналоги: 45. Галерея: 1. Даташиты: 8. Инструкции: 1. Новости: 9. Остальное: 1. Форум: 45. Чат: 1.
Участников: 3
Гостей: 108

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

Партнёры


Партнёры

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

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

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

 3 анонимных пользователей
передача числа через 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



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


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

Разное

Интересно

Вместо высоковольтного провода можно использовать обычный, пропустив его через трубку от капельницы.