我的朋友请我帮他写一个PIC12 MCU的小程序。我们想要
我尝试通过阅读和比较系统的时间戳来解决第一个问题:
#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中做这样的事情?
答案 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代码性能。