Можно ли создать многопоточную программу для микроконтроллера PIC12 в HI-TECH C - PullRequest
2 голосов
/ 06 февраля 2012

Мой друг просит меня помочь ему написать небольшую программу для PIC12 MCU. Мы хотим

  1. Программа прекращает работу, если входное напряжение менее 1,9 В в течение 2 секунд.
  2. Программа реагирует немедленно, когда входное напряжение превышает 2,5 В.

Я пытаюсь решить первую проблему, читая и сравнивая системную метку времени:

#include <time.h>
... ...
time_t beg, end;
beg = 0;
end = 0;
while(1){
    if(INP_VOL < 1.9){
        if(beg == 0){
            /* Read timestamp when voltage < 1.9 */
            gmtime(&beg);
        }
        /* Campare timestamp */
        gmtime(&end);
        if(end - beg > 2){
            break; /* !!stop running!! */
        }
    }
    else{
        /* if voltage back to normal, reset beg timestamp. */
        beg = 0;
    }
}

Я нашел функцию gmtime(time_t *) в руководстве пользователя PIC12, но я не уверен, что это хорошее решение.

Но я не могу понять, как решить вторую проблему. Это должен быть своего рода независимый поток, который контролирует входное напряжение во время выполнения программы. И программа должна немедленно реагировать (вызывая другую функцию), прежде чем цепь будет повреждена.

Я программист, но я никогда не программировал для MCU. Я хотел бы знать, возможно ли сделать это в HI-TECH C?

Ответы [ 3 ]

3 голосов
/ 06 февраля 2012

Обычно здесь нужно использовать прерывания , в частности прерывания по таймеру.

Вы устанавливаете прерывание для запуска, например, каждые 1 мс, и вэтот код прерывания вы делаете все, что программа должна быстро реагировать на.Это оставляет обычный поток выполнения в покое и эмулирует выполнение двух задач параллельно.

1 голос
/ 06 февраля 2012

К внешнему контакту прерывания можно подключить цепь, которая выдает 1, когда напряжение превышает 2,5.Внешнее прерывание может быть запрограммировано на срабатывание, когда его вход изменяется от 0 до 1.

0 голосов
/ 06 февраля 2012

Я не думаю, что язык C - лучшее решение для семейства PIC12.

Я предлагаю использовать ASM.Это очень просто с помощью нескольких инструкций.

После установки АЦП вы можете использовать инструкцию по вычитанию и проверить C (перенос). Таким образом, вы можете проверить IF> или IF

Вы также можете изменить микро и использовать PIC18 для лучшей производительности кода c.

...