<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        51單片機步進電機控制匯編語言程序

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月30日   【字體:

         ;本程序是通過秒信號觸發中斷來實現的,要求中斷程序必須在1S內執行完畢

         ;步進電機轉速控制是通過8255輸入信號在每次執行中斷程序內調整控制信號的循環次數來實現的
         CODE   SEGMENT
          ASSUME CS:CODE
         
         START:  PUSH CS
          POP DS;數據段和代碼段共用一個地址
          JMP MAIN
          NUM DB 08H,04H,02H,01H;  定義循環控制信號
          DAT1 DB 0H    ;定義循環參量
          DAT2 DB 0H 
         
         ;---------初始化8253計數器-----------
         MAIN: MOV DX,203H;計數器0初始化,工作在方式3
          MOV AL,36H
          OUT DX,AL
         
          MOV DX,200H;給計數器0賦計數初值960H(2400)
          MOV AL,60H ;低8位
          OUT DX,AL
          MOV AL,09H ;高8位
          OUT DX,AL
         
          MOV DX,203H;計數器1初始化,工作在方式3
          MOV AL,76H
          OUT DX,AL
         
          MOV DX,201H;給計數器1賦計數處值80H(128)
          MOV AL,80H ;低8位
          OUT DX,AL
          MOV AL,00H ;高8位
          OUT DX,AL
         
         ;-----------初始化8255---------------
          MOV DX,021BH;A口輸入,B口輸出
          MOV AL,90H
          OUT DX,AL
            
         ;-----------初始化向量表8號中斷--------
          MOV AX,0;ES:DI  
          MOV ES,AX
          MOV DI,20H;4*8=32
          MOV AX,OFFSET INTP;裝載中斷函數的偏移地址
          MOV ES:[DI],AX
          MOV AX,8100H;
          MOV ES:[DI+2],AX
         ;-------------初始化8259A--------------
          MOV DX,210H;ICW1初始化
          MOV AL,13H;上升沿觸發,單片,要ICW4
          OUT DX,AL
         
          MOV DX,211H;ICW2初始化
          MOV AL,08H;初始化中斷類型碼范圍,08-0F對應INT0-INT7
          OUT DX,AL
         
          MOV DX,211H;ICW4初始化
          MOV AL,01H;
          OUT DX,AL
         ;--------------打開中斷--------------
          MOV DX,211H;打開8259A八號中斷
          IN AL,DX
          AND AL,0FEH;1111 1110
          OUT DX,AL
          STI;開CPU中斷,IF=1
         
          MOV BX,OFFSET NUM;取控制信號的偏移地址
          MOV SI,0       ;將SI循環歸零
         
         LOP:    MOV AX,0
          JMP LOP;死循環,等待中斷到來
         
         ;------------中斷程序開始----------
          INTP PROC FAR;
         LTP: MOV DX,219H
          MOV AL,[BX+SI]
          OUT DX,AL
          INC SI
          CMP SI,04H
          JNZ NEXT
          MOV SI,0
         
         NEXT:   MOV CX,03FFFH ;簡短延時
          LOOP $
          CALL REFRESH;調用按鍵掃描子程序
          DEC DAT1  ;循環次數減一
          JNZ LTP   ;循環次數減為零時跳出循環
         
          MOV AL,DAT2;重新填裝DAT1的值
          MOV DAT1,AL
         
          MOV DX,210H;中斷結束命令
          MOV AL,20H
          OUT DX,AL
          IRET;中斷返回
          INTP ENDP
         
         ;-------按鍵掃描程序----------
         REFRESH PROC FAR
          MOV DX,218H
          IN AL,DX
          CMP AL,00H
          JNZ NEXT1  ;若輸入信號為00,則循環參量置為1
          MOV DAT2,01H
         NEXT1: CMP AL,01H
          JNZ NEXT2  ;若輸入信號為01,則循環參量置為2
          MOV DAT2,02H
         NEXT2: CMP AL,03H
          JNZ NEXT3  ;若輸入信號為11,則循環參量置為3
          MOV DAT2,03H
         NEXT3: CMP AL,07H
          JNZ NEXT4  ;若輸入信號為111,則循環參量置為4
          MOV DAT2,04H
         NEXT4   MOV DAT1,0H
          RET
         REFRESH ENDP
         ;-------按鍵掃描結束----------
         CODE    ENDS
          END START
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮