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

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

世界顶级的氮化硼冷却填料
中国开发新芯片,算力提升3000倍!
TI新推6核DSP,兼具极低功耗和高性能
基于物联网和传感器技术的环保垃圾分类监测系统
“一碰即响”的防盗器,theft alarm
用AT89C51单片机控制步进电机的汇编源程序
音频系统噪声源的排除方法
facebook的黑科技技术一次汇总看完
微信小程序上线三天 看网友们现在怎么样了
码垛机器人该如何保养
极米2019年投影机出货量达67.6万台 连续两年中国投影市场全年总出货量第一
OK车险发布SDK 手机车联网监测驾驶行为
虹科免拆诊断 | 2012款斯柯达明锐车行驶中发动机偶尔自动熄火
模拟电路基础总结
步进电动机的工作原理与特点
新型电池阳极,可安全储存大量的锂离子,降低火灾风险
美国正在考虑更换华为和中兴通讯设备
贸泽电子2021年新增110家制造商合作伙伴 产品分销阵容再升级
PS-9600S系列笔记本手感测试机的分析?|深圳磐石测控仪器
苹果iPhone有望迎来无刘海时代