一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

使用8位微控制器和汇编器的12位温度计

来源:analog 发布时间:2023-11-17

摘要: 本文解释了如何使用低成本的8位微控制器(µC)和MPASM自由汇编器实现12位数字温度计。

本应用说明解释了如何使用8位微控制器(µC)和MPASM自由汇编器来实现12位数字温度计。这种设计是理想的过程控制工厂,医院和食品储存区域。

本应用说明解释了如何使用低成本的8位微控制器(µC)和MPASM自由汇编器实现12位数字温度计。温度计显示温度范围为0°C至70°C,精度为±1°C (图1). 典型的应用包括过程控制工厂、医院和食品储存区域。


图1所示。使用汇编语言例程和自由汇编程序,该电路允许8位µC实现12位数字温度计。

U1是一种低成本的8位闪存,只有35条指令。与更昂贵的,乘法友好的16位微控制器不同,它没有乘法,除法,甚至16位数学指令。结果是一个更具挑战性的温度计的实现!µC (U1)从温度传感器(U3)接收串行数据字(Kcode)。使用以下公式,它将Kcode转换为以摄氏度为单位的温度的二进制表示:

K = Kcode x 0.125,其中K =以开尔文为单位的温度。

°C = K - 273,其中°C =摄氏度。

表1显示了转换过程中五个步骤中每个步骤之后出现的数据,使用十进制等效数2384作为Kcode的示例。第一步从U3读取Kcode值的两半(高字节和低字节),并将该数据存储在单独的8位文件寄存器中。第二步通过将两个8位文件寄存器中的位向右旋转两个位置来对齐Kcode数据,每次检查进位标志以正确地将高字节的LSB移动到低字节的MSB。第三步是将Kcode乘以0.125。乘以0.125有点复杂,但除以8的等效运算要简单得多。因为8是2的三次幂,除以8可以(在我们有限的指令集上)通过连续三次右移来完成。

要转换为摄氏度,第四步从开尔文温度k中减去273。然而,8位算术只支持255的整数。由于273超过8位边界,因此使用16位减法的代码例程来生成以摄氏度为单位的温度的二进制表示。

为了充分利用U2内部的BCD寄存器映射,最后(第五步)将温度的二进制表示(以摄氏度为单位)转换为BCD数据格式。一个用于二进制到bcd转换的16位例程允许使用LED显示驱动器U2显示温度。

µC系统的汇编语言程序可以从Maxim网站上下载。

表1、五个步骤允许8位µC支持12位温度数据并显示它。

µC的8位文件寄存器#1(高字节)
µC的8位文件寄存器#2(低字节)
步骤1:Kcode值串行地从U3中读出。例如,Kcode = 2,384小数点下面。
X
X
最高有效位
D12
这里
D10
D9
D8
D7
D6
D5
D4
D3
D2
LSB
D1
0
0
X
X
1
0
0
1
0
1
0
1
0
0
0
0
0
0
步骤2:Kcode是字节对齐的。Kcode仍然等于下面的小数2384。
0
0
0
0
最高有效位
D12
这里
D10
D9
D8
D7
D6
D5
D4
D3
D2
LSB
D1
0
0
0
0
1
0
0
1
0
1
0
1
0
0
0
0
第三步:将数据右移三位相当于乘以0.125得到开尔文温度。例如下面的K = 298。
0
0
0
0
最高有效位
D12
这里
D10
D9
D8
D7
D6
D5
D4
D3
D2
LSB
D1
0
0
0
0
0
0
0
1
0
0
1
0
1
0
1
0
步骤4:必须使用16位减法代码例程从K中减去273,因为273超过8位。例如,°C = 25以下。
请参阅代码清单了解16位减法代码例程。
D8
D7
D6
D5
D4
D3
D2
LSB
D1
0
0
0
1
1
0
0
1
步骤5:必须使用16位二进制到bcd转换例程,因为这是LED显示驱动程序使用的格式。例如,25度以下。请参阅代码清单了解16位二进制到BCD的转换代码例程。
了0
领导1
领导2
领导3
目前空白
D8
D4
D2
D1
D8
D4
D2
D1
永久性“C”表示“°C”
可以是负号
0
0
1
0
0
1
0
1
声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: