由于18b20的时序要求比较严格,c语言写起来不怎么好控制,所以就用汇编写了点,可惜对汇编不怎么通,结果实验没结果,仿真也不通过,新手求各位高手指教一下,感激不尽。
以下是写的代码
代码
完整代码:
ORG 0000H
SJMP MAIN
MAIN: MOV A,#21H
LCALL RESET1
LCALL WRITE_BYTE
SJMP MAIN
ORG 1000H
RESET1: PUSH PSW
PUSH ACC
PUSH B
SETB P1.0
CLR P1.0
CLR C
MOV B,#250
WAIT: DJNZ B,WAIT ;延时500us
SETB P1.0 ;释放总线
MOV ACC,#15
WAIT1: DJNZ ACC,WAIT1 ;等待时间
MOV B,#100
WAIT2: DJNZ B,WAIT2
ORL C,P1.0
POP B
POP ACC
POP PSW
RET
ORG 2000H
WRITE: PUSH B ;写位
SETB P1.0
CLR P1.0
NOP
NOP
NOP
NOP
NOP
NOP
MOV P1.0,C ;将数据从cy送入i/o口
MOV B,#28
DL1: DJNZ B,DL1
SETB P1.0
POP B
RET
ORG 3000H
WRITE_BYTE: PUSH PSW ;这里先送的是低位
PUSH B
MOV B,#8
LOOP: RRC A
LCALL WRITE
DJNZ B,LOOP
POP B
PUSH PSW
RET
END
请各位指教一下我,谢谢
|