完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我想把手上的18B20温度显示程序由12位分辨率改为9位,改了几次都没成功,哪位大侠能帮我改下,直接在下面加上需要的程序就行了,谢谢
ORG 0000H ;单片机内存分配申明! TEMPER_L EQU 29H;用于保存读出温度的低8位 TEMPER_H EQU 28H;用于保存读出温度的高8位 FLAG1 EQU 38H;是否检测到DS18B20标志位 a_bit EQU 20h ;数码管个位数存放内存位置 b_bit EQU 21h ;数码管十位数存放内存位置 ;************************************************************************** MAIN: LCALL GET_TEMPER;调用读温度子程序 MOV A,29H MOV C,40H ;将28H中的低1位移入C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H ;将28H中的低4位移入C RRC A MOV 29H,A ;将28H低四位与29H高四位数据合并成新的数据,29H里的低四位表示小数此处舍去不要 LCALL DISPLAY ;调用数码管显示子程序 LCALL TEMPER_COMP ;调用报警比较子程序 AJMP MAIN ;************************************************************************** TEMPER_COMP:MOV A,29H ;取当前温度 CLR C ;清进位标志 SUBB A,#50 ;当前温度减去设定温度50度 JNC ALARM ;小于设定温度转ALARM SETB p2.4 ;否则清除ALARM返回 RET ALARM: CLR p2.4 RET ;************************************************************************** ; 这是DS18B20复位初始化子程序 INIT_1820: SETB P2.2 NOP CLR P2.2 ;主机发出延时537微秒的复位低脉冲 MOV R1,#3 TSR1: MOV R0,#107 DJNZ R0,$ DJNZ R1,TSR1 SETB P2.2;然后拉高数据线 NOP NOP NOP MOV R0,#25H TSR2: JNB P2.2,TSR3;等待DS18B20回应 DJNZ R0,TSR2 LJMP TSR4 TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在 SETB P1.0 ;熄灭P1.0LED LJMP TSR5 TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在 CLR P1.0 ;点亮P1.0LED LJMP TSR7 TSR5: MOV R0,#117 TSR6: DJNZ R0,TSR6 ; 延时一段时间 TSR7: SETB P2.2 RET ;************************************************************************** ; 读出转换后的温度值 GET_TEMPER: SETB P2.2 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 P2.2 MOV R3,#6 DJNZ R3,$ RRC A MOV P2.2,C MOV R3,#23 DJNZ R3,$ SETB P2.2 NOP DJNZ R2,WR1 SETB P2.2 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 P2.2 NOP NOP CLR P2.2 NOP NOP NOP SETB P2.2 MOV R3,#9 RE10: DJNZ R3,RE10 MOV C,P2.2 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 b,#10 ;10进制/10=10进制 div ab MOV b_bit,a ;十位在a MOV a_bit,b ;个位在b MOV dptr,#numtab ;指定查表启始地址 MOV r0,#4 dpl1: MOV r1,#250 ;显示1000次 dplop: MOV a,a_bit ;取个位数 MOVC A,@A+DPTR ;查个位数的7段代码 MOV p0,a ;送出个位的7段代码 clr p2.1 ;开个位显示 acall d1ms ;显示1ms setb p2.1 MOV a,b_bit ;取十位数 MOVC A,@A+DPTR ;查十位数的7段代码 MOV p0,a ;送出十位的7段代码 clr p2.0 ;开十位显示 acall d1ms ;显示1ms setb p2.0 djnz r1,dplop ;100次没完循环 djnz r0,dpl1 ;4个100次没完循环 ret ;************************************************************************** ;1MS延时(按12MHZ算) D1MS: MOV R7,#80 DJNZ R7,$ RET ;************************************************************************** ;实验板上的7段数码管0~9数字的共阴显示代码 numtab: DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 end |
|
相关推荐
2个回答
|
|
|
|
|
|
可以在程序开始调用这个函数
********************设定DS18B20暂存器设定值************** RE_CONFIG: JB FLAG1,RE_CONFIG1 RET RE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令 LCALL WRITE_18B20 MOV A,#4EH LCALL WRITE_18B20 ;写暂存器命令 MOV A,#00H ;报警上限中写入00H LCALL WRITE_18B20 MOV A,#00H ;报警下限中写入00H LCALL WRITE_18B20 MOV A,#1FH ;选择九位温度分辨率 LCALL WRITE_18B20 RET |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12022 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:52 , Processed in 0.432056 second(s), Total 44, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号