DS18B20初始化时序图:
DS18B20读/写时序图:
温度子程序写操作:
TSS2: MOV A,#0CCH LCALL WRITE_1820 MOV A,#44H LCALL WRITE_1820
LCALL D2MS LCALL INIT_1820 MOV A,#0CCH LCALL WRITE_1820 MOV A,#0BEH LCALL WRITE_1820 LCALL READ_18200 RET
DS18B20初始化程序:
INIT_1820: SETB NOP CLR MOV TSR1: MOV DJNZ DJNZ SETB NOP NOP NOP MOV TSR2: JNB DJNZ LJMP TSR3: SETB LJMP TSR4: CLR LJMP TSR5: MOV TSR6: DJNZ TSR7: SETB RET
DS18B20写指令程序:
WRITE_1820: MOV CLR WR1: CLR MOV DJNZ RRC MOV MOV DJNZ SETB NOP
P2.0
P2.0 R1,#3 R0,#107 R0,$ R1,TSR1 P2.0 R0,#25H P2.0,TSR3 R0,TSR2 TSR4 FLAG1 TSR5 FLAG1 TSR7 R0,#117 R0,TSR6 P2.0 R2,#8
C P2.0 R3,#5 R3,$ A P2.0,C R3,#21 R3,$ P2.0 DJNZ R2,WR1 RET
DS18B20读指令程序:
READ_18200: MOV R4,#2
MOV R1,#29H RE00: MOV R2,#8 RE01: CLR C SETB P2.0 NOP NOP CLR P2.0 NOP NOP NOP SETB P2.0 MOV R3,#8 RE10: DJNZ R3,RE10 MOV C,P2.0 MOV R3,#21 RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET
温度检测1ms延时子程序: D1MS: MOV R7,#250 LOOP0: NOP NOP DJNZ R7,LOOP0 RET
温度检测2ms延时子程序: D2MS: MOV R7,#187 DJNZ R7,$ MOV R7,#189 DJNZ R7,$ RET
温度检测10ms延时子程序: D10MS: MOV R4,#25 MOV R3,#200 DJNZ R3,$ DJNZ R2,D10MS
RET
时钟程序: 控制指令:
每个字节的传输是有控制字节决定的,控制字节的最高位Bit7必须是‘1’,如果是‘0’,写入将被禁止。Bit6为‘0’则指定4对时钟/日历寄存器控制读写操作,为‘1’则为RAM区数据的控制读写操作。Bit1~Bit5指定相关寄存器待进行输入输出操作,最低位Bit0指定是输入还是输出,为‘0’输入,为‘1’输出。输入输出根据脉冲的上升沿和下降沿串行进行。
时钟芯片初始化程序:
MAIN1:
LCALL KEY JB F0,MAIN10 ;F0=1,开始走时。走时前写,不读。走时后读,不写。 LCALL WR1302
MOV SP,#60H
MOV A_BIT,#30H MOV B_BIT,#30H MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV 47H,#10 SETB EA SETB ET0 SETB TR0 SETB ET1
MOV TH1,#0ECH MOV TL1,#78H MOV R1,37H
MOV YEAR,#11H ;上电预置日期、时间 MOV WEEK,#00H ;周1 MON
MOV MONTH,#05H ;2011 04 25 12:00:00 MOV DAY,#23H MOV HOUR,#00H MOV MIN,#00H MOV SEC,#00H
AJMP MAIN2
显示程序: 初始化设置:
(1) 显示模式设置:
(2)显示开/关及光标设置:
液晶显示屏初始化程序:
DISP: MOV A,#30H ;16进制转ASCII ORL YH_BIT, A ORL YL_BIT, A ORL MOH_BIT, A ORL MOL_BIT, A ORL DH_BIT, A ORL DL_BIT, A LCALL WEEKCOV ORL HH_BIT, A ORL HL_BIT, A ORL MH_BIT, A ORL ML_BIT, A ORL SH_BIT, A ORL SL_BIT, A