pghgyglv 发表于 2025-5-19 18:48:03

ai8h1k08的t2定时器是否不支持24位

测试了一下午,一直没有成功,

ercircle 发表于 2025-5-19 19:13:53

具体怎么个异常,上传代码原理图大家看看


pghgyglv 发表于 2025-5-20 09:01:56

ercircle 发表于 2025-5-19 19:13
具体怎么个异常,上传代码原理图大家看看

代码非常简单,实际用逻辑分析仪测试P36脚信号,周期大约是437us,   低电平大约218us, 单片机配置为11.0592M

void main() {
        u8t c, t;

        //T2L 每个节拍大约0.2777777777777778ms最大时常大约 71.11111111111111 ms
        //T2H 每个节拍大约71.11111111111111 ms最大时常大约 18204.444444444445 ms
        TM2PS = 0xFF;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0xFB;                        //定时器时钟12T模式
        T2L = 0x00;                                //设置定时初始值
        T2H = 0x00;                                //设置定时初始值
        AUXR |= 0x10;                        //定时器2开始计时

        P1M0 |= 0x03; P1M1 &= ~0x03;

        P3M0 |= 0xc0; P3M1 &= ~0xc0;


        //uart_init();
        EA = 1;

        c = T2L;
        while (1) {
                t = T2L - c;
                if (t > 200) {
                        c = T2L;
                        P36 = ~P36;
                        P37 = ~P36;
                }
        }
}

ercircle 发表于 2025-5-20 10:15:24

pghgyglv 发表于 2025-5-20 09:01
代码非常简单,实际用逻辑分析仪测试P36脚信号,周期大约是437us,   低电平大约218us, 单片机配置为11.0 ...

这样测,直接量P13是约18s翻转一次。18000   ÷   65536 = 0.274658203125。
11059200   ÷   12 ÷   256= 3600
1000 ms / 3600 = 0.2777777777777778


#include "stc8H.h"
#include "def.h"

void TM2_Isr() interrupt 12{
P36 = ~P36;
}

void main() {
      u8 c, t;
                                u16 temp,z;
                                P_SW2 |= 0x80;
       
                                TM2PS = 0xFF;                        //设置定时器时钟预分频 定时器2时钟 = 11059200L / (0xFF+1) = 43200
      AUXR &= 0xFB;                        //定时器时钟12T模式    43200 / 12 = 3600
                               
                                // 65536 - 18s    //0.274658203125 节拍
                                T2L = 0x00;                              //设置定时初始值
      T2H = 0x00;                              //设置定时初始值
       
      AUXR |= 0x10;                        //定时器2开始计时
                                INTCLKO |= T2CLKO;    //P13输出
                                P1M0 |= 0x08; P1M1 &= ~0x08;
                                P1SR = 0xf7;
      EA = 1;
      while (1) {
      }
}


ercircle 发表于 2025-5-20 10:23:14

pghgyglv 发表于 2025-5-20 09:01
代码非常简单,实际用逻辑分析仪测试P36脚信号,周期大约是437us,   低电平大约218us, 单片机配置为11.0 ...
主要是没开这个P_SW2 |= 0x80;



新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反刍/吐槽,新手乐园,毕业设计 国芯技术交流网站 - AI32位8051交流社区

youkebin 发表于 2025-5-20 11:11:51

ercircle 发表于 2025-5-20 10:23
主要是没开这个P_SW2 |= 0x80;




非常感谢,应该是这个原因,我先测试一下
页: [1]
查看完整版本: ai8h1k08的t2定时器是否不支持24位