專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

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

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月30日   【字體:

 ;本程序是通過秒信號觸發(fā)中斷來實現(xiàn)的,要求中斷程序必須在1S內(nèi)執(zhí)行完畢

 ;步進電機轉(zhuǎn)速控制是通過8255輸入信號在每次執(zhí)行中斷程序內(nèi)調(diào)整控制信號的循環(huán)次數(shù)來實現(xiàn)的
 CODE   SEGMENT
  ASSUME CS:CODE
 
 START:  PUSH CS
  POP DS;數(shù)據(jù)段和代碼段共用一個地址
  JMP MAIN
  NUM DB 08H,04H,02H,01H;  定義循環(huán)控制信號
  DAT1 DB 0H    ;定義循環(huán)參量
  DAT2 DB 0H 
 
 ;---------初始化8253計數(shù)器-----------
 MAIN: MOV DX,203H;計數(shù)器0初始化,工作在方式3
  MOV AL,36H
  OUT DX,AL
 
  MOV DX,200H;給計數(shù)器0賦計數(shù)初值960H(2400)
  MOV AL,60H ;低8位
  OUT DX,AL
  MOV AL,09H ;高8位
  OUT DX,AL
 
  MOV DX,203H;計數(shù)器1初始化,工作在方式3
  MOV AL,76H
  OUT DX,AL
 
  MOV DX,201H;給計數(shù)器1賦計數(shù)處值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;裝載中斷函數(shù)的偏移地址
  MOV ES:[DI],AX
  MOV AX,8100H;
  MOV ES:[DI+2],AX
 ;-------------初始化8259A--------------
  MOV DX,210H;ICW1初始化
  MOV AL,13H;上升沿觸發(fā),單片,要ICW4
  OUT DX,AL
 
  MOV DX,211H;ICW2初始化
  MOV AL,08H;初始化中斷類型碼范圍,08-0F對應(yīng)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循環(huán)歸零
 
 LOP:    MOV AX,0
  JMP LOP;死循環(huán),等待中斷到來
 
 ;------------中斷程序開始----------
  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;調(diào)用按鍵掃描子程序
  DEC DAT1  ;循環(huán)次數(shù)減一
  JNZ LTP   ;循環(huán)次數(shù)減為零時跳出循環(huán)
 
  MOV AL,DAT2;重新填裝DAT1的值
  MOV DAT1,AL
 
  MOV DX,210H;中斷結(jié)束命令
  MOV AL,20H
  OUT DX,AL
  IRET;中斷返回
  INTP ENDP
 
 ;-------按鍵掃描程序----------
 REFRESH PROC FAR
  MOV DX,218H
  IN AL,DX
  CMP AL,00H
  JNZ NEXT1  ;若輸入信號為00,則循環(huán)參量置為1
  MOV DAT2,01H
 NEXT1: CMP AL,01H
  JNZ NEXT2  ;若輸入信號為01,則循環(huán)參量置為2
  MOV DAT2,02H
 NEXT2: CMP AL,03H
  JNZ NEXT3  ;若輸入信號為11,則循環(huán)參量置為3
  MOV DAT2,03H
 NEXT3: CMP AL,07H
  JNZ NEXT4  ;若輸入信號為111,則循環(huán)參量置為4
  MOV DAT2,04H
 NEXT4   MOV DAT1,0H
  RET
 REFRESH ENDP
 ;-------按鍵掃描結(jié)束----------
 CODE    ENDS
  END START
關(guān)閉窗口

相關(guān)文章