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

📄 motor-control.txt

📁 本设计使用P89V51RD2控制直流电机的正反转与加减速,电机驱动芯片选用L298N.
💻 TXT
字号:
CH EQU 0F9H
CL EQU 0E9H
CMOD EQU 0D9H
CCAP0L EQU 0EAH
CCAPM0 EQU 0DAH
CCON EQU 0D8H
WDTC EQU 0C0H
WDTD EQU 85H


ORG 0000H ;程序执行开始地址
LJMP FIRST ;跳至FIRST
ORG 0013H ;外中断1中断入口地址
AJMP DOINT1
ORG 0033H ;PCA中断入口地址
LJMP DOINT2

;初始化程序 
;设置捕捉与PWM输出
FIRST: MOV CH,#0
MOV CL,#0 ;向计数器置初值0
MOV CMOD,#82H ;计数器空闲模式下PCA不工作,设置PCA计数器不产生中断,同时设置PCA计数 ;脉冲为fosc/2

MOV CCAP0H,#0 ;设置PWM输出的占空比,此时为50%
MOV CCAP0L,#07FH 
MOV CCAPM0,#42H ;设置模块0为PWM输出
MOV CCON, #40H ; 清除所有PCA中断标志,并重新启动PCA

SETB P2.4 ;电机正转
CLR P2.5 


WDTCON: MOV A,#19H
MOV WDTC,A ;启动看门狗定时器
MOV A,#9DH ;看门狗溢出周期为3S
MOV WDTD,A ;写入定时初值
ORL WDTC,#02H ;执行定时器刷新 

;主程序
START: ;中断的相关设置
SETB 0ECH ;PCA中断使能 
SETB EX1 ;外部中断1允许 
SETB IT1 ;外部中断1为跳沿触发方式 
SETB EA ;CPU开中断 
LCALL FEED ;看门狗喂狗 
SJMP START ;转到START

;外部中断1,进行键盘识别
DOINT1: MOV A,P2 ;读P2的状态
ANL A,#0FH ;屏蔽高四位 
MOV 50H,A ;保存值
LCALL DL10MS ;10MS延时
MOV A,P2 ;保存键盘状态
ANL A,#0FH ;屏蔽高四位
CJNE A,50H,RETURN;比较两次是否一样,不一样说明是由抖动引起,转RETURN
CJNE A,#0EH,DOWN;有键按下,不是P2.0按下,转到DOWN
LJMP DOUP ;是P2.0按下,转P2.0键处理
DOWN: CJNE A,#0DH,PO;P2.1未按下,转PO
LJMP DODOWN
PO: CJNE A,#0BH,NEI;P2.2未按下,转NE
LJMP DOPO
NEI: CJNE A,#0AH,RETURN; P2.3未按下,转RETURN
LJMP DONE

DODOWN: MOV A,CCAP0L
CJNE A,#0FFH,DECSPEED;判断是否到达最小转速,不是则转到DECSPEED
MOV A,#0FFH
MOV CCAP0L,A
RETI
DOUP: MOV A,CCAP0L
CJNE A,#00H,ADDSPEED ;判断是否达到最大转速,不能则转到ADDSPEED 
MOV A,#00H
MOV CCAP0L,A
RETI
DOPO: CLR P2.4
CLR P2.5
LCALL DELAYSEC ;延时3S
SETB P2.4 ;电机正转
CLR P2.5 
RETI
DONE: CLR P2.4
CLR P2.5
LCALL DELAYSEC ;延时3S
CLR P2.4 ;电机反转
SETB P2.5
RETI
ADDSPEED: MOV A,CCAP0L
SUBB A,#5
MOV CCAP0L,A
RETI
DECSPEED: MOV A,CCAP0L
ADD A,#5
MOV CCAP0L,A
RETI

RETURN: 
RETI

I


DL10MS: MOV R4,#0FAH
D1: MOV R3,#04H
DJNZ R3,D1
DJNZ R4,DL10MS
RET
DELAYSEC: MOV R7,#19H ;大约3S的延时
DEL1: MOV R6,#0FFH
DEL2: MOV R5,#0FFH
DEL3: DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET

END

⌨️ 快捷键说明

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