在C语言中,可以使用`signal`函数来设置定时器,并通过`alarm`函数来触发定时事件。下面是一个简单的定时器程序示例,该程序会在指定的时间间隔后打印一条消息:
```c
include include include // 定义定时器处理函数 void timer_handler(int signum) { printf("Timer expired!\n"); } int main() { // 注册SIGALRM信号的处理函数为timer_handler if (signal(SIGALRM, timer_handler) == SIG_ERR) { perror("register alarm fail"); return -1; } // 设置定时器,间隔为1秒 alarm(1); // 主程序循环 while (1) { printf("Main program is running...\n"); sleep(1); } return 0; } ``` 在这个示例中,我们首先定义了一个名为`timer_handler`的函数,用于处理定时器超时事件。然后在`main`函数中使用`signal`函数注册`SIGALRM`信号的处理函数为`timer_handler`。接着调用`alarm`函数设置定时器,这里设置定时器的间隔为1秒。最后在一个`while`循环中,不断打印"Main program is running...",同时通过`sleep`函数暂停程序1秒。当定时器超时后,会触发`SIGALRM`信号,从而执行`timer_handler`函数中的内容,即打印"Timer expired!"。然后程序会继续执行`while`循环中的代码。 请注意,`alarm`函数设置的是定时器,而不是计时器。定时器在指定的时间间隔后发送一个信号,而计时器则是在一段时间内累积计数。在上面的示例中,我们使用的是定时器。 如果你需要在更短的时间间隔内进行定时,例如50ms,可以使用定时器中断的方式。下面是一个使用定时器中断的示例代码: ```c include include include // 定义定时器中断处理函数 void timer0_ISR() interrupt 1 { printf("Timer expired (50ms)!\n"); } int main() { // 设置定时器0为方式1 TMOD |= 0x01; // 计算设定值(50ms) TH0 = (65536 - (11059200UL / 12 / 20)); TL0 = TH0; // 启动定时器0 TR0 = 1; // 主循环 while (1) { // 这里可以放主程序 } return 0; } ``` 在这个示例中,我们使用定时器0的中断来处理50ms的定时事件。`TMOD`寄存器设置定时器0为方式1,`TH0`和`TL0`寄存器的初值设为`65536 - (11059200UL / 12 / 20)`,即计算出每20个晶振周期为50ms,`TR0`启动定时器0。在`while`循环中,我们可以放置主程序代码,而`timer0_ISR`函数会在每50ms被自动调用一次,打印出"Timer expired (50ms)!"。 请根据你的具体需求选择合适的方法来实现定时信号的使用。