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 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同