找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 29|回复: 2
打印 上一主题 下一主题
收起左侧

T12白光烙铁固件源码(天山V1.2 51问题,缺文件吗

[复制链接]
跳转到指定楼层
楼主
ID:60178 发表于 2026-4-11 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
T12白光烙铁固件源码(天山V1.2 51单片机问题
主函数如下
#include "config.h"

void main(void)
{
        
        //系统初始化
        Sys_Init();
        while(1)
        {
                //显示主界面
                Sys_Monitor();这叫:
空闲休眠(IDLE 模式)
它只休眠:
  • CPU 内核休息

但这些全部正常工作:
  • 定时器中断
  • PWM 加热
  • ADC 采集
  • IIC 通信
  • 外部中断
  • 编码器扫描

一句话:
CPU 睡了,但是所有外设都在跑!


休眠后怎么唤醒?
中断一来,自动唤醒!
你的程序里:

  • 定时器 1ms 中断 → 唤醒
  • 编码器中断 → 唤醒
  • 按键中断 → 唤醒

唤醒后继续执行:

plaintext









Sys_Monitor();   // 显示ParaSet();       // 按键





所以你看到的现象是:
明明休眠了,屏幕还在刷新,加热还在控制,温度还在跑!


终极总结(你一定要记住)
  • IRON = 加热 IO,在 config.h 里
  • PID = IronTempControl()
  • main 只管显示 + 按键
  • 真正加热、温控、计时 = 定时器中断后台跑
  • 休眠 = CPU 休息,外设继续跑,所以程序不会停



你现在想让我继续做什么?
  • 帮你找 IRON 引脚
  • 帮你看 PID 代码
  • 帮你画 流程图
  • 帮你移植到 STM32
                //编码器设定参数,
                ParaSet();
        }
}************************************************************
  65           * 函数名               :       timer1_int
  66           * 功能说明     :       定时器1中断,主要控制
  67           *
  68           * 输入参数     :       无      
  69           * 输出参数     :       无
  70           *
  71           * 修改记录     :       新增函数,第一次编辑
  72           * 历次作者     :       王志浩
  73           * 日期                 :       2017-10-18
  74          *************************************************************/  
  75          void timer1_int (void) interrupt TIMER1_VECTOR
  76          {
  77   1              static unsigned int             IronUseCounter[2]={0,0};
  78   1              static  unsigned int    ShutDownCounter = 0;
  79   1              static unsigned char    Sleep_Old = 0;
  80   1              static unsigned char    PWM_counter     =       0;
  81   1              static unsigned char SetTempCounter = 0;
  82   1      
  83   1              
  84   1              //烙铁PWM生成
  85   1              PWM_counter=Timer.mSec%100;
  86   1              if((PWM_counter<PWM.Duty) && PWM.Run)
  87   1                      IRON = 1;
  88   1              else
  89   1                      IRON = 0;
  90   1              
  91   1              //1ms处理部分
  92   1              Timer.mSec++;                   //定时器0分段计数器自加
  93   1              EC11_Capture();         //捕捉EC11信息  
  94   1      
  95   1              //10ms处理部分
  96   1              if(Timer.mSec%10 == 0)
  97   1              {
  98   2                      if(IronUse_Status.Handle || IronUse_Status.Coder)//烙铁或编码器用了,那要看看现在是不是休眠什么的状态了


主函数只有这几个,没有看出来怎么加热,能解释下吗,下面的文件多不用,怎么工作的,谁来整理解释下,经过学习,


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:857072 发表于 2026-4-11 17:58 来自触屏版 | 只看该作者
#include "config.h"这么大一个,顺着进去找啊
回复

使用道具 举报

板凳
ID:60178 发表于 2026-4-11 18:57 | 只看该作者
主函数中没有,好向在中断中加热
************************************************************
  65           * 函数名               :       timer1_int
  66           * 功能说明     :       定时器1中断,主要控制
  67           *
  68           * 输入参数     :       无      
  69           * 输出参数     :       无
  70           *
  71           * 修改记录     :       新增函数,第一次编辑
  72           * 历次作者     :       王志浩
  73           * 日期                 :       2017-10-18
  74          *************************************************************/  
  75          void timer1_int (void) interrupt TIMER1_VECTOR
  76          {
  77   1              static unsigned int             IronUseCounter[2]={0,0};
  78   1              static  unsigned int    ShutDownCounter = 0;
  79   1              static unsigned char    Sleep_Old = 0;
  80   1              static unsigned char    PWM_counter     =       0;
  81   1              static unsigned char SetTempCounter = 0;
  82   1      
  83   1              
  84   1              //烙铁PWM生成
  85   1              PWM_counter=Timer.mSec%100;
  86   1              if((PWM_counter<PWM.Duty) && PWM.Run)
  87   1                      IRON = 1;
  88   1              else
  89   1                      IRON = 0;
  90   1              
  91   1              //1ms处理部分
  92   1              Timer.mSec++;                   //定时器0分段计数器自加
  93   1              EC11_Capture();         //捕捉EC11信息  
  94   1      
  95   1              //10ms处理部分
  96   1              if(Timer.mSec%10 == 0)
  97   1              {
  98   2                      if(IronUse_Status.Handle || IronUse_Status.Coder)//烙铁或编码器用了,那要看看现在是不是休眠什么的状态了
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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