完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
5个回答
|
|
org 00h
ljmp main org 030h main:clr f0 ;清比较标志位 mov 25h,#45h ;前几次读取的温度不要,消除85 mov p1,#0ffh ;清零 mov 40h,#00h mov 41h,#00h mov 30h,#00h mov 31h,#00h mov 32h,#20h mov 28h,#00h mov 29h,#00h lcall rest_1820 ;复位ds18b20 lcall design_1820 ;设定18b20的值 loop: lcall get_1820 ;读取温度 lcall chaxun lcall bijiao ;调用比较子程序 loop1:lcall display ;显示 ljmp loop ;************************ds18b20复位程序********** rest_1820:setb p1.0 nop clr p1.0 mov r0,#6bh ;主机发出延时复位低脉冲 mov r1,#04h tsr1: djnz r0,$ mov r0,#6bh djnz r1,tsr1 setb p1.0 ;然后拉高数据线 nop nop nop mov r0,#32h tsr2: jnb p1.0,tsr3 ;等待DS18B20回应 djnz r0,tsr2 jmp tsr4 ; 延时 tsr3: clr p1.1 ; 点亮p1.1,表示DS1820存在 jmp tsr5 tsr4: setb p1.2 ;ds1820不存在 jmp tsr7 tsr5: mov r0,#06bh tsr6: djnz r0,$ ; 时序要求延时一段时间 tsr7: setb p1.0 ret ;******************设定DS18B20暂存器设定值************** design_1820:jnb p1.1,design1_1820 ret design1_1820:mov a,#0cch ;跳过rom指令 lcall write_1820 mov a,#4eh ;写暂存器指令 lcall write_1820 ;mov a,32h ;报警上限 ;lcall write_1820 ;mov a,31h ;报警下限 ;lcall write_1820 mov a,#7fh ;选择12位温度分辨率 lcall write_1820 ret ;***************写DS18B20程序************ write_1820: mov r2,#08h ;输入8位 clr c dp0: clr p1.0 mov r3,#6 djnz r3,$ rrc a mov p1.0,c mov r7,#23 djnz r7,$ ;延时46us setb p1.0 nop djnz r2,dp0 ;判断是否送完8位 setb p1.0 ret ;***********读取温度********* get_1820: setb p1.0 lcall rest_1820 ;先复位 jnb p1.1,dp5 ret dp5: mov a,#0cch ;跳过rom匹配 lcall write_1820 mov a,#044h ;发出温度转换命令 lcall write_1820 lcall display lcall rest_1820 ;准备读温前先复位 mov a,#0cch lcall write_1820 mov a,#0beh ;发出读温度指令 lcall write_1820 lcall read_1820 ret ;***********读18B20程序,读出两个字节的温度********* read_1820:mov r4,#02h mov r1,#28h ;低位存28h,高位存29h dp1: mov r2,#8 dp2: clr c setb p1.0 nop nop clr p1.0 nop nop nop setb p1.0 mov r3,#20 djnz r3,$ mov c,p1.0 mov r3,#23 djnz r3,$ rrc a djnz r2,dp2 mov @r1,a inc r1 djnz r4,dp1 lcall chuli lcall display ret ;************读出的温度进行数据转换************** chuli: clr c ;清除前几次的温度 dec 25h mov a,25h subb a,#04h jnc chuli1 mov 25h,#03h mov a,28h mov c,29h.0 rrc a mov c,29h.1 rrc a mov c,29h.2 rrc a mov c,29h.3 rrc a mov 29h,a ;将处理的数据放入29h中 jixu: mov b,#10 mov a,29h div ab mov 41h,a ;十位 mov 40h,b ;个位 bijiao1: cjne a,43h,bijiao2 ;与最低温度比较相等则置标志位 mov a,b cjne a,42h,bijiao2 setb f0 jmp exit2 bijiao2: mov a,41h cjne a,45h,exit2 mov a,b cjne a,44h,exit2 setb f0 ljmp exit2 chuli1: mov 40h,#00h mov 41h,#00h exit2: ret ;***************查询******************** chaxun:jnb p1.3,s ;最低温度按键按下? jnb p1.4,m ;最高温度按键按下? exit1: ret ;查询完毕开启计时 ;***************设置温度上下限**************** ;***************最低温度设置****************** s: lcall div_0 ;调用程序延时消除抖动 lcall display *** p1.3,exit1 ;无按键按下返回查询? mov a,31h add a,#01h da a mov 31h,a clr c subb a,32h jc s0 ;等于最高温度? mov 31h,#00h ;等于,清零 s1: mov 56h,#25h ;延时消除闪烁 s2: lcall div_0 lcall display djnz 56h,s2 ljmp exit1 ;返回查询 s0: ajmp s1 ;返回查询 ;***************最高温度调节****************** m: lcall div_0 ;调用程序延时消除抖动 lcall display *** p1.4,exit1 ;无按键按下返回查询? mov a,32h add a,#01h da a mov 32h,a cjne a,#00h ,m1 mov 32h,#20h m1: mov 57h,#25h m2: lcall div_0 lcall display djnz 57h,m2 ljmp exit1 ;返回查询 ;****************温度上下限判断************ bijiao: *** f0,shansuo ;达到温度限定值,进入led闪烁子程序 ret shansuo:clr p1.2 sh1: mov 57h,#25h sh2: lcall div_0 lcall display djnz 57h,sh2 setb p1.2 lcall div_0 lcall display clr f0 ret ;***************拆分********* div_0: mov r0,#31h ;未拆分时存放的数据 mov r1,#42h ;拆分后所占的存储单元 dp4: mov a,@r0 anl a,#0fh mov @r1,a inc r1 mov a,@r0 swap a anl a,#0fh mov @r1,a inc r0 inc r1 cjne r1,#46h,dp4 ret ;**************显示子程序******** display:mov r1,#40h mov r4,#0feh ;点亮数码管开关 mov dptr,#tab dp3: mov a,@r1 ;取数 movc a,@a+dptr mov p0,a ;点亮数码管 mov a,r4 mov p2,a lcall delay1ms ;延时1ms mov p2,#0ffh ;关闭所有数码管 mov p0,#00h mov a,r4 rl a mov r4,a inc r1 ;下一个字 cjne r1,#46h,dp3;判断是否显示完6个数码管 ret ;******************字符库************************* tab: db 3fh,06h,5bh,4fh db 66h,6dh,7dh,7h db 7fh,6fh ;*****************延时1ms子程序******************** delay1ms:mov r7,#02h dl: mov r6,#0ffh dl1: djnz r6,dl1 djnz r7,dl ret end |
|
|
|
C:UsershpDesktop
|
|
|
|
后面显示正常不,有变化不
|
|
|
|
楼主加油
|
|
|
|
{:6:}{:6:}
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
3483 浏览 3 评论
4778 浏览 1 评论
5055 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
6775 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1190 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 13:24 , Processed in 0.508434 second(s), Total 52, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号