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日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法