微控制器的工作原理


由: 马歇尔大脑

微控制器是电子产品中的专用计算机。 埃内斯托·阿吉托斯 / 盖蒂图片社
如今,微控制器隐藏在数量惊人的产品中。如果您的微波炉有一个 发光二极管 或 液晶显示器 屏幕和键盘,它包含一个微控制器。所有现代汽车都至少包含一个微控制器,并且可以有多达六个或七个:发动机由微控制器控制,就像 防抱死制动器这 巡航控制 等等。任何具有遥控器的设备几乎肯定都包含一个微控制器: 电视, 录像机 而高端立体声系统都属于这一类。好 长官 和 数码相机, 手机, 摄录一体机, 答录机, 激光打印机, 电话 (带有来电显示、20 号码存储器等)、寻呼机和功能齐全的冰箱、洗碗机、洗衣机和烘干机(带有显示器和键盘的那些)......你明白了。基本上,任何与用户交互的产品或设备内部都埋有一个微控制器。
在本文中,我们将介绍微控制器,以便您了解它们是什么以及它们是如何工作的。然后,我们将更进一步,讨论如何自己开始使用微控制器 - 我们将创建一个带有微控制器的数字时钟!我们还将建造一个数字温度计。在这个过程中,您将学到很多关于微控制器如何在商业产品中使用的信息。
什么是微控制器?
微控制器是一台计算机。所有计算机 - 无论我们谈论的是个人 台式电脑 或大 大型计算机 或微控制器 - 有几个共同点:
所有计算机都有一个 中央处理器 (中央处理单元)执行程序。如果您现在坐在台式计算机上阅读本文,则该计算机中的 CPU 正在执行实现显示此页面的 Web 浏览器的程序。
CPU 从某处加载程序。在台式计算机上,浏览器程序从 硬盘.
计算机有一些 公羊 (随机存取存储器),它可以在其中存储“变量”。
计算机有一些输入和输出设备,因此它可以与人交谈。在台式机上, 键盘 和 鼠 是输入设备,并且 监控 和 打印机 是输出设备。硬盘是一种 I/O 设备 - 它处理输入和输出。
您使用的台式计算机是“通用计算机”,可以运行数千个程序中的任何一个。微控制器是“专用计算机”。微控制器有一件事做得很好。还有许多其他共同特征定义了微控制器。如果计算机符合这些特征中的大多数,那么您可以将其称为“微控制器”:
微控制器是”嵌入式“在其他设备(通常是消费产品)内部,以便他们可以控制产品的功能或动作。因此,微控制器的另一个名称是“嵌入式控制器”。
微控制器是 耿耿 到一个任务并运行一个特定程序。该程序存储在 .ROM (只读内存)并且通常不会更改。
微控制器通常是 低功耗设备.台式计算机几乎总是插入墙上插座,可能会消耗 50 瓦的电力。电池供电的微控制器可能消耗 50 毫瓦。
微控制器具有 专用输入设备 并且经常(但并非总是)有一个小 用于输出的 LED 或 LCD 显示屏.微控制器还从其控制的器件获取输入,并通过向器件中的不同组件发送信号来控制器件。 例如,电视内部的微控制器从 遥控 并在电视屏幕上显示输出。控制器控制通道选择器, 议长 系统和对显像管电子设备的某些调整,例如色调和亮度。这 发动机控制器 In 汽车从氧气和爆震传感器等传感器获取输入,并控制燃油混合和火花塞正时等。一个 微波炉 控制器从键盘获取输入,在LCD显示屏上显示输出并控制 中继 这将打开和关闭微波发生器。
微控制器通常是 体积小,成本低.选择组件是为了最小化尺寸并尽可能便宜。
微控制器通常是(但并非总是) 加固型 在某种程度上。 例如,控制汽车发动机的微控制器必须在普通计算机通常无法处理的极端温度下工作。阿拉斯加的汽车微控制器必须在-30华氏度(-34摄氏度)的天气下正常工作,而内华达州的同一微控制器可能在120华氏度(49摄氏度)下工作。当您添加由 发动机,发动机舱内的温度可能高达 150 或 180 华氏度(65-80 摄氏度)。 另一方面,嵌入在VCR中的微控制器根本没有加固。
实际的 处理器 用于实现微控制器的用途可能差异很大。例如,显示的手机 数字手机内部 包含一个 Z-80 处理器.Z-80 是 8 位 微处理器 开发于 1970 年代,最初用于当时的家用电脑。Garmin GPS 显示在 全球定位系统接收器如何 我被告知,工作包含英特尔 80386 的低功耗版本。80386 最初用于台式计算机。
在许多产品中,例如微波炉,对CPU的要求相当低,价格是一个重要的考虑因素。在这些情况下,制造商转向 专用微控制器芯片 - 最初设计为低成本、小型、低功耗的嵌入式CPU的芯片。摩托罗拉 6811 和 英特尔 8051 都是这种芯片的好例子。还有一系列流行的控制器称为“PIC微控制器”,由一家名为“PIC微控制器”的公司创建。 微片.按照今天的标准,这些 CPU 非常简约;但是,当大量购买时,它们非常便宜,并且通常只需一个芯片即可满足设备设计人员的需求。
一个典型的低端微控制器芯片可能有 1,000 个 字节 芯片上的 ROM 和 20 字节 RAM,以及 8 个 I/0 引脚。在大量情况下,这些芯片的成本有时可能只有几美分。你当然永远不会在这样的芯片上运行Microsoft Word——Microsoft Word可能需要30兆字节的RAM和一个每秒可以运行数百万条指令的处理器。但是,您也不需要Microsoft Word来控制微波炉。使用微控制器,您需要完成一项特定的任务,而低成本、低功耗的性能才是最重要的。
使用微控制器

BASIC Stamp 是一种 PIC 微控制器,经过定制,可以理解 BASIC 编程语言。在 电子门的工作原理,您了解了 7400 系列 TTL 设备,以及在哪里购买它们以及如何组装它们。您发现,实现简单的设备通常需要许多门。例如,在 数字时钟文章,我们设计的时钟可能包含 15 或 20 个芯片。微控制器的一大优势是软件 - 您在控制器上编写和执行的小程序 - 可以取代许多门。因此,在本文中,我们将使用微控制器来创建数字时钟。这将是一个相当昂贵的数字时钟(近200美元!),但在这个过程中,你将积累未来几年使用微控制器所需的一切。即使您实际上没有创建此数字时钟,也可以通过阅读它来学到很多东西。
我们在这里将使用的微控制器是一种专用设备,旨在使生活尽可能简单。该设备被称为“BASIC邮票”,由一家名为 视差.BASIC Stamp 是一种 PIC 微控制器,经过定制,可以理解 BASIC 编程语言。使用BASIC语言使得为控制器创建软件变得非常容易。微控制器芯片可以在接受9伏的小型载板上购买 电池,您可以通过将其插入台式计算机上的其中一个端口来对其进行编程。任何制造商都不太可能在实际生产设备中使用BASIC印章 - 印章昂贵且缓慢(相对而言)。但是,将邮票用于原型设计或一次性演示产品是很常见的,因为它们非常易于设置和使用。
顺便说一下,它们被称为“邮票”,因为它们和邮票一样大。
我们将在本文中使用的特定 BASIC 邮票称为“BASIC 邮票修订版 D”。
BASIC Stamp 修订版 D 是安装在载板上的 BS-1,带有 9 伏电池座、电源调节器、编程电缆连接、I/O 线的针座引脚和小型原型制作区域。您可以购买BS-1芯片并将其他组件连接到面包板上。修订版 D 只是让生活更轻松。
从上表中可以看出,您不会用 BASIC 印章做任何奇特的事情。75 行限制(256 字节 电丙胺 可以容纳大约 75 行长的 BASIC 程序)对于 BS-1 来说是相当有限的。但是,您可以创建一些非常整洁的东西,而且Stamp非常小且电池供电的事实意味着它几乎可以去任何地方。
对基本印章进行编程
您可以使用 基本编程语言.如果您已经了解 BASIC,那么您会发现邮票中使用的 BASIC 很简单,但有点精简。如果你不懂BASIC,但你懂另一种语言,比如 C、帕斯卡或 爪哇岛,那么拿起 BASIC 将是微不足道的。如果你以前从未编程过,你可能想去 学习编程 首先在台式计算机上。以下是Stamp BASIC中可用说明的快速概述。(有关完整文档,请转到视差:基本图章文档。
标准基本说明:
为。。。下一个 - 正常循环语句
gosub - 转到子例程
转到 - 转到程序中的标签(例如 - “标签:”)
如果。。。then - 正常 if /then 决定
let - 赋值(可选)
返回 - 从子例程返回
结束 - 结束程序并休眠
与 I/O 引脚相关的说明:
按钮 - 读取输入引脚上的按钮,具有去抖动和自动重复功能
高电平 - 将 I/O 引脚设置为高电平
输入 - 将 I/O 引脚的方向设置为输入
低电平 - 将 I/O 引脚设置为低电平
输出 - 设置 I/O 引脚到输出的方向
电位器 - 读取 I/O 引脚上的电位计
脉冲蛋白 - 读取输入引脚上输入的脉冲的持续时间
脉冲输出 - 在输出引脚上发送特定持续时间的脉冲
PWM - 在输出引脚上执行脉冲宽度调制
反转 - 反转 I/O 引脚的方向
Serin - 读取输入引脚上的串行数据
Serout - 在输出引脚上写入串行数据
声音 - 将特定频率的声音发送到输出引脚
切换 - 切换输出引脚上的位
特定于基本印章的说明:
分支 - 读取分支表
调试 - 将调试字符串发送到台式计算机上的控制台
EEPROM - 将程序下载到 EEPROM
向下查看 - 返回列表中值的索引
查找 - 使用索引进行数组查找
小睡 - 短时间睡眠
暂停 - 指定时间的延迟
随机 - 选择一个随机数
读取 - 从 EEPROM 读取值
睡眠 - 在指定时间内关闭电源
写入 - 将数据写入 EEPROM
操作:
+ - 加法
--减法
* - 乘法(低字)
** - 乘法(高词)
/-划分
-勇气
max - 返回最多 2 个值
min - 返回最少 2 个值
&- 和
|-或
^-异或
&/ - NAND
|/ - 无
^/ - XNOR
If 语句逻辑:
=
<>
<
<=
>
>=
和
或
变量
BS-1 中的所有变量都有预定义的名称(您可以用自己的名称替换)。请记住,只有 14 字节的 RAM 可用,因此变量非常宝贵。以下是标准名称:
W0, W1, W2...W6 - 16 位字变量
B0, B1, B2...b13 - 8 位字节变量
位0, 位 1, 位 2...bit15 - 1 位位变量
因为只有 14 个字节的内存,所以 w0 和 b0/b1 在 RAM 中的位置相同,w1 和 b2/b3 是相同的,依此类推。此外,bit0 到 bit15 驻留在 w0 中(因此 b0/b1 也是如此)。
I/O 引脚
您可以看到BS-1中的14条指令与I / O引脚有关。之所以强调这一点,是因为I/O引脚是BASIC印章与世界对话的唯一途径。BS-1 上有 8 个引脚(编号为 0 到 7),BS-2 上有 16 个引脚(编号为 0 到 15)。
引脚是 双向,这意味着您可以读取它们的输入值或向其发送输出值。将值发送到引脚的最简单方法是使用 高 或 低 功能。语句高电平 3 在引脚 3 上发送 1 (+5 伏)。低电平发送 0(接地)。引脚 3 在这里是任意选择的 - 您可以在从 0 到 7 的任何引脚上发送位。
有许多有趣的I/O引脚指令。例如,POT读取电位计(可变电阻器)上的设置,如果您用 电容器 正如 POT 指令所期望的那样。PWM指令发出脉宽调制信号。像这样的说明可以使将控件和电机连接到印章变得更加容易。请参阅的 文档 了解详细信息的语言。此外,像斯科特·爱德华这样的书 编程和自定义 BASIC 印章计算机 由于它包含的示例项目,因此非常有用。
玩基本图章

典型 BASIC 程序编辑器的屏幕截图如果您想玩 BASIC 印章,很容易上手。您需要的是一台台式计算机和一台 基本印章入门套件.入门套件包括 Stamp、编程电缆和您在台式计算机上运行的应用程序,用于将 BASIC 程序下载到 Stamp 中。
您可以从以下位置获得入门套件 视差 (制造商)或来自供应商,如 贾梅科 (谁应该熟悉 电子门 和 数字时钟 文章)。您可以从视差订购 BASIC Stamp D 入门套件(部件号 27202),或者从 Jameco 订购零件编号140089。您将收到印章(如下图所示)、编程电缆、软件和说明。该套件的价格为两家供应商的 79 美元。偶尔,Parallax会推出一个名为“We've Bagged the Basics”的特别节目,其中还包括Scott Edward的 编程和自定义 BASIC 印章计算机].
连接邮票很容易。您将其连接到 并行端口 的电脑。然后,您运行DOS应用程序来编辑您的BASIC程序并将其下载到图章。
要在此编辑器中运行程序,请单击 ALT-R。编辑器应用程序检查 BASIC 程序,然后将其通过电线发送到图章上的 EEPROM。然后,图章执行程序。在这种情况下,程序在I/O引脚3上产生方波。如果将逻辑探头或 LED 连接到引脚 3(请参阅 电子门文章 有关详细信息),您将看到 LED 闪烁每秒打开和关闭两次(由于暂停命令,它每 250 毫秒更改一次状态)。该程序将使用9伏电池运行数周。您可以通过缩短 LED 亮起的时间(可能亮起 50 毫秒,熄灭 450 毫秒)以及使用 NAP 指令而不是暂停来节省电量。
创建一个非常昂贵的数字时钟

花费 79 美元来刷新一个 发光二极管 对你来说可能看起来很奢 侈。您可能想做的是用您的 BASIC 印章创建一些有用的东西。通过多花大约 100 美元,您可以创建一个非常漂亮的数字时钟!这似乎 非常 奢 侈,直到您意识到这些零件可以在您以后可能想要构建的各种其他项目中重复使用。
假设我们想使用 BASIC 标记上的 I/O 引脚来显示数值。在 数字时钟文章,我们看到了如何使用 7447 芯片连接到 7 段 LED 显示屏。7447 与 BASIC 印章配合使用同样出色。您可以将四个 I/O 引脚直接连接到 7447,并轻松显示 0 到 9 之间的数字。由于 BS-1 Stamp 有 8 个 I/O 引脚,因此像这样直接驱动两架 7447 很容易。
对于时钟,我们至少需要四位数字。要用八个 I/O 引脚驱动四个 7447,我们必须稍微更有创意。下图显示了一种方法:
在此图中,图章中的 8 条 I/O 线从左侧进入。这种方法使用四条线路连接到所有四条 7447。然后,Stamp 中的其他四条线按顺序激活 7447(芯片上的“E”表示“启用”——在 7447 上,这将是引脚 5 上的消隐输入)。为了使这种安排起作用,Stamp中的BASIC程序将输出四条数据线上的第一个数字,并通过将其E引脚与第一条控制线切换来激活第一个7447。然后它会发送第二个数字的值并激活第二个 7447,像这样重复对所有四个 7447 进行排序。通过稍微不同的接线方式,您实际上可以只用一个 7447 来做到这一点。通过使用 74154 解复用器芯片和一些驱动程序,您可以使用此方法驱动多达 16 位数字。
事实上,这是控制LED显示屏的标准方法。例如,如果您有一个旧的 LED 计算器,请在观看显示屏时将其打开并摇晃。您实际上将能够看到一次只有一个数字被照亮。该方法称为 多路复用 显示。
虽然这种方法适用于时钟和计算器,但它有两个重要问题:
LED 消耗大量功率。
7 段 LED 只能显示数值。
另一种方法是使用 液晶屏.事实证明,LCD广泛可用,可以很容易地挂在邮票上。例如,下面显示的两行乘 16 个字符的字母数字显示可从 贾梅科 (部件号 150990)和 视差 (部件号 27910)。此处显示了安装在试验板上的典型显示器,以便于接口:

这种LCD有几个优点:
显示器可由单个 I/O 引脚驱动。显示屏包含允许图章与其通信的逻辑 串行,因此只需要一个 I/O 引脚。此外,Stamp BASIC中的SEROUT命令可以轻松处理串行通信,因此与显示器的通信很简单。
LCD可以显示字母数字文本:字母,数字甚至自定义字符。
LCD消耗的功率非常小 - 只有3毫安。
唯一的问题是其中一个显示器售价59美元。显然,您不会将其中一个嵌入到 烤面包机烤箱.但是,如果您正在设计烤面包机烤箱,您可能会使用这些显示器之一进行原型设计,然后创建自定义芯片和软件以驱动最终产品中更便宜的LCD。
要驱动这样的显示器,您只需为其提供 +5 伏电压和接地(Stamp 均由 9 伏电池供电),然后将 Stamp 中的一个 I/O 引脚连接到显示器的输入线。我发现将 Stamp 的 I/O 引脚连接到 LCD 等设备的最简单方法是使用绕线工具(贾梅科 部件号 34577)和 30 号绕线(Jameco 部件号 22541 是典型值)。这样,不涉及焊接,连接紧凑可靠。
以下 BASIC 程序将使 BASIC 标记的行为类似于时钟,并在 LCD 上输出时间(假设 LCD 连接到标记上的 I/O 引脚 0):
暂停 1000'等待 LCD 显示屏启动
Serout 0, N2400, (254, 1) '清除显示屏
Serout 0, n2400, (“time:”) 'Paint “time:” 在显示屏上
'加载程序前预设
b0 = 0 '秒
b1 = 27 分钟
b2 = 6 '小时
再:
b0 = b0 + 1'增量秒
如果 B0 < 60,则分钟
b0 = 0'如果秒=60
b1 = b1 + 1 ' 然后递增分钟数
纪要:
如果 B1 < 60 则小时数
b1 = 0'如果分钟=60
b2 = b2 + 1 ' 然后递增小时数
小时:
如果 B2 < 13,则显示
b2 = 1'如果小时数=13 重置为 1
显示:
Serout 0, N2400, (254, 135) '显示位置光标,
'然后显示时间
Serout 0, N2400, (#b2, “:”, #b1, “:”, #b0, “ ”)
暂停 950 '暂停 950 毫秒
再次转到“重复”
在此程序中,SEROUT 命令将数据发送到 LCD。序列 (254, 1) 清除 LCD(254 是转义字符,1 是清除屏幕的命令)。序列 (254, 135) 定位光标。另外两个 SEROUT 命令只是将文本字符串发送到显示器。
这种方法将创建一个相当准确的时钟。通过调整 PAUSE 语句,您可以将准确性提高到每天几秒钟内。显然,在实际时钟中,您希望连接一两个按钮以使其更容易设置-在此程序中,您在将程序下载到Stamp之前预设了时间。

怀表B模块
虽然这种方法简单且有效,但它并不是非常准确。如果您想要更好的精度,一个好方法是连接 实时时钟芯片 直到您的印章。然后,每隔一秒左右,您就可以从芯片中读取时间并显示它。实时时钟芯片使用 石英晶体 以提供出色的准确性。时钟芯片通常还包含日期信息和句柄 闰年 自动更正。
将实时时钟连接到图章的一种简单方法是使用称为 怀表 B.
怀表B可从两者购买 贾梅科 (部件号 145630)和 视差 (部件号 27962)。该器件大约四分之一那么大,包含时钟芯片、晶体和串行接口,因此只需要一个 I/O 引脚即可与之通信。这个组件的成本约为30美元 - 同样,不是你想嵌入烤面包机烤箱的东西,但在构建原型时很容易玩。
构建数字温度计

现在您对印章和LCD有了一点了解,我们可以添加另一个组件并创建一个数字温度计。为了创建温度计,我们将使用一种称为DS1620的芯片。该芯片包含:
一个 温度传感装置
一 模数 (A/D) 转换器 用于温度传感装置
一个 移位寄存器 从 A/D 转换器读取数据
一点儿 电丙胺 (电可擦除可编程只读存储器)以记住设置
DS1620有两种模式:一种模式用作独立的恒温器芯片,另一种模式将其连接到计算机并用作 温度计.EEPROM记住恒温器的电流模式和设定温度。
将DS1620连接到印章非常容易。DS1620采用8引脚芯片。从印章向DS1620引脚8提供+5伏电压。DS1620引脚4的电源接地。然后使用印章中的三个I/O引脚驱动DS1620上的三个引脚:
DS1620上的引脚1是数据引脚。在此引脚上读取和写入数据位。
DS1620上的引脚2是时钟引脚。使用此引脚对移位寄存器中的数据进行时钟输入和输出。
DS1620上的引脚3为复位/选择引脚。将引脚 3 设置为高以选择芯片并与之通信。
对于此示例代码,假定:
数据引脚转到标记上的 I/O 引脚 2。
时钟引脚转到印章上的 I/O 引脚 1。
复位/选择引脚转到标记上的 I/O 引脚 0。
完成的接线如下所示:
您可以从以下任一位置获得DS1620 贾梅科 (部件号 146456) 或 视差 (部件号 27917)在“应用套件”中,其中包括芯片、电容器、一些良好的文档和示例代码。或者您可以从以下位置自行购买芯片 贾梅科 (部件号 114382)。我建议在第一次尝试使用DS1620时购买应用套件,因为文档非常有用。
您可以将DS1620组装在Stamp载板的原型区域或单独的试验板上。组装完成后,将LCD显示器挂接到印章的I / O引脚3,然后加载并运行以下程序:
符号 RST = 0 ' 1620 上的选择/重置线
符号 CLK = 1 ' 时钟线,用于 1620 上的移位寄存器
符号 DQ = 2 ' 数据线 1620
符号 DQ_PIN = DQ 的引脚 2 ' 引脚表示
符号 LCD = 3' LCD 数据线
开始:
低 RST ' 取消选择 1620,除非与之交谈
1620 上的高 CLK ' 时钟引脚应默认为高电平
暂停1000' 等待温度计和液晶屏启动
设置:
高 RST ' 选择 1620
b0 = $0C ' $0c 是 1620 命令字节
' 说“写入配置”
gosub shift_out ' 发送到 1620
b0 = %10 ' %10 是 1620 命令字节
' 设置温度计模式
gosub shift_out ' 发送到 1620
低 RST ' 取消选择 1620
暂停 50' 延迟 50ms 对于 EEPROM
start_convert:
b0 = $EE ' $EE 是 1620 命令字节
' 开始转换
高 RST ' 选择 1620
gosub shift_out ' 发送到 1620
低 RST ' 取消选择 1620
' 这是主循环
' - 每秒读取并显示温度
main_loop:
高 RST ' 选择 1620
b0 = $AA ' $AA 是 1620 命令字节
' 用于读取温度
gosub shift_out ' 发送到 1620
gosub shift_in ' 读取温度
'从 1620 年
低RST'取消选择DS1620。
gosub display'以摄氏度为单位显示温度
暂停 1000 ' 等待一秒钟
转到main_loop
' shift_out子例程发送任何内容
' 1620 的 B0 字节
shift_out:
输出 DQ ' 将 DQ 引脚设置为
' 输出模式
对于 b2 = 1 到 8
低 CLK ' 准备为位计时
'进入1620年
DQ_PIN = bit0 ' 发送数据位
高CLK'锁存数据位进入1620
b0 = b0/2 ' 向右移动所有位
' 朝向位 0
下一个
返回
' shift_in子例程得到一个 9 位
' 温度从 1620
shift_in:
输入 DQ ' 将 DQ 引脚设置为
' 输入模式
w0 = 0 ' 清除 w0
对于 B5 = 1 到 9
w0 = w0/2 ' 向右移位输入。
低 CLK ' 询问 1620 以获取下一个位
bit8 = DQ_PIN ' 读取位
高电平 CLK ' 切换时钟引脚
下一个
返回
' 以摄氏度为单位显示温度
显示:
如果 bit8 = 0,则 pos ' 如果 bit8=1
' 则温度为负数
b0 = b0 &/ b0 ' 通过 NAND 反转 b0
' 与自身
b0 = b0 + 1
位置:
液晶屏,N2400,(254,1)' 清除液晶屏
锯齿 LCD, n2400, (“温度 = ”) ' 显示 “温度=”
' 在显示屏上
bit9 = bit0 ' 保存半度
b0 = b0 / 2 ' 转换为度数
如果 bit8 = 1,则 neg ' 查看温度是否为负数
显示器液晶显示器,N2400,(#b0)显示正温度
转到一半
负:
锯齿液晶屏,n2400,(“-”,#b0)' 显示负温度
半:
如果 bit9 = 0,则偶数
锯齿液晶屏,n2400,(“.5 C”)' 显示半度
转到完成
甚至:
锯齿液晶屏,n2400,(“.0 C”)' 显示半度
做:
返回
如果运行此程序,您会发现它以半度的精度显示摄氏温度。
DS1620测量温度,单位为摄氏半度。它以 9 位 2s 补码数返回温度,范围为 -110 至 250 F(-55 至 125 C)。将收到的数字除以 2 得到实际温度。 2s补码二进制数 是一种方便的表示方式 负值.以下列表显示了 4 位 2s 补码编号的值:
0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 : -1
1110 : -2
1101 : -3
1100 : -4
1011 : -5
1010 : -6
1001 : -7
1000 : -8
您可以看到,2s 补码数中的 4 位表示值 -8 到 7,而不是 4 位表示 0 到 15 之间的值。您可以查看最左侧的位以确定该数字是负数还是正数。如果数字为负数,则可以反转位并加 1 以获得数字的正表示。
以下是此处显示的数字温度计程序的情况:
它使用 象征 关键字来设置几个常量,使程序稍微更易于阅读(并且还使您可以轻松地将芯片移动到印章上的不同I / O引脚)。
它将DS1620上的CLK和RST引脚设置为预期值。
它向DS1620上的EEPROM写入一个命令字节,告诉芯片在“温度计模式”下工作。 由于该模式存储在EEPROM中,因此您只需执行一次,因此从技术上讲,您可以在运行程序一次后将这部分代码从程序中取出(以节省程序空间)。
程序发送命令 $EE (“$”表示“十六进制数” - $EE十进制为238)告诉温度计启动其转换过程。
然后程序进入 圈.每秒向DS1620发送一条命令,告诉DS1620返回当前温度,然后将DS1620返回的9位值读取到w0变量中。通过切换DS1620上的CLK线,Stamp一次发送和接收1位数据。请记住,w0(16位)变量覆盖b0/b1(8位)变量,b0/b1(8位)变量覆盖bit0/bit1/.../bit15(1位)变量,因此,当您将DS1620中的一个位插入第8位并将w0除以2时,您所做的是将每个位向右移动,以将DS1620的9位温度存储到w0中。将温度保存为 w0 后,显示子例程将确定该数字是正数还是负数,并将其作为摄氏度温度在 LCD 上适当地显示。从摄氏度到华氏度的转换是:
dF = dC * 9/5 + 32
在这一点上,我们已经成功地创造了一种极其昂贵的温度计。你会用它做什么?这里有一个想法。假设您在一家制药公司工作,并且您正在全国各地运送昂贵的药物,这些药物必须始终保持在一定温度下,否则药物会变质。您可以使用图章做什么是创建一个 数据记录温度计.双 贾梅科 (部件号 143811) 和 视差 (部件号 27960) 销售一种名为“RAM 包模块”的设备。 它包含一个带串行接口的低功耗 8 KB(或可选的 32 KB)RAM 芯片。您可以将此组件(或类似内容)添加到 Stamp 中,并编写每分钟将温度读数保存到 RAM 的代码。然后,您可以将邮票放入毒品运输中,并在旅行的另一端取回邮票。RAM模块将包含整个行程的温度历史记录,您将知道药物是否解冻。
有各种像这样的整洁、有用的设备,现在你知道微控制器是如何工作的,你可以用 Stamp 构建!
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。