ORG 0000H
HighH EQU 30H; 定义变量,高电平高八位
TimerH EQU 31H; 定义变量,高电平高八位定时值
TimerL EQU 32H; 定义变量,高电平低八位定时值
Right BIT P2.0 ; 右转
Left BIT P2.1 ; 左转
N EQU 33H;
MOV TMOD, #10H ; T1工作方式1
MOV HighH, #05H; 角度赋值范围2-9
MOV N, #50D; 按钮每秒有效一次:50*20ms=1s
;LP0: MOV HighH, #02H; 角度赋值范围2-9
LP0: LCALL BUTTON; 判断是否有按键按下
MOV A, #0FFH;
CLR C;清除进位标志
SUBB A, HighH;
MOV TimerH, A;
INC TimerH;
MOV TL1,#00H ;赋初始值,高电平时间
MOV TH1,TimerH
SETB TR1 ;启动T1
SETB P1.0
LP1: JBC TF1,LP2 ;查询溢出
AJMP LP1
LP2: MOV A, #0B2H;
ADD A, HighH;
MOV TimerL, A;
MOV TL1,#00H ;赋初始值,低电平时间
MOV TH1,TimerL
CLR P1.0 ;
LP3: JBC TF1,LP0 ;查询溢出
AJMP LP3
ORG 2000H
BUTTON:DJNZ N,BUT1
MOV A, HighH
JB Right,BUT2
CLR C; 算减法前,先清除进位标志
SUBB A, #02H;
JZ BUT2 ;判断A是否为0
DEC HighH ;右转
BUT2: JB Left,BUT3
CLR C;清除进位标志
SUBB A, #09H;
JZ BUT3
INC HighH ; 左转
BUT3: MOV N, #50D;
BUT1: RET ;返回主程序
END