标题:
DS18B20遥控调整上下限和精度
[打印本页]
作者:
新乡家电维修
时间:
2020-1-2 21:06
标题:
DS18B20遥控调整上下限和精度
/*
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
回复的人多的,感兴趣的话,过两天我烧写程序发上来
作者:
越南超级人类
时间:
2020-1-3 11:01
汇编的就算了吧
作者:
新乡家电维修
时间:
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,只有这样才会有实际的意义
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1