m0_74858993 2022-12-30 12:43 采纳率: 66.7%
浏览 36
已结题

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)
    {
        
    }
}

  • 写回答

2条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-30 13:00
    关注

    看起来你的代码在初始化定时器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)
        {
    
        }
    }
    

    修改后的代码应该能够正常运行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月30日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog