;[Light.asm]小灯驱动-----------------------------------*
;本文件包含:                                           *
;    (1)Lightinit:定义控制小灯的MCU的I/O引脚为输出     *
;    (2)LightDriv:驱动小灯"亮","暗"                    *
;    (3)LStaTst:小灯状态检测                           *
;硬件连接:                                             *
;    (1)本处的小灯是一个发光二极管,由MCU的I/O引脚控制  *
;    (2)控制引脚为高电平时,小灯"暗";反之,小灯"亮"      *
;------------------------------------------------------*

    INCLUDE 'MC9S08AW60.inc' 
;小灯控制引脚宏定义
Light_P:   equ    PTDD     ;灯(Light)接在PTA口
Light_D:   equ    PTDDD    ;相应的方向寄存器
Light_Pin: equ    0        ;所在的引脚
  
;定义外部函数
    XDEF  Lightinit        ;小灯初始化
    XDEF  LightDriv        ;驱动小灯亮暗
    XDEF  LStaTst          ;获取小灯状态

;LEDinit:定义控制小灯的MCU引脚为输出-------------------*
;功能:定义控制小灯的MCU引脚为输出,并使小灯初始为暗     *
;入口:无                                               *
;出口:无                                               *
;堆栈深度:2                                            *
;------------------------------------------------------*
Lightinit:
    BSET Light_Pin,Light_D    ;令小灯引脚为输出
    BSET Light_Pin,Light_P    ;初始时,小灯"暗"
 RTS

;LightDriv:驱动小灯"亮","暗"---------------------------*
;功能:根据A的值控制小灯的亮和暗                        *
;入口:A(A = 'L',小灯亮;A = 'A',小灯暗)                 *
;出口:无                                               *
;堆栈深度:2                                            *
;------------------------------------------------------*
LightDriv:
    CMP  #'A'
    BNE  LightDriv_1
    BSET Light_Pin,Light_P    ;小灯"暗"
    BRA  LightDriv_Exit                                             
LightDriv_1:
    CMP  #'L'
    BNE  LightDriv_Exit        ;入口非'L'/'A',程序无响应
    BCLR Light_Pin,Light_P    ;小灯"亮"
LightDriv_Exit:
    RTS

;LStaTst:小灯状态检测----------------------------------*
;功能:检测小灯当前是"亮"还是"暗"                       *
;入口:无                                               *
;出口:A--小灯2值状态('L':亮;'A':暗)                    *
;------------------------------------------------------*
LStaTst:
    AIS   #-1     ;开辟一个临时变量[SP+1]
    LDA   #1     
    STA   1,SP    ;[SP+1]初始化为1
    LDA   #Light_Pin
    CBEQA #0,LStaTst_2
LStaTst_1:
    LSL   1,SP
    DBNZA LStaTst_1
LStaTst_2:
    LDA   Light_P      
    AND   1,SP
    CBEQA #0,LStaTst_3    
    LDA   #'A'    ;Light_Pin上若是1,A带回'A'          
    BRA   LStaTst_EXIT
LStaTst_3:
    LDA   #'L'    ;Light_Pin上若是0,A带回'L'
LStaTst_EXIT:
    AIS   #1      ;释放临时变量
    RTS    
