Без описания |
Поиск в теме | Версия для печати |
Denis800 |
Отправлено: 09 Ноября, 2011 - 12:01:25
|
Рядовой
Сообщений всего: 15
Дата рег-ции: Март 2011
|
Вот сам модуль, его смысл: при загрузке МК зажигаем светодиод 2, потом пауза светодиод 3, при получении символа зажигаем все 8 светодиодов порта А. и отвечаем компьютеру цирой "1".
//***************************************************************************
#include <avr/io.h>
#include <avr/interrupt.h>
#include "usart.h"
#include "lcd_lib.h"
int main( void )
{
unsigned char sym;
DDRA = 255;
PORTA = 2;
_delay_ms(500);
USART_Init();
PORTA = 4;
_delay_ms(500);
USART_Init();
//LCD_Init();
sei();
//LCD_SendString("uart:");
while(1){
sym = USART_GetChar(); //читаем буфер
if (sym){ //если что-то приняли, то
PORTA = 255;
_delay_ms(1000);
USART_SendChar('1'); //отвечаем компу "Ok "
//USART_SendChar('k');
//USART_SendChar(' ');
}
}
return 0;
}
модуль usart.c
#include "usart.h"
//однобайтный буфер
volatile unsigned char usartRxBuf = 0;
//инициализация usart`a
void USART_Init(void)
{
UBRRH=0;
UBRRL=74; //скорость обмена 9600 бод
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //разр. прерыв при приеме, разр приема, разр передачи.
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //размер слова 8 разрядов
}
//отправка символа по usart`у
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}
//прием символа по usart`у в буфер
ISR(USART_RX_vect)
{
usartRxBuf = UDR;
}
//чтение буфера
unsigned char USART_GetChar(void)
{
unsigned char tmp;
ATOMIC_BLOCK(ATOMIC_FORCEON)
{
tmp = usartRxBuf;
usartRxBuf = 0;
}
return tmp;
}
при включении получается так: зажигается светодиод 2, потом 3, и так будт пока я не отправлю что то с компьютера, при отправке любого символа, на компьютер "1" не возвращается, и сам МК как будто "зависает" и выглядит это так: постоянно как будто в цикле (которого нет) зажигается светодиод 2 потом 3, и так длиться бесконечно, откуда берется такое чудо мне не понятно ! ! !
P.S. если мой микроконтроллер прошить простенькой прошивкой для отправки символов на компьютер, то компьютер всё принимает ! это я написал для того чтобы подтвердить что всё исправно, и информация с МК на компьютер идёт, а обранто нет ! |
|
|
Роботов |
Отправлено: 01 Декабря, 2011 - 23:00:02
|
Гуру
Сообщений всего: 1350
Дата рег-ции: Июнь 2011
|
cjA пишет:нигде не сказано что внешний доступ к этому регистру разрешен
В даташите сказано. и пример на Си приведён. Читайте.
cjA пишет:Может в Си это автоматически делается, тогда простите.
Делается(Отредактировано автором: 01 Декабря, 2011 - 23:03:35) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
« С чего начать? » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|