Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.03.2011, 19:50
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Что делаю неправильно?
Привет всем! вообщем я в стопоре... ни как не могу понять что именно я делаю не правильно в этом коде?
Код:
|
#include ‹mega8.h›
#include ‹delay.h›
#define KEY_UP 1
#define KEY_DN 2
#define KEY_NEXT 4
#define KEY_NONE 0
// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
}
typedef unsigned char u8;
// ôóíêöèÿ, êîòîðàÿ îïðàøèâàåò êíîïêè è âîçâðàùàåò êîä íàæàòîé
u8 get_key(void){
u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT));
delay_ms(15);
if(temp != (~(PINC & (KEY_UP | KEY_DN | KEY_NEXT))))
return KEY_NONE;
else
return temp;
}
static void mode1(void){
u8 key;
while(1){
key = get_key();
switch(key){
case KEY_UP: if(OCR2 ‹ 255) OCR2++;
break;
case KEY_DN: if(OCR2›0) OCR2--;
break;
case KEY_NEXT:
return;
}
}
}
static void mode2(void){
u8 key;
static signed char reverse;
while(1){
key = get_key();
if(key == KEY_NEXT) return;
if(OCR2 == 255) reverse = -1;
if(OCR2 == 0) reverse = 1;
OCR2 += reverse;
delay_ms(100);
}
}
static void mode3(void){
while(get_key() != KEY_NEXT);
}
void main(void)
{
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=P State2=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=FFh
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while(1){
mode1();
mode2();
mode3();
}
} |
|
|
|
|
12.03.2011, 19:54
|
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
А декларировать переменные нынче не модно?
|
|
|
|
12.03.2011, 19:59
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
Сообщение от кротоВ
|
декларировать переменные нынче не модно?
|
а какая не задакларированна? ткните носом чтоли тогда! признаюсь код подсказали, я с ним мучаюсь!
|
|
|
|
12.03.2011, 20:04
|
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
Да не вроде все, temp (Я ![Улыбка](images/smilies/icon_smile.gif) ) пропустил вначале... как компилятор ругается?
|
|
|
|
12.03.2011, 20:08
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
никак CVAVR 1.25.5 компилирует все на Ок. а в протусе не пашет, я по осцилографу смотрю, работуют все режимы или нет.
|
|
|
|
12.03.2011, 20:12
|
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
У вас похоже в процедуре прерывания по таймеру...
"// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
}"
отсутствует перезагрузка таймера счётчика...
при этом прерывание вроде как включено...если не используете его, то удалите...
|
|
|
|
12.03.2011, 20:13
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
|
|
|
|
12.03.2011, 20:14
|
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
Протеус не критерий...попробуйте "живой" МК.
|
|
|
|
12.03.2011, 20:16
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Что делаю не правильно?
гляньте на порты пожалайста и кнопки, все правилно седлал? у меня сомнения у сомого. сам новичок, и глаз уже замылился...
|
|
|
|
12.03.2011, 20:20
|
|
Заблокирован
Регистрация: 06.11.2010
Сообщений: 267
Сказал спасибо: 13
Сказали Спасибо 108 раз(а) в 65 сообщении(ях)
|
Re: Что делаю не правильно?
Ну инициализацию перефирии вы похоже "уизардом" делали каким то? Мне сразу и не проверить, без перезагрузки в виндовс ![Улыбка](images/smilies/icon_smile.gif) А не могу пока...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:22.
|
|