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

 
 
> 1 секунда на С
ZLOI
сообщение Apr 29 2008, 07:45
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Здравствуйте, интересно бы увидеть фрагмент кода на С, который бы позволял на 16 пике с 4 МГц кварцем каждую секунду увеличивать значение какой-нибудь переменной на 1. Интересно, вдруг я делаю неправильно.

Сообщение отредактировал ZLOI - Apr 29 2008, 07:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GVC
сообщение Apr 29 2008, 09:59
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 13-07-07
Из: Украина, Днепропетровск
Пользователь №: 29 095



Цитата(ZLOI @ Apr 29 2008, 10:45) *
Здравствуйте, интересно бы увидеть фрагмент кода на С, который бы позволял на 16 пике с 4 МГц кварцем каждую секунду увеличивать значение какой-нибудь переменной на 1. Интересно, вдруг я делаю неправильно.


Покажите что и как вы делаете, ну а мы уже скажем так или не так делает.
Конфигурирование таймера и прерывания этож класскика жанра. Показуйте свой код ...


--------------------
2b || !2b = ?
--------------------
Go to the top of the page
 
+Quote Post
ZLOI
сообщение Apr 30 2008, 09:49
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(GVC @ Apr 29 2008, 18:59) *
Покажите что и как вы делаете, ну а мы уже скажем так или не так делает.
Конфигурирование таймера и прерывания этож класскика жанра. Показуйте свой код ...

Забыл подписаться, поэтому не отвечал.
Код
#include    <pic12F6x.h>

int time;

void interrupt Times(void)
{
    if (++time==3906)
        {
            unsigned char to_delay=0;
            while (++to_delay<6)
                {}
            time=0;
            _asm NOP _endasm
            time=0;//    
            time=0;//Вообщем надо как-то паузу сделать,
            TMR0=0;//по грамотному, а то вдруг компилер сменил и всё, не пашет.
            GPIO=!GPIO;
            }
    T0IF = 0;
}
main()
{
    int x;
    GPIO=0;
    CMCON=7;
    TRISIO=254;
    GPIO=0;
    GIE=1;
    T0IE=1;
    T0CS=0;
    PSA=1;
    TMR0=1;
    for(;;)    {}
}

Собственно сейчас у меня компилера нет поэтому протестить особо не могу, но по памяти, что-то типа такого делал. И работало оно как надо, по крайней мере за неделю ни на секунду не сдвинулось.
Алгоритм простой, таймер инкрементиться каждые 256 машинных циклов таймер вызывает прерывание и увеличивает переменную time на 1. Секунда проходит через 1000 000 машинных циклов или через 3906 прерываний и ещё 64 такта. Вот у меня и вопрос, как сделать чисто на С, чтобы любой другой компилятор поставил и всё работает. Хочется знаете, увидеть как делают мастера.

Цитата(rezident @ Apr 29 2008, 21:00) *
Таймер разрядности менее, чем 32 можно программно расширить до 32-х разрядов. А с помощью 32-х разрядного уже можно отмерить интервал в 1с даже при тактовой 4ГГц.

Знаю. Проблем со "сделать" нет. Не хочется быть умным программистом, который тупым кодом делает гениальные вещи. Хочется делать красиво. Вот Вы мне скажете. Я посмотрю и подумаю: "Ёлки палки, да ведь здесь же надо в таком направлении двигаться, такие книжки читать и т.д.".

P.S.
Сомневаюсь, что буду когда-нибудь использовать такие бешеные частоты smile.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:08
Рейтинг@Mail.ru


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