READ_TEMP: ;读1820内部温度子程序.
CALL RESET
JB 70h,EXT1
CALL SKIP_ROM
CALL TEMP_CONV ;温度AD变换
CALL DELAY_600MS
CALL RESET
CALL SKIP_ROM
CALL TEMP_GET ;发取温度的命令
CALL READ ;接收...
EXT1:
RET
SKIP_ROM:;跳过ROM检测
MOV A,#0CCH ;#0CCH为跳过rom命令
CALL WRITE
RET
RECALL_EPROM:;重调Eprom
MOV A,#0B8H
CALL WRITE
RET
TEMP_CONV:
MOV A,#44H ;AD变换
CALL WRITE
RET
TEMP_GET:
MOV A ,#0BEH;读18b20命令
CALL WRITE
RET
;********* 18B20基本时序子程序
RESET: ;初始化子程序
SETB P1.2
NOP
CLR P1.2 ;拉低
MOV R3,#150 ; *4=600US
CALL DELAY_BY_R3
SETB P1.2;拉高
MOV R3,#15 ; 60US
CALL DELAY_BY_R3
MOV R3,#60 ;4个周期*60=240US内检测
A1: JNB P1.2,A2 ;检测到低平信号
DJNZ R3,A1 ;如果没有应答的低电平信号,返回A1重新检测,超时后下一行,
SETB 70h ;DS1820不存在.
JMP A3
A2: CLR 70h
MOV R3,120;240US;等恢复时间2*120=240us
DJNZ R3, $
A3:
RET
WRITE:
MOV R2,#8;一个字节为8位
CLR C ;C位清0 C位用来放A的一位数据,用移位的方法放入C
B1: SETB P1.2
NOP
CLR P1.2
MOV R3,#4 ;16US
CALL DELAY_BY_R3
RRC A;把A中的数送入C
MOV P1.2,C ;把C送入总线
MOV R3,#12;48US(一位数据的发送:60us<tx<120us)
CALL DELAY_BY_R3
SETB P1.2 ;拉高1us结束一位
NOP
DJNZ R2,B1
RET
READ:
MOV R1,#4 ;接收4个字节数据依次是1.低位 2.高位. 3.高限 4.低限
MOV R0,#28H;低位放28H;高位放29h (1. 28H,2. 29H 3. 2AH 4. 2BH )
C0: MOV R2,#8;一字节数据8位
C1: CLR C ;清除C
SETB P1.2
NOP
NOP
CLR P1.2 ;拉低.
NOP ;1us秒后拉高?
SETB P1.2
MOV R3,#4 ;16us后采数据
CALL DELAY_BY_R3
MOV C,P1.2 ;读出18b20的数据
RRC A ;移入A
MOV R3,#12;48US恢复时间
CALL DELAY_BY_R3
DJNZ R2,C1 ;一个字节收完
MOV @R0,A ;移入存储位
INC R0 ;下一位;29h
DJNZ R1,C0 ;全部取完吗?没有重复
RET
END
小白一个,程序出现如下错误
CALL DELAY_600MS
CALL DELAY_BY_R3
CALL DELAY_BY_R3
CALL DELAY_BY_R3
CALL DELAY_BY_R3
STARTUP.A51(6): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(35): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(38): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(56): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(60): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(77): error A45: UNDEFINED SYMBOL (PASS-2)
STARTUP.A51(81): error A45: UNDEFINED SYMBOL (PASS-2)
请问大神们应该如何修改,这个应该怎么定义
|