本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
仿真不行,只显示0.0,其他功能基本不能使用,我不清楚具体问题出现在哪里,请高手指点迷津,不胜感激:附上程序及其仿真图
TEMPER_L EQU 29H ;温度低8位
TEMPER_H EQU 28H ;温度高8位
FLAG0 EQU 35H ;温度调整状态标志
FLAG1 EQU 36H ;是否检测到18b20标志位
FLAG2 EQU 37H ;报警标志位
FLAG3 EQU 38H ;高低温调整标志位
F_BIT EQU 20H ;符号位
G_BIT EQU 21H ;数码管个位
S_BIT EQU 22H ;数码管十位
X_BIT EQU 23H ;小数位
H_TEM EQU 24H ;高温报警
L_TEM EQU 25H ;低温报警
ALARM BIT P2.1 ;温度报警
LED_RED BIT P2.0
CLOSE BIT P1.7 ;温度报警开关
DQ BIT P1.0 ;DS18B20数据线
ORG 0000H
LJMP START
ORG 0003H
LJMP KEY_H ;跳转到高温上限调节
ORG 0013H
LJMP KEY_L ;跳转到低温下限调节
ORG 0050H
START: MOV SP,#60H
MOV TCON,#00H
SETB EX0
SETB EX1
SETB EA
MOV 24H,#40 ;送高温报警初值
MOV 25H,#10 ;送低温报警初值
CLR FLAG2
MAIN: LCALL GET_TEMPER ;读转换温度
MOV A,28H
ANL A,#0F0H
JZ POSITIVE ;判断符号位
CLR C
MOV A,29H
CPL A
INC A
MOV 29H,A
MOV A,28H
CPL A
JNC AAA
INC A
AAA: MOV 28H,A
MOV F_BIT,#10
AJMP BBB
POSITIVE: MOV F_BIT,#11
BBB: MOV A,29H
ANL A,#0FH
MOV DPTR,#TAB2 ;查表求得小数位值
MOVC A,@A+DPTR
MOV X_BIT,A
MOV A,29H ;将29H中的最低位移入C
MOV C,40H
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
JB FLAG2,ABOVE ;若报警标志位为1,关报警
CJNE A,24H,BUD ;若报警标志位为0,则判断是否
BUD: JC BELOW ;报警
CLR P2.0 ;高温报警
CLR P2.1
AJMP DDD
BELOW: CJNE A,25H,BUD0
BUD0: JNC ABOVE
CLR P2.0 ;低温报警
CLR P2.1
AJMP DDD
ABOVE: SETB P2.0
SETB P2.1
DDD: MOV 29H,A
CLR FLAG0
LCALL DISPLAY ;调用显示子程序
AJMP MAIN ;循环处理
;DS18B20复位初始化
INIT_18B20: SETB DQ
NOP
CLR DQ
MOV R1,#3 ;主机发出延时500us的复位低脉冲
TSR1: MOV R0,#84
DJNZ R0,$
DJNZ R1,TSR1
SETB DQ ;拉高数据线
NOP
NOP
NOP
MOV R0,#25
TSR2: JNB DQ,TSR3 ;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ;延时
TSR3: SETB FLAG1 ;置标志位,表示DS18B20存在
LJMP TSR5
TSR4: CLR FLAG1 ;清标志位,表示DS1820不存在
LJMP TSR7
TSR5: MOV R0,#100 ;时序要求延时一段时间
TSR6: DJNZ R0,TSR6
TSR7: SETB DQ
RET
;读出转换后的温度
GET_TEMPER: SETB DQ ;先复位DS18B20
LCALL INIT_18B20
JB FLAG1,TSS2
CLR DQ
RET ;判断DS18B20是否存在?若不存在则返回
TSS2: MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_18B20
MOV A,#44H ;发出温度转换命令
LCALL WRITE_18B20
LCALL DISPLAY
LCALL INIT_18B20 ;准备读温度前先复位
MOV A,#0CCH
LCALL WRITE_18B20
MOV A,#0BEH ;发出温度读命令
LCALL WRITE_18B20
LCALL READ_18B20
RET
;写DS18B20
WRITE_18B20: MOV R2,#8 ;一共8位数据
CLR C
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;读18b20的子程序
READ_18B20: MOV R4,#2 ;将温度高位和低位从DS18B20中读出
MOV R1,#29H ;低位存入29H,高位存入28H
RE00: MOV R2,#8 ;数据一共8位
RE01: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DQ
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;温度报警调整子程序
KEY_H: ACALL D5MS
JB P3.2,OVER
PUSH ACC
PUSH PSW
SETB RS0
CLR EA
SETB FLAG0 ;置位温度调整标志位
SETB FLAG3 ;置位高温报警调整标志位
MOV A,24H
MOV 30H,A
KEY_CH: JB P3.4,JJ_H ;加1调整
ACALL D20MS
JB P3.4,JJ_H
INC 24H
MOV A,24H
MOV 30H,A
ACALL DISPLAY
JJ_H: JB P3.5,QD_H ;减1调整
ACALL D20MS
JB P3.5,QD_H
DEC 24H
MOV A,24H
MOV 30H,A
ACALL DISPLAY
QD_H: JB P3.1,KEY_CH
ACALL D5MS
JB P3.1,KEY_CH
CLR FLAG0 ;即将退出调整,清零调整状态位
CLR RS0
POP PSW
POP ACC
SETB EA
OVER: RETI
KEY_L: ACALL D20MS
JB P3.3,OVER0
PUSH ACC
PUSH PSW
SETB RS0
SETB FLAG0 ;置位温度调整标志位
CLR FLAG2
CLR FLAG3 ;清零高温报警调整标志位
CLR EA
MOV A,25H
MOV 30H,A
KEY_CL: JB P3.4,JJ_L
ACALL D20MS
JB P3.4,JJ_L
INC 25H
MOV A,25H
MOV 30H,A
ACALL DISPLAY
JJ_L: JB P3.5,QD_L
ACALL D20MS
JB P3.5,QD_L
DEC 25H
MOV A,25H
MOV 30H,A
ACALL DISPLAY
QD_L: JB P3.1,KEY_CL
ACALL D20MS
JB P3.1,KEY_CL
CLR FLAG0 ;即将退出调整,清零调整状态位
CLR RS0
POP PSW
POP ACC
SETB EA
OVER0: RETI
;显示子程序
DISPLAY: JB FLAG0,JIAN ;调整状态位为1,报警温度送显示处理
MOV A,29H ;否则处理温度传感器读取的温度值
AJMP TEM
JIAN: MOV A,30H
TEM: CJNE A,#100,NX ;若温度>=100°,符号位用来显示百位
NX: JC NNN
MOV B,#100
DIV AB
MOV F_BIT,A
MOV 29H,B
MOV A,29H
AJMP MM
NNN: JNB FLAG0,MM
MOV F_BIT,#11 ;若符号位值为0,不显示
MM: MOV B,#10
DIV AB
MOV S_BIT,A
MOV G_BIT,B
MOV R1,#200 ;循环显示200次
DPLOP: MOV A,F_BIT
MOV DPTR,#TAB1 ;查表显示
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
ACALL D1MS
SETB P2.7
MOV A,S_BIT
JNZ CCC
MOV A,F_BIT
CJNE A,#10,VVV
VVV: JC CCC
MOV S_BIT,#11 ;当符号位用作百位且十位为0时
MOV A,S_BIT ;显示0,否则不显示0
CCC: MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL D1MS
SETB P2.6
JB FLAG0,XIAO ;报警温度调整状态时
MOV A,X_BIT ;高温报警调整H或低温报警调整L
AJMP XIAO1
XIAO: JB FLAG3,GAO
MOV A,#13
AJMP XIAO1
GAO: MOV A,#12
XIAO1: MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
ACALL D1MS
SETB P2.4
MOV A,G_BIT
MOVC A,@A+DPTR
MOV P0,A
JB FLAG0,NEXT
SETB P0.7
NEXT: CLR P2.5
ACALL D1MS
SETB P2.5
JB FLAG0,NEXT0
CLR P0.7
NEXT0: DJNZ R1,DPLOP
RET
;延时1ms
D1MS: MOV R6,#2
L1: MOV R7,#248
DJNZ R7,$
DJNZ R6,L1
RET
;延时5ms
D5MS: MOV R6,#5
L3: ACALL D1MS
DJNZ R6,L3
RET
;延时20MS
D20MS: MOV R5,#4
L2: ACALL D5MS
DJNZ R5,L2
RET
TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH ;共阴极数码管7段码
DB 07H ,7FH,6FH,40H,00H,76H,38H
TAB2: DB 00H,01H,01H,02H,03H,03H,04H,04H ;小数位码表
DB 05H,06H,06H,007H,08H,08H,09H,09H
END
[ 此帖被ljw032在2011-05-05 14:22重新编辑 ]
|
|