找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2154|回复: 2
打印 上一主题 下一主题
收起左侧

DS18B20遥控调整上下限和精度

[复制链接]
跳转到指定楼层
楼主
ID:72088 发表于 2020-1-2 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
DS18B20数字温度计89C51(晶振12M),(-55.0℃---125.0℃)遥控调整温度范围。利用18B20内部E2PRAM存储温度。上下限温度设定成功(-50℃---110℃)

回差电压特性输出控制(如:TH=30,TL=20)低温+调整不会超过高温,反之,高温-调整不会小于低温
只有返回正常显示时候才存储到18B20中E2PROM
功能如下:
1、-55.0℃---125.0℃显示                                                                                       
2、遥控任意设定上下限温度区间(-50℃---110℃)
3、9位精度----12位精度遥控任意切换
2019.12.30完成功能。
*/


;18B20精度和输入端修改
        DQ        BIT P3.6                ;18b20输入脚


;显示端口定义
        WEI_1        BIT        P2.0                ;显示右数第一位
        WEI_2        BIT        P2.1                ;2
        WEI_3        BIT        P2.2                ;3
        WEI_4        BIT        P2.3                ;4
        OUT         EQU        P0


;遥控码与输出端口修改
        IR_YK1        EQU 0CCH;遥控用户码1(改遥控器按键)
        IR_YK2        EQU 1DH        ;遥控用户码2
        IR_YK3        EQU 04H        ;遥控功能码
        IR_YK4        EQU 05H        ;遥控加
        IR_YK5        EQU 06H        ;遥控减
        JK_LENG        BIT P2.6                ;继电器输出制冷恒温
        JK_RE         BIT P2.7                ;继电器输出加热恒温


;以上定义可修改端口,以下定义不可修改以免影响程序

        FLAG        BIT        38H        ;DS18B20存在标志(位定义)
        FUHAO        BIT        39H        ;负温度标志(位定义)
        IRIN        BIT        P3.2        ;红外线输入脚
        A_BIT        EQU        34H   ;放百位
        B_BIT        EQU        35H   ;放十位
        C_BIT        EQU        36H   ;放个位
        D_BIT        EQU        37H   ;个位小数
        WENDU_TH        EQU 32H        ;上限温度按键调整位置
        WENDU_TL        EQU 33H        ;下限温度按键调整位置
        JINGDU        EQU 25H        ;配置精度位1FH(9位)3FH(10位)5FH(11位)7FH(12位)

        ORG         00H
        AJMP         MAIN
        ORG         03H         ;外部中断P3.2(遥控调整上下限和精度)
        AJMP        INT_0
        ORG         40H

;======================主程序==========================
MAIN:     ;
        MOV DPTR,#TAB
        SETB EA                 ;打开CPU总中断请求
        SETB IT0         ;设定INT0的触发方式为脉冲负边沿触发
        SETB EX0
        MOV A,#0
        MOV 20H,A
        MOV 21H,A
        MOV 22H,A
        MOV 23H,A
        MOV R4,#0
AAAA:
        MOV A,R4                       
        JNZ AAAA_0                ;R4=0正常转换温度,R4不为0只扫描按键和显示程序
        ACALL RE_TEMP        ;读取温度值子程序
        ACALL TURN     ;数据转化子程序
        ACALL SHUCHU        ;比较输出控制程序
        MOV R7,#150        ;降低读取温度频率,防止触发温度跳变
AAAA_0:
        ACALL DISPLAY        ;显示程序
        ACALL KEY_0        ;温度调整程序
        DJNZ R7,AAAA_0
        JMP   AAAA

回复的人多的,感兴趣的话,过两天我烧写程序发上来

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:577423 发表于 2020-1-3 11:01 | 只看该作者
汇编的就算了吧
回复

使用道具 举报

板凳
ID:72088 发表于 2020-12-26 09:34 | 只看该作者
BCD码的运算规则:

BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。这样,当将 BCD码传送给运算器进行运算时,其结果需要修正。修正的规则是:当两个BCD码相加,如果和等于或小于 1001(即十进制数 9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如果相加时,本位产生了进位,也需加 6 进行修正。这样做的原因是,机器按二进制相加,所以 4 位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是 2 个十进制数相加,应该按“逢十进一”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,都要加 6 进行修正。

eg:

(1) 将 5 和 8 以 8421 BCD输入机器,则运算如下:


  0 1 0 1


  +) 1 0 0 0


  1 1 0 1 结果大于 9


  +) 0 1 1 0 加 6 修正


  1 0 0 1 1 即13 的 BCD码


  结果是 0011,即十进制数 3,还产生了进位。5+8=13





(于2012年5月22日20:06:11)

DA为十进制调整指令,功能是在进行BCD码加法运算时,用来对BCD码的加法运算结果进行自动修正。但对BCD码的减法不能用此指令来进行修正。因为BCD码本质上时十进制,而单片机只懂二进制,因此当两个BCD数相加大于9时,单片机仍按二进制加法相加,应进位而不产生进位,导致出现非法BCD码,导致计算结果出错。在此种情况下必须进行+6修正才能得到正确的BCD码。但是判断后+6指令繁琐,因此出现DA这个指令,可以减少代码长度。

12D+39D(十进制)
12H和39H(十六进制) 这两个数是相等的吗,12H=18D? 39H=57D ?

DA调整的对象是ADD或ADDC以后的结果,而且是BCD码相加以后才能够加以调整,否则没有实际意义!

比如,现在我想执行12D+39D也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以BCD码的形式存储的,也就是12H和39H(十六进制),但我们可以人为将它 们看为12D和39D(十进制),而且还希望相加以后的结果为51H,也就是说符合十进制运算规则12+39=51,而不是4BH的结果),但这样的十进制加法运算在单片机中是不能够直接实现的。因 为单片机只能够执行二进制加法指令,也就是所有的运算都按照二进制中的规则进行!于是就出现了DA调整指令!现在12H+39H,将12H放于A中,执行 ADD A,#39H指令,则结果为4BH,这不是我们希望的51H的数据形式!!这时执行DA A 指令后,就会将A中的数据调整为51H(具体调整过程和原理你可以 详细看书,如果单片机书中讲的不详细,那么微机原理中一定说的非常详细),而我们按照BCD码规则就将其看为51D,符合我们的要求!也就是说加数和被加数都是BCD码的形式,最大也只可能是99H,也就是我们十进制数中的99,只有这样才会有实际的意义
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表