基于AT89S52单片机的万年历设计

洛阳师范学院课程设计说明书(2015)

MOV MOV RET

R4,#08H R5,A_BIT

LCALL DINPUT

;-------------7219命令写入子程序------------------ DINPUT: MOV A,R4

MOV B,#8 MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP0 MOV A,R5 MOV B,#8 MOV P0.1,C CLR P0.3 SETB P0.3 DJNZ B,LOOP1 CLR P0.2 SETB P0.2 RET LOOP0: RLC A

LOOP1: RLC A

;//****************DS18B20********************// DS18B20: LCALL TEMP LCALL CHULI

RET

TEMP: LCALL REST_18B20

MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820

MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820

LCALL REST_18B20 ;准备读温度前先初始化 MOV A,#0CCH ;跳过ROM匹配

;-----------------DS18B20的温度转换子程序--------------

50

洛阳师范学院课程设计说明书(2015)

LCALL WRITE_1820

MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 RET

;--------------------------DS18B20复位程序-------------------------- REST_18B20:

SETB DQ NOP

CLR DQ

MOV R2,#250 ;主机发出延时500微秒的复位低脉冲 DJNZ R2,$

SETB DQ ;然后拉高数据线 MOV R2,#30

DJNZ R2,$ ;延时60us等待DS18B20回应 JNB DQ,REST1

JMP REST_18B20 ;超时而没有响应,重新初始化 REST1: MOV R2,#120

DJNZ R2,$ ;延时240us

JB DQ,REST2 ;数据变高,初始化成功 JMP REST_18B20 REST2: MOV R2,#240 DJNZ R2,$ RET

;----------写DS18B20的子程序(有具体的时序要求)-------------- WRITE_1820:

MOV B,#8 ;一共8位数据 WR1: CLR DQ MOV R3,#7 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#20 DJNZ R3,$

;保持16uS以上

;等待

51

洛阳师范学院课程设计说明书(2015)

SETB DQ NOP NOP

DJNZ B,WR1 SETB DQ RET

;------读DS18B20的程序,从DS18B20中读出两个字节的温度数据-------------------------- READ_1820:

MOV R2,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#3EH ;低位存入3EH RE0: MOV B,#8 RE1: SETB DQ NOP NOP CLR DQ NOP NOP SETB DQ MOV R3,#9 DJNZ R3,$ MOV C,DQ MOV R3,#30 DJNZ R3,$

RRC A

DJNZ B,RE1 MOV @R1,A

INC R1 ;高位存入3FH DJNZ R2,RE0 RET

;=====================数据处理===================== CHULI: MOV A ,3EH

;延时18uS

ANL A,#0F0H SWAP

A

MOV 3DH,A

52

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4