Просмотр этой темы:
4 анонимных пользователей
Студент
Зарегистрирован:
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 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'); - пытаюсь сначала послать стартовый бит, затем биты байта и стоп бит просто нажимая на кнопку, но результата на светодиодах не видно... Подскажите пожалуйста, что можно попробовать)Заранее спасибо!
Отправлено: 29.07.2013 23:49
|
|
Студент
Зарегистрирован:
29.07.2013 22:27 Сообщений:
4
|
извиняюсь, инициализация выглядит так:
clr r18; clr r17; out UBRRH,r18 out UBRRL,r17 ldi r18, (1< out UBRRH, r17 out UBRRl, r16 clr r16
Отправлено: 30.07.2013 0:03
|
|
Модератор
Зарегистрирован:
26.01.2010 23:26 Из: Тирасполь
Сообщений:
3926
|
а как выглядит инициализация стека?
Отправлено: 30.07.2013 0:19
|
|
Студент
Зарегистрирован:
29.07.2013 22:27 Сообщений:
4
|
Имею дело с контроллерами не так давно, поэтому еще не понял - нужна ли здесь вообще инициализация стэка?
Прикрепляю более новую версию, сделано в AVR studio, программа для сom порта для компьютера (на делфи) - работает (по таймеру и вручную отправляет биты), а вот для контроллера так и не выводит на диоды, хотя в режиме отладки в AVR studio вроде выводит результат на пины порта В, возможно ошибка в подпрограмме приема байта) Спасибо!
Отправлено: 30.07.2013 22:49
|
|
Студент
Зарегистрирован:
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 UBRRH, r17; clr r16; ldi r16,3; установка скорости( baud 115000) out UBRRl, r16; clr r16; ldi r16, (1< clr r16; loop: nop rjmp loop RETI ///////////////////подпрограмма приема байта/////////////////// USART_RXC: sbis UCSRA, RXC; rjmp USART_RXC in r16, UDR; out PortB,r16;так и не выводит на диоды, хотя в режиме отладки в AVR studio вроде выводит результат на пины порта В, возможно ошибка в этой подпрограмме) reti
Отправлено: 30.07.2013 22:58
|
|
Модератор
Зарегистрирован:
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
Отправлено: 31.07.2013 0:38
|
|