пауза в таймере

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Вот собственно сам код таймера :

Код: Выделить всё

#include <io.h> 
#include <delay.h> 

static flash unsigned char digit[] = 
{ 
(0b11000000), //0 
(0b11111001), //1 
(0b10100100), //2 
(0b10110000), //3 
(0b10011001), //4 
(0b10010010), //5 
(0b10000010), //6 
(0b11111000), //7 
(0b10000000), //8 
(0b10010000) //9 
}; 

static flash unsigned char razryad[] = 
{ 
(1), //0 
(2), //1 
(4), //2 
(, //3 
}; 


void main(void) 
{ 
int i,j,k,m; 
PORTD=0x00; 
DDRD=0b11111111; 
PORTC=0xFF; 
DDRC=0b11111111; 

while (1) 
{ 
for(i=0;i<10;i++) 
{ 
for(k=0;k<10;k++) 
{ 
m=k; 
for(j=0;j<50;j++) 
{ 
PORTD=digit[i]; 
PORTC=razryad[2]; 
delay_ms(10); 
PORTD=digit[m]; 
PORTC=razryad[3]; 
delay_ms(10); 
} 
} 
} 
} 
}


подскажите пожалуста как можно сделать паузу в этом таймере

лучше бы так- чтобы нажал на кнопку и отсчет остановился на последней секунде и больше не шел не сброс а именно последняя секунда (delay_ms не помогло- вместо 11 показывает 1 или вместо 113 - 3 ,тоесть последнее число когда была нажата кнопка пауза полностью не показывает) пооомогите плиииз

может как то с помощью внешнего прерывания подскажите пожалуста?
Последний раз редактировалось Аlex Вс дек 15, 2013 23:59:51, всего редактировалось 1 раз.
Причина: Тег [code]
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

C динамической индикацией так не пойдет, у Вас пауза останавливает всю индикацию, и показывает только последнюю цифру включившуюся перед паузой, со статикой еще можно как нибудь, а для динамики нужно организовать, так называемый драйвер, на прерываниях таймера любого, и пауза никак не должна влиять на остановку индикации, тут нужно и кнопку динамически опрашивать, собственно один драйвер должен делать и то и другое сразу.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

zero648 писал(а):C динамической индикацией так не пойдет, у Вас пауза останавливает всю индикацию, и показывает только последнюю цифру включившуюся перед паузой, со статикой еще можно как нибудь, а для динамики нужно организовать, так называемый драйвер, на прерываниях таймера любого, и пауза никак не должна влиять на остановку индикации, тут нужно и кнопку динамически опрашивать, собственно один драйвер должен делать и то и другое сразу.
а можете кодом подсказать как это сделать
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

В поисковиках забанили ?
В интернете подобного - как мусора на помойках...

ЗЫ: И не цитируйте полностью предыдущие сообщения, на форуме это запрещено !
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

Сообщение titoFF »

Посмотрите как сделано в том коде, откуда вы выдрали инициализацию массивов и вывод данных на индикатор. Там все действия выполняются в обработчиках прерываний. Вам необходимо сделать так же. Динамическая индикация НИКОГДА не обрабатывается в основном цикле. Ну, кроме специфичных задач, но это не ваш случай.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

titoFF писал(а):Посмотрите как сделано в том коде.....
while (1)
{


for(s=0;s<10;s++)
{

for(i=0;i<10;i++)
{

for(k=0;k<10;k++)
{

for(j=0;j<4000;j++)
{

PORTC=digit;
PORTD=razryad[0];
delay_ms(5);

PORTC=digit;
PORTD=razryad[2];
delay_ms(5);

PORTC=digit[k];
PORTD=razryad[3];
delay_ms(5);

PORTB.4=1;


if (PINB.2==1)
{

goto label1;
}


}

}

}
}

}
label1:
while(1)
{


PORTC=digit;
PORTD=razryad[0];
delay_ms(5);

PORTC=digit;
PORTD=razryad[2];
delay_ms(5);

PORTC=digit[k];
PORTD=razryad[3];
delay_ms(5);
PORTB.4=0;
PORTB.4=0;
PORTB.5=1;
PORTB.3=1;




}
}




однако все можно :)))


При появлении нуля на PINB.2 включается label1,который и является паузой,млин ничего сложного а никто и не подсказал мол так невозможно
Реклама
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

Сообщение titoFF »

Можно то оно можно. Но если захотите добавить туда функционала, упретесь в невозможность этого действия, либо придется городить. Динамическая индикация должна выполняться на прерываниях, а не в главном цикле.
Ответить

Вернуться в «AVR»