Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 14.02.2013, 20:11  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Прерывания?

Подскажите почему при возникновении прерывания,по совпадению таймера, прога начинается сначала?
int main(void)
{

DDRA=0b00100100;
DDRD=0b00000100;//íàñòðîéêà ïîðòîâ
DDRC=0b00100100;

cli();
TCCR1B=(1‹‹WGM12)|(1‹‹CS10);
TIMSK1=(1‹‹OCIE1A);
ClearBit(PORTA,2);
OCR1A=0x0F0F;
sei();
while (1)
{
if (J_1==1)
ReadJoy1();

if (J_2==1)
ReadJoy2();

if (J_3==1)
ReadJoy3();

if (J_4==1)
ReadJoy4();

if (J_5==1)
ReadJoy5();
}

}

ISR (TIMER1_COMPA)
{
l++;
}
Реклама:
Senay76 вне форума  
Непрочитано 14.02.2013, 21:07  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,415
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания???

Это вся программа?
baiderin вне форума  
Непрочитано 14.02.2013, 21:09  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Прерывания???

Из приведенного фрагмента не видно где используется переменная l. Где объявлена тоже, но где то объявлена иначе бы не собралось. Возможно компилятор с оптимизировал код и выкинул обработчик (все равно переменная не используется). Тогда все вектора резолвятся на bad_interrupt - а это как раз переход на нулевой адрес. По пробуйте объявить l как volatile uintXX_t l.
_guardianangel вне форума  
Непрочитано 14.02.2013, 21:51  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Re: Прерывания???

нет, это не вся программа есть еще функции readJoy, там и используется переменная i
Senay76 вне форума  
Непрочитано 14.02.2013, 21:54  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Re: Прерывания???

По пробуйте объявить l как volatile uintXX_t l.
раскажите пожалуйста подробне
Senay76 вне форума  
Непрочитано 14.02.2013, 22:04  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Прерывания???

Ну и как у Вас объявлена переменная i и где?
_guardianangel вне форума  
Непрочитано 14.02.2013, 22:12  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Re: Прерывания???

Сообщение от _guardianangel Посмотреть сообщение
Ну и как у Вас объявлена переменная i и где?
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
#define SetBit(reg, bit) reg |= (1‹‹bit)
#define ClearBit(reg, bit) reg &= (~(1‹‹bit))
#define InvBit(reg, bit) reg ^= (1‹‹bit)
#define BitIsSet(reg, bit) ((reg & (1‹‹bit)) != 0)
#define BitIsClear(reg, bit) ((reg & (1‹‹bit)) == 0)
char i=7;
char L_PORTA=0; L_PORTC=0; L_PORTD=0;
char Data1,Data2,Data3,Data4,Data5,Buffer;
int Joy_1,Joy_2,Joy_3,Joy_4,Joy_5;
Senay76 вне форума  
Непрочитано 14.02.2013, 22:16  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Re: Прерывания???

нашел всю прогу целиком, просто писал надругом компе.
код прилагается, проблема таже.
#define __AVR_AT90USB1286__ 1
#define F_CPU 16000000L // ÷àñòîòà êâàðöà â Ãö


#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹avr/iousb1286.h›
#include ‹avr/pgmspace.h›
#include ‹util/delay.h›



#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
#define MaxResolution 100

#define SetBit(reg, bit) reg |= (1‹‹bit)
#define ClearBit(reg, bit) reg &= (~(1‹‹bit))
#define InvBit(reg, bit) reg ^= (1‹‹bit)
#define BitIsSet(reg, bit) ((reg & (1‹‹bit)) != 0)
#define BitIsClear(reg, bit) ((reg & (1‹‹bit)) == 0)
char i=7;
char L_PORTA=0; L_PORTC=0; L_PORTD=0;
char Data1,Data2,Data3,Data4,Data5,Buffer;
int Joy_1,Joy_2,Joy_3,Joy_4,Joy_5;


/////////////////////////////////////////////////////////
ISR (TIMER1_COMPA_vector)
{
if ((L_PORTA&0X0==(PORTA&0x0) Joy_2=1;
if ((L_PORTD&0x01)==(PORTD&0x01)) Joy_3=1;
if ((L_PORTC&0x02)==(PORTC&0x02)) Joy_4=1;
if ((L_PORTC&0x0==(PORTC&0x0) Joy_5=1;

L_PORTA=PORTA;
L_PORTC=PORTC;
L_PORTD=PORTD;

}
void ReadJoy1(void)
{
if ((PORTA & (1‹‹0)) != 0 )//ïðîâåðêà íà 1
{
SetBit(Buffer,i); i=i-1;
}
ClearBit(Buffer,i); i=i-1;
if (i==1)
{
i=7;
Data1=Buffer;
SetBit(PORTA,2); // çàâåðøèòü îïðîñ
ClearBit(PORTA,5);// çàïðîñ 2-ãî äæîñòèêà
}
Joy_1=0;
}
/////////////////////////////////////////////////////////
void ReadJoy2(void)
{
if ((PORTA & (1‹‹3)) != 0 )//ïðîâåðêà íà 1
{
SetBit(Buffer,i); i=i-1;
}
ClearBit(Buffer,i); i=i-1;
if (i==1)
{
i=7;
Data2=Buffer;
SetBit(PORTA,5); // çàâåðøèòü îïðîñ
ClearBit(PORTD,2);// çàïðîñ 3-ãî äæîñòèêà
}
Joy_2=0;
}
//////////////////////////////////////////////////////////////
void ReadJoy3(void)
{
if ((PORTD & (1‹‹0)) != 0 )//ïðîâåðêà íà 1
{
SetBit(Buffer,i); i=i-1;
}
ClearBit(Buffer,i); i=i-1;
if (i==1)
{
i=7;
Data3=Buffer;
SetBit(PORTD,2); // çàâåðøèòü îïðîñ
ClearBit(PORTC,2);// çàïðîñ 3-ãî äæîñòèêà
}
Joy_3=0;
}
/////////////////////////////////////////////////////////////
void ReadJoy4(void)
{
if ((PORTC & (1‹‹0)) != 0 )//ïðîâåðêà íà 1
{
SetBit(Buffer,i); i=i-1;
}
ClearBit(Buffer,i); i=i-1;
if (i==1)
{
i=7;
Data4=Buffer;
SetBit(PORTC,2); // çàâåðøèòü îïðîñ
ClearBit(PORTC,5);// çàïðîñ 3-ãî äæîñòèêà
}
Joy_4=0;
}
////////////////////////////////////////////////////////////
void ReadJoy5(void)
{
if ((PORTC & (1‹‹3)) != 0 )//ïðîâåðêà íà 1
{
SetBit(Buffer,i); i=i-1;
}
ClearBit(Buffer,i); i=i-1;
if (i==1)
{
i=7;
Data5=Buffer;
SetBit(PORTC,5); // çàâåðøèòü îïðîñ
ClearBit(PORTA,2);// çàïðîñ 3-ãî äæîñòèêà
}
Joy_5=0;
}
////////////////////////////////////////////////////////
int main(void)
{

DDRA=0b00100100;
DDRD=0b00000100;//íàñòðîéêà ïîðòîâ
DDRC=0b00100100;
//ÍÀÑÒÐÎÉÊÀ ÒÀÉÌÅÐÀ

cli();
TCCR1B=(1‹‹WGM12)|(1‹‹CS10);
TIMSK1=(1‹‹OCIE1A);
ClearBit(PORTA,2);//ïåðâûé çàïðîñ
OCR1A=0x0F0F;
sei();
while (1)
{
if (Joy_1==1)
ReadJoy1();

if (Joy_2==1)
ReadJoy2();

if (Joy_3==1)
ReadJoy3();

if (Joy_4==1)
ReadJoy4();

if (Joy_5==1)
ReadJoy5();
}

}
Senay76 вне форума  
Непрочитано 14.02.2013, 22:21  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Прерывания???

char i=7; замени на volatile char i=7; а лучше на volatile uint8_t i = 7;
_guardianangel вне форума  
Непрочитано 14.02.2013, 22:25  
Senay76
Частый гость
 
Регистрация: 19.10.2010
Сообщений: 35
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Senay76 на пути к лучшему
По умолчанию Re: Прерывания?

попробовал оба варианта, но ничего не изменилось
Senay76 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания в LPC21xx Vitek_S Микроконтроллеры, АЦП, память и т.д 1 30.05.2009 22:34
Прерывания в AVR uk8amk Микроконтроллеры, АЦП, память и т.д 3 17.10.2008 14:25
Прерывания AT89C2051 awix Микроконтроллеры, АЦП, память и т.д 6 21.09.2008 20:57
Прерывания на atmega8 klim Микроконтроллеры, АЦП, память и т.д 4 16.09.2008 11:05
Прерывания в ATmega128 Святослав Микроконтроллеры, АЦП, память и т.д 2 10.02.2006 16:28


Часовой пояс GMT +4, время: 16:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot