日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
控制步進電機正反轉(zhuǎn)的實際應(yīng)用程序(c)
控制步進電機正反轉(zhuǎn)的實際應(yīng)用程序(c)
 更新時間:2008-7-26 19:57:54  點擊數(shù):2
【字體: 字體顏色

控制步進電機正反轉(zhuǎn)的實際應(yīng)用程序

      作者:佚名
      /*這是一個控制步進電機正反轉(zhuǎn)的實際應(yīng)用程序*/
      /*選用的是三相步進電機驅(qū)動器,p14口線用做步進電機的脈沖控制*/
      /*p13口線用做步進電機的方向控制。p15,p16,p17是光耦開關(guān)量輸入*/
      /*信號端,p20,p21,p22,p23與x25045看門狗存儲器相連*/
      /*k7,k8鍵是設(shè)定步進電機轉(zhuǎn)動速度參數(shù)的加減鍵*/
      /*k9是啟動運行鍵,按一下k9,步進電機開始運行,直到p17口線有信號輸入才停止*/
      /*k10是停止鍵,任何時候按下k10都將停止步進電機當(dāng)前的運行*/
      /*k11是步進運行鍵,按一下,步進電機動一下*/
      /*k12鍵是反向運行鍵,按一下,步進電機開始反向運行,知道p15口線有信號才停止*/
      /*如果p16口線有信號輸入,則只有k12鍵才起作用,其它鍵都沒反應(yīng)。*/
      START:do;      
      $INCLUDE(REG51.DCL)
      DECLARE (addrl,n,I,j,ok,ds) byte; /*定義變量*/
      declare l(5) byte;
      declare (dat,data) byte at (30h);
      declare delay word;
      DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定義LED段碼表*/
        41h,1fh,01h,09h,00h);
      declare si literally 'p21',sck literally 'p20';  /*X25045囗線定義*/
      declare so literally 'p22',cs literally 'p23';
      dog:procedure;  /* 初始化看門狗x25045 */
       cs=1;
       call time(1);
       cs=0;
       call time(1);
       cs=1;
      end dog;

      run:procedure;  /*步進電機運行脈沖輸出程序*/
        if ok=1 then 
        call dog;
        do;
          p14=0;
           call time(1);
          p14=1;
           call time(1);
        end;
      end run;

      DISPLAY:PROCEDURE(L0,L10); /*顯示子程序*/
      DECLARE (L0,L10) BYTE; /*定義顯示二位*/
      n=L10;                
        n=aco(n);           /*十位數(shù)BCD碼譯成段碼*/
        sbuf=n;             /*十位數(shù)送164顯示*/
        do while ti=0;      /*等待發(fā)送結(jié)束*/
           call dog;        /*看門狗定時器復(fù)位*/ 
        end;
      n=L0;               
         n=aco(n);         
         sbuf=n;           /*個位數(shù)送164顯示*/
         do while ti=0;    
          call dog;
         end;
      end display;      
      outbyt:  procedure(da);       /*向看門狗存儲器寫入一字節(jié)*/
      declare (i,da) byte;
      j=da;                 /*將要寫入的字節(jié)賦給臨時變量J */
      do i=0 to 7;          /*左移8位,送到口線si */
         sck=0;
         j=scl(j,1);
         si=cy;
         sck=1;            /*每移一位數(shù)據(jù),跟一個時鐘信號*/
      end;
      end outbyt;  

      inbyt:  procedure;   /* 從看門狗存儲器讀出一字節(jié) */
      declare (i,di) byte;
      j=0;
       do i=0 to 7;  
         sck=1;
         sck=0;
         cy=so;
         j=scl(j,1);  /*從看門狗存儲器讀出一字節(jié)送入臨時變量j*/
       end;
       dat=j;
      end inbyt;

      wrenable: procedure;   /* 置看門狗寫使能*/
      sck=0;
      cs=0;
      ;  /* write enable command */
      call outbyt(06h); /* x25045 寫使能指令06h */
      cs=1;
      sck=0;
      end wrenable;

      wrdisable: procedure;  /* 置看門狗寫禁止 */
       sck=0;
       cs=0;
       ; /* write disable command */
       call outbyt(04h);
       sck=0;
       cs=1;
      end wrdisable;

      wrregister: procedure;   /* 寫狀態(tài)寄存器 */
       sck=0;
       cs=0;
       dat=01h;      /* write register command */
       call outbyt(dat);
       ;     /* 00h--1.4S, 20h--200MS, 10h--600MS, 30h--disable Wdog */
       call outbyt(00h); /* 設(shè)定看門狗定時時間 */
       ;
       sck=0;
       cs=1;
       call time(200); /* wait to complete writting cycle */
      end wrregister;

      rdregister:procedure;  /*  讀看門狗狀態(tài)寄存器 */
       sck=0;
       cs=0;
       ;   /* register read command */
       call outbyt(05h);
       call inbyt; /* status register read in <DAT> */
       sck=0;
       cs=1;
      end rdregister;

      wbyte:procedure;   /*  看門狗存儲器字節(jié)寫入子程序 */
        declare comm byte;
        sck=0;
        cs=0;
        comm=02h;  /*  寫指令 02h */
        call outbyt(comm);
        call outbyt(addrl);
        call outbyt(dat);  /*  send one byte data to X25043 */
        cs=1;
        sck=0;
        call time(150);
      end wbyte;

      rbyte:procedure;  /*看門狗存儲器字節(jié)讀出子程序  */
        declare comm byte;
        sck=0;
        cs=0;
        comm=03h;     /* read command */
        call outbyt(comm);
        call outbyt(addrl);
        call inbyt;   /* read one byte to <DAT>  */
        sck=0;
        cs=1;
      end rbyte;

      incdata:   procedure;          /* 參數(shù)修改--"加"鍵處理子程序+ */
      if p10=0 then         /* 如果K7鍵按下*/
          do;
      do while p10=0;       /* 等待鍵松開有效 */
        call dog;           /* 此處必需調(diào)用看門狗復(fù)位子程序("喂狗"),否則程序?qū)⒈豢撮T狗復(fù)位*/
      end;
      data=data+1;          /* 設(shè)定值+1 */
      if data>99 then data=1;  /* 規(guī)定設(shè)定值的上限*/
      L(1)=data MOD 10;       /*將設(shè)定值的十位數(shù)拆出來送給十位數(shù)顯示變量L(1) */
      L(2)=data/10;           /*將設(shè)定值的個位數(shù)拆出來送給個位數(shù)顯示變量L(2) */
      call display(L(1),L(2)); /* 將改變后的設(shè)定值送164顯示出來*/
      call time(200);         /* 延時 */
      call dog;
      call time(200);
      call dog;
      call wrenable;           /* 置存儲器寫使能 */
      addrl=00h;               /* 置存儲器地址 */
      dat=l(1);                
      call wbyte;              /* 將變量L(1)的值寫入存儲器00h位置 */ 
      call wrenable;
      addrl=01h;
      dat=l(2);
      call wbyte;              /* 將變量L(2)的值寫入存儲器01h位置 */ 
            end;
      end incdata;              
      decdata:   PROCEDURE;         /* 參數(shù)修改---"減"鍵處理子程序- */   
      IF p11=0 THEN         /* k8 鍵處理子程序 */ 
           do;
      do while p11=0;
         call dog;
      end;
      DATA=DATA-1;             /* 設(shè)定值-1 */
      if data=0 then data=99;
      L(1)=data MOD 10;      
      L(2)=data/10;          
      call display(l(1),l(2));
      call dog;
      call time(200); 
      call dog;
      call time(200);
      call dog;
       call wrenable;
       addrl=00h;          
       dat=l(1);
       call wbyte;
       call wrenable;
       addrl=01h;          
       dat=l(2);
       call wbyte;
         end;
      END decdata;              

      starton:   PROCEDURE;         /* start */   
          declare sd byte;
          if p12=0 THEN         /* K9鍵處理子程序  */   
       do;
           do while p12=0;
      call dog;
           end;
           if p17=0 then ok=0;  /* 如果p17 口線上有信號輸入,則運行標(biāo)志置0 (停止運行)*/
           p13=1;              /* 置步進電機正向運轉(zhuǎn) */
           call time(200);
            call dog;
           do while ok=1;      /* 當(dāng)運行標(biāo)志為1時,執(zhí)行速度延時操作 */
             do sd= 0 to data; /* 根據(jù)設(shè)定值 data的數(shù)值延時來確定步進電機運行時的脈沖給定速度*/
         call dog;
           end;
       end;
      END starton;              

      step:   PROCEDURE;         /* step */   
      declare sd byte;
      p13=1;             /* 置步進電機正向運轉(zhuǎn) */
      call time(200);
      call dog;
      IF p33=0 THEN      /* k11鍵處理子程序  */         
        do;
      if p17=0 then ok=0; /* 如果p17上有信號輸入,則停止運行*/
      do while p33=0;
         do sd= 0 to data; /* 調(diào)用延時,調(diào)整步進電機的運行速度 */
             call dog;
            call time(2);
         end;
         call run;
         call dog;
      end;
       end;
       ok=0;
      END step;              

      back:   PROCEDURE;         /* 反向運行處理子程序 */   
      declare sd byte; 
      IF p34=0 THEN          
        do;
      do while p34=0;
         call dog;
      end;
      if p15=0 then ok=0;   /* 反向運行時,如果遇到p15上有信號輸入,則停止步進電機運行 */
      p13=0;                /* 置步進電機反向運行 */
      call time(200);
      call dog;
           do while ok=1;
      do sd=0 to data;     /*根據(jù)設(shè)定值調(diào)節(jié)步進電機的運行速度 */
         call dog;
         call time(2);
      end;
      call run;
      if (p15=0 or p32=0 ) then ok=0; /* p15 或 p32 口線任意一個有信號輸入,停止運行 */
           end;
      
       end;
      END back;              

      MAIN$PROGRAM:    /* 初始化主程序 */
      ea=0;             /* 關(guān)中斷  */
      SCON=00h;         /*置串口方式0 ,串行數(shù)據(jù)輸出模式*/     
      PCON=00h;               
      tmod=11h;
      et0=1;
      enable;          /* 開中斷 (ea=1) */
      SCK=0;cs=1;      /* 定義存儲器口線初始狀態(tài) */       
      call wrenable;  
      call wrregister;  /* 看門狗存儲器 初始化  */
      call wrenable;
      call dog;
      p2=0ffh;               /* 初始化各個口線的狀態(tài) */
      p1=0ffh;ok=0;       
      p14=1;p32=1;p33=1;p34=1;
      p13=1;                   
      ADDRL=00h;     /* 上電復(fù)位后從存儲器中讀出設(shè)定的速度值   */      
      CALL rbyte;              
      l(1)=dat;
      addrl=01h;
      call rbyte;
      l(2)=dat;
      DATA=L(1)+L(2)*10;    /*將讀出的值合并成十進制,存入變量data中 */  
      /* 以下是主循環(huán)程序 */
      LOOP: 
      IF p10=0 THEN CALL incdata;  /* 檢測各個按鍵是否有按下 */
      IF p11=0 THEN CALL decdata;
      if p12=0 then
        do;
           ok=1;
           call starton;
        end;
      if p34=0 then
        do;
          ok=1;
          call back;
        end;
      if p33=0 then
        do;
          ok=1;
          call step;
        end;
      call dog;
      CALL DISPLAY(L(1),L(2));  /* 將設(shè)定值送164顯示 */
      call dog;
      CALL TIME(100);     
      call dog;
      GOTO LOOP;                 
      END START;      

  • 上一篇: AT89C2051單片機與MT8880接口設(shè)計1
  • 下一篇: 基于DS1307的多功能時鐘系統(tǒng)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1