是否可以在HI-TECH C中为PIC12 MCU创建多线程程序

时间:2012-02-06 15:56:24

标签: c multithreading microcontroller pic microchip

我的朋友请我帮他写一个PIC12 MCU的小程序。我们想要

  1. 当输入电压在2秒内低于1.9V时,程序停止运行。
  2. 当输入电压超过2.5V时,程序会立即作出反应。
  3. 我尝试通过阅读和比较系统的时间戳来解决第一个问题:

    #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;
        }
    }
    

    我在PIC12用户手册中找到了函数gmtime(time_t *),但我不确定它是不是一个好的解决方案。

    但我无法弄清楚如何解决第二个问题。它应该是一种独立的线程,它在程序执行期间监视输入电压。程序应该在电路损坏之前立即做出反应(通过调用其他功能)。

    我是计算机程序员,但我从来没有编写过MCU。我想知道是否可以在HI-TECH C中做这样的事情?

3 个答案:

答案 0 :(得分:3)

这里典型的做法是使用 interrupts ,特别是定时器中断。

您设置了一个中断来运行,例如每1毫秒,在该中断代码中,您可以执行程序需要快速响应的任何内容。这样就保留了正常的执行流程,并模拟了两个任务是并行完成的。

答案 1 :(得分:1)

你可以将一个电路连接到外部中断引脚,当电压高于2.5时,它会给出1。只要输入从0变为1,就可以对外部中断进行编程。

答案 2 :(得分:0)

我认为C语言不是PIC12系列的最佳解决方案。

我的建议是使用ASM。很少说明这很简单。

设置ADC后,可以使用减法指令并检查C(进位) 通过这种方式,您可以验证IF&gt;或IF&lt; 测试C并跳过,如果为零。跳过下一条指令,即通话时的指令。

您也可以更改micro并使用PIC18以获得更好的c代码性能。