ORG的PWM控制直流电机汇编程序.docx
《ORG的PWM控制直流电机汇编程序.docx》由会员分享,可在线阅读,更多相关《ORG的PWM控制直流电机汇编程序.docx(12页珍藏版)》请在冰点文库上搜索。
![ORG的PWM控制直流电机汇编程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/cc6da478-297b-4a91-8991-82ba166d1a54/cc6da478-297b-4a91-8991-82ba166d1a541.gif)
ORG的PWM控制直流电机汇编程序
ORG的PWM控制直流电机汇编程序
部门:
xxx
时间:
xxx
制作人:
xxx
整理范文,仅供参考,可下载自行修改
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
b5E2RGbCAP
positive:
。
电机正转
setb p1.0
clr p1.1
clr p1.2
setb p1.3
lcallBIJIAO0 。
PWM调制
。
lcallShowSpeed 。
显示速度程序
LCALLshowdigit1
Ljmpmainlinep1EanqFDPw
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,#00HDXDiTa9E3d
。
可以每秒重复输出很多次,才能在数码管里显示出来,但是还要再定义两个变量
。
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,ARTCrpUDGiT
。
ShowSpeedEnd:
RET
BIJIAO0:
MOVA,R1
SUBBA,#0H
JZ JJ05PCzVD7HxA
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 JJ10jLBHrnAILg
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
RETxHAQX74J0X
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
ENDLDAYtRyKfE