1、STM8 的 C 语言编程(7)16 位定时器的中断应用在 STM8 中,除了有 8 位的定时器外,还有 16 位的定时器。今天进行的实验就是针对 16 位定时器 2 来进行的。除了计数单元为 16 位的,其它设置与前面8 位的定时器基本一样。下面的程序也是采样中断方式,由定时器 2 的中断服务程序来驱动 LED 的闪烁。具体的程序代码如下,其它注意点见上一篇,另外要注意别忘了修改相应的中断向量。/ 程序描述:通过初始化定时器 2,以中断方式驱动 LED 闪烁/ LED 接在 MCU 的 GPIO 的 PD3 上#include “STM8S207C_S.h“main()/ 首先初始化 GPI
2、OPD_DDR = 0x08;PD_CR1 = 0x08; / 将 PD3 设置成推挽输出PD_CR2 = 0x00;/ 然后初始化定时器 4 TIM2_IER = 0x00; / 禁止中断TIM2_EGR = 0x01; / 允许产生更新事件TIM2_PSCR = 0x01; / 计数器时钟= 主时钟/128=2MHZ/2/ 相当于计数器周期为 1uS/ 设定重装载时的寄存器值/ 注意必须保证先写入高 8 位,再写入低 8 位TIM2_ARRH = 0xEA; / 设定重装载时的寄存器的高 8 位TIM2_ARRL = 0x60; TIM2_CNTRH = 0xEA; / 设定计数器的初值T
3、IM2_CNTRL = 0x60; / 定时周期=1*60000=60000uS=60msTIM2_CR1 = 0x01; / b0 = 1,允许计数器工作/ b1 = 0,允许更新/ 设置控制器,启动定时器TIM2_IER = 0x01; / 允许更新中断_asm(“rim“); / 允许 CPU 全局中断while(1) / 进入无限循环 / 函数功能:定时器 4 的更新中断服务程序/ 输入参数:无/ 输出参数:无/ 返 回 值:无far interrupt void TIM2_UPD_IRQHandler (void)TIM2_SR1 = 0x00; / 清除更新标志PD_ODR = PD_ODR 0x08; / LED 驱动信号取反/LED 闪烁频率=2MHZ/2/60000/2=8.3