ai8h1k08的t2定时器是否不支持24位
测试了一下午,一直没有成功, 具体怎么个异常,上传代码原理图大家看看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;
}
}
}
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) {
}
}
pghgyglv 发表于 2025-5-20 09:01
代码非常简单,实际用逻辑分析仪测试P36脚信号,周期大约是437us, 低电平大约218us, 单片机配置为11.0 ...
主要是没开这个P_SW2 |= 0x80;
新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反刍/吐槽,新手乐园,毕业设计 国芯技术交流网站 - AI32位8051交流社区
ercircle 发表于 2025-5-20 10:23
主要是没开这个P_SW2 |= 0x80;
非常感谢,应该是这个原因,我先测试一下
页:
[1]