下面这段汇编代码在STC15W408AS 芯片就不灵了,定时计数器没触发中断?
;STC15W408AS 24MHz内部时钟
AUXR EQU 0x8E ;辅助寄存器
ORG 000H
AJMP R0_INIT
ORG 000BH
AJMP TIR0_ISR
ORG 60H
R0_INIT: ;@24.000MHz
MOV SP,#60H
ORL AUXR,#80H ;定时器时钟1T模式
; ANL AUXR,#80H
ANL TMOD,#0F0H ;设置定时器模式
MOV TL0,#0D8H ;设置定时初始值
MOV TH0,#0FFH ;设置定时初始值
CLR TF0 ;清除TF0标志
SETB TR0 ;定时器0开始计时
SETB ET0 ;使能定时器0中断
SJMP $
; JNB TF0,R0_INIT
TIR0_ISR:
CLR TF0 ;清除TF0标志
CLR TR0
CPL P3.3
MOV TL0,#0D8H ;设置定时初始值
MOV TH0,#0FFH ;设置定时初始值
SETB ET0 ;允许T0溢出中断
SETB TR0 ;定时器0开始计数
RETI
END
//****************************************************************************
下面C代码:定时计数器设置可以触发中断
sbit DPIO3=P3^3;
void T1ms(uint x);
void TIN0Config();
void main(void)
{
TIN0Config();
while(1)
{
T1ms(1);
}
}
void TIN0Config()
{
AUXR |= 0x80; //定时器时钟0x80 1T 模式
TMOD &= 0xF0; //设置定时计数器工作方式
TH0 = 0xFF;
TL0 = 0xD8;
TF0=0; //清除TF0标志
ET0 = 1; //开启定时器1中断
EA = 1;
TR0 = 1; //开启定时器
}
void Time0(void) interrupt 1 //定时器0中断,
{
TF0=0;
TH0 = 0xFF; //重新赋初值
TL0 = 0xD8;
DPIO3=1;
T1ms(20);
DPIO3=0;
}
void T1ms(uint x) //延时
{
uint i;
uchar j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//汇编代码(来自STC烧录工具)定时器哪里设错了?
//