标题:
上下限温度控制器 汇编源码
[打印本页]
作者:
赵建春
时间:
2015-5-24 10:55
标题:
上下限温度控制器 汇编源码
完整代码下载:
程序.rar
(15.65 KB, 下载次数: 81)
2015-5-24 10:54 上传
点击文件名下载附件
程序
下载积分: 黑币 -5
单片机汇编源程序:
;温度上下限自由设定,P3.5设置温度上限,P3.6设置温度下限,P3.7为温度增加键,每按一次温度加一度。
;当按P3.5时,数码管显示H00;当按P3.6时,数码管显示L00,设置温度范围为整数,不含小数。
ORG 0000H
TEMPER_L EQU 29H
TEMPER_H EQU 28H
FLAG1 EQU 38H;是否检测到DS18B20标志位
bwei equ 22h
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
XS EQU 30H
MOV A,#00H
MOV P2,A
MOV R5,#01H
MAIN:LCALL GET_TEMPER;调用读温度子程序
MOV A,29H
MOV B,A
CLR C
RLC A
CLR C
RLC A
CLR C
RLC A
CLR C
RLC A
SWAP A
MOV 31H,A
MOV A,B
MOV C,40H;将28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
LCALL DISPLAY;调用数码管显示子程序
AJMP MAIN; 这是DS18B20复位初始化子程序
INIT_1820:SETB P1.0
NOP
CLR P1.0;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P1.0;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:JNB P1.0,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:MOV R0,#117
TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:SETB P1.0
RET; 读出转换后的温度值
GET_TEMPER:SETB P1.0
LCALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
LCALL DISPLAY
LCALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200; 将读出的温度数据保存到35H/36H
RET;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:MOV R2,#8;一共8位数据
CLR C
WR1:CLR P1.0
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.0,C
MOV R3,#23
DJNZ R3,$
SETB P1.0
NOP
DJNZ R2,WR1
RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:MOV R2,#8;数据一共有8位
RE01:CLR C
SETB P1.0
NOP
NOP
CLR P1.0
NOP
NOP
NOP
SETB P1.0
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,P1.0
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
DISPLAY:
MOV A,29H;将29H中的十六进制数转换成10进制
MOV R3,A
CLR C
SUBB A,50H;温度上限
JNB CY, T3
SETB P1.2;风扇继电器关
SETB P2.5;报警关
MOV A,R3
CLR C
SUBB A,60H;温度下限
JB CY, T2
SETB P1.1;加热继电器关
SETB P2.5;报警关
SJMP XIANSHI
T2:
CLR P1.1;加热继电器开
CLR P2.5;报警开
LJMP XIANSHI
T3:
CLR P1.2;风扇继电器开
CLR P2.5;报警开
XIANSHI:
LCALL SETT
DISP:
MOV A,R3
MOV B,#100 ;10进制/10=10进制
DIV AB
mov bwei,a
mov a,b
mov b,#10
div ab
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B
MOV R0,#4
CLR C;多加的
DPL1: MOV R1,#250 ;显示1000次
DPLOP:
MOV DPTR,#NUMTAB
MOV A,bwei
MOVC A,@A+DPTR ;查通道的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.3 ;开通道显示
ACALL D1MS ;显示1MS
SETB P2.3
MOV DPTR,#NUMTAB1
MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.1 ;开个位显示
ACALL D1MS ;显示1MS
SETB P2.1
MOV DPTR,#NUMTAB
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.2 ;开十位显示
ACALL D1MS ;显示1MS
SETB P2.2
JC XSW;多加的
MOV A,31H
MOV B,#160
DIV AB
MOV XS,B
XSW:MOV A,XS
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
ACALL D1MS
SETB P2.0
SETB C;多加的
DJNZ R1,DPLOP ;250次没完循环
DJNZ R0,DPL1 ;4个250次没完循环
RET;1MS延时(按12MHZ算)
D1MS: MOV R7,#80
DJNZ R7,$
RET
D10MS: MOV R6,#20
LOOP: MOV R7,#250
DJNZ R7,$
DJNZ R6,LOOP
RET
D5MS: MOV R6,#10
LOOP1: MOV R7,#250
DJNZ R7,$
DJNZ R6,LOOP1
RET
NUMTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,7FH,7FH,7FH,7FH,7FH,7FH
NUMTAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
SETT:
TH: JNB P3.6,GS
JNB P3.5,GSU
LJMP DISP
GS: LCALL D10MS
JB P3.6,TH
SJMP BIAN3
GSU: LCALL D10MS
JB P3.5,TH
SJMP BIAN
BIAN3: MOV R1,#00
BIAN1: MOV P0,#38H
CLR P2.2
SETB P2.0
SETB P2.1
LCALL D5MS
MOV A,R1
MOV B,#10
DIV AB
MOV DPTR,#NUMTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
SETB P2.0
SETB P2.2
LCALL D5MS
MOV A,B
MOV DPTR,#NUMTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
SETB P2.1
SETB P2.2
LCALL D5MS
MOV 60H,R1
JB P3.7,BIAN1
JNB P3.7,$
INC R1
SJMP BIAN1
BIAN: MOV R0,#00
BIAN2: MOV P0,#76H
CLR P2.2
SETB P2.0
SETB P2.1
LCALL D5MS
MOV A,R0
MOV B,#10
DIV AB
MOV DPTR,#NUMTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
SETB P2.0
SETB P2.2
LCALL D5MS
MOV A,B
MOV DPTR,#NUMTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
SETB P2.1
SETB P2.2
LCALL D5MS
MOV 50H,R0
JB P3.7,BIAN2
JNB P3.7,$
INC R0
SJMP BIAN2
RET
END
复制代码
作者:
南天白云
时间:
2015-5-24 19:11
咋有是汇编,也不错学习一下
作者:
胡小艳
时间:
2017-1-11 11:02
谢谢啦,好资料,
51黑有你更精彩!!!
作者:
nongqsong
时间:
2017-1-12 09:29
请问版主,昨天在这个帖子里无意中点了“程序下载”窗口,没有下载程序。我的黒币怎么被扣了?既然被扣了之后想补下也下不了,或者还是被扣黒币。我觉得这样不合理。
作者:
nongqsong
时间:
2017-1-15 16:47
nongqsong 发表于 2017-1-12 09:29
请问版主,昨天在这个帖子里无意中点了“程序下载”窗口,没有下载程序。我的黒币怎么被扣了?既然被扣了之 ...
谢谢版主!
作者:
ztrdiy
时间:
2017-1-17 14:35
汇编有的玩了,谢谢分享!
作者:
17857021287
时间:
2018-6-4 10:27
为什么我在里面找不到程序呢?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1