实验很简单
下面是参考代码:
;这是一个旋转编码器的试验汇编代码2018-1-20
;最后试验修改2018-1-26,几乎没有了抖动
;at89s52,11.0592MHz,
;p32(int0)下降沿做中断判别A,p34(t0)做引脚B判别
ORG 0000H
LJMP mm
ORG 0003H
LJMP pd ;中断判别A脚
;程序入口*********************************************************
org 0100h
mm:nop
mov 17h,#0feh ;循环显示p0口的led
mov 18h,#00h ;4个做判别缓冲用
mov 19h,#00h
mov 1ah,#00h
mov 1bh,#05h
mov p0,17h
mov sp,#4fh ;设堆栈入口50h
mov tcon,#01h ;int0下降沿中断
setb ea ;开总中断
setb ex0 ;开int0
mm0:nop
sjmp mm0
;int0中断代码*****************************************************
org 0300h
pd:nop
clr ea
push acc
push psw
push dph
push dpl
mov a,p3
anl a,#00010100b ;保留p32和p34脚屏蔽其余引脚
mov 18h,a ;暂存在r7
acall ys100 ;延时约1.5ms
mov a,p3
anl a,#00010100b
cjne a,18h,pd0 ;不是正转则判别是否反转
cjne a,#10h,pd0 ;A=L,B=H时右移
mov a,17h
rl a
mov 17h,a
mov p0,a
sjmp pd00
pd0:mov a,p3
anl a,#00010100b
mov 19h,a
acall ys100 ;延时约1.5ms
mov a,p3
anl a,#00010100b
cjne a,19h,pd00 ;是干扰则返回
cjne a,#00h,pd00 ;A=B=L时左移
mov a,17h
rr a
mov 17h,a
mov p0,a
pd00:setb ea
pop dpl
pop dph
pop psw
pop acc
reti
ys100:nop ;延时约1.5mS
ys0:djnz 1ah,$
djnz 1bh,ys0
mov 1ah,#00h
mov 1bh,#05h
ret
end |