找回密码
 立即注册
楼主: DHBT2023

屠龙刀AI32G12K128定时器问题

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-25 18:43:34 | 显示全部楼层
初始化不能放在主循环里
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-9-25 19:42:04 | 显示全部楼层
DHBT*** 发表于 2024-9-25 18:15
其实,程序满简单:检测温度,温度到 ,P20=0 驱动负载放水。 500ms后, 释放负载P20=1 。温度降低,继续检 ...
  1. #include "stc32g.h"
  2. // 包含基础C支持代码
  3. #include "intrins.h"
  4. #include "math.h"
  5. #include "stdio.h"
  6. #include "stdlib.h"
  7. #include "string.h"
  8. // 变量类型重定义
  9. #define u8 unsigned char
  10. #define u16 unsigned int
  11. #define u32 unsigned long
  12. // 多线程功能定义
  13. #define Task_Max 10             // 最大线程数
  14. u8 Task = 0;                    // 全局线程指针
  15. u8 Task_This[Task_Max] = {0};   // 线程状态表
  16. u16 Task_Timer[Task_Max] = {0}; // 线程私有定时器
  17. void Core_Init(void);           // 函数声明
  18. void Delay(unsigned int Time);
  19. void Get_Delay(void);
  20. void main(void)
  21. {
  22.     Core_Init();
  23.     while (1)
  24.     {
  25.         Task = 1; // 线程1开始
  26.         switch (Task_This[Task])
  27.         {
  28.         case 0:
  29.             if(温度标志位)
  30.             {
  31.                 P20 = 0;
  32.                 Delay(500);
  33.             }
  34.             break;
  35.         case 2:
  36.             P20 = 1;                 
  37.             Task_This[Task] = 0; // 回到最初的状态
  38.             break;
  39.         default:
  40.             Get_Delay();
  41.             break;
  42.         }
  43.     }
  44. }
  45. // 初始化定时及核心功能
  46. void Core_Init(void)
  47. {
  48.     AUXR |= 0x80; // 定时器时钟1T模式
  49.     TMOD &= 0xF0; // 设置定时器模式
  50.     TL0 = 0x40;   // 设置定时初始值@24MHz,1ms
  51.     TH0 = 0xA2;   // 设置定时初始值
  52.     TF0 = 0;      // 清除TF0标志
  53.     TR0 = 1;      // 定时器0开始计时
  54.     ET0 = 1;      // 使能定时器0中断
  55.     EA = 1;
  56.     // IO初始化
  57.     P0M0 = P0M1 = P1M0 = P1M1 = P2M0 = P2M1 = P3M0 = P3M1 = P4M0 = P4M1 = P5M0 = P5M1 = 0x00;
  58.     P_SW2 |= 0x80; // 允许操作寄存器
  59. }
  60. void Timer0_Isr(void) interrupt 1
  61. {
  62.     u8 xdata i;
  63.     // 遍历所有线程定时器
  64.     for (i = 0; i < Task_Max; i++)
  65.     {
  66.         if (Task_Timer[i] > 0)
  67.         {
  68.             Task_Timer[i]--;
  69.         }
  70.     }
  71. }
  72. // 设置非堵塞定时,刻度1ms
  73. void Delay(unsigned int Time)
  74. {
  75.     Task_Timer[Task] = Time;
  76.     Task_This[Task]++;
  77. }
  78. // 获取当前定时器状态
  79. void Get_Delay(void)
  80. {
  81.     if (Task_Timer[Task] == 0)
  82.     {
  83.         Task_This[Task]++;
  84.     }
  85. }
复制代码
早说功能不就行了
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-04 11:33:11

12

主题

124

回帖

521

积分

高级会员

积分
521
发表于 2024-9-25 20:40:29 | 显示全部楼层
王*** 发表于 2024-9-25 19:42
早说功能不就行了

谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-04 11:33:11

12

主题

124

回帖

521

积分

高级会员

积分
521
发表于 2024-9-25 20:43:29 | 显示全部楼层
王*** 发表于 2024-9-25 19:42
早说功能不就行了

大师,还有一个问题。500ms 是一个设定的值。大概是50~500ms 之间。怎么实现?

点评

你改一下Delay(500);这一句里面的值就行了  详情 回复 发表于 2024-9-25 20:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-9-25 20:51:00 | 显示全部楼层
DHBT*** 发表于 2024-9-25 20:43
大师,还有一个问题。500ms 是一个设定的值。大概是50~500ms 之间。怎么实现? ...

你改一下Delay(500);这一句里面的值就行了
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:394
  • 最近打卡:2025-05-01 03:26:07

16

主题

702

回帖

2470

积分

金牌会员

积分
2470
发表于 2024-9-26 07:40:42 | 显示全部楼层
硬件仿真看一下,应该还是程序问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:117
  • 最近打卡:2025-03-06 09:50:21

6

主题

142

回帖

638

积分

高级会员

积分
638
发表于 2024-11-11 10:51:25 | 显示全部楼层
一直初始化肯定不行啊
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:32 , Processed in 0.160540 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表