peterlzj 发表于 2024-2-22 14:22:34

STC8H4K64TL用不了T11定时器

因STC8H4K64T的4个定时器不够使用,我看到STC8H手册有T11定时器,根据本论坛给的例子试过不可以,用中断方式不行,测试时钟输出到P15管脚也不可以,难道这个芯片不支持?

乘风飞扬 发表于 2024-2-22 14:33:05

STC8H4K64Txx系列没有T11

peterlzj 发表于 2024-2-22 14:42:43

了解,多谢

AI-32位8051 发表于 2024-2-22 15:19:11

STC8H2K08U-45MHz-TSSOP20/SOP16
低功耗,24位定时器 T11 应用, 可以省电模式唤醒

参数定义:

[*]#define MAIN_Fosc      11059200UL
[*]#define T11MS12T         (65536 - MAIN_Fosc / 12 / 1000)
[*]#define T11MS1T          (65536 - MAIN_Fosc / 1000)

复制代码
中断函数:

[*]void tm11isr() interrupt 13 //借用13号中断向量地址,在isr.asm进行中断映射
[*]{
[*]//    T11CR &= ~0x01;   //清中断标志T11IF,进中断时硬件自动清除
[*]    P10 = ~P10;
[*]}

复制代码
定时器(12T)模式:

[*]    //定时器(12T)
[*]    T11CR = 0x00;       //做定时器,关闭时钟输出,12T模式,系统时钟做时钟源
[*]    T11PS = 0;          //分频系数:(T11PS+1)分频
[*]    T11L = T11MS12T;
[*]    T11H = T11MS12T >> 8;
[*]    T11CR |= 0x82;      //定时器11开始计数,允许中断
[*]    EA = 1;

复制代码
定时器(1T)模式:

[*]    //定时器(1T)
[*]    T11CR = 0x10;       //做定时器,关闭时钟输出,1T模式,系统时钟做时钟源
[*]    T11PS = 0;          //分频系数:(T11PS+1)分频
[*]    T11L = T11MS1T;
[*]    T11H = T11MS1T >> 8;
[*]    T11CR |= 0x82;      //定时器11开始计数,允许中断
[*]    EA = 1;

复制代码
计数器模式:

[*]    //计数模式 - T11脚(P14)输入脉冲计数
[*]    T11CR = 0x50;       //做计数器,关闭时钟输出,1T模式,系统时钟做时钟源
[*]    T11PS = 0;          //分频系数:(T11PS+1)分频
[*]    T11L = 0xff;
[*]    T11H = 0xff;
[*]    T11CR |= 0x82;      //定时器11开始计数,允许中断
[*]    EA = 1;

复制代码
选择时钟源:

[*]    //选择时钟源
[*]//    T11CR = 0x10;       //做定时器,关闭时钟输出,1T模式,系统时钟做时钟源
[*]    T11CR = 0x1c;       //做定时器,关闭时钟输出,1T模式,内部低速IRC做时钟源(自动启动内部低速IRC)
[*]//    T11CR = 0x18;       //做定时器,关闭时钟输出,1T模式,外部32K晶振做时钟源
[*]    T11PS = 0;          //分频系数:(T11PS+1)分频
[*]    T11L = T11MS1T;
[*]    T11H = T11MS1T >> 8;
[*]    T11CR |= 0x82;      //定时器11开始计数,允许中断
[*]    EA = 1;
[*]

复制代码
如果使用外部32K晶振做时钟源需要提前启动外部32K晶振:

[*]    X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
[*]    while (!(X32KCR & 1));//等待时钟稳定
[*]



_奶咖君_ 发表于 2024-2-22 15:22:24

剩下的可以考虑用PWM定时器
页: [1]
查看完整版本: STC8H4K64TL用不了T11定时器