

 
       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
下一篇:排序算法-冒泡排序