电机调速程序.docx
《电机调速程序.docx》由会员分享,可在线阅读,更多相关《电机调速程序.docx(12页珍藏版)》请在冰豆网上搜索。
电机调速程序
ORG 0034h
Graphemic:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,84H,0FFH;共阳0~9字型码
;PN1 EQU 30H ;PN1用来记脉冲的低二位数
;PN2 EQU 31H ;PN2用来记脉冲的高二位数
PN3 EQU 32H ;PN3用来做延时程序
PN4 EQU 33H ;PN4用来做延时程序
ORG100H
MAIN:
MOVR6,#00H ;用R6来辅助显示计时
MOVB,#00H
CLRKG
CLRW
MOVTMOD,#01H ;T1和T0都是方式一计数
MOVTL0,#18H
MOVTH0,#0E0H
;MOV TL1,#0AFH
;MOV TH1,#3CH
SETBEA
SETBET0 ;T0中断允许
SETBTR0
SETBP3.4
;SETBET1 ;T1中断允许
;SETBTR1
SETBPT0 ;设置T1T2的中断优先,都设其为高级中断
;SETBPT1
MOVR1,#5H ;默认开始的时候速度为5档
SETBKK1
SETBKK2
MOV A,#00H ;把PN1,PN2都清零
;MOV PN1,A
;MOV PN2,A
MOV DPTR,#Graphemic
ANL P1,#0FH
;ANL P0,#00H
mainline:
jb p2.2,ks ;关机等待
clr w
clr kg
setbp1.0
setbp1.1
clr p1.2
clr p1.3
ks:
jnb kg,wait ;是否开机?
开了就往下执行,不开就跳到开机等待
ANL P1,#00011111B;显示最后一位为1,即是可以工作了的意思
SETBP1.4
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
SPD2:
JB P2.1,KEY1
CLRKK1
KEY1:
JNBP2.1,KEY2;当p2.1高电平时就往下执行,但是只要执行一次后,kk就为1,往后就不再执行
JB KK1,KEY2
INCR1
SETBKK1 ;这段的任务是不用延时也能消除按键抖动的程序
KEY2:
JB P2.4,KEY3
CLRKK2
KEY3:
JNBP2.4,pos
JB KK2,pos
SETBKK2
DECR1
pos:
jb p2.0,rev ;正转按钮
setbt
setbw
rev:
jb p2.3,tt ;反转按钮
clr t
setbw
tt:
jnb w,pos ;选择正反转了吗,选了电机就开始转了,不选电机就不转,等待正反转按钮
jb t,positive
jnb t,reverse
positive:
;电机正转
setb p1.0
clr p1.1
clr p1.2
setb p1.3
lcallBIJIAO0 ;PWM调制
;lcallShowSpeed ;显示速度程序
LCALLshowdigit1
Ljmpmainline
reverse:
;电机反转
clr p1.0
setbp1.1
setbp1.2
clr p1.3
lcallBIJIAO0 ;PWM调制
;lcallShowSpeed ;显示速度程序
LCALLshowdigit2
Ljmpmainline
wait:
mov a,#00h;如果不开始,那么程序就在这里等待,
mov p0,a
wait1:
setbp0.6
setbp0.7
anl p1,#0fh
setbp1.4
setbp1.5
setbp1.6
setbp1.7
SETBP3.6
NOP
CLR P3.6
lcalldelay
jb p2.5,wait1 ;开机等待
setbkg
Ljmpmainline
showdigit1:
ANL P1,#10001111B;显示12在首位
SETBP1.7
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
ANL P1,#01001111B
SETBP1.6
MOV A,#2H
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
RET
showdigit2:
ANL P1,#10001111B;显示21在首位
SETBP1.7
MOV A,#2H
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
ANL P1,#01001111B
SETBP1.6
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
RET
;ShowSpeed:
;由于没有买到光电编码器,所以智能把数码管显示换成其他的功能
; MOV A,R6
; SUBBA,#3FH ;7Dh=125即1000/8=125秒
; JNZ else1
; MOV R6,#00H
;可以每秒重复输出很多次,才能在数码管里显示出来,但是还要再定义两个变量
; ANL P1,#0FH;置位(输出个位)
; SETBP1.4
; CLR P3.6
; MOV A,PN1;把最低速度的个位输出
; ANL A,#0FH;把A和0F相与,求出A的低四位字节表示的数
; MOVC A,@A+DPTR
; MOV P0,A ;输出个位数
; SETBP3.6
; NOP
; CLR P3.6
; LCALLDELAY;加延时程序
;
; ANL P1,#2FH;置位(输出十位)
; SETBP1.5
; MOV A,PN1
; SWAPA ;高四位和低四位内容交换
; ANL A,#0FH;把低四位清零,然后输出十位的数
; MOVCA,@A+DPTR
; MOV P0,A ;输出十位
; SETBP3.6
; NOP
; CLR P3.6
; LCALLDELAY;加延时程序
; ANL P1,#4FH ;置位(输出百位数)
; SETBP1.6
; MOV A,PN2
; ANL A,#0FH
; MOVCA,@A+DPTR
; MOV P0,A ;输出百位数
; SETBP3.6
; NOP
; CLR P3.6
; LCALLDELAY;加延时
; ANL P1,#8FH ;置位(输出千位数)
; SETBP1.7
; MOV A,PN2
; SWAPA
; ANL A,#0FH
; MOVCA,@A+DPTR
; MOV P0,A ;输出千位数
; SETBP3.6
; NOP
; CLR P3.6
; LCALLDELAY
;else1:
; JB P3.3,SPD1 ;这以段的任务是不用延时也能消除按键抖动的程序
; CLRKK3
;SPD1:
JNBP3.3,SPD2 ;当p3.3高电平时就往下执行,但是只要执行一次后,kk就为1,往后就不再执行
; JB KK3,SPD2
; MOVA,PN1
; INCPN1
; CLRCY ;清空进位位
; MOVA,PN1
; DA A
; MOVPN1,A
; JNBCY,XIAMIAN ;如果最高位产生进位,就在高一位PN2加一
; INCPN2
;XIAMIAN:
MOVPN1,A
; SETBKK3
; CLRPN1
; INCPN2
; MOVA,PN2
; DA A
; MOVPN2,A
;ShowSpeedEnd:
RET
BIJIAO0:
MOVA,R1
SUBBA,#0H
JZ JJ0
BIJIAO1:
MOVA,R1
SUBBA,#1H
JZ JJ1
BIJIAO2:
MOVA,R1
SUBBA,#2H
JZ JJ2
BIJIAO3:
MOVA,R1
SUBBA,#3H
JZ JJ3
BIJIAO4:
MOVA,R1
SUBBA,#4H
JZ JJ4
BIJIAO5:
MOVA,R1
SUBBA,#5H
JZ JJ5
BIJIAO6:
MOVA,R1
SUBBA,#6H
JZ JJ6
BIJIAO7:
MOVA,R1
SUBBA,#7H
JZ JJ7
BIJIAO8:
MOVA,R1
SUBBA,#8H
JZ JJ8
BIJIAO9:
MOVA,R1
SUBBA,#9H
JZ JJ9
BIJIAO10:
MOVA,R1
SUBBA,#0AH
JZ JJ10
MOVA,R1 ;如果R1的值小于零,则速度和pwm0的速度不变。
SUBBA,#0FFH
JNZ PWM100 ;这一小段是限制调速范围只能在0-10之间
MOVR1,#0H
AJMPPWM0
PWM100:
MOVR1,#0AH ;如果r1>10则直接给r1赋值10,然后转速和最大速度不变
LJMPPWM10
JJ0:
LJMPPWM0 ;由于JZ跳转的距离不够长,所以这里只能用以下几句转跳转来辅助跳转
JJ1:
LJMPPWM1
JJ2:
LJMPPWM2
JJ3:
LJMPPWM3
JJ4:
LJMPPWM4
JJ5:
LJMPPWM5
JJ6:
LJMPPWM6
JJ7:
LJMPPWM7
JJ8:
LJMPPWM8
JJ9:
LJMPPWM9
JJ10:
LJMPPWM10
PWM0:
MOVR2,#0FFH
MOVR3,#0FFH
MOVR4,#0f8H
MOVR5,#02fH
MOV A,#0H
LCALLSHOW
LJMPMAINLINE1
PWM1:
MOVR2,#0FFH
MOVR3,#037H
MOVR4,#0F8H
MOVR5,#0F7H
MOV A,#1H
LCALLSHOW
LJMPMAINLINE1
PWM2:
MOVR2,#0FEH
MOVR3,#06FH
MOVR4,#0F9H
MOVR5,#0BFH
MOV A,#2H
LCALLSHOW
LJMPMAINLINE1
PWM3:
MOVR2,#0FDH
MOVR3,#0A7H
MOVR4,#0FAH
MOVR5,#087H
MOV A,#3H
LCALLSHOW
LJMPMAINLINE1
PWM4:
MOVR2,#0FCH
MOVR3,#0DFH
MOVR4,#0FBH
MOVR5,#4FH
MOV A,#4H
LCALLSHOW
LJMPMAINLINE1
PWM5:
MOVR2,#0FCH
MOVR3,#18H
MOVR4,#0FCH
MOVR5,#18H
MOV A,#5H
LCALLSHOW
LJMPMAINLINE1
PWM6:
MOVR2,#0FBH
MOVR3,#4FH
MOVR4,#0FCH
MOVR5,#0DFH
MOV A,#6H
LCALLSHOW
LJMPMAINLINE1
PWM7:
MOVR2,#0FAH
MOVR3,#087H
MOVR4,#0FDH
MOVR5,#0A7H
MOV A,#7H
LCALLSHOW
LJMPMAINLINE1
PWM8:
MOVR2,#0F9H
MOVR3,#0BFH
MOVR4,#0FEH
MOVR5,#6FH
MOV A,#8H
LCALLSHOW
LJMPMAINLINE1
PWM9:
MOVR2,#0F8H
MOVR3,#0F7H
MOVR4,#0FFH
MOVR5,#37H
MOV A,#9H
LCALLSHOW
LJMPMAINLINE1
PWM10:
MOVR2,#0f8H
MOVR3,#02FH
MOVR4,#0FFH
MOVR5,#0FFH
MOV A,#0AH
LCALLSHOW
LJMPMAINLINE1
MAINLINE1:
RET
show:
ANL P1,#00101111B;显示速度档次
SETBP1.5
MOVC A,@A+DPTR
MOV P0,A
SETBP3.6
NOP
NOP
CLR P3.6
LCALLDELAY
RET
DELAY:
MOVPN4,#08H;40ms延时子程序
L7:
MOVPN3,#0FAH
L8:
DJNZPN3,L8
DJNZPN4,L7
RET
;CTCA:
MOV TL1, #0AFH ;定时一秒钟输出速度值一次(定时0.05秒R6自加一)
; MOV TH1, #3CH
; INC R6
; RETI
CTC0:
JNB P3.4,CTC1 ;这里是定时中断程序,p3.4的高低电平就是在这里控制的
JBP3.4,CTC2
CTC1:
MOVTL0,R3
MOVTH0,R2
CPLP3.4
RETI
CTC2:
MOVTL0,R5
MOVTH0,R4
CPLP3.4
RETI
END