ORG 0000H
AJMP START
ORG 000BH
AJMP WAVE0
ORG 001BH
AJMP WAVE1
ORG 0030H
START:
MOV R0,#3CH ;设定定时器的初值
MOV R1,#0B0H
MOV R2,#0C3H ;相应的脉冲个数
MOV R3,#50H
MAIN:
SETB P0.0
SETB P0.1
MOV TMOD,#11H ;设定T0、T1均工作于方式1
MOV TH0,R0 ;设定T0初值
MOV TL0,R1
MOV TH1,R0 ;设定T1初值
MOV TL1,R1
SETB TR1 ;启动T1工作
SETB EA
SETB ET1 ;允许T1中断
SETB TR0 ;启动T0工作
SETB ET0 ;允许T0中断
WAIT:
JNB P1.0,CPP ;等待调频按键的操作
JNB P1.1,XW ;等待调相按键的操作
LJMP WAIT
XW:
MOV R7,#01H
CPL TR1
CALL DELAY
LJMP WAIT
CPP:
JNB P1.0,$
MOV A,R0
RRC A
MOV R0,A
MOV A,R1
RRC A
MOV R1,A
CLR C
MOV TH1,R0 ;重新给计数器赋初值
MOV TL1,R1
MOV TH0,R0
MOV TL0,R1
LJMP WAIT
WAVE0: ;T0中断程序入口
CPL P0.0
MOV TH0,R0
MOV TL0,R1
RETI
WAVE1: ;T1中断程序入口
//CJNE R7,#01H ,XX
//CALL CF ;若R7为1,则调用调相程序
XX:
CPL P0.1
MOV TH1,R0
MOV TL1,R1
RETI
//CF:
//CPL TR1
//CALL DELAY
DELAY:
MOV R4,#100
D5:
MOV R5,#48
DJNZ R5,$
NOP
DJNZ R4,D5
DEC R7 ;将R7位清零
SETB TR1
//LJMP WAVE1 ;返回定时中断程序
RETI