【发布时间】:2022-06-15 20:40:34
【问题描述】:
我必须编写一个函数,只需调用一次,就必须:
-
打开一个输出引脚
-
引脚保持高电平 200mS
-
在定时器结束时,引脚需要再次为低电平。
-
引脚保持低电平 200mS
-
在计时器结束时,可以再次调用该函数。
打开和关闭我已经编写并测试了功能的输出引脚:
outOn(pin_id);
outOff(pin_id);
现在,我正在尝试编写执行上述操作的函数,这就是我迄今为止提出的:
void outOnT02(enum e_outs ou){
outOn(ou);
gu_RegTim.BTime[BTIM_FUNCT].Timer = O_SEC01*2;
if(gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer) {
outOff(ou);
}
}
函数被命名为outOnT02,因为:
- 这是一个输出;
- 调用后pin变高了;
- T02 因为引脚保持高电平 0.2 秒。
outOn(ou); 使引脚变高,
outOff(ou); 使引脚变为低电平,
gu_RegTim.BTime[BTIM_FUNCT].Timer = O_SEC01*2;
启动一个 200 毫秒的计时器,
当计时器用完时,gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer 为真。
它可以工作,但正如你所知道的,我必须把它放在一个循环中,否则gu_RegTim.BTime[BTIM_FUNCT].b.Stato == O_EndTimer 永远不会是真的,所以,pin 将永远保持高电平。
这就是我卡住的地方。我不能使用SLEEP(200);,因为我不能中断代码的执行。
语言是C,ide是MPLAB X IDE v6.00,编译器是XC8 v2.31,cpu是PIC16F15355。
【问题讨论】:
-
C 和 C++ 是不同的语言,看起来 C++ 标记不适合您的问题。
-
你有操作系统吗?还是这是裸机开发?
-
@JohnFilleau PIC = 裸机;这是一个具有 14k 程序空间的微控制器。