下面是代码,麻烦各位帮我看看,谢谢啦:
#include "STC8A8K64D4.H"
#include "intrins.h"
void Timer0Init(void) //500微秒@24.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x20; //设置定时初始值
TH0 = 0xD1; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=0;
EA=1;//打开中断
}
void TMO_Isr() interrupt 1
{
int i;
TL0=0x18;//设置定时初始值
TH0=0xfc;//设置定时初始值
i--;
if(i<=0)
{
P12=~P12;
i=1000;
}
}
void main()
{
Timer0Init();
P1M1=0;P1M1=0;
while(1)
{
}
}
看起来你的代码在初始化定时器0并使能定时器0中断,然后在 TMO_Isr 函数中使用定时器0实现了一个闪烁的效果。但是,我注意到几个问题:
建议你修改 TMO_Isr 函数的中断号,设置 P1M1 和 P1M0 为 0 并且为变量 i 赋一个初始值。例如:
void TMO_Isr() interrupt 0
{
int i=1000; // 为 i 赋初始值
TL0=0x18;//设置定时初始值
TH0=0xfc;//设置定时初始值
i--;
if(i<=0)
{
P12=~P12;
i=1000;
}
}
void main()
{
P1M1=0; // 设置 P1 口为推挽输出
P1M0=0;
Timer0Init();
while(1)
{
}
}
修改后的代码应该能够正常运行了。
你的目的是什么,现象是什么?让P12闪?
楼上指出了你的错误,但他也犯了错,他的方式并不能解决你的问题。
那个i是局部变量,每次进去可能都是新的值,达不到计数的效果。你应该把它定义为全局变量,并且在main里初始化为1000.
或者定义为静态变量
void TM0_Isr() interrupt 1
{
static int i=1000; // 定义为static并初始化
...........
}