找回密码
 立即注册
查看: 1238|回复: 4

STC8H官方库定时器问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-12-26 09:36:03
已绑定手机

3

主题

9

回帖

87

积分

注册会员

积分
87
发表于 2023-10-26 15:27:18 | 显示全部楼层 |阅读模式

(问题可能是层窗户纸)
如题,最近在下载完STC8H的官方库函数后,卡在了定时器这一示例代码中。

想要实现的功能:定时器4计时1ms,然后进入中断函数过后控制接在P24口的LED以1S的周期闪烁。
  1. #include <STC8H.H>
  2. #include <config.h>
  3. #include <STC8G_H_GPIO.h>
  4. #include <STC8G_H_Delay.h>
  5. #include <STC8G_H_Timer.h>
  6. #include <STC8G_H_NVIC.h>
  7. void GPIO_Config()
  8. {
  9.     GPIO_InitTypeDef GPIO_InitStructure;
  10.     GPIO_InitStructure.Mode=GPIO_PullUp;    //初始化IO口为准双向口模式
  11.     GPIO_InitStructure.Pin=GPIO_Pin_All;    //指定初始化的IO口(0~7)
  12.     GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
  13. }
  14. void Timer_Config()
  15. {
  16.     TIM_InitTypeDef        TIM_InitStructure;                                                //结构体定义
  17.     TIM_InitStructure.TIM_ClkOut=DISABLE;       //是否输出高速脉冲, ENABLE或DISABLE
  18.     TIM_InitStructure.TIM_ClkSource=TIM_CLOCK_1T;        //指定时钟源,TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  19.     TIM_InitStructure.TIM_Mode=TIM_16BitAutoReload;     //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
  20.     //TIM_InitStructure.TIM_PS=;                    //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器)
  21.     TIM_InitStructure.TIM_Run=ENABLE;             //是否初始化后启动定时器, ENABLE或DISABLE
  22.     TIM_InitStructure.TIM_Value=65536UL - (MAIN_Fosc / (100*12));                //初值;
  23.     Timer_Inilize(Timer4,&TIM_InitStructure);              //初始化结构体
  24.     NVIC_Timer0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  25. }
  26. void Timer4_Isr(void) interrupt 20
  27. {
  28.         static unsigned char cnt=0;
  29.         cnt++;
  30.         if(cnt>100)
  31.         {
  32.                 cnt=0;
  33.                 P24=~P24;
  34.         }
  35. }
  36. void main(void)
  37. {
  38.         EAXSFR();                /* 扩展寄存器访问使能 */
  39.         GPIO_Config();
  40.         Timer_Config();
  41.         P24=0;
  42.        
  43.         EA=1;
  44.         while(1)
  45.         {
  46.                
  47.         }
  48.                
  49. }
复制代码

很荣幸,再次没有进入中断
但在翻看官方的库函数时却发现中断函数控制P6口??

(以下是官方库函数)
  1. /************************ 定时器配置 ****************************/
  2. void        Timer_config(void)
  3. {
  4.         TIM_InitTypeDef                TIM_InitStructure;                                                //结构定义
  5.         //定时器0做16位自动重装, 中断频率为100000HZ,中断函数从P6.7取反输出50KHZ方波信号.
  6.         TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
  7.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  8.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  9.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 100000UL);                //初值,
  10.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  11.         Timer_Inilize(Timer0,&TIM_InitStructure);                                //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
  12.         NVIC_Timer0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  13.         //定时器1做16位自动重装, 中断频率为10000HZ,中断函数从P6.6取反输出5KHZ方波信号.
  14.         TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_T1Stop
  15.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  16.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  17.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 10000);                        //初值,
  18.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  19.         Timer_Inilize(Timer1,&TIM_InitStructure);                                //初始化Timer1          Timer0,Timer1,Timer2,Timer3,Timer4
  20.         NVIC_Timer1_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  21.         //定时器2做16位自动重装, 中断频率为1000HZ,中断函数从P6.5取反输出500HZ方波信号.
  22.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  23.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  24.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000);                                //初值
  25.         TIM_InitStructure.TIM_PS        = 0;                                        //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
  26.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  27.         Timer_Inilize(Timer2,&TIM_InitStructure);                                //初始化Timer2          Timer0,Timer1,Timer2,Timer3,Timer4
  28.         NVIC_Timer2_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
  29.         //定时器3做16位自动重装, 中断频率为100HZ,中断函数从P6.4取反输出50HZ方波信号.
  30.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  31.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  32.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / (100*12));                //初值
  33.         TIM_InitStructure.TIM_PS        = 0;                                        //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
  34.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  35.         Timer_Inilize(Timer3,&TIM_InitStructure);                                //初始化Timer3          Timer0,Timer1,Timer2,Timer3,Timer4
  36.         NVIC_Timer3_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
  37.         //定时器4做16位自动重装, 中断频率为50HZ,中断函数从P6.3取反输出25HZ方波信号.
  38.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  39.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  40.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / (50*12));                //初值
  41.         TIM_InitStructure.TIM_PS        = 0;                                        //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
  42.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  43.         Timer_Inilize(Timer4,&TIM_InitStructure);                                //初始化Timer4          Timer0,Timer1,Timer2,Timer3,Timer4
  44.         NVIC_Timer4_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
  45. }
复制代码
如果想要控制其他IO口(使用定时器作中断),在基于官方库函数的基础上我应该作啥修改?
望各位大佬指教~~~~
谢谢大家!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-12-26 09:36:03
已绑定手机

3

主题

9

回帖

87

积分

注册会员

积分
87
发表于 2023-10-26 15:42:21 | 显示全部楼层
另外如果要是使用官方库函数的话,还需要写那些带中断号的中断程序吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-04-30 09:43:06

2

主题

4

回帖

368

积分

中级会员

积分
368
发表于 2024-10-24 14:49:59 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:385
  • 最近打卡:2025-05-01 08:05:45

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2024-10-25 08:48:57 | 显示全部楼层
static unsigned char cnt=0;  这里不能指定cnt=0吧。每次进入中断都会重新定义为0
如果是全局变量可以指定=0.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-10-25 08:58:46 | 显示全部楼层
zhang*** 发表于 2024-10-25 08:48
static unsigned char cnt=0;  这里不能指定cnt=0吧。每次进入中断都会重新定义为0
如果是全局变量可以指定 ...

加了static就已经变成静态变量了啊
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:08 , Processed in 0.114195 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表