找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4013|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

為什么單片機(jī)老是死機(jī)?旋轉(zhuǎn)編碼器時(shí)轉(zhuǎn)的慢沒有事

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51533 發(fā)表于 2018-4-16 18:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
現(xiàn)象是這樣的旋轉(zhuǎn)編碼器時(shí)轉(zhuǎn)的慢沒有事!轉(zhuǎn)的快單片機(jī)就死機(jī)了!大家?guī)臀铱纯词鞘裁磫栴}!

單片機(jī)源程序如下:
  1. #include <STC12C5A60S2.H>
  2. typedef unsigned int uint;
  3. typedef unsigned char uchar;
  4. sbit wela = P1^1;
  5. sbit dula = P1^2;
  6. sbit LED=P1^0;
  7. sbit AA=P3^7; //編碼加
  8. sbit BB=P3^6; //編碼減
  9. uint flage,status,current_bmb,counter = 0,
  10. p,dataa;
  11. float PA;
  12. static uint m,tm;
  13. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  14.                             0x07,0x7f,0x6f};
  15. void delay(unsigned char i)
  16. {
  17. unsigned char j,k;
  18. for(j=i;j>0;j--)
  19.    for(k=110;k>0;k--);
  20. }                                                                                       
  21. void datakae()
  22. {   
  23. status=BB;        //一直賦值!
  24. while(0==AA)//當(dāng)AA條件允許進(jìn)入主循環(huán)!并且BB上次的值保持為臨近狀態(tài)!
  25.   {   
  26.    current_bmb=BB;
  27.    flage=1;
  28.              }
  29. if(1==flage)
  30.   {
  31.         flage=0;
  32. if((0==current_bmb)&&(1==status))   
  33.             {
  34.           tm++;
  35.           if(tm>=1000)
  36.          {
  37.            tm=1000;         
  38.                }
  39.                 }
  40. if((0==status)&&(1==current_bmb))
  41.     {  
  42.          tm--;
  43.          if(tm<=10)
  44.          {
  45.            tm=10;         
  46.                }                           
  47.                     }
  48.              }                                                                                                                                                                                 
  49.                   }
  50. void display()
  51. {
  52.    P0=table[dataa%10];//個(gè)
  53.    dula=1;
  54.    dula=0;

  55.    P2=0xfe;
  56.    wela=1;
  57.    wela=0;
  58.    delay(2);

  59.    P0=table[dataa%100/10];        //十      
  60.    dula=1;
  61.    dula=0;

  62.    P2=0xfd;
  63.    wela=1;
  64.    wela=0;
  65.    delay(2);

  66. P0=table[dataa%1000/100];
  67.    dula=1;
  68.    dula=0;

  69.    P2=0xfb;         //        百
  70.    wela=1;
  71.    wela=0;
  72.    delay(2);
  73.                              
  74. P0=table[dataa%10000/1000];
  75.    dula=1;
  76.    dula=0;

  77.    P2=0xf7;//千
  78.    wela=1;
  79.    wela=0;
  80.    delay(2);
  81.                   }
  82. void huansuan()
  83. {
  84. m=10000/tm;
  85. dataa=tm;
  86.             }
  87. //定時(shí)器T1初始化
  88. void initial()
  89. {
  90.   LED=0;
  91.   P1M1 = 0x00;
  92.   P1M0 = 0xFF;
  93.   counter=0;
  94.   EA = 1;
  95.   TR0 = 1;
  96.   TMOD = 0x01;
  97.   TH0 = (65535-1000)/256;         //1ms
  98.   TL0 = (65535-1000)%256;
  99.   ET0 = 1;
  100. }                              
  101. //主程序
  102. void main()
  103. {
  104.    tm=250;
  105.   initial();
  106. while(1)
  107. {
  108. huansuan();
  109. datakae();
  110.   display();
  111.   LED=0;
  112.         }
  113.          }
  114. void timer0_int()interrupt 1 using 0
  115. {
  116. TH0 = (65535-1000)/256;//1ms產(chǎn)生一次中斷
  117. TL0 = (65535-1000)%256;
  118. counter++;
  119. if(counter==m)
  120. {
  121.   LED=1;
  122.   for(p=0;p<150;p++);
  123.   counter=0;
  124.           }        else LED=0;
  125.                                                                            
  126.                    }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
QQwert + 5 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:309495 發(fā)表于 2018-4-16 19:13 | 只看該作者
好長!代碼又不能調(diào)試,為什么不去玩stm32
回復(fù)

使用道具 舉報(bào)

板凳
ID:51533 發(fā)表于 2018-4-16 19:21 | 只看該作者
說重點(diǎn)!啥問題!我急死了!
回復(fù)

使用道具 舉報(bào)

地板
ID:309572 發(fā)表于 2018-4-16 20:31 | 只看該作者
是不是越界問題
回復(fù)

使用道具 舉報(bào)

5#
ID:227864 發(fā)表于 2018-9-22 15:59 | 只看該作者
這個(gè)循環(huán)有問題,我也試過這樣的程序,單片機(jī)好像反應(yīng)不過來,
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2018-9-22 17:14 | 只看該作者
速度慢時(shí)可以正常工作,速度塊時(shí)出錯(cuò),這樣看來你的程序有缺陷并且與速度有關(guān)。從你的程序看運(yùn)行效率非常低。主要表現(xiàn)在:1數(shù)碼管動(dòng)態(tài)顯示使用了軟件延時(shí),2.中斷函數(shù)中竟然也用了軟件延時(shí)。這些都會(huì)影響CPU及時(shí)查詢AA狀態(tài)。
回復(fù)

使用道具 舉報(bào)

7#
ID:222079 發(fā)表于 2018-9-25 17:04 | 只看該作者
同意6樓的說法
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表