;-------------------1543对应的管脚接线方式-----------------------
;1543<<------>>AT89C52
;EOC<<------->>P1.5
;I/O CLOCK<<->>P1.6
;ADDRESS<<--->>P1.7
;DATAOUT<<--->>P3.0
;CS<<-------->>P3.1
;===============================================================
CLK BIT 0B0H
ADDR BIT 0B1H
DAT BIT 0B4H
CS BIT 0B5H
EOC BIT 0B7H
;===============================================================
RDAD: ORL P3,#03H ;CS=1,I/O CLOCK=1
WAIT1: JNB 0B7H,WAIT1 ;查询等待,直至EOC为高电平
CLR 0B0H ;I/0 CLOCK=0
CLR 0B5H ;CS=0
CLR 0B1H ;选择0通道
MOV R6,#08H ;等待建立时间
RLOOP1:CPL 0B0H ;
DJNZ R6,RLOOP1 ;通道0选通
MOV R6,#0CH ;
RLOOP2:CPL 0B0H ;
DJNZ R6,RLOOP2 ;插入6个I/O CLOCK
SETB 0B5H ;
MOV R7,#04H ;四次循环,读四个数据
MOV R0,#02H ;要存入的寄存器地址
RLOOP: ORL P3,#03H ;I/O CLOCK=1
WAIT2: JNB 0B7H,WAIT2 ;查询等待,直至EOC为高电平
CLR 0B0H ;I/0 CLOCK=0
CLR 0B5H ;CS=0
MOV A,#05H ;
CLR C ;
SUBB A,R7 ;
MOV 21H,A ;选择通道,并等待建立时间
MOV R6,#08H ;
RLOOP3:MOV C,0B4H ;读DATA端口
MOV A,20H ;
RL A ;
MOV 20H,A ;20H寄存器左移一位
MOV 00H,C ;读入数据
CJNE R6,#05H,A1 ;判断R6<5?
A1: JC JUMP ;R6<5,跳转到J1
MOV C,0BH ;
MOV 0B1H,C ;送地址
MOV A,21H ;
RL A ;
MOV 21H,A ;21H寄存器右移一位
JUMP: CPL 0B0H ;
CPL 0B0H ;1个I/O CLOCK
DJNZ R6,RLOOP3 ;
MOV R6,#04H ;
RLOOP4:CPL 0B0H ;
DJNZ R6,RLOOP4 ;插入2个I/O CLOCK
SETB 0B5H ;
CJNE R7,#03H,A2 ;判断R7<3?
A2: JNC STORE1 ;R7<3,继续,否则跳转
MOV A,@R0 ;
CJNE A,20H,CMP1 ;不相等,跳转到CMP1
SJMP STORE1 ;
CMP1: MOV 10H,C ;
STORE1:MOV @R0,20H ;存数
INC R0 ;
DJNZ R7,RLOOP ;
RET
;===============================================================
这个程序是为了分别读取左右红外和左右灰度4个传感器的数据,分别存放再02H,03H,04H,05H四个地址单元中。
麻烦高手能帮忙看下