Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь новичку
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sns
Привет,

Совсем чайник в программировании микроконтроллеров.
Пытаюсь соорудить таймер - изучаю и ковыряю 90с8535 при помощи CodeVision & Proteus.

Программка запускает таймер 2 в асинхронном режиме от часового кварца. В принципе все работает,
но переменные сбрасываются.

Вот объявление переменных -
unsigned char nextdigit=0x00;
unsigned char segment=0x02;

Вот обработка таймера:
interrupt [TIM2_OVF] void timer2_overflow(void)
{
//if (segment==0x03) segment=0x00;
// else segment++;

if (segment==0x00) PORTD=0b10000000;
if (segment==0x01) PORTD=0b01000000;
if (segment==0x02) PORTD=0b00100000;
if (segment==0x03) {
PORTD=0b00010000;
segment=0x00;};

segment++;
nextdigit++;
//PORTD=segment;
}

Все коряво и некрасиво, но для тестирования наверняка - похоже на правду.

Таймер работает и прерывание срабатывает, но переменные приходят пустыми в функцию.
Вочдог выключен, где копать - не могу найти.

ПОдскажите!
otrog
Цитата(sns @ Nov 10 2006, 14:01) *
unsigned char nextdigit=0x00;
unsigned char segment=0x02;

Замените на:
Код
volatile unsigned char nextdigit=0x00;
volatile unsigned char segment=0x02;

Должно помочь.
sns
Цитата(otrog @ Nov 10 2006, 14:13) *
Цитата(sns @ Nov 10 2006, 14:01) *

unsigned char nextdigit=0x00;
unsigned char segment=0x02;

Замените на:
Код
volatile unsigned char nextdigit=0x00;
volatile unsigned char segment=0x02;

Должно помочь.


Не помогло.
Странные грабли...
vooon
Действительно странное поведение

А обязатель но ли segment должна быть глобальной?
Может попробовать static unsigned char segment = 0x02; написать в самом обработчике... blink.gif

Прикрепляю свою библу для экранчиков, хоть это немного не то...
sns
Цитата(vooon @ Nov 10 2006, 23:58) *
Действительно странное поведение

А обязатель но ли segment должна быть глобальной?
Может попробовать static unsigned char segment = 0x02; написать в самом обработчике... blink.gif

Прикрепляю свою библу для экранчиков, хоть это немного не то...


Псе. На казусе показали где я дурак. Оказалось, что я заявил (вернее не оказалось, а так и было в примерчике) два прерывания, ТОИЕ2 и ОСИЕ2, вот по второму не стояла обработка и на нем ресет происходил... Ну и еще по мелочи указали на недопустимость написанного мной всякого.

Обвинения с кодевижина и протеуса снимаются =) Дураком, традиционно, оказался человеческий фактор в моем лице =)

Вот точно говорят - компьютер не ошибается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.