📄 pwm.asm
字号:
;PWM脉宽调制,按00h键开始,按其他键结束
$MOD841
CLK81 EQU P3.5
DAT81 EQU P3.3
KEY EQU P3.2
KEYVAL EQU 30H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SERVE
ORG 0060H
MAIN:MOV R0,#0FFH;
CLR_IN_RAM:MOV @R0,#00H
DJNZ R0,CLR_IN_RAM
MOV SP,#50H
LCALL YS
;***********************初始化
LCALL INI841
LCALL INIWH8281
;***********************欢迎菜单
LCALL WELCOME
MOV 40H,#0FFH
ZYS:LCALL YS
DJNZ 40H,ZYS
;***********************清屏
MOV A,#16H
LCALL WTO81
MOV A,#00H
LCALL WTO81
START:LJMP $
SERVE:
MOV A,#93H
LCALL WTO81
LCALL RDKVAL
MOV A,30H
CJNE A,#00H,J1
MOV CFG841,#60H
MOV PWMCON,#13H
MOV PWM0L,#55H
MOV PWM1L,#00H
MOV PWM0H,#05H
MOV PWM1H,#10H
LJMP HUIQU
J1:MOV PWMCON,#80H
HUIQU:RETI
;********************初始化841
INI841:SETB EA
SETB EX0
RET
;***********************初始化WH8281
INIWH8281:SETB CLK81;
SETB DAT81;
MOV A,#12H
LCALL WTO81;
MOV A,#84H;
LCALL WTO81;
RET
;***********************欢迎界面子程
WELCOME:MOV A,#14H;
LCALL WTO81
MOV A,#0CH
LCALL WTO81
MOV A,#14H
LCALL WTO81
MOV A,#1BH
LCALL WTO81
MOV A,#14H
LCALL WTO81
MOV A,#2DH
LCALL WTO81
MOV A,#14H
LCALL WTO81
MOV A,#3DH
LCALL WTO81
MOV A,#14H
LCALL WTO81
MOV A,#40H
LCALL WTO81
RET
;***********************写入WH8281子程序
WTO81: MOV R6,#08H
WAT: CLR CLK81
NOP
NOP
SETB CLK81
JB DAT81,WAT
CLR CLK81
LCALL DELAY
SETB CLK81
JNB DAT81,$
WTB81: RLC A
MOV DAT81,C
CLR CLK81
LCALL DELAY
SETB CLK81
LCALL DELAY
LCALL DELAY
DJNZ R6,WTB81
SETB DAT81
RET
DELAY:NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;***********************读取键值子程序
RDKVAL:CLR CLK81
NOP
NOP
SETB CLK81
JB DAT81,$
CLR CLK81
LCALL DELAY
SETB CLK81
MOV R6,#08H
RD1:LCALL DELAY
LCALL DELAY
MOV C,DAT81
RLC A
CLR CLK81
LCALL DELAY
SETB CLK81
DJNZ R6,RD1
MOV KEYVAL,A
RET
;***********************延时程序
YS:MOV R5,#00H
MOV R4,#50H
YS1:DJNZ R5,$
DJNZ R4,YS1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -