如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
STM8的C语言编程(6)--8位定时器应用之二今天进行的实验依然是用定时器4,只不过改成了用中断方式来实现,由定时器4的中断服务程序来驱动LED的闪烁。实现中断方式的关键点有几个,第一个关键点就是要打开定时器4的中断允许位,在定时器4的IER寄存器中有定义。第二个关键点,就是打开CPU的全局中断允许位,在汇编语言中,就是执行RIM指令,在C语言中,用下列语句实现:_asm("rim");第3个关键点就是中断服务程序的框架或写法,中断服务程序的写法如下:@far@interruptvoidTIM4_UPD_OVF_IRQHandler(void){//下面是中断服务程序的实体}第4个关键点就是要设置中断向量,即将中断服务程序的入口填写到中断向量表中,如下所示,将IRQ23对应的中断服务程序的入口填写成TIM4_UPD_OVF_IRQHandlerstructinterrupt_vectorconst_vectab[]={{0x82,(interrupt_handler_t)_stext},/*reset*/{0x82,NonHandledInterrupt},/*trap*/{0x82,NonHandledInterrupt},/*irq0*/{0x82,NonHandledInterrupt},/*irq1*/{0x82,NonHandledInterrupt},/*irq2*/{0x82,NonHandledInterrupt},/*irq3*/{0x82,NonHandledInterrupt},/*irq4*/{0x82,NonHandledInterrupt},/*irq5*/{0x82,NonHandledInterrupt},/*irq6*/{0x82,NonHandledInterrupt},/*irq7*/{0x82,NonHandledInterrupt},/*irq8*/{0x82,NonHandledInterrupt},/*irq9*/{0x82,NonHandledInterrupt},/*irq10*/{0x82,NonHandledInterrupt},/*irq11*/{0x82,NonHandledInterrupt},/*irq12*/{0x82,NonHandledInterrupt},/*irq13*/{0x82,NonHandledInterrupt},/*irq14*/{0x82,NonHandledInterrupt},/*irq15*/{0x82,NonHandledInterrupt},/*irq16*/{0x82,NonHandledInterrupt},/*irq17*/{0x82,NonHandledInterrupt},/*irq18*/{0x82,NonHandledInterrupt},/*irq19*/{0x82,NonHandledInterrupt},/*irq20*/{0x82,NonHandledInterrupt},/*irq21*/{0x82,NonHandledInterrupt},/*irq22*/{0x82,TIM4_UPD_OVF_IRQHandler},/*irq23*/{0x82,NonHandledInterrupt},/*irq24*/{0x82,NonHandledInterrupt},/*irq25*/{0x82,NonHandledInterrupt},/*irq26*/{0x82,NonHandledInterrupt},/*irq27*/{0x82,NonHandledInterrupt},/*irq28*/{0x82,NonHandledInterrupt},/*irq29*/};解决了以上4个关键点,我们就能很轻松地用C语言实现中断服务了。同样还是利用ST的开发工具,生成一个C程序的框架,然后修改其中的main.c,修改后的代码如下。另外还要修改stm8_interrupt_vector.c。编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。修改后的main.c如下://程序描述:通过初始化定时器4,以中断方式驱动LED闪烁//LED接在MCU的GPIO的PD3上#include"STM8S207C_S.h"main(){//首先初始化GPIOPD_DDR=0x08;PD_CR1=0x08;//将PD3设置成推挽输出PD_CR2=0x00;//然后初始化定时器4TIM4_IER=0x00;//禁止中断TIM4_EGR=0x01;//允许产生更新事件