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

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

Привет!!! помогите найти косяк в коде()

Отправлено Stason 06 февраля 2007 г. 12:13


Симптомы:
при приходе с PC 0x54 выполняется процедура Test();
но потом, без любых команд с PC процедура Test(); начинает самопроизвольно выполняться снова и снова--->>
Вывод - самопроизвольный переход на вектор прерывания по Окончанию приема без какой либо посылки...

Почему???

#include
#include
unsigned short int countInterrupt;
unsigned char Rdata;

void port_init(void)
{
DDRC = 0xFF;
DDRD = 0x70;
DDRB = 0xFF;
}

//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 49uSec
// actual value: 47,743uSec (2,6%)
void timer1_init(void)
{
TCCR1B = 0x00;
TCNT1H = 0xFF;
TCNT1L = 0xEA;
OCR1AH = 0x00;
OCR1AL = 0x16;
OCR1BH = 0x00;
OCR1BL = 0x16;
ICR1H = 0x00;
ICR1L = 0x16;
TCCR1A = 0x00;
TCCR1B = 0x02;
}
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x17; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}

#pragma interrupt_handler uart0_rx_isr:12//постоянно попадаю сюда...
void uart0_rx_isr(void)
{
Rdata=UDR;

////////////////////////////////////////////////

if(Rdata == 0x54)//"T"//test
{
TransmitByte(Rdata);
Test();
}
////////////////////////////////////////////////
}

void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer1_init();
uart0_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x04; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//////////////////////////////////////////////////
/// Transmite Data ///
//////////////////////////////////////////////////
void TransmitByte( unsigned char data ) ///
{ ///
while( !(UCSRA & (1< ; ///
UDR = data;//data; /* start transmittion *////
} ///
//////////////////////////////////////////////////
/**********************************************///
//////////////////////////////////////////////////
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//////////////////////////////////////////////////
/// Delay(Frequency) ///
//////////////////////////////////////////////////
void Delay(unsigned short int F) ///
{ ///
countInterrupt = 20200/F; ///
while(countInterrupt > 0) ///
{ ///
while (!(TIFR & 0x04)); ///
TCNT1H = 0xFF; ///
TCNT1L = 0xEA; ///
TIFR = 0x04; ///
countInterrupt --; ///
} ///
} ///
//////////////////////////////////////////////////
/************************************************/
//////////////////////////////////////////////////
/////////////////////////////////////////////
/// Test ///
/////////////////////////////////////////////
void Test(void) ///
{ ///
int z; ///
z=6; ///
while(z!=0) ///
{ /// ///
PORTD ^= BIT(5); ///
Delay(1); ///
z--; ///
} ///
} ///
/////////////////////////////////////////////
/*******************************************/
/////////////////////////////////////////////
void main(void)
{
init_devices();
while(1)
{
}
}




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

Ответы


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

Сообщение:

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

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

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

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