реклама на сайте
подробности

 
 
> Нужна помощь новичку, CodeVIsion + Proteus + 90s8535. Обнуляется переменная.
sns
сообщение Nov 10 2006, 11:01
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 10-11-06
Пользователь №: 22 162



Привет,

Совсем чайник в программировании микроконтроллеров.
Пытаюсь соорудить таймер - изучаю и ковыряю 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;
}

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

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

ПОдскажите!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
otrog
сообщение Nov 10 2006, 12:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(sns @ Nov 10 2006, 14:01) *
unsigned char nextdigit=0x00;
unsigned char segment=0x02;

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

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


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
sns
сообщение Nov 10 2006, 13:45
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 10-11-06
Пользователь №: 22 162



Цитата(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;

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


Не помогло.
Странные грабли...
Go to the top of the page
 
+Quote Post
vooon
сообщение Nov 10 2006, 21:58
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Действительно странное поведение

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

Прикрепляю свою библу для экранчиков, хоть это немного не то...
Прикрепленные файлы
Прикрепленный файл  led_drv.rar ( 5.74 килобайт ) Кол-во скачиваний: 42
 
Go to the top of the page
 
+Quote Post
sns
сообщение Nov 11 2006, 14:21
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 10-11-06
Пользователь №: 22 162



Цитата(vooon @ Nov 10 2006, 23:58) *
Действительно странное поведение

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

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


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

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

Вот точно говорят - компьютер не ошибается.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016