(问题可能是层窗户纸)
如题,最近在下载完STC8H的官方库函数后,卡在了定时器这一示例代码中。
想要实现的功能:定时器4计时1ms,然后进入中断函数过后控制接在P24口的LED以1S的周期闪烁。
- #include <STC8H.H>
- #include <config.h>
- #include <STC8G_H_GPIO.h>
- #include <STC8G_H_Delay.h>
- #include <STC8G_H_Timer.h>
- #include <STC8G_H_NVIC.h>
-
- void GPIO_Config()
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.Mode=GPIO_PullUp; //初始化IO口为准双向口模式
- GPIO_InitStructure.Pin=GPIO_Pin_All; //指定初始化的IO口(0~7)
- GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
- }
-
- void Timer_Config()
- {
- TIM_InitTypeDef TIM_InitStructure; //结构体定义
- TIM_InitStructure.TIM_ClkOut=DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_ClkSource=TIM_CLOCK_1T; //指定时钟源,TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_Mode=TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
- //TIM_InitStructure.TIM_PS=; //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器)
- TIM_InitStructure.TIM_Run=ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value=65536UL - (MAIN_Fosc / (100*12)); //初值;
- Timer_Inilize(Timer4,&TIM_InitStructure); //初始化结构体
- NVIC_Timer0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
- }
- void Timer4_Isr(void) interrupt 20
- {
- static unsigned char cnt=0;
- cnt++;
- if(cnt>100)
- {
- cnt=0;
- P24=~P24;
- }
- }
-
-
- void main(void)
- {
- EAXSFR(); /* 扩展寄存器访问使能 */
- GPIO_Config();
- Timer_Config();
- P24=0;
-
- EA=1;
- while(1)
- {
-
- }
-
- }
复制代码
很荣幸,再次没有进入中断
但在翻看官方的库函数时却发现中断函数控制P6口??
(以下是官方库函数)
- /************************ 定时器配置 ****************************/
- void Timer_config(void)
- {
- TIM_InitTypeDef TIM_InitStructure; //结构定义
-
- //定时器0做16位自动重装, 中断频率为100000HZ,中断函数从P6.7取反输出50KHZ方波信号.
- TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 100000UL); //初值,
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
- NVIC_Timer0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
-
- //定时器1做16位自动重装, 中断频率为10000HZ,中断函数从P6.6取反输出5KHZ方波信号.
- TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_T1Stop
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 10000); //初值,
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer1,&TIM_InitStructure); //初始化Timer1 Timer0,Timer1,Timer2,Timer3,Timer4
- NVIC_Timer1_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
-
- //定时器2做16位自动重装, 中断频率为1000HZ,中断函数从P6.5取反输出500HZ方波信号.
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000); //初值
- TIM_InitStructure.TIM_PS = 0; //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer2,&TIM_InitStructure); //初始化Timer2 Timer0,Timer1,Timer2,Timer3,Timer4
- NVIC_Timer2_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
-
- //定时器3做16位自动重装, 中断频率为100HZ,中断函数从P6.4取反输出50HZ方波信号.
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (100*12)); //初值
- TIM_InitStructure.TIM_PS = 0; //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer3,&TIM_InitStructure); //初始化Timer3 Timer0,Timer1,Timer2,Timer3,Timer4
- NVIC_Timer3_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
-
- //定时器4做16位自动重装, 中断频率为50HZ,中断函数从P6.3取反输出25HZ方波信号.
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (50*12)); //初值
- TIM_InitStructure.TIM_PS = 0; //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后启动定时器, ENABLE或DISABLE
- Timer_Inilize(Timer4,&TIM_InitStructure); //初始化Timer4 Timer0,Timer1,Timer2,Timer3,Timer4
- NVIC_Timer4_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
- }
复制代码
如果想要控制其他IO口(使用定时器作中断),在基于官方库函数的基础上我应该作啥修改?
望各位大佬指教~~~~
谢谢大家!
|