标题:
51单片机直流电机pwm调速汇编程序
[打印本页]
作者:
daniu
时间:
2014-12-27 13:27
标题:
51单片机直流电机pwm调速汇编程序
;以下是直流电机调速的程序,芯片选用2051
;晶振用12M
;选用2051单片机
;2006.05.18
; _____________
;|RST VDD |
;LED1 |P3.0 P1.7|G
;LED2; |P3.1 P1.6|D
;|XTAL2 P1.5|H
;|XTAL1 P1.4|E
; |P3.2 P1.3|C
;过零检测 |P3.3 P1.2|F
;设定按键盘 |P3.4 P1.1|A
;加一按键盘 |P3.5 P1.0|B
;|VSS P3.7|电机输出
;-------------
LED1 BIT P3.0
LED2 BIT P3.1
KEY1 BIT P3.4
KEY2 BIT P3.5
OUT BIT P3.7
KG BIT P3.2
OFF BIT 02H
ON BIT 03H
NC BIT 04H
NO BIT 05H
POWER DATA 7FH
YAS DATA 7EH
DATA1 DATA 40H
;*********************************************
;*********************************************
;********************************************* ;晶振为12M
ORG 0000H
AJMP MAIN ;转入主程序
ORG 0003H ;外部中断DATA_IN脚INT0入口地址
NOP
NOP
NOP ;转入外部中断服务子程序(解码程序)
LJMP ERR ;软件陷阱
NOP
NOP
LJMP ERR ;软件陷阱
ORG 000BH
LJMP ERR
NOP
NOP
LJMP ERR ;软件陷阱
ORG 0013H
LJMP TS
NOP
NOP
LJMP ERR ;软件陷阱
ORG 001BH
LJMP YAS_1MS
NOP
NOP
LJMP ERR ;软件陷阱
ORG 0023H
LJMP ERR ;软件陷阱
NOP
NOP
LJMP ERR ;软件陷阱
;************************************************
;以下为主程序进行CPU中断方式设置
;******************************************************
;******************************************************************
;以下对单片机的所有引脚进行初始化,全部设置成高电平
;**********************************************************************
MAIN: MOV PSW,#00H ;设为0号寄存器
MOV P1,#0FFH
MOV P3,#0FFH
MOV 20H,#00H ;清除所有标志位
MOV 30H,#0BH
MOV 31H,#03H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#00H
MOV 37H,#00H
SETB IT1 ;设定INT1的触发方式为脉冲负边沿触发
SETB EX1 ;打开INT1中断请求
; MOV TH0,#0B1H
;MOV TL0,#0E0H
MOV TH1,#0FCH
MOV TL1,#18H
;SETB ET0
SETB ET1
; SETB TR0
; SETB PT0
SETB PT1 ;启动T0计数
MOV TMOD,#11H ;设置T0为方式1工作状态
SETB EA ;打开CPU总中断请求
MOV SP,#60H ;设置堆栈地址为60H开始
NOP
XS_1: LCALL XS
NOP
NOP
AJMP XS_1
;*************************************************
;************显示子程序***************************
;*************************************************
XS: MOV R0,#30H
MOV R1,#32H
MOV B,#0AH
MOV A,@R0
DIV AB
MOV @R1,B
INC R1
MOV @R1,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
DEC R1
MOV P1,A
CLR LED1
LCALL YAS_300
SETB LED1
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
CLR LED2
LCALL YAS_300
SETB LED2
MOV P1,#0FFH
XS4: RET
;*********************************************
;*************过零触发加键盘扫描************
;********************************************
TS: INC 37H
MOV A,37H
SUBB A,#0EH
JC EE2
MOV 37H,#00H
JB KEY1,EE
MOV A,30H
SUBB A,#19H
JNC EE
INC 30H
;********************************************
EE: JB KEY2,EE1
CLR C
MOV A,30H
SUBB A,#0CH
JC EE1
DEC 30H
EE1: JB KG,EE2
NOP
NOP
CPL ON
JNB ON,EE3
MOV 38H,#03H
MOV 39H,#255
AJMP EE2
EE3: MOV 38H,#00H
MOV 39H,#0
CLR ON
CLR OFF
;********************************************
EE2: JNB ON,EXIT2
CLR EX1
PUSH ACC
PUSH PSW
MOV PSW,#10H
;MOV A,34H
;JNZ EXIT
MOV A,#1EH
SUBB A,30H
MOV 40H,A
JNB OFF,TS1
MOV 40H,#05H
TS1: LCALL XS
NOP
DJNZ 40H,TS1
CLR OUT
LCALL YS3
SETB OUT
MOV 40H,#09H
SETB TR1
TS3: LCALL XS
NOP
NOP
MOV A,40H
JNZ TS3
CLR OUT
LCALL YS3
SETB OUT
NOP
NOP
;**********************************************
EXIT: DJNZ 39H,EXIT2
SETB OFF
DJNZ 38H,EXIT3
CLR ON
CLR OFF
AJMP EXIT2
EXIT3: MOV 39H,#256
EXIT2: POP PSW
POP ACC
CLR TR1
SETB EX1
MOV 40H,#00H
NOP
NOP
RETI
;*************************************************
YAS_1MS:
MOV TH1,#0FCH
MOV TL1,#18H
PUSH ACC
PUSH PSW
MOV A,40H
JZ EXIT_1
DEC 40H
EXIT_1: POP PSW
POP ACC
NOP
NOP
RETI
;*****************************************************
;精确延时1000微秒************************************
;***************************************************
YS3: MOV R4,#02H ;延时程序3,精确延时1000微秒
D3: MOV R5,#0F7H
DJNZ R5,$
DJNZ R4,D3
RET
;*****************************************************
;*************精确延时100微秒***********************
;***************************************************
YAS_300: MOV R5,#31H
DJNZ R5,$
RET
;*************************************************
;***********显示码******************************
;*************************************************
TAB: DB 0A0H,0F6H,2CH,34H
DB 72H,31H,21H,0F4H
DB 20H,30H,60H,23H
DB 0A9H,26H,29H,69H
;*************************************************
;********软件复位***************
;************************************************
WTD: PUSH ACC
PUSH PSW
MOV TH1,#3CH
MOV TL1,#0B0H
POP PSW
POP ACC
RETI
ERR: CLR EA
MOV DPTR,#ERR1
PUSH DPL
PUSH DPH
RETI
ERR1: MOV POWER,#0AAH
CLR A
PUSH ACC
PUSH ACC
RETI
END
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1