找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

此程序下載到單片機(jī)后為什么電機(jī)會(huì)亂轉(zhuǎn)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:334234 發(fā)表于 2020-4-5 16:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
預(yù)想功能:按下按鍵,電機(jī)反轉(zhuǎn)5S后,延時(shí)一會(huì),再以相同速度正轉(zhuǎn)5S,停止
現(xiàn)在的現(xiàn)象:下載程序后電機(jī)亂轉(zhuǎn)的,求求大佬了
單片機(jī)源程序如下:
  1. #include"reg51.h"
  2. #define uint16 unsigned int
  3. #define uint8  unsigned char
  4. #define GPIO_MOTOR P1


  5. sbit k1=P3^1;



  6. unsigned char code FFS[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//·′×a
  7. unsigned char code FFN[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//Õy×a
  8. typedef unsigned int u16;

  9. unsigned char Direction,Speed;
  10. void Delay(unsigned int t);
  11. void Motor();

  12. void Motor()
  13. {
  14.   unsigned char i;
  15.         for(i=0;i<8;i++)
  16.         {
  17.     if(Direction==1)
  18.                         GPIO_MOTOR=FFS[i]&0x1f;
  19.      if(Direction==0)
  20.                         GPIO_MOTOR=FFN[i]&0x1f;
  21.                  Delay(Speed);
  22.                
  23. }

  24. }

  25. void Delay(unsigned int t)//t=5000Ñó3ù4s
  26. {
  27.    unsigned int k;
  28.          while(t--)
  29.    {
  30.     for(k=0;k<80;k++)
  31.     {}
  32. }


  33. }


  34. void main(void)
  35. {

  36.         
  37.           TMOD=0x10;
  38.            TH1=0x3C;
  39.            TL1=0xB0;
  40.            EA=1;
  41.            ET1=1;
  42.            TR1=0;
  43.         
  44.         
  45.          while(1)
  46.          {
  47.    if(k1==1)
  48.    {
  49.     Delay(1);
  50.                  if(k1==1)
  51.                  {
  52.                        TR1=1;
  53.         Direction=1;
  54.                            Speed=10;  
  55.          
  56. }  


  57. }
  58. else
  59.         {
  60.                
  61.                 Delay(5000);
  62.     TR1=0;
  63.         
  64. }
  65.         
  66. }

  67. }


  68. void timer()  interrupt 3
  69. {
  70. static u16 i;
  71.            TH1=0x3C;
  72.            TL1=0xB0;
  73.      i++;
  74.         

  75.   if(i==100)
  76.         {
  77.                   Delay(5000);
  78.                    Delay(5000);
  79.                   Delay(5000);
  80.                   Direction=0;
  81.                    Speed=10;
  82.                   i=0;
  83.                
  84. }
  85.                         Motor();

  86. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:68468 發(fā)表于 2020-4-5 21:15 | 只看該作者
從程序看,你的電機(jī)是一個(gè)步進(jìn)電機(jī),F(xiàn)FS[]、FFN[]數(shù)組分別是正反轉(zhuǎn)數(shù)組;我暫時(shí)還不知道電機(jī)為什么會(huì)亂轉(zhuǎn),但從程序本身來看還是有點(diǎn)問題的。首先,我看不出程序是怎么實(shí)現(xiàn)“電機(jī)反轉(zhuǎn)5S后,延時(shí)一會(huì),再以相同速度正轉(zhuǎn)5S,停止”的;其次,在中斷服務(wù)函數(shù)中不應(yīng)有Delay(5000)這樣的長延時(shí)函數(shù)。
從我的角度來處理,我會(huì)先把程序最小化,只在主函數(shù)中保留 Motor()函數(shù),其他的按鍵、定時(shí)中斷均先屏蔽掉, Motor()函數(shù)也只留FFS數(shù)組,單獨(dú)試電機(jī)是否能正轉(zhuǎn),再換成FFN數(shù)組,試電機(jī)能否反轉(zhuǎn),再加入按鍵功能,延時(shí)正反轉(zhuǎn)功能。最終實(shí)現(xiàn)既定功能。
回復(fù)

使用道具 舉報(bào)

板凳
ID:487821 發(fā)表于 2020-4-7 00:06 | 只看該作者
這代碼寫得也太亂了吧,你自己改延時(shí)函數(shù)應(yīng)該 就行了,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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