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

比较器实验求救

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
昨晚再想了一下,首先要证实一下,我手头的试验箱是正常的,我先把STC的例程烧录进去:


结果一切正常,无论是调节电位器,还是断电(当然有点差别),都是可以保存当前的秒数据的

这就证明,实验器材硬件是没问题的!

顺带把STC的源程序也作为附件,方便验证!

STC秒记时掉电保存.zip

22 Bytes, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
那么,我们顺手把STC的秒计时累计,改成按键次数。理论上是OK吧?


我改了一下,先把整个源程序(项目文件)作为附件传上来!


按键次数掉电保存.zip

22 Bytes, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
运行后,结果如下:


首先是按键功能异常,按1次,数码管不是增加1,为啥是增加2?

其次最重要的是,无法实现掉电保存功能!

当然,如果跟着冲哥一步一步的都没有实现掉电保存功能,现在自己改写STC的模板代码,出问题也合理。

主要是自己还处于照猫画虎的阶段,对单片机世界的时间没有精确的把控能力,毕竟电容上的电很少,程序不能立即完成写入动作,

肯定不正常,这也是学校老师的通病。没有真正开发过项目,实践经验不足,遇到问题,基本都是自己瞎琢磨,资料也不好找

例如我昨天也翻查了冲哥在STC32G12K128的比较器讲座,只是在低电压触发下点亮了LED,帮助不大!

这样就没有找到有效的解决办法,能力始终无法提高,其实这次冲哥的23集视频教程,我都好好看了。除了课程作业没搞,就是

这个掉电实验无法完成,没什么思路.....................
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层

STC梁工,在山东大学陈教授的视频《视频教学《USB型 1T 8051 单片机原理及应用-8H8K64U》,山东大学陈桂友教授

https://www.stcaimcu.com/forum.p ... &extra=page%3D1


中,有个补充视频,我们先去好好跟梁工学习一下:
截图202509110926017044.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
越学习问题越多:


STC的范例程序中:比较强初始化程序:
  1. //========================================================================
  2. // 函数: void CMP_config(void)
  3. // 描述: 比较器初始化函数。
  4. // 参数: 无.
  5. // 返回: 无.
  6. // 版本: V1.0, 2020-6-10
  7. //========================================================================
  8. void CMP_config(void)
  9. {
  10.     CMPEXCFG = 0x00;
  11. //  CMPEXCFG |= 0x40;       //比较器DC迟滞输入选择,0:0mV; 0x40:10mV; 0x80:20mV; 0xc0:30mV
  12. //  CMPEXCFG &= ~0x04;      //P4.4为CMP-输入脚
  13.     CMPEXCFG |= 0x04;       //内部1.19V参考电压为CMP-输入脚
  14.     CMPEXCFG &= ~0x03;      //P4.6为CMP+输入脚
  15. //  CMPEXCFG |= 0x01;       //P5.0为CMP+输入脚
  16. //  CMPEXCFG |= 0x02;       //P5.1为CMP+输入脚
  17. //  CMPEXCFG |= 0x03;       //ADC输入脚为CMP+输入脚
  18.     CMPCR2 = 0x00;
  19.     INVCMPO = 0;            //比较器正向输出
  20. //  INVCMPO = 1;            //比较器反向输出
  21.     DISFLT = 0;             //使能0.1us滤波
  22. //  DISFLT = 1;             //禁止0.1us滤波
  23. //  CMPCR2 &= ~0x3f;        //比较器结果直接输出
  24.     CMPCR2 |= 0x10;         //比较器结果经过16个去抖时钟后输出
  25.     CMPCR1 = 0x00;
  26. //  PIE = 0;                //禁止比较器上升沿中断
  27.     PIE = 1;                //使能比较器上升沿中断
  28. //  NIE = 0;                //禁止比较器下降沿中断
  29.     NIE = 1;                //使能比较器下降沿中断
  30. //  CMPOE = 0;              //禁止比较器输出
  31.     CMPOE = 1;              //使能比较器输出
  32.     CMPO_S = 0;             //选择P4.5作为比较器输出脚
  33. //  CMPO_S = 1;             //选择P4.1作为比较器输出脚
  34.     CMPEN = 1;              //使能比较器模块
  35. }
复制代码


这2句是把P4.5脚作为比较器输出脚,我观察实验结果,调低W1电压后,掉电保存顺利执行,同时LED11也被点亮,但是从试验箱图纸上看:


截图202509111121275391.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
LED11 是接在P4.2最多是通过开关S2(通)接到P3.7,和P4.5脚没有关系啊?LED11点亮,一定是P4.2或者是P3.7低电平才对啊?
我们比较器触发条件成立,应该是P4.5脚是高电平,怎么引起LED11点亮?
  我发现开关S2无论是开还是关,LED11都是随着比较器触发条件成立而点亮................
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
Debu*** 发表于 2025-9-10 12:13
调电位器设置比较点略低于电源电压,让电源电压刚开始下降时就触发比较器,才能实现掉电保存 ...

是的,这个是实验的基本目的,除此之外,掉电也是可以触发数据保存的,当然效果没有通过电位器的好。
   但我的问题是冲哥视频教程的实验,保存的是按键次数,我也是按照冲哥的步骤写的,就是不能保存数据,能否帮忙?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 3 天前 | 显示全部楼层
这完全对不上,再去看看源代码:


/******************* 比较器中断函数 ********************/
void CMP_Isr() interrupt 21
{


  CMPIF = 0;          //清中断标志
    P42 = CMPRES;       //中断方式读取比较器比较结果
   
    if(CMPRES)
    {
        if(LowVolFlag)
        {
            LowVolFlag = 0;    //清除低电压标志
            if(Test_cnt != Temp_cnt)
            {
                EEPROM_read_n(EE_ADDRESS,tmp,2);        //读出2字节
                Test_cnt = ((u16)tmp[0] << 8) + tmp[1]; //秒计数
                if(Test_cnt > 10000)    Test_cnt = 0;   //秒计数范围为0~10000
                Temp_cnt = Test_cnt;
                                EEPROM_SectorErase(EE_ADDRESS); //擦除扇区
                               
            }
        }
    }
    else
    {
        
/*下面8行关闭数码管
                HC595_SER = 0;
        for(i=0; i<16; i++)     //先关闭显示,省电
        {
            HC595_SCK = 1;
            HC595_SCK = 0;
        }
               
        HC595_RCK = 1;
        HC595_RCK = 0;       //锁存输出数据
*/               
                Display_Seg(0,0);  //实际这个函数入口参数直接写0,就是上面8行关闭数码管
               
               

        if(!LowVolFlag)
        {
            LowVolFlag = 1;    //设置低电压标志
            if(Test_cnt != Temp_cnt)
            {
                Temp_cnt = Test_cnt;
               
                tmp[0] = (u8)(Temp_cnt >> 8);
                tmp[1] = (u8)Temp_cnt;
                EEPROM_write_n(EE_ADDRESS,tmp,2);
            }
        }
    }
}


原来是:

P42 = CMPRES;       //中断方式读取比较器比较结果

看看手册:

        CMPOE:比较器结果输出控制位
0:禁止比较器结果输出
1:使能比较器结果输出。比较器结果输出到P3.4或者P4.1(由P-Sw2中的CMPO-S进行设定)
        CMPRES:比较器的比较结果。此位为只读。
0:表示CMP+的电平低于CMP-的电平1:表示CMP+的电平高于CMP-的电平
CMPRES是经过数字滤波后的输出信号,而不是比较器的直接输出结果。
       


这样,LED11随着低电平触发就OK!



回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-09-14 13:06:47
已绑定手机

2

主题

187

回帖

516

积分

高级会员

积分
516
发表于 半小时前 | 显示全部楼层
按键次数显示异常的问题解决了。主要是时间控制问题,AI8051U速度快,

不能用以前的观念控制按键:
再把2种结构的实验工程整个传上来!

目前都是调整AI8051U试验箱上的W1减低电压,可以正常保存按键次数,但是如果是按Power-SW
或者是把链接计算机的连线拔掉,就不能保存按键数据,但人家STC的计时例程22是可以的!
冲哥的2位数码管显示按键次数的实验也是按Power-SW或者是把链接计算机的连线拔掉,是可以保存按键数据的!

另外,我已经把原来实验板上的240uf的电解电容换成了3000uf的,并没有什么用,问题还是在程序上!

点电存数据.zip

56.69 KB, 下载次数: 0

冲个按键掉电保存.zip

281.64 KB, 下载次数: 0

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-14 13:44 , Processed in 0.147774 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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