新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 控制步進電機正反轉的實際應用程序

        控制步進電機正反轉的實際應用程序

        作者: 時間:2012-06-26 來源:網絡 收藏

        /*這是一個控制的實際*/
        /*選用的是三相驅動器,p14口線用做的脈沖控制*/
        /*p13口線用做步進電機的方向控制。p15,p16,p17是光耦開關量輸入*/
        /*信號端,p20,p21,p22,p23與x25045看門狗存儲器相連*/
        /*k7,k8鍵是設定步進電機轉動速度參數的加減鍵*/
        /*k9是啟動運行鍵,按一下k9,步進電機開始運行,直到p17口線有信號輸入才停止*/
        /*k10是停止鍵,任何時候按下k10都將停止步進電機當前的運行*/
        /*k11是步進運行鍵,按一下,步進電機動一下*/
        /*k12鍵是反向運行鍵,按一下,步進電機開始反向運行,知道p15口線有信號才停止*/
        /*如果p16口線有信號輸入,則只有k12鍵才起作用,其它鍵都沒反應。*/
        START:do;
        $INCLUDE(REG51.DCL)
        DECLARE(addrl,n,I,j,ok,ds)byte;/*定義變量*/
        declarel(5)byte;
        declare(dat,data)byteat(30h);
        declaredelayword;
        DECLAREACO(11)BYTECONSTANT(05h,9fh,23h,0bh,99h,49h,/*定義LED段碼表*/
        41h,1fh,01h,09h,00h);
        declaresiliterally'p21',sckliterally'p20';/*X25045囗線定義*/
        declaresoliterally'p22',csliterally'p23';
        dog:procedure;/*初始化看門狗x25045*/
        cs=1;
        calltime(1);
        cs=0;
        calltime(1);
        cs=1;
        enddog;

        run:procedure;/*步進電機運行脈沖輸出程序*/
        ifok=1then
        calldog;
        do;
        p14=0;
        calltime(1);
        p14=1;
        calltime(1);
        end;
        endrun;

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

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

        wrenable:procedure;/*置看門狗寫使能*/
        sck=0;
        cs=0;
        ;/*writeenablecommand*/
        calloutbyt(06h);/*x25045寫使能指令06h*/
        cs=1;
        sck=0;
        endwrenable;

        wrdisable:procedure;/*置看門狗寫禁止*/
        sck=0;
        cs=0;
        ;/*writedisablecommand*/
        calloutbyt(04h);
        sck=0;
        cs=1;
        endwrdisable;

        wrregister:procedure;/*寫狀態寄存器*/
        sck=0;
        cs=0;
        dat=01h;/*writeregistercommand*/
        calloutbyt(dat);
        ;/*00h--1.4S,20h--200MS,10h--600MS,30h--disableWdog*/
        calloutbyt(00h);/*設定看門狗定時時間*/
        ;
        sck=0;
        cs=1;
        calltime(200);/*waittocompletewrittingcycle*/
        endwrregister;

        rdregister:procedure;/*讀看門狗狀態寄存器*/
        sck=0;
        cs=0;
        ;/*registerreadcommand*/
        calloutbyt(05h);
        callinbyt;/*statusregisterreadinDAT>*/
        sck=0;
        cs=1;
        endrdregister;

        wbyte:procedure;/*看門狗存儲器字節寫入子程序*/
        declarecommbyte;
        sck=0;
        cs=0;
        comm=02h;/*寫指令02h*/
        calloutbyt(comm);
        calloutbyt(addrl);
        calloutbyt(dat);/*sendonebytedatatoX25043*/
        cs=1;
        sck=0;
        calltime(150);
        endwbyte;

        rbyte:procedure;/*看門狗存儲器字節讀出子程序*/
        declarecommbyte;
        sck=0;
        cs=0;
        comm=03h;/*readcommand*/
        calloutbyt(comm);
        calloutbyt(addrl);
        callinbyt;/*readonebytetoDAT>*/
        sck=0;
        cs=1;
        endrbyte;

        incdata:procedure;/*參數修改--"加"鍵處理子程序+*/
        ifp10=0then/*如果K7鍵按下*/
        do;
        dowhilep10=0;/*等待鍵松開有效*/
        calldog;/*此處必需調用看門狗復位子程序("喂狗"),否則程序將被看門狗復位*/
        end;
        data=data+1;/*設定值+1*/
        ifdata>99thendata=1;/*規定設定值的上限*/
        L(1)=dataMOD10;/*將設定值的十位數拆出來送給十位數顯示變量L(1)*/
        L(2)=data/10;/*將設定值的個位數拆出來送給個位數顯示變量L(2)*/
        calldisplay(L(1),L(2));/*將改變后的設定值送164顯示出來*/
        calltime(200);/*延時*/

        光耦相關文章:光耦原理


        存儲器相關文章:存儲器原理


        脈沖點火器相關文章:脈沖點火器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 太湖县| 微博| 桂平市| 饶河县| 通辽市| 连南| 大田县| 马边| 罗江县| 湖南省| 滦平县| 镇坪县| 大安市| 铜陵市| 杭锦旗| 东辽县| 长海县| 若尔盖县| 江孜县| 班戈县| 满城县| 嘉荫县| 保定市| 镇巴县| 屏东县| 永兴县| 余干县| 松溪县| 卓尼县| 保靖县| 云霄县| 紫阳县| 禹城市| 化德县| 安阳市| 财经| 随州市| 靖远县| 额尔古纳市| 宜君县| 孟津县|