找回密码
 立即注册
查看: 495|回复: 1

STC8H官方库定时器问题

[复制链接]
  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
    发表于 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口(使用定时器作中断),在基于官方库函数的基础上我应该作啥修改?
    望各位大佬指教~~~~
    谢谢大家!
    回复 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-6-2 14:00 , Processed in 0.068450 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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