可是很怪: 我在开发板上用仿真器单步运行输出数据在数码管上显示OK,而全速运行,就好像死掉了,
我有测试过:08_ACK子程序,把"JC $ "此句干掉,全速运行就可以.
为什么加上这句,单步可以,全速不行呢????
SCL EQU P2.2
SDA EQU P2.3
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: ACALL C08_START /*发送开始信号*/
MOV A,#0A0H /*发送物理器件地址信号*/
ACALL C08_WHITE
ACALL C08_ACK /*应答信号*/
MOV A,#01H /*发送要写的RAM地址*/
ACALL C08_WHITE
ACALL C08_ACK /*应答信号*/
MOV A,#08H /*发送#08H数据*/
ACALL C08_WHITE
ACALL C08_ACK /*应答信号*/
ACALL C08_STOP /*停止信号*/
ACALL C08_START /*发送开始信号*/
MOV A,#0A0H /*发送物理器件地址信号*/
ACALL C08_WHITE
ACALL C08_ACK /*应答信号*/
MOV A,#01H /*伪写操作*/
ACALL C08_WHITE
ACALL C08_ACK /*应答信号*/
ACALL C08_START
MOV A,#0A1H /*发送读物理器件地址信号*/
ACALL C08_WHITE
ACALL C08_ACK
ACALL C08_READ /*读数据*/
MOV P0,A
SETB P3.7
CLR P3.7
LJMP MAIN
C08_START:SETB SDA
SETB SCL
CLR SDA
CLR SCL
RET
C08_WHITE:
MOV R0,#08
LOOP: RLC A
MOV SDA,C
SETB SCL
CLR SCL
DJNZ R0,LOOP
RET
C08_ACK: SETB SDA
SETB SCL
MOV C,SDA
JC $
CLR SCL
RET
C08_READ:
MOV R0,#08
LOOP1: SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ R0,LOOP1
RET
C08_STOP:
CLR SDA
SETB SCL
SETB SDA
CLR SCL
RET
END