找回密码
 立即注册
查看: 1254|回复: 4

大家好,帮我指点一下比较器程序好吗?

[复制链接]

该用户从未签到

5

主题

10

回帖

75

积分

注册会员

积分
75
发表于 2022-12-21 18:54:18 | 显示全部楼层 |阅读模式
大家好,帮我指点一下比较器程序好吗?也有图片也有原码,帮帮忙看一下。
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. //STC15w204s
  4. void key_scan(void);        //ÉùÃ÷¿ª¹ØɨÃè
  5. unsigned  char  t1=1;        //¶¨Ê±¿ª
  6. unsigned  char  t2=1;        //¶¨Ê±¿ª
  7. unsigned int hm1,hm2;        //ºÁÃë
  8. unsigned int m1,m2;                //Ãë
  9. sbit  b= P3^2;                                //7½ÅָʾµÆ¿ØÖƽÅ
  10. sbit        a=P3^3;                                        //8½Å¿ØÖƽÅ
  11.         sfr  CMPCR1  =  0xE6;          // ±È½ÏÆ÷¿ØÖƼĴæÆ÷1
  12.         #define  CMPEN  0x80           //        CMPCR1.7 :±È½ÏÆ÷Ä£¿éʹÄÜλ
  13.         #define  CMPIF  0x40                  //  CMPCR1.6 : ±È½ÏÆ÷Öжϱê־λ
  14.         #define  PIE                 0x20           // CMPCR1.5 :±È½ÏÆ÷ÉÏÉýÑØÖжÏʹÄÜλ
  15.         #define  PIS  0x08                   //CMPCR1.3 :±È½ÏÆ÷Õý¼«Ñ¡Ôñλ
  16.         #define  NIS  0x04                   //CMPCR1.2 :±È½ÏÆ÷¸º¼«Ñ¡Ôñλ
  17.         #define  CMPOE 0x02                        //CMPCR1.1 :±È½ÏÆ÷Êä³ö½á¹û¿ØÖÆλ
  18.         #define  CMPRES 0x01                        //CMPCR1.0 : ±È½ÏÆ÷±È½Ï½á¹û±ê־λ
  19. sfr CMPCR2 = 0xE7;                                 //±È½ÏÆ÷¿ØÖƼĴæÆ÷2
  20. #define INVCMPO 0x80                         //±È½ÏÆ÷½á¹û·´ÏòÊä³ö¿ØÖÆλ
  21. #define DISFLT 0x40                         //±È½ÏÆ÷Êä³öÂ˲¨Ê¹ÄÜ¿ØÖÆλ
  22. #define LCDTY 0x3F                                 //±È½ÏÆ÷Êä³öµÄÇø¶¶Ê±¼ä¿ØÖÆ
  23.         P5M1        = 0x30;                                                //P5.4½ÅΪ¸ß×èÊäÈëÉùÃ÷
  24.         P5M0         = 0x00;                                                //P5.5½ÅΪ¸ß×èÊäÈëÉùÃ÷
  25.        
  26. //void cmp_isr() interrupt 21 using 1 //±È½ÏÆ÷ÖжÏÏòÁ¿Èë¿Ú
  27. //{
  28. //        CMPCR1 &= ~CMPIF;          //Çå³ýÍê³É±êÖ¾
  29. //        a = !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
  30. //        b = !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
  31. //}
  32. void Timer0_Init(void)                //50ºÁÃë12·ÖƵ@11.0592MHz       
  33. {
  34.                 TMOD &= 0xF0;                //¶¨Ê±Æ÷ģʽ0
  35.                 TL0 = 0x00;                //ÉèÖö¨Ê±Æ÷³õʼ»¯
  36.                 TH0 = 0x4C;                //ÉèÖö¨Ê±Æ÷³õʼ»¯
  37.                 TF0 = 0;                //Çå³ýTF0±êÖ¾
  38.                 TR0 = 1;                //¶¨Ê±Æ÷0¿ªÊ¼¼Æʱ¿ª
  39.                 ET0=1;                //ʹÄܶ¨Ê±Æ÷ÖжϿª
  40.                 EA=1;                //×Ü¿ª¹Ø¿ª
  41.                 PT0=1;//¸ßÓÅÏȼ¶       
  42. }
  43. void main()
  44. {
  45.         Timer0_Init();
  46.         CMPCR1 = 0; //³õʼ»¯±È½ÏÆ÷¿ØÖƼĴæÆ÷1
  47.         CMPCR2 = 0;  //³õʼ»¯±È½ÏÆ÷¿ØÖƼĴæÆ÷2
  48.         CMPCR1 &= ~PIS; //Ñ¡ÔñÍⲿp5.5Ϊ±È½ÏÆ÷Õý¼«ÊäÈëÔ´
  49. //        CMPCR1 |= NIS; //Ñ¡ÔñÍⲿp5.4Ϊ±È½ÏÆ÷¸º¼«ÊäÈëÔ´
  50.         CMPCR1 &= ~NIS; //Ñ¡ÔñÄÚ²¿BandGapµçѹBGVΪ±È½ÏÆ÷µÄ¸º¼«ÊäÈëÔ´
  51.         CMPCR1 |= CMPEN;//ʹÄܱȽÏÆ÷
  52.         CMPCR1 &= ~CMPIF;          //Çå³ýÍê³É±êÖ¾
  53.         CMPCR2 &= ~DISFLT;        //ʹÄܱȽÏÆ÷Êä³ö¶ËµÄ0.1us ÂËÆõç·
  54.         CMPCR1 |= PIE; //±È½ÏÆ÷ÉÏÉýÑØÖжÏʹÄÜλ
  55.         a =~ !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
  56.         b =~ !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
  57. //        while (!(CMPCR1 & CMPIF)); //²éѯ±È½ÏÍê³É±êÖ¾
  58.                 P5M1        = 0x30;                                        //P5.4½ÅΪ¸ß×èÊäÈë
  59.                 P5M0         = 0x00;                                        //P5.4½ÅΪ¸ß×èÊäÈë
  60. while (1)
  61.         {
  62.         static signed char zt=0;                 //״̬»ú ¾²Ì¬±äÁ¿
  63.                 {
  64.                 if((CMPCR1 & 0x01)==1 && m2 <0)        //±È½ÏÆ÷¸ßÓëm2СÓÚ³Ë10Ãë
  65.                 {
  66.                         hm1=0;
  67.                         m1=0;
  68.                 }
  69.                 }
  70.                 switch (zt)
  71.         {
  72.                 case 0:
  73.                 {
  74.                         if((CMPCR1 & 0x01)==1)        //±È½ÏÆ÷Õý±È¸º¸ß
  75.                         {               
  76.                                 zt=1;
  77.                         }
  78.                 break;
  79.                 }
  80.                         case 1:
  81.                         {
  82.                         if((CMPCR1 & 0x01)==1)        //±È½ÏÆ÷Õý±È¸ºÈ·Êµ¸ß
  83.                                 {               
  84.                                         zt=2;                                                 //״̬2
  85.                                         b=0;                                                //7½ÅÊä³öµÍµçƽÿÂ̵ÆÃð
  86.                                 }
  87.                                 else
  88.                                         {
  89.                                                 zt=0;                 //·ñÔò»Øµ½×´Ì¬0
  90.                                         }
  91.                         }
  92.                 {       
  93.                 break;
  94.                 }
  95.                 case 2:
  96.                         if((CMPCR1 & 0x01)==0)        //±È½ÏÆ÷Õý±È¸ºµÍ
  97.                         {
  98.                                 zt=3;                                                          //״̬3
  99.                         }       
  100.                 {
  101.                 break;
  102.                 }
  103.                         case 3:
  104.                 {
  105.                         if((CMPCR1 & 0x01)==0)        //±È½ÏÆ÷Õý±È¸ºÈ·ÊµµÍ
  106.                
  107.                                 {
  108.                                         zt=0;
  109.                                         b=1;           //7½ÅÊä³ö¸ßµçƽÿÂ̵ÆÃð
  110.                                 }
  111.                                 else
  112.                                         {
  113.                                                 zt=2;                //·ñÔò»Øµ½×´Ì¬2
  114.                                         }
  115.                 break;
  116.                 }
  117.                 default:
  118.                 {
  119.                         break;
  120.                 }
  121.                 }
  122.         }
  123. }
  124. //¶¨Ê±Æ÷ÖÐ¶Ï ³õʼ»¯
  125. void Timer0_Rountine(void) interrupt 1
  126. {
  127.         if(t1)
  128.         {if((CMPCR1 & 0x01)==1)        //±È½ÏÆ÷Õý±È¸ºÈ·Êµ¸ß
  129.                         hm1++;                                //ºÁÃë¼Ó¼Ó       
  130.                         if(hm1==20)                //         µÈÓڴΠ       ÅжÏ50ºÁÃë½øÀ´Ò»´ÎµÈÓÚ2Ãë
  131.                         {
  132.                                 hm1        =0;                        //ºÁÃëÇåÁã               
  133.                                         m1++;                        //¼Ó¼Ó
  134.                                         if(m1==1)//³Ë2Ãë
  135.                                         {
  136.                                         m1=0;                //ÃëÇåÁã
  137.                                         a=~a;          //8½ÅÊä³öµÍµçƽ       
  138.                                         }
  139.                                 }
  140.                         }
  141.         if(t2)
  142.                 {
  143.                         hm2++;                      //ÃëÇåÁã
  144.                         if(hm2 == 200)         //µÈÓÚ10Ãë
  145.                         {
  146.                                 hm2 = 0;                        //ÃëÇåÁã
  147.                                 m2++;                                        //Ãë¼Ó¼Ó
  148.                                 if(m2==4320)        //³Ë10Ãë
  149.                                 {
  150.                                         m2=0;                                //ÃëÇåÁã
  151.                                         a=0;                                //8½ÅÊä³öµÍµçƽ       
  152.                                 }
  153.                         }       
  154.                 }               
  155.         }
复制代码

谢谢!
47596e49b44a8abc9f675893cfb167f.png
3492c5d7192ffcb0de864848eb61a95.png
8bfafb0365864d12f5e9a39061418ce.png
0e1329e1c39d42f4ea7a8b6d3184a4d.png
回复 送花

使用道具 举报

该用户从未签到

551

主题

9550

回帖

1万

积分

管理员

积分
14011
发表于 2022-12-21 20:05:30 | 显示全部楼层
您贴上你设计的比较器具体应用的线路图的PDF,提下具体比较器要实现啥功能,
大家抽空帮你写个正确的比较器程序给您,如有网友花时间学习您的程序后帮您一起提高,也是很美好的事
  • TA的每日心情
    开心
    2024-5-11 09:06
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2580

    积分

    超级版主

    积分
    2580
    发表于 2022-12-21 20:56:11 | 显示全部楼层
    如果上面的代码就是你原始的代码,里面有两个问题:
    1、程序中使能了比较中断,但比较器中断服务程序被注释掉了
         这样如果,发生比较器中断,程序必然会乱掉
    2、代码中使用的是状态机对比较器进行去抖动处理
         但每个状态之间没有添加延时,而主循环太快,
         根本达不到去抖动的目的

    该用户从未签到

    5

    主题

    10

    回帖

    75

    积分

    注册会员

    积分
    75
     楼主| 发表于 2022-12-22 12:25:25 | 显示全部楼层
    zhp 发表于 2022-12-21 20:56
    如果上面的代码就是你原始的代码,里面有两个问题:
    1、程序中使能了比较中断,但比较器中断服务程序被注释 ...

    谢谢谢谢,太感谢了。那就不把比较器中断服务程序注释掉,状态机每次进来有没有50毫秒。因为我不懂。我是抄百度的。我们可以加微信吗,你加我微信好吗?13163935507是我的微信号。

    该用户从未签到

    551

    主题

    9550

    回帖

    1万

    积分

    管理员

    积分
    14011
    发表于 2022-12-22 12:51:55 | 显示全部楼层
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-5-21 05:14 , Processed in 0.063202 second(s), 47 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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