Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

AVR USART

Отправлено ctraus 11 ноября 2008 г. 01:06


При трассироке в AVR studio при входе в
ISR(USART_RXC_vect)
{
tmp=UDR;
USART_Transmit(tmp);
if(tmp==0x62){Br=1;}
if (count < 5)
{
massive[count]=tmp;
count++;
}
}
Сожержимое UDR сбрасывается в 0. еще до tmp=UDR;
В чем возможная причина?
Весь код:
"//==================================================================================
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay_basic.h>
//==================================================================================
// #define F_CPU 8000000UL // 8 MHz äëÿ îáìåíà
#define Bit(n) (1 << (n))



//==================================================================================
unsigned char count=0;unsigned char Br,Kadr,Del,Z;//Z[oom]
unsigned char massive[5]={0,0,0,0,0};
unsigned char tmp=0;
//==================================================================================

//==================================================================================
void USART_Init(void)
{
UCSRC = 0;
UBRRH = 0;
UBRRL = 51;// 51 for 9600 bod (8.0MHz) & 2x 0ff
UCSRB = (1<<RXEN)|(1<<RXCIE)|(1<<TXEN);
UCSRC = 0;
}
//==================================================================================


ISR(USART_RXC_vect)
{
tmp=UDR;
USART_Transmit(tmp);
if(tmp==0x62){Br=1;}
//unsigned char C=0xFE,K=0x0C,D=0xFA,M=0x0A;//C-íà÷àëî ïàêåòà K[adr],D[elay],M[ultiplier]
if (count < 5)
{
massive[count]=tmp;
count++;
}
}

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) );
/* Put data into buffer, sends the data */
UDR = data;
}


void Init_all(void)
{
DDRB = 0xFF;// PORTB = 0xFF;
DDRC = 0xFF;
USART_Init();
sei();
}
int main(void)
{
unsigned char i=0;
int mul=0;
Init_all();
start:
Br=0;
while(1)
{

if(count>=4)
{
PORTC^=255;
USART_Transmit(0x31);
if(massive[0]==0x73)
{
for(i=massive[1];i!=0;i--)
{
PORTC |= Bit(3);
if(Br==1)goto start;

_delay_loop_2(15535);
PORTC &= ~Bit(3);
for(unsigned char DelK=0;DelK<=massive[2];DelK++)
{
for(mul=0;mul<=4;mul++)
{
_delay_loop_2(5534);
if(Br==1)goto start;
}
}
}
PORTB=0xFF;

}

//êîìàíäà çóìà?
if(massive[0]==0x7A)
{
while(massive[2]%(0x05)!=0)
{
++massive[2];
}
// if(massive[2]%(0x05)==0){PORTC=0xFF;while(1){;}}
if(massive[1]==0x00)//- 4
{
for(int d0=0;d0<4;d0++)
{

PORTC|=Bit(5);
_delay_loop_2(65535);
}
PORTC &= ~Bit(5);
while(massive[2]>0x19)
{
PORTC |= Bit(4);
_delay_loop_2(65535);
massive[2]-=0x19;

}
PORTC |= Bit(4);
_delay_loop_2(13107*(massive[2]/5));
PORTC &= ~Bit(4);



//

}

}
//On
if(massive[0]==0x31)
{
PORTC|=Bit(2);
}
if(massive[0]==0x39)//Off
{
PORTC&=~Bit(2);
}
count=0;
}

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
}
}
//==================================================================================

"


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 90:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru