⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor_key_1602lcd.asm

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;/******************************************************************/
;/*                                                                */
;/* ME500单片机开发系统演示程序 - 步进电机键控正反转实验           */
;/*                                                                */
;/* LCD1602显示                                                    */
;/*                                                                */
;/* 版本: V1.0 (2006/11/20)                                       */
;/* 作者: gguoqing (Email: gguoqing@willar.com)                   */
;/* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)*/
;/* 邮箱: support@willar.com                                      */
;/*                                                                */
;/*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
;/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      */
;/*                                                                */
;/******************************************************************/

;K1-启动与停止步进电机运行
;K2-设定步进电机运行圈数
;K3-设定步进电机转动方向
;K4-设定步进电机运行速度
;步进电机的转速控制分16档,数字越小,转速越快。
;7.5度步进电机
;周期7.5×4=30度,电机转动一圈需12个周期。
;--------------------------------------------------
             K1   EQU  P1.4     ;K1键
             K2   EQU  P1.5     ;K2键
             K3   EQU  P1.6     ;K3键
             K4   EQU  P1.7     ;K4键

             BA   EQU  P1.0     ;步进电机A端
             BB   EQU  P1.1     ;步进电机B端
             BC   EQU  P1.2     ;步进电机C端
             BD   EQU  P1.3     ;步进电机D端

             BEEP  EQU  P3.7    ;蜂鸣器
             RS    EQU  P2.0
             RW    EQU  P2.1
             EN    EQU  P2.2
             LCD_X  EQU  2FH

             RATE      EQU  32H    ;转速档次
             D_BUF1    EQU  33H    ;显示缓存1
             D_BUF2    EQU  34H    ;显示缓存2
             TEMP      EQU  35H    ;临时过渡
             TURN_NUM  EQU  36H    ;存放运行圈数
             CYCLE     EQU  37H    ;存放周期数
;--------------------------------------------
             ORG  0000H
             JMP  MAIN
             ORG  000BH
             JMP  INTT0
             ORG  0030H
;---------------------------------------------
MAIN:
             MOV  SP,#60H
             ACALL  SET_LCD       ;显示启动画面
             MOV  R4,#0FH
MAIN1 :
             MOV  R5,#25          ;延时5S
             CALL  DELAY2
             DJNZ  R4,MAIN1
             ACALL  SET_LCD0
             CLR   20H.0         ;转速设置加减标记
             SETB  20H.1         ;正转、逆转标记
             SETB  20H.2         ;圈数设置加减标记
             SETB  20H.3         ;运行与停止标记
             SETB  20H.4
             MOV  R0,#00H
             MOV  R1,#00H
MAIN2:
             MOV  TURN_NUM,#5    ;默认转5圈
             MOV  A,TURN_NUM
             MOV  LCD_X,#04H
             ACALL  DATA_CONV    ;显示圈数
             ACALL  SET_LCD1     ;显示STOP

             MOV  R2,TURN_NUM
             MOV  CYCLE,#12      ;12个周期,电机转一圈。
             MOV  RATE,#08H      ;预设为中速

             MOV  A,RATE
             MOV  LCD_X,#0DH
             ACALL DATA_CONV     ;显示转速比例

             MOV  P1,#0F0H
             MOV  TMOD,#01H
             MOV  TL0,#33H
             MOV  TH0,#0F5H
             SETB  EA
             SETB  ET0

 M_LOOP:
             MOV  A,CYCLE         ;12个周期,电机转一圈。
             CJNE A,#00H,LOOP0
             MOV  CYCLE,#12
             DEC  R2
             MOV  A,R2
             MOV  LCD_X,#04H      ;显示剩余圈数
             ACALL  DATA_CONV

             CJNE  R2,#00H,LOOP0
             CLR  TR0
             MOV  P1,#0F0H
             MOV  R2,TURN_NUM     ;重新送圈数
             SETB 20H.3           ;STOP
             MOV  A,R2
             MOV  LCD_X,#04H      ;显示圈数
             ACALL  DATA_CONV
             ACALL  SET_LCD1
LOOP0:
             JB  20H.1,LOOP0A
             ACALL  SET_LCDR      ;<<
             JMP  LOOP0B
LOOP0A:
             ACALL  SET_LCDF      ;>>
LOOP0B:
             JB  K1,LOOP1
             JNB  20H.3,LOOP0C
             ACALL  SET_LCD2      ;RUNNING
             SETB  TR0            ;启动步进电机运行
             CLR  20H.3           ;停止运行标记
             CALL  BEEP_BL
             JMP  LOOP1
LOOP0C:
             CLR  TR0             ;停止步进电机运行
             SETB  20H.3          ;启动运行标记
             MOV  P1,#0F0H
             MOV  CYCLE,#12
             MOV  R2,TURN_NUM
             ACALL  SET_LCD1      ;STOP
             CALL  BEEP_BL
             JMP  M_LOOP
LOOP1:
             JB  K2,LOOP2
             CALL  BEEP_BL
             JNB  20H.2,LOOP1B
             MOV  A,TURN_NUM      ;增加圈数
             INC A
             MOV  TURN_NUM,A
             MOV  LCD_X,#04H      ;显示设定圈数
             ACALL  DATA_CONV
             MOV  R2,TURN_NUM
             MOV  A,TURN_NUM
             CJNE  A,#20,LOOP1A
             CLR  20H.2
LOOP1A:
             JMP  LOOP2
LOOP1B:
             MOV  A,TURN_NUM     ;减少圈数
             DEC A
             MOV  TURN_NUM,A
             MOV  LCD_X,#04H     ;显示设定圈数
             ACALL  DATA_CONV
             MOV  R2,TURN_NUM
             MOV  A,TURN_NUM
             CJNE  A,#01H,LOOP2
             SETB 20H.2
LOOP2:
             JB  K3,LOOP3         ;换向
             CLR  TR0
             MOV  P1,#0F0H
             SETB 20H.3           ;STOP标志
             ACALL  SET_LCD1
             CPL  20H.1           ;换向标志
             JB  20H.1,LOOP2A     ;根据换向标志来显示转动方向
             ACALL  SET_LCDR
             JMP  LOOP2B
LOOP2A:
             ACALL  SET_LCDF
LOOP2B:
             CALL BEEP_BL
             MOV  R2,TURN_NUM     ;换向后,从设定值开始运行
             MOV  A,R2
             MOV  LCD_X,#04H      ;显示设定圈数
             ACALL  DATA_CONV
LOOP3:
             JB  K4,LOOP4
             CLR  20H.4           ;在运行过程调整速率时,要使步进电机先停止转动
             CALL  BEEP_BL
             JNB  20H.0,LOOP5
             mov  temp,CYCLE
             MOV  A,RATE           ;减速过程
             INC A
             MOV  RATE,A
             MOV  LCD_X,#0DH
             ACALL DATA_CONV
             MOV  A,RATE
             CJNE  A,#10H,LOOP4
             CLR  20H.0
LOOP4:
             SETB  20H.4
             JMP  M_LOOP
LOOP5:
             MOV  A,RATE           ;加速过程
             DEC A
             MOV  RATE,A
             MOV  LCD_X,#0DH
             ACALL DATA_CONV
             MOV  A,RATE
             CJNE  A,#01H,LOOP6
             SETB 20H.0
LOOP6:
             SETB  20H.4
             JMP  M_LOOP
;---------------------------------------------
;步进电机正转走一步子程序
;---------------------------------------------
 FFW:
             MOV  A,R0
             MOV  DPTR,#TABLE_F
             MOVC  A,@A+DPTR
             CJNE  A,#00H,FFW1
             MOV  R0,#00H
             DEC  CYCLE          ;每8步为一个周期
             JMP  FFW2
  FFW1:
             MOV  P1,A
             INC  R0
 FFW2:
             RET
;---------------------------------------------
;步进电机逆转走一步子程序
;---------------------------------------------
 REV:
             MOV  A,R0
             MOV  DPTR,#TABLE_R
             MOVC  A,@A+DPTR
             CJNE  A,#00H,REV1
             MOV  R0,#00H
             DEC  CYCLE         ;每8步为一个周期
             JMP  REV2
 REV1:
             MOV  P1,A
             INC  R0
 REV2:
             RET
;---------------------------------------------
;中断服务子程序
;中断定时2ms
;20H.1=1 正转,20H.1=0 反转
;---------------------------------------------
INTT0:
            PUSH  ACC
            CLR  TR0
            MOV  TL0,#33H
            MOV  TH0,#0F5H
            SETB  TR0
            JNB  20H.4,INTT0B     ;K4键按下时,停止步进电机运行
            INC  R3
            MOV  B,R3
            MOV  A,RATE           ;中断次数来调整延时时间的长短
            CJNE  A,B,INTT0B
            MOV  R3,#00H
            JNB  20H.1,INTT0A
            LCALL  FFW            ;步进电机正转
            JMP  INTT0B
INTT0A:
            LCALL  REV            ;步进电机逆转
INTT0B:    
            POP  ACC
            RETI
;-----------------------------------------------------
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -