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 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook
  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题