51单片机步进电机控制汇编语言程

 ;本程序是通过秒信号触发中断来实现的,要求中断程序必须在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
以上是51单片机步进电机控制汇编语言程的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>