用AT89C51单片机控制步进电机的汇编源程序

编程实验

72人已加入

描述

  下面程序完成的主要功能:实现步进电机的正反转,加速、减速;显示电机转速(转速级别)和工作状态(正转、反转、不转)。

  源程序

  SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~7

  FX EQU 11H ;FX 为方向标志

  COUNT EQU 12H ;COUNT中断次数标志

  ORG 0000H

  AJMP MAIN

  ORG 0003H ;外部中断0入口地址,加速子程序

  AJMP UP

  ORG 0013H ;外部中断1入口地址,减速子程序

  AJMP DOWN

  ORG 000BH ;定时器0中断入口地址,控制中断次数来达到控制转速 AJMP ZDT0

  ORG 0030H

  MAIN: MOV SP,#60H

  MOV TMOD,#01H ;工作于定时、软件置位启动,模式1(16 位计时器)

  MOV TH0,#0CFH

  MOV TL0,#2CH

  MOV COUNT,#01H

  SETB ET0 ;定时/计数器允许中断

  CLR IT0 ;外部中断为电平触发方式,低电平有效

  CLR IT1

  SETB EX0 ;外部允许中断

  SETB EX1

  SETB EA ;开总中断

  MOV R1,#11H ;四相单四拍运行,共阳数码管方向显示8,速度值显示0

  MOV SPEED,#00H

  MOV FX,#00H

  XIANS: MOV A,SPEED

  MOV DPTR,#LED

  MOVC A,@A+DPTR ;查表获取等级对应数码管代码

  MOV P2,A ;第二个数码管显示转速等级

  MOV A,FX ;准备判断转向

  CJNE A,#11H,ELS

  MOV P0, #0F9H ;第一个数码管显示 1,表示正转

  AJMP QD

  ELS: CJNE A,#00H,ZHENG

  MOV P0,#0C0H ;第一个数码管显示 0,表示不转

  AJMP QD

  ZHENG: MOV P0,#0BFH ;第一个数码管显示-,表示反转

  QD: JB P3.4,DD ;P3.4 接启动开关 K1,P3.4=1 时启动

  CLR TR0 ;停止定时/计数器

  MOV P0,#0C0H ;第一个数码管显示 0,表示不转

  MOV P2,#0C0H ;第二个数码管显示 0,表示转速为 0

  MOV SPEED,#00H ;重新赋初值

  MOV FX,#00H

  AJMP QD

  DD: MOV A,SPEED

  JNZ GO ;A 不等于 0,即初始速度不为零,则转移到 GO

  CLR TR0 ;停止定时/计数器

  AJMP QD

  GO: SETB TR0 ;开启定时/计数器

  ACALL DELAY

  AJMP XIANS

  DELAY: MOV R6,#10 ;延时子程序

  DEL1: MOV R7,#250

  HERE1: DJNZ R7, HERE1

  DJNZ R6,DEL1

  RET

  ;以下 ZDT0 为定时器中断程序

  ZDT0: PUSH ACC

  PUSH DPH

  PUSH DPL

  MOV TH0,#0D8H

  MOV TL0,#0F0H

  DJNZ COUNT,EXIT

  JB P3.5,NIZHUAN ;查询方向标志,P3.5 接换向开关 K2

  MOV FX,#11H

  NIZHUAN:MOV A,FX

  CJNE A,#11H,FZ ;若A不等于11,即正转,则转移到 FZ

  MOV A,R1 ;R1 记录上一次电机脉冲状态

  MOV P1,A

  RR A ;循环右一位

  MOV R1,A

  MOV P1,A

  AJMP RE

  FZ: MOV A,R1

  MOV P1,A

  RL A ;循环左移一位

  MOV P1,A

  MOV R1,A

  RE: MOV A,SPEED

  MOV DPTR,#TAB

  MOVC A,@A+DPTR

  MOV COUNT,A ;把转速级别赋给 COUNT

  JB P3.5 ,FFX ;P3.5 接换向开关K2, 即换向位,若P3.5=1,则跳到 FFX

  MOV FX,#11H

  AJMP EXIT

  FFX: MOV FX,#0FEH;只要FX不等于11H,就可以通过循环左移或右移进行换向

  EXIT: POP DPL

  POP DPH

  POP ACC

  RETI

  ;以下 UP 为加速中断程序

  UP: PUSH ACC

  ACALL DELAY ;延时防抖

  JB P3.2,UPEX ;P3.2 为外部中断0位,接增速开关S2,低电平有效,若P3.2=1,则退出

  MOV A,SPEED

  CJNE A,#7,SZ ;最大等级为 7,若 A 不等于 7,则转移到 SZ

  AJMP UPEX ;若 A=7,则退出

  SZ: INC SPEED ;SPEED= SPEED+1

  UPEX: POP ACC

  HERE2: JNB P3.2,HERE2 ;本条指令为防止开关 S2 按下去后弹不起,导致一直产生中断

  RETI

  ;以下 DOWN 为减速中断程序

  DOWN: PUSH ACC

  ACALL DELAY

  JB P3.3,DEX ;P3.3 为外部中断1位,接减速开关S3,低电平有效,P3.3=1则退出

  MOV A,SPEED

  CJNE A,#0,SJ

  AJMP DEX

  SJ: DEC SPEED ;SPEED= SPEED-1

  DEX: POP ACC

  HERE3: JNB P3.3,HERE3

  RETI

  TAB: DB 0,60,40,35,30,28,25,21 ;经仿真,小于21时,由于脉冲太快,会出现失步 ;

  LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H

  END

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
ac自动机 2019-06-25
0 回复 举报
怎么接线,除了单片机和步进电机还需要什么吗 收起回复
20171227 2017-12-28
0 回复 举报
能给讲解一下吗,看不明白 收起回复
全部评论

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分