8051汇编指令编写的旋转编码器驱动程序

ORG 0000H ; main 跳转
LJMP main


ORG 0003H ; INT0 中断向量
AJMP TriINT0

ORG 0013H ; INT1 中断向量
AJMP TriINT1


ORG 0030H ; 中断子程序
TriINT0:
; A 触发子程序

    A1If:
        MOV C, 20H.3
        JNC A3Set
        ; 如 D3 != 1 则跳过 清零程序

    A2Clr:
        CLR 20H.3
        CLR 20H.2
        CLR 20H.1
        ; 清零程序

    A3Set:
        CLR 20H.0 ; A识别位 --- 0

        SETB 20H.1 ; A触发标志位 = 1

    A4If:
        MOV C, 20H.1
        ANL C, 20H.2
        JNC A6ret
        ; 如果 (D1 and D2) != 1 则跳过 D3 置1程序
    
    A5Set:
        SETB 20H.3
        ; D3 置1程序
    
    A6ret:
        RETI
        ; INT0 中断程序返回

TriINT1:
; C 触发子程序
        
    B1If:
        MOV C, 20H.3
        JNC B3Set
        ; 如 D3 != 1 则跳过 清零程序
        
    B2Clr:
        CLR 20H.3
        CLR 20H.2
        CLR 20H.1
        ; 清零程序
        
    B3Set:
        SETB 20H.0 ; C识别位 --- 1
    
        SETB 20H.2 ; C触发标志位 = 1
        
    B4If:
        MOV C, 20H.1
        ANL C, 20H.2
        JNC B6ret
        ; 如果 (D1 and D2) != 1 则跳过 D3 置1程序
            
    B5Set:
        SETB 20H.3
        ; D3 置1程序
            
    B6ret:
        RETI
        ; INT0 中断程序返回


ORG 0100H
main:

    SETB EA ; 总中断允许 = 1 (开)

    SetINT0:
        SETB IT0 ; INT0 触发方式 = 1 (下降沿触发)
        SETB PX0 ; INT0 优先级   = 1 (高)
        SETB EX0 ; INT0 中断允许 = 1 (开)
        ; INT0 控制位

    SetINT1:
        SETB IT1 ; INT1 触发方式 = 1 (下降沿触发)
        SETB PX1 ; INT1 优先级   = 1 (高)
        SETB EX1 ; INT1 中断允许 = 1 (开)
        ; INT1 控制位
    
    OutPut:
        MOV C, 20H.3
        Loop0:
            JNC Loop0
        ; 对D3轮询 如 D3 = 1 则跳转到 "If"

    C0If:
        MOV C, 20H.0
        JC right
        JNC lift
        ; D0 = 1 跳转到right   D0 = 0 跳转到lift
    
    right:
        SETB P1.0
        CLR P1.1
        SJMP LOOP
        ; 右转程序

    lift:
        SETB P1.1
        CLR P1.0
        SJMP LOOP
        ; 左转程序
    
    LOOP:
        SJMP OutPut

END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值