久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開(kāi)始

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

上位機(jī)發(fā)送命令控制單片機(jī)發(fā)送特定數(shù)量的脈沖,驅(qū)動(dòng)步進(jìn)電機(jī)驅(qū)動(dòng)器

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 10 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 50%)
跳轉(zhuǎn)到指定樓層
樓主
ID:311281 發(fā)表于 2018-10-18 09:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
比如上位機(jī)發(fā)送2A 2A F4 04 00 00 00 F8,則使單片機(jī)發(fā)送4個(gè)脈沖(命令第4個(gè)字節(jié)表示脈沖數(shù)),問(wèn)題在與我用proteus仿真,發(fā)送這個(gè)命令后單片機(jī)一直發(fā)送脈沖,沒(méi)有按照我們的命令只發(fā)送4個(gè)脈沖,這怎么辦,
程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. const uint setpulse=1;

  5. uint judge[8];
  6. uchar  cnt=0;
  7. uint pulse;
  8. uint point;
  9. uchar mot_ZT;
  10. uchar  move_ok;
  11. uint dcf_XY;
  12. uint dcf_PY;
  13. uint dcf_QX;
  14. uint djuchar re_flag;
  15. /**效驗(yàn)和參數(shù)設(shè)定**/
  16. uchar sum;

  17. /**端口引腳定義**/
  18. sbit Mot_Dir=P2^7;        //步進(jìn)電機(jī)方向
  19. sbit Mot_En=P2^6;        //步進(jìn)電機(jī)使能
  20. sbit Mot_Pulse=P2^5;        //步進(jìn)電機(jī)脈沖
  21. sbit sw=P0^3;                //限位開(kāi)關(guān)
  22. sbit Valve_XY=P2^0;   //吸樣閥
  23. sbit Valve_PY=P2^1;          //排樣閥
  24. sbit Valve_QX=P2^2;          //清洗閥


  25. /**定時(shí)器0的初始化子程序**/
  26. void Init_Timer0(void)
  27. {
  28.   TMOD |=0x01;

  29.   EA=1;
  30.   ET0=1;
  31.   TR0=1;
  32. //  PS=1;          //串口的優(yōu)先級(jí)
  33.   PT0=1;  // 定時(shí)器T0的優(yōu)先級(jí)
  34. }

  35. /**延時(shí)**/
  36. void DelayUs2x(uchar t)
  37. {
  38.   while(--t);
  39. }
  40. void DelayMs(uchar t)
  41. {
  42.   while(t--)
  43.   {
  44.      //延遲1ms
  45.      DelayUs2x(245);
  46.      DelayUs2x(245);
  47.    }
  48. }
  49. //**串口初始化**//
  50. void InitUART(void)        
  51. {
  52.   SCON=0x50;
  53.   TMOD |=0x20;
  54.   TH1=0xFD;
  55.   TL1=0xFD;
  56.   TR1=1;
  57.   EA=1;
  58.   ES=1;
  59.   ET0=0;
  60. //  PS=1;
  61. }
  62. /**效驗(yàn)和**/
  63. void check(void)
  64. {
  65.    uchar tmp;
  66.    uint cs=0;
  67.   for(tmp=2;tmp<7;tmp++)
  68.     {
  69.            cs+=judge[tmp];
  70.         }
  71.         tmp=cs>>8;
  72.         sum=cs&0x00ff;
  73.         if(sum==0xff)
  74.         {
  75.           sum=0;
  76.         }
  77.         sum+=tmp;
  78.         if(sum==0xff)
  79.         {
  80.           sum=0;
  81.         }

  82. }

  83. //**串口中斷程序**//
  84. void UART_SER(void) interrupt 4
  85. {
  86.   unsigned char Temp;
  87.   uchar i;
  88.   if(RI)
  89.   {
  90.     RI=0;         // 標(biāo)志位清零
  91.         Temp=SBUF;
  92.         judge[cnt]=Temp;
  93.         if(judge[0]==0x2A)        
  94.          {
  95.             cnt++;
  96.                 if(cnt>=8)
  97.                 {
  98.                    check();
  99.                    if(judge[7]==sum)
  100.                      {
  101.                            re_flag=1;
  102.                          }
  103.                         else
  104.                         {
  105.                            for(i=0;i<8;i++)
  106.                            {
  107.                               judge[i]=0x00;//緩存數(shù)組清零
  108.                            }
  109.                         }
  110.                    cnt=0;
  111.                 }
  112.          }
  113.          
  114.     SBUF=Temp;//把接受的值再返還給電腦端         
  115.   }
  116.   if(TI)  //如果是發(fā)送標(biāo)志位,清零
  117.   {
  118.     TI=0;
  119.   }
  120. }


  121. //**定時(shí)器中斷子程序**//
  122. void Timer0_(void) interrupt 1
  123. {
  124.   sw=1;         //為了測(cè)試程序先定義一個(gè)sw的狀態(tài)
  125.   TH0=(65536-2000)/256;         //定時(shí)2ms
  126.   TL0=(65536-2000)%256;
  127.   switch(mot_ZT)
  128.   {
  129.     case 0://復(fù)位
  130.         if(sw==1)//觸點(diǎn)開(kāi)關(guān) 開(kāi)
  131.          {
  132.        Mot_Dir=0;
  133.            Mot_Pulse=0;
  134.            Mot_En=1;
  135.          }
  136.          else
  137.          {
  138.            Mot_Dir=0;
  139.            Mot_Pulse=~Mot_Pulse;
  140.            Mot_En=1;
  141.          }
  142.          if(sw==1)
  143.          {
  144.            move_ok=1;
  145.            mot_ZT=3;

  146.          }
  147.          break;
  148. case 1: //探針上移
  149.           if(sw==1||pulse==0)
  150.          {
  151.            Mot_Dir=0;
  152.            Mot_Pulse=0;
  153.            Mot_En=1;
  154.          }
  155.          else
  156.          {
  157.            Mot_Dir=0;
  158.            Mot_Pulse=~Mot_Pulse;
  159.            Mot_En=1;
  160.            pulse--;
  161.          }
  162.          if(pulse==0)
  163.          {
  164.            move_ok=1;
  165.            mot_ZT=3;

  166.          }
  167.          break;
  168. case 2://探針下移
  169.     if(pulse==0)
  170.         {
  171.           Mot_Dir=1;
  172.           Mot_En=1;
  173.           Mot_Pulse=0;
  174.         }
  175.         else
  176.         {
  177.           Mot_Dir=1;
  178.           Mot_Pulse=~Mot_Pulse;
  179.           Mot_En=1;
  180.           pulse--;
  181.         }
  182.             if(pulse==0)
  183.            {
  184.              move_ok=1;
  185.                     mot_ZT=3;               
  186.            }
  187.            break;
  188.   case 3:  //電機(jī)不動(dòng)
  189.        Mot_Dir=1;
  190.            Mot_Pulse=0;
  191.            Mot_En=1;

  192.            break;
  193. default:
  194.        Mot_Dir=1;
  195.            Mot_Pulse=0;
  196.            Mot_En=1;
  197.              break;

  198.   }
  199. }


  200. //**探針位置函數(shù)**//
  201. void Motor(void)
  202. {
  203.   Init_Timer0();
  204.   EA=1;

  205.   if(judge[2]==0xF3)  //探針置位
  206.   {
  207.     mot_ZT=0;   //狀態(tài)標(biāo)志為0,1,2        ,3
  208.   }
  209.   else if(judge[2]==0xF4)//探針上移
  210.   {
  211.     mot_ZT=1;
  212.         point=judge[3];
  213.         pulse=point*setpulse;

  214.   }
  215.   else if(judge[2]==0xF5)//探針下移
  216.   {
  217.      mot_ZT=2;
  218.          pulse=judge[3];
  219.          pulse=point*setpulse;
  220.   }
  221. }


  222. //**主函數(shù)**//
  223. void main(void)
  224. {
  225.   InitUART();
  226.   ES=1;
  227.   while(1)
  228.   {
  229.     if(re_flag==1)
  230.         {
  231.       if(judge[0]==0x2A&&judge[1]==0x2A)
  232.           {
  233.             if(judge[2]==0xF3||judge[2]==0xF4||judge[2]==0xF5)
  234.                   {
  235.                      Motor();
  236.                         
  237.                   }
  238.                 else if(judge[2]==0xF2)
  239.                   {
  240.                     beng();  //泵中的1為關(guān),0為開(kāi)
  241.                   }
  242.          
  243.           }
  244.          }

  245.   }

  246. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2018-10-18 15:39 | 只看該作者
re_flag變量使用過(guò)就要清0,否則永久執(zhí)行后續(xù)命令。
回復(fù)

使用道具 舉報(bào)

板凳
ID:311281 發(fā)表于 2018-10-19 15:10 | 只看該作者
wulin 發(fā)表于 2018-10-18 15:39
re_flag變量使用過(guò)就要清0,否則永久執(zhí)行后續(xù)命令。

謝謝,確實(shí)是疏忽了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 秋霞电影一区二区 | 日本涩涩网| av一级一片 | 在线观看中文字幕 | 一级黄色片在线免费观看 | 一级黄色片美国 | 欧美亚洲国产成人 | 欧美日韩综合 | 四虎精品在线 | 国产精品久久久久aaaa | 亚洲一区高清 | 久国产精品 | 亚洲福利精品 | 午夜av毛片 | 黄色免费在线观看网站 | 国产极品91| 欧美三区视频 | 久久一二 | 欧美xxxx性 | 国产资源一区二区三区 | 99热国产在线播放 | 99一区二区| 久久精品91久久久久久再现 | 91精品国产色综合久久 | 九九综合 | 在线国产一区二区 | 一区二区三区免费观看 | 日韩精品999 | 一级无毛片 | 国产99久久久国产精品 | 久久久久久成人网 | 欧美视频二区 | 国产欧美一级二级三级在线视频 | 亚洲国产高清免费 | 丝袜美腿一区二区三区动态图 | 九九热在线免费观看 | 欧美日一区二区 | 日本不卡高清视频 | 二区av| 51ⅴ精品国产91久久久久久 | 天天操天天摸天天爽 |