📄 sinwave.asm
字号:
ORG 0000H
lJMP MAIN
ORG 000BH ;中断入口
CPL P1.0
MOV TH0,51H ;重置数
MOV TL0,52H
RETI
ORG 0030H
MAIN:
MOV SP,#60H ;设置堆栈
MOV DPTR,#0B000H
MOV A,#03H
MOVX @DPTR,A
MOV TMOD,#01H ;设置工作方式
MOV IE,#82H ;开T0中断
MOV 40H,#00H
MOV 41H,#00H
MOV 42H,#00H
MOV 43H,#00H
MP1:
LCALL DISP
LCALL KS1
JZ MP1
CLR EA ;关中断
LCALL KEYA ;求键号,放到50H中
MOV 50H,A
LJMP KEY
KS1: ;是否有键按下
MOV DPTR,#0B001H
MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#03H
RET
KEYA: ;求键号
LCALL T12MS
LCALL KS1
JNZ LK1
SJMP KND
LK1:
MOV R4,#00H
MOV R2,#0FEH
LK2:
MOV DPTR,#0B001H
MOV A,R2
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPTR
JB Acc.0,LONE
MOV A,#00H
SJMP LKP
LONE:
JB Acc.1,NEXT
MOV A,#06H
LKP:
ADD A,R4
PUSH Acc
LK3:
LCALL KS1
JNZ LK3
POP Acc
KND:
RET
NEXT:
INC R4
MOV A,R2
JNB Acc.5,KND
RL A
MOV R2,A
SJMP LK2
T12MS: ;延时12ms
MOV R7,#18H
TM:
MOV R6,#0FFH
TM6:
DJNZ R6,TM6
DJNZ R7,TM
RET
DISP: ;显示
MOV R0,#2AH
MOV R1,#0FEH
MOV DPTR,#0B001H
DLP:
MOV A,@R0
MOV DPTR,#0B002H
MOVX @DPTR,A
MOV DPTR,#0B001H
MOV A,R1
MOVX @DPTR,A
ACALL DIMS
RL A
MOV R1,A
INC R0
CJNE R0,#30H,DLP
RET
DIMS: ;延时1ms
MOV R7,#02H
DL:
MOV R6,#0FFH
DL1:
DJNZ R6,DL1
DJNZ R7,DL
RET
KEY:
MOV A,50H ;1键按下开T0
CJNE A,#01H,ST2
SETB TR0
SJMP ST4
ST2: ;2键按下设值
CJNE A,#02H,ST3
MOV 2AH,#06H
MOV 2BH,#03FH
MOV 2CH,#03FH
MOV 2DH,#03FH
MOV 2EH,#00H
MOV 2FH,#00H
MOV 51H,#0FEH
MOV 52H,#16H
MOV TH0,#0FEH
MOV TL0,#16H
SJMP ST4
ST3: ;3键按下设值
CJNE A,#03H,ST4
MOV 2AH,#06H
MOV 2BH,#6DH
MOV 2CH,#03FH
MOV 2DH,#03FH
MOV 2EH,#00H
MOV 2FH,#00H
MOV 51H,#0FEH
MOV 52H,#0BBH
MOV TH0,#0FEH
MOV TL0,#0BBH
ST4: ;开中断
SETB EA
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -