DHBT2023 发表于 2024-9-25 16:50:44

屠龙刀AI32G12K128定时器问题

本帖最后由 DebugLab 于 2024-9-25 18:42 编辑

哪个大佬帮忙看一下    屠龙刀22年6月20的板。。我没有办法打开定时器。全部程序


#include "stc32g.h"
#include "config.h"


sbit P20 = P2^0;
void Timer0_Init(void);


void SYS_Ini()   // STC32初始化设置
{
      EAXFR = 1;                                                                         // 使能访问 XFR
      CKCON = 0x00;                                                         // 设置外部数据总线速度为最快
      WTST = 0x00;                                                               // 设置程序代码等待参数,赋值为 0 可将 CPU 执行程序的速度设置为最快
      
      P0M1 = 0x00;P0M0 = 0x00;                // 设置P0口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P1M1 = 0x00;P1M0 = 0x00;                // 设置P1口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P2M1 = 0x00;P2M0 = 0x00;                // 设置P2口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P3M1 = 0x00;P3M0 = 0x00;                // 设置P3口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P4M1 = 0x00;P4M0 = 0x00;                // 设置P4口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P5M1 = 0x00;P5M0 = 0x00;                // 设置P5口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P6M1 = 0x00;P6M0 = 0x00;                // 设置P6口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出
      P7M1 = 0x00;P7M0 = 0x00;                // 设置P7口为准双向口模式 //00:准双向口 01:推挽输出 10:高阻输入 11:开漏输出

}

void main()
      {
      SYS_Ini();
               while (1)
               { P20 = 0;                     //
                     Timer0_Init();
                      EA = 1;
                              }      
                }

void Timer0_Isr(void) interrupt 1
{
P20 = 1;
}
void Timer0_Init(void)                //1毫秒@24.000MHz
{
      AUXR |= 0x80;                        //定时器时钟1T模式
      TMOD &= 0xF0;                        //设置定时器模式
      TL0 = 0x40;                              //设置定时初始值
      TH0 = 0xA2;                              //设置定时初始值
      TF0 = 0;                              //清除TF0标志
      TR0 = 1;                              //定时器0开始计时
      ET0 = 1;                              //使能定时器0中断
EA = 1;
}

理论上P20亮一下,应该灭。结果是一直亮。


DHBT2023 发表于 2024-9-25 16:52:19

把P20放主程序里面,也不行。

DHBT2023 发表于 2024-9-25 16:53:21

void main()
        {
        SYS_Ini();
               while (1)
               { P20 = 0;                     //
                     Timer0_Init();
                      EA = 1;
         if(t_a == 1) { t_a =0;s_a++; }
                     if(s_a == 5000)P20 =1;
                        }       
                }
void Timer0_Isr(void) interrupt 1
{
t_a = 1;
}

DHBT2023 发表于 2024-9-25 16:54:02

感觉就是定时器没有打开。void Timer0_Init(void)                //1毫秒@24.000MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x40;                                //设置定时初始值
        TH0 = 0xA2;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
EA = 1;
}

DHBT2023 发表于 2024-9-25 16:54:45

已经搞了一个星期了。哪位大佬。帮忙看一下。什么问题。

DHBT2023 发表于 2024-9-25 16:55:27

程序是参考例程和下载器来的

DHBT2023 发表于 2024-9-25 16:57:31

已经搞的很无语了

乘风飞扬 发表于 2024-9-25 17:14:57

主循环里设置P20 = 0,每次循环都会亮灯。
定时器1ms中断里面设置P20 = 1,每1毫秒灭一次灯。
这么快速的亮灭,肉眼是看不出来的,要用示波器才能测的出来这么快速的翻转信号。

晓飛飛 发表于 2024-9-25 17:16:14

你的程序非常的乱,完全没有例程代码的痕迹,不如说说你要实现什么功能,大家帮你看看。

Lkck8210 发表于 2024-9-25 17:33:08

void main()
{
        SYS_Ini();
        P20 = 0;                     //
        Timer0_Init();
        EA = 1;
        while (1)
        {
        }
}
页: [1] 2 3
查看完整版本: 屠龙刀AI32G12K128定时器问题