STC8A8K64D4无法运行

STC8A8K64D4单片机
单片机编译正常但是板子不运行

下面是代码,麻烦各位帮我看看,谢谢啦:

#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 函数的中断号应该设置为 0,因为定时器0的中断号是0,而不是1。
  • 在 main 函数中,你设置了 P1M1 和 P1M0 为 0,这会将 P1 口设置为高阻态。这意味着 P12 口将不会对任何输出产生影响,因此不会看到闪烁的效果。
  • 在 TMO_Isr 函数中,你定义了一个变量 i,但是并没有为它赋值。这可能会导致程序的不确定行为。

建议你修改 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并初始化
...........
}