2

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

  1. 当输入电压在 2 秒内低于 1.9V 时程序停止运行。
  2. 当输入电压超过 2.5V 时,程序会立即做出反应。

我尝试通过读取和比较系统的时间戳来解决第一个问题:

#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 User Manual 中找到了该功能,但我不确定它是否是一个好的解决方案。

但我不知道如何解决第二个问题。它应该是一种独立的线程,在程序执行期间监控输入电压。并且程序应该在电路损坏之前立即做出反应(通过调用其他函数)。

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

4

3 回答 3

4

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

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

于 2012-02-06T16:11:54.090 回答
1

您可以在外部中断引脚上连接一个电路,当电压高于 2.5 时给出 1。外部中断可以被编程为在其输入从 0 变为 1 时触发。

于 2012-02-06T16:26:45.990 回答
0

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

我的建议是使用 ASM。非常简单,只需几条指令。

设置 ADC 后,您可以使用减法指令并检查 C(进位)以这种方式您可以验证 IF > 或 IF < 测试 C,如果为零则跳过。跳过下一条指令,即带有呼叫的指令。

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

于 2012-02-06T16:25:49.233 回答