单片机中步进电机c语言程序,用AT89C51单片机控制步进电机的汇编源程序

单片机中步进电机c语言程序,用AT89C51单片机控制步进电机的汇编源程序下面程序完成的主要功能:实现步进电机的正反转,加速、减速;显示电机转速(转速级别)和工作状态(正转、反转、不转)。源程序SPEEDEQU10H;SPEED为转速等级标志,共7级,即1~7FXEQU11H;FX为方向标志COUNTEQU12H;COUNT中断次数标志ORG0000HAJMPMAINORG0003H;外部中断0入口地址,加速子程序AJMPUPORG001…

大家好,又见面了,我是你们的朋友全栈君。

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

源程序

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[page]

;以下 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144992.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【科普贴】SPI接口详解

    【科普贴】SPI接口详解一、SPI接口简介SPI接口是一种同步串行总线(SerialPeripheralInterface)多用于Flash存储器(如NORFlash&NandFlashd),ADC、LCD控制器等外围器件的通讯接口。大大增强了处理器的外设扩展能力。SPI接口缩写SSEL:slaveselect,常常也被写作CS(chipselect)或SS(slaveselect)SCK:serialclock,常常也写作SCLK或SCLMISO:masterinputslaveoutpu

    2022年6月18日
    53
  • Pycharm 调试代码显示错误行_pycharm远程调试

    Pycharm 调试代码显示错误行_pycharm远程调试pycharm调试scrapy问题:Unknowncommand:crawl

    2025年6月22日
    1
  • IIS真正能用的ISAPI-Rewrite防盗链规则写法

    IIS真正能用的ISAPI-Rewrite防盗链规则写法本规则支持白名单排除式防盗链,搜索引擎友好不屏蔽,被盗链后的错误提示转向,支持各种文件类型,经作者亲验真的能用,第一时间在原创发表,请继续往下阅读。近来小站遇到了盗链问题,至使网站的流量枉费流失,于是被迫准备为服务器安装防盗链机制以挽救本就不宽裕的带宽。通过G.CN和B.CN搜索后得出了几种不同的方案,例如网站程序的URL伪装法、服务器端的收费插件法和ISAPI-R…

    2022年7月23日
    9
  • Java volatile源码分析

    Java volatile源码分析synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile可以说是JVM提供的最轻量级的同步机制。jMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后什么时候写回到主内存中,实际上没有明确的限制。而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。https://blog.

    2022年7月18日
    11
  • 关于RuntimeException[通俗易懂]

    关于RuntimeException[通俗易懂]关于RuntimeException今天在写一个异常类的时候继承了RuntimeException,想一探究竟。RuntimeException:在定义方法时不需要声明会抛出runtimeException。Exception:定义方法时必须声明所有可能会抛出的exception。于是去查看了一翻api。publicRuntimeException() 提出了一种新的null运行时异常的详细信息。原因是没有初始化,初始化后可通过调用Throwable.initCause(..

    2022年7月24日
    23
  • 【收藏向】模拟电子技术超强知识点总结 20小时不挂科「建议收藏」

    【收藏向】模拟电子技术超强知识点总结 20小时不挂科「建议收藏」模电真的有难度的一门课,一定要好好学…用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。话不多说直接上思维导图干货(后有思维导图高清原图链接)1绪论2运算放大器3二极管及其基本电路4场效应管及其放大电路5双极结型三极管及其放大电路三种组态总结看不清,给个特写发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图————————————————————B站专栏地址(可以点击查看原图)htt

    2022年6月20日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号