embedded - 执行 8051 的特定时间段
问题描述
请帮个忙,
我正在使用 MikroC 编译器为 8051 微控制器编写程序,我试图找到一种方法来执行并重复主程序 10 秒,然后停止 2 秒
下面的代码只是一个示例,我需要每 200 毫秒切换两个端口,重复 10 秒,然后停止 2 秒,然后重复此操作。
void main()
{
P2 = 0xAE;
while (1) {
P2 = ~P2;
Delay_ms(200);
}
}
谢谢
解决方案
您可以使用计数器来测量时间:例如:
#define MS_PER_TICK 200
#define BLINK_PERIOD_IN_S 10
#define PAUSE_PERIOD_IN_S 2
#define BLINK_PERIOD_IN_TICKS (BLINK_PERIOD_IN_S * 1000 / MS_PER_TICK)
#define PAUSE_PERIOD_IN_TICKS (PAUSE_PERIOD_IN_S * 1000 / MS_PER_TICK)
void main(void) {
unsigned char ticks = 0;
P2 = 0xAE;
for (;;) {
Delay_ms(MS_PER_TICK);
ticks++;
if (ticks <= BLINK_PERIOD_IN_TICKS) {
P2 = ~P2;
}
if (ticks == BLINK_PERIOD_IN_TICKS + PAUSE_PERIOD_IN_TICKS) {
ticks = 0;
}
}
}
推荐阅读
- scala - 如何在火花中加入多个数据框时应用Like操作?
- excel - VBA:如何编辑代码以消除堆栈空间不足的错误?
- javascript - 用 JavaScript 划分输入字段
- c++ - 为什么这两个函数的行为不一样
- python - dajngo 应用程序中的多个字段搜索错误的结果
- mysql - 使用 wpdb prepare 安全地收集带有“join”的“where”子句数组
- c++ - 如何将 .txt 文件中的浮点数据写入带有 VS2017 的二维数组?
- python - 如何从 Python 函数中获取列表中的项目数
- c++ - 验证用户输入是否为有效数字 [从 'char' 到 'char*' 的无效转换]
- java - 当我每次运行“CompleteableFuture”时,它是否在同一个线程池中运行,只是不同的线程?