找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4116|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-17 22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序是通过秒信号触发中断来实现的,要求中断程序必须在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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表