Страница 1 из 1

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

Добавлено: Вс дек 15, 2013 22:43:02
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 ,тоесть последнее число когда была нажата кнопка пауза полностью не показывает) пооомогите плиииз

может как то с помощью внешнего прерывания подскажите пожалуста?

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

Добавлено: Вс дек 15, 2013 22:57:15
zero648
C динамической индикацией так не пойдет, у Вас пауза останавливает всю индикацию, и показывает только последнюю цифру включившуюся перед паузой, со статикой еще можно как нибудь, а для динамики нужно организовать, так называемый драйвер, на прерываниях таймера любого, и пауза никак не должна влиять на остановку индикации, тут нужно и кнопку динамически опрашивать, собственно один драйвер должен делать и то и другое сразу.

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

Добавлено: Вс дек 15, 2013 23:01:09
sirha
zero648 писал(а):C динамической индикацией так не пойдет, у Вас пауза останавливает всю индикацию, и показывает только последнюю цифру включившуюся перед паузой, со статикой еще можно как нибудь, а для динамики нужно организовать, так называемый драйвер, на прерываниях таймера любого, и пауза никак не должна влиять на остановку индикации, тут нужно и кнопку динамически опрашивать, собственно один драйвер должен делать и то и другое сразу.
а можете кодом подсказать как это сделать

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

Добавлено: Пн дек 16, 2013 00:02:49
Аlex
В поисковиках забанили ?
В интернете подобного - как мусора на помойках...

ЗЫ: И не цитируйте полностью предыдущие сообщения, на форуме это запрещено !

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

Добавлено: Пн дек 16, 2013 05:36:25
titoFF
Посмотрите как сделано в том коде, откуда вы выдрали инициализацию массивов и вывод данных на индикатор. Там все действия выполняются в обработчиках прерываний. Вам необходимо сделать так же. Динамическая индикация НИКОГДА не обрабатывается в основном цикле. Ну, кроме специфичных задач, но это не ваш случай.

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

Добавлено: Вт дек 17, 2013 00:20:01
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,который и является паузой,млин ничего сложного а никто и не подсказал мол так невозможно

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

Добавлено: Вт дек 17, 2013 02:19:20
titoFF
Можно то оно можно. Но если захотите добавить туда функционала, упретесь в невозможность этого действия, либо придется городить. Динамическая индикация должна выполняться на прерываниях, а не в главном цикле.