第一章 MSP 430G2系列单片机概述(0-10)

Size: px
Start display at page:

Download "第一章 MSP 430G2系列单片机概述(0-10)"

Transcription

1 MSP-EXP430Launchpad 实验指南 前言 MSP430G 系列是德州仪器近期推出的一款产品, 在秉承 MSP430 超低功耗, 高集成度的优点的同时, 具有高性价比的特点 该系列被称为 ValueLine, 旨在以 8 位单片机的价格实现 6 位单片机的性能 MSP-EXP430Launchpad 是 TI 推出的又一套用于 MSP430 和电路实验的开发板 在该套不到名片大小的开发板上集成了一片超低功耗 6 位 MSP430 单片机, USB 口仿真器电路以及各引脚接口等 利用 LaunchPad 开发板, 仅需一台笔记本电脑, 就可以在基于图形界面的编程软件 CCS 上进行嵌入式软硬件系统的开发和调试, 真正做到将实验室装进口袋里, 让使用者可以随时随地, 不受场地和设备的限制进行 430 的开发工作 除了学生自主创新实践外,LaunchPad 开发板还可以用于本科低年级课程, 如嵌入式 C 语言, 电子技术基础, 微机原理, 单片机等课程的自主实验环节以及课程设计 该套开发板为单片机热爱者提供了一个很好的学习平台 该实验指导书在 Launchpad 的基础上进行了功能模块的扩展, 以期更好地进行实验教学和学习 本书共有六章, 分为两大部分 第一部分为第 章至第 3 章, 对 MSP430G 系列单片机的外设进行介绍,CCSv5. 的安装和使用, 同时给出了几个基于 Launchpad 的实际开发案例 第二部分为第 4 章至第 6 章, 对一体化实验系统以及各扩展模块的硬件电路进行了详细的介绍, 在此基础上通过六个基础实验以及六个综合实验帮助读者更好地理解和掌握 430 的开发和应用 由于时间和篇幅的原因, 本书中第三章关于微控制器外设寄存器的更为详细的描述没有 在此书中涉及, 但包含在随书光盘的电子文档中, 供有需要的读者阅读和参考 该实验指导书 程序和相关教学材料由西安电子科技大学 MSP430 联合实验室赵建老师和 TI 单片机大学计划黄争经理共同策划和审阅, 在编写过程中, 联合实验室老师和同学付出了辛勤的劳动, 在此表示衷心的感谢 此外, 也感谢 TI 大学计划部崔萌和王沁工程师对全书进行的修改, 整理和完善工作 由于时间和水平有限, 书中可能存在错误和不妥之处, 敬请广大读者批评指正 西安电子科技大学 MSP430 实验室 0 年 0 月

2 目录 MSP-EXP430Launchpad 实验指南... 前言... 第一章 MSP430G 系列单片机... 6 第一节 MSP430 系列单片机概述 MSP430 系列单片机及低功耗特性 MSP430 单片机的其他特点... 7 第二节 LaunchPad Launch!... 9 第三节 MSP43OG 系列单片机的应用与开发 多路电源开关 风速测试仪 窗帘电机控制器 数字频率计 自行车里程表... 3 第二章 CCS 快速上手... 4 第一节 CCS 简介... 4 功能总览... 4 第二节 CCS 的使用 CCS 的安装... 6 第三节 CCS 的调试 利用 CCSv5. 导入已有工程 利用 CCSv5. 新建工程... 第三章 MSP43OG 系列单片机硬件资源应用技术... 4 第一节时钟与休眠模式 时钟系统简介 时钟系统的操作 基本时钟模块特性 VLO 时钟 LFX 时钟 XT 晶振 DCO 调整 DCO 的频率 运用外部电阻 Rosc 调整 DCO 的值 DCO 调制器 基本时钟系统的错误检测 从外部晶振获取 MCLK 基本寄存器表 第二节通用 IO 口 IO 口... 50

3 3.. IO 寄存器 IO 口中断 线与逻辑 兼容性... 5 第三节 0 位 ADC ADC0 的特点 ADC0 转换模式 ADC0 寄存器 内部温度传感器 第四节 6 位定时 / 计数器 Timer_A 定时 / 计数器的主计数器模块结构和原理 Timer_A 定时 / 计数器比较模块 Timer_A 捕获模块 Timer_A 定时器中断 第五节 FLASH 控制器 Flash 存储介绍 Flash 存储器的分段 Flash 的操作 Flash 寄存器 第六节通信接口 (USCI 和 USART) 串行同步和串行异步通信原理的简述 USCI 模块的相关寄存器定义 USART 的相关寄存器定义 USCI 模块初始化和收发操作步骤流程 USART 模块的初始化和收发操作步骤流程... 第七节比较器 A 比较器 A+ 的介绍 比较器 A+ 的操作 比较器 A+ 寄存器... 3 第八节 Grace 软件技术 创建 Grace 工程 使用 Grace 配置 I/O 口及外设 第九节 MSP43OG 系列单片机调试接口 JTAG 和 SBW JTAG 简介 JTAG 接口 SBW 接口 第十节触摸按键 电阻式按键 电容式按键 第四章 MSP43OG 系列单片机一体化实验系统 实验系统标准版结构结构组成 实验系统标准版使用对象和使用特点 第二节 MSP43OG 系列单片机一体化实验系统简化板 第三节实验模块配置

4 4.3. 模拟滤波器实验功能模块 程控放大器实验功能模块 晶体管特性测试模块 光照度检测实验功能模块 三种温度测量模块 矩阵键盘及数码管实验模块 触控 RGBLED 模块 频率计及 D/A 转换模块 三种通信接口模块 声音强度检测模块 第五章 MSP430G 系列单片机基础实验... 第一节 I/O 基础实验 矩阵键盘按键扫描实验 控制数码管显示数字实验 按键扫描并控制数码管显示键值实验 点阵 LCD 显示器控制实验 触摸按键实验 RGBLED 触控实验... 5 第二节 AD 转换基础实验 输入电压检测实验 光照度检测实验 Pt00 温度测量实验 声音强度检测实验 第三节 D/A 转换基础实验 D/A 转换器件实现电压输出实验 PWM 实现电压输出实验 第四节定时 / 计数器基础实验 定时信号产生实验 信号频率测量实验 模拟滤波器实验 第五节通信接口基础实验 SPI 接口基础实验 程控放大器实验 RS-3 接口通信实验 (UART 接口 ) RS-485 接口通信实验 (UART 接口 ) :8B0 温度测量 ( 单总线 )... 7 第六章 MSP430G 系列单片机应用实践 第一节用三种温度传感器实现的温度巡检 / 控制器 目的与要求 电路设计和系统连接 信号与数据处理 软件设计与调试 总结与扩展 第二节键盘输入控制的程控放大器

5 6.. 目的与要求 电路设计与系统连接 软件设计与调试 总结与扩展 第三节声音强度检测仪 声音强度采样方法 声音强度数据处理 光照度检测模块程序设计... 9 第四节 RS-3 接口与 PC 机通信 目的与要求 电路设计与系统连接 软件设计与调试 第五节 RS-485 接口多机通信 目的与要求 电路设计与系统连接 软件设计与调试 第六节 PS 接口键盘输入与 LCD 显示 目的与要求 电路设计与系统连接 信号与数据处理 软件设计与调试 总结与扩展

6 第一章 MSP430G 系列单片机 第一节 MSP430 系列单片机概述 本章主要内容包括 MSP430G 系列单片机的特点性能介绍,launchpad 评估板资源的使 用方法介绍及单片机入门的一些基础知识, 其中单片机入门知识有关软件的部分希望能够引 起读者们的注意, 因为目前就单片机开发而言, 硬件方案 IC 制造商总是能够提出多样 成 套的解决方案, 而工程师在整合方案之余, 绝大部分精力都投入到了编程之中, 故而在学习 单片机之初养成良好地编程习惯, 不失为是工程师之路的一个良好地开端.. MSP430 系列单片机及低功耗特性如今的单片机已经不再是二十年前所谓的 SCM, 而是从 MCU 向 SOC 转型中间期的一个时 代, 在开始本章节正是内容之前, 不妨先解释一下上述提到的几个英文缩写 : SCM: 单片微型计算机 (Single Chip Microcomputer), 主要是寻求最佳的单片形态嵌 入式系统的最佳体系结构 Intel 公司的 803 就是这个缩写的代名词 MCU: 微控制器 (Micro Controller Unit), 主要的技术发展方向是 : 不断扩展满足嵌 入式应用时, 对象系统要求的各种外围电路与接口电路, 突显其对象的智能化控制能力 它 所涉及的领域都与对象系统相关,Philips 公司是最早提出并将这种概念付诸实践的 SOC: 嵌入式系统 System on Chip) 即寻求应用系统在芯片上的最大化解决, 尤其是对 于便携式 轻量小型化的手持设备, 对单片集成系统的需求更是强烈 每当工程师们讨论到 手持设备,MSP430 系列单片机总是第一个被提上议程 MSP430(Mixed Signal Processor 混合信号处理器 ) 系列最为夺目的亮点之一就是超 低功耗运行, 这一硬件上的特点甚至带来另一种以中断为主的编程模式 ( 第三节中详细讨 论 ) 关于 MSP430 系列单片机到底有多省电, 可以做如下一个实验 : 实验器材 : 橘子一个 锌电极三支 (Zn, 可以把废旧的锌锰干电池外皮剪下压平 ) 铜电 极三支 (Cu, 可以用铜制钥匙充当 ) 导线若干, 内带秒表程序 MSP430+ 段码液晶小系统 实验步骤 :. 制作原电池 将橘子切成三块, 分别在果肉两侧插入锌铜两个电极, 锌为负端, 铜 为正端 再用导线将三个原电池串联, 固定牢靠后用万用表测量电池电压 实测数据每个水果电池电压约为 0.8V, 三个串联达.4V, 虽然距离 MSP430 单片机标准 供电电压 3.3V 还有很大差距, 但是在这些条件下 MSP430 单片机运行是绰绰有余的. 将 MSP430 单片机系统的 VCC GND 分别和水果电池组的正负极连接, 观察段码液晶是 否可以受到单片机的正常控制 水果原电池能提供的电流十分有限, 短路实测最大电流不足 00uA, 而 MSP430 单片机运 行秒表程序功耗仅仅不足 ua, 段码液晶约 3uA, 系统总功耗 5uA 对于这个橘子而言, 给 MSP430 单片机供电实在是屈才了 3. 将该实验装置放在通风良好, 温度 0 摄氏度的环境下, 每天三次记录单片机系统的 运行状态, 检测系统能够维持的时间 经实验, 只要水果没有腐烂变质或者风干 ( 可以适当补充水分 ), 该系统能坚持一个月 以上 当液晶上的显示变得模糊不清时, 立刻换上新的电源, 系统立刻重获新生, 这时品尝 橘子, 几乎没什么酸味了 5uA 到底是个什么概念呢, 举一个更直接的例子, 常用的 CR03 纽扣电池, 可以为这个系统提供 5 年以上的续航能力 如此种卓越的超低功耗特性, 自然给 MSP430 单片机开拓了广阔的应用空间 : 第一, 正如前文所说,MSP430 单片机就是为了便携式设备而量身打造的 随着技术的 6

7 日新月异, 便携式设备不断的向小型化 轻量化 高精度 多功能化的方向发展, 在集成度 电池尺寸 设备大小的限制下, 还对处理器运算能力和片上资源有了更高的要求 MSP430 单片机强大 CPU(6 位处理器, 每秒处理指令最高 5 兆 ) 和片上丰富的接口电路和模拟电路资源, 可以实现模拟数字信号混合处理, 大部分设计 单芯片 完成, 大幅提高集成度和生产效率的同时有效的控制了成本 第二, 超低功耗的特定使得产品电池寿命终身化这个命题得以实现 按照电子产品预期使用寿命 5~8 年计算, 电池设计寿命 8~0 年, 如果产品耗电量足够低的话, 一款产品终生只用配上一块电池, 无需充电和更换 这样一方面减少了用户的麻烦, 另一发明设计和制造的成本也降了下来 例如一款基于 MSP430 单片机的野外气象观测的传感器节点, 可以连续工作数年不更换电池, 直至产品寿命终结 第三,MSP430 单片机低功耗还体现在另一方面, 即十分微弱的能量, 也能够驱动 MSP430 单片机工作, 在.8V 以上的电压下 CPU 都可以正常工作, 最新系列的 MSP430 单片机甚至可以把这个数值再降低几乎一半至.V 这样很多间接电能也能直接给 MSP430 单片机供电, 如小块太阳能电池 信号线自取点 温差能 电缆上磁场能 人体机械运动震动的能量 酸碱性溶液中的能量等等 基于这种间接电能设计的无源设备产品, 也是符合当前低碳环保设计理念的新方向 日本最近研制了一种尿液检查卡片, 就是以尿液作为电解质发电, 驱动低功耗系统进行尿液样本分析 TI 新品发布会上,Scott Roller 用 无人能及, 实实在在 八个字来形容 430 系列产品, 并将 独特的超低漏电工艺技术 和 MSP430 单片机超低功耗系统理念 MSP430 Ware 软件列为 MSP430 单片机系列 实现超低功耗的三大独门秘籍 对于单片机开发人员而言, 芯片内部工艺或许与设计不是那么相关, 但是 MSP430 单片机低功耗系统在软件方面的操作就至关重要了, 因为即使 CPU 能够以极低的功耗执行指令, 而程序总是做一些冗余的动作, 那样进行下来, 还是会有很多功耗白白浪费, 那么 MSP430 为软件上控制低功耗又提供了那些可能呢? 首先,MSP430 单片机建立的时钟系统概念, 使得 CPU 片上模块 休眠唤醒三者时钟彼此独立 总众所周知, 时钟频率的高低是决定系统功耗的一个重要因素, 但是不同模块的运行速度各不相同,CPU 的繁忙程度也并非总是很高, 这就造成低速时钟无法满足需求, 高速时钟又会带来功率浪费的尴尬局面 MSP430 单片机时钟系统提供了三种时钟, 通过软件寄存器设置, 不同时钟可以分别开启关闭, 可以分别设置倍频分频系数, 为各种模块和 CPU 提供多样的选择 基于这样的时钟系统,MSP430 单片机可以实现不同深度的系统休眠, 如此梯度化的休眠方式, 让整个系统以间歇工作的方式, 最大限度的节约能量 其次,MSP430 单片机采用模块化设计, 在使用时每个模块都可以由软件单独开启关闭, 用到某一模块时打开它, 任务完毕之后关闭它, 这样也能节省不少的电能 这样的设计还有诸多其他好处, 每一种模块都具有独立完整的结构, 在不同型号单片机中, 同款模块的功能结构使用方法都是完全一样的 同一家族不同型号的 MSP430 单片机, 实际上就是不同功能模块的组合 这样的设计, 对于学习者而言, 使得 MSP430 单片机学习一通百通, 对研发者而言, 更换更高级的 MSP430 单片机芯片时, 程序移植得心应手 此外, 对于新手而言, 如何在保证程序稳定性 健壮性的前提下提高程序执行效率 删除冗余语句, 还是一个遥不可及要求 TI 公司就专门组织了老练的程序工程师编写了程序库 MSP430 ware,msp ware 中囊括了几乎所有模块的所有功能函数和海量的例程, 把工程师从底层繁琐的代码编写工作中解放了出来, 同时还保证了底层函数的效率和稳定.. MSP430 单片机的其他特点除了超低功耗这一突出优势外,MSP430 系列单片机还有不少其他不俗的表现 : 7

8 . MSP430 单片机内核采用 6 位 RISC(reduced instruction set computer, 精简指令集计算机 ) 处理器, 单指令周期, 运算能力和速度优势明显, 某些型号的 MSP430 单片机内部带有硬件乘法器, 在 DMA 控制器的配合下, 性能堪比 DSP(Digital Signal Processing, 数字信号处理, 一种专精于复杂信号运算的智能器件 ). MSP430 单片机采用冯诺依曼结构, 寄存器和数据段 ( 即 RAM) 与代码段 ( 即 ROM, FLASH 或 FRAM) 统一编制 这样代码在 RAM 里同样可以运行, 每款 MSP430 单片机都有 FLASH ( 或 FRAM) 控制器, 通过它可以对 ROM 的区的代码进行擦写 这种机制可以很方便的实现设备在线升级功能, 无需重新烧写程序, 固件更新时单片机仍处正常工作状态 ( 在第三章中详细讨论 ) 3. MSP430 单片机属于工业级芯片, 能够在 -40~85 摄氏度的范围内工作, 并且带有 PWM 发生器等控制输出 适合各类工业测量 工业控制 电机控制等领域 4. MSP430 单片机作为混合信号处理器, 模拟设备也是一大特色, 运算放大器 比较器 ADC DAC 应有尽有 以 ADC 为例, 有高速的 ADC0 ADC; 有高精度的 SD6 SD4; 还有低成本的 SLOPE, 可以满足各式各样的测试任务 5. MSP430 单片机具有多种通信接口, 涵盖 UART IC SPI USI 等等,5 系列单片机还带有 USB 控制器 射频控制器 Zigbee 控制器 适用于各种协议下的数据中继器 转发器 转换器的应用中 6. TI 公司实力雄厚,MSP430 单片机系列产品生命力旺盛, 自 996 年问世以来每年都有新的型号推出, 更新 更强 更省电的单片机不断的推出 0 年六又推出了新款的 金刚狼 系列, 再度挑战低功耗极限 8

9 第二节 LaunchPad Launch! 前言所述, 主要谈到 MSP430 系列单片机在超低功耗领域傲人的优势, 具体谈到 MSP430G 系列单片机, 其核心竞争力在于超高性价比 G 系列又称 超值系列, 那么它的超值到底体现在哪些方面呢? 首先,G 系列单片机的售价低,G 全系列单片机共有 44 款, 根据片上资源的丰富程度价格由低到高, 最低价格 0.34 美元, 配置最全的 553 也仅售 0.99 美元, 这样的价位在单片机范围内可以算是物美价廉了 G 系列单片机虽然价格不高, 但不等于它的功能不强,G 系列单片机作为 MSP430 系列中的一员拥有大部分 MSP430 单片机片上外围模块 : 6MHz 主频 6 位 CPU 片上程序存储器 FLASH(5B/KB/KB/4KB/8KB/6KB) 及 FLASH 控制器 片上随机存储器 SRAM(8B/56B/5B) 通用并行输入输出端口 GPIO(4 位 /6 位 /0 位 /4 位 ) 支持电容触摸式 I/O 看门狗定时器 WDT 上电复位模块 BOR 多功能通信模块 USI(IC/SPI)USIC_A(UART/LIN/IrDA/SPI) USIC_B(IC&SPI) 比较器模块 Comparator A+ 片内温度传感器 Temp Sensor 十位逐次逼近型 ADC0 斜率型 slope ADC 板载着一颗 MSP430G 单片机的 launchpad 评估实验开发板除了上述片上资源外, 板上还有诸多额外的硬件资源 : 图.. MSP430launchpad 实物图 板载 USB 调试与编程仿真器接口, 无驱动可安装 支持所有采用 DIP4 和 DIP0 封装 MSP430GXX 和 MSP430F0 器件 9

10 红绿两粒 LED, 两个按键 配套两款电容触摸板 所有管脚在板子两边引出这其中最吸引人的当然要数板载 USB 仿真器了, 从事 MSP430 单片机的朋友无一抱怨 MSP430 单片机的仿真器价格过高, 一只 TI 官方认证的仿真器动辄上千元, 而仿制的仿真器也要三百至四百元, 顶着侵权的罪名同时还有时刻仿真器死机的风险 现在有了 launchapad,usb 仿真器即插即用, 一根 USB 线, 等待 30 秒, 系统搞定驱动 这无疑是 MSP430 单片机开发者的福音, 扫清了开发者道路上的羁绊 这么好用的一块开发板得多少钱呢? 现在 TI 正在 MSP430G 系列单片机推广期, 一块 launchpad 开发板仅售 4.30 美元, 折合人民币不到 30 元, 此外 TI 和国内各大高校和各大电子技术论坛都有合作, 还有不少机会可以免费获得 launchpad 0

11 第三节 MSP43OG 系列单片机的应用与开发 MSP430G 系列单片机在各类学生科技实践中已经有了一定的影响, 现简单展示几个 MSP430G 系列单片机在科技活动中的应用成果, 这些实例会在本后后面几个章节展开介绍.3. 多路电源开关 图.3. 继电器控制器实物图该作品特点 : MSP430G3 为主控芯片 四路继电器相互隔离 四个按键控制继电器开闭 继电器开闭情况由 LED 显示继电器是小电流控制大电流的常见器件, 作为小电流控者, 单片机是一个常见的角色, 各式各样的大功率用电器往往扮演被控者 这样的一种应用本身十分简单, 无非就是起到一个开关功能, 但是提供了一个基本的模块, 拓展后有广泛的空间, 如应用在家居环境, 单片机可以控制冰箱 风扇 洗衣机的电源, 用作工业环境单片机可以控制风机 电炉 传送带, 用作农业可以控制进料通道 畜栏开闭.3. 风速测试仪 该作品特点 : 图.3. 风速测试仪实物图

12 MSP430G 为主控芯片 驱动一个电源风扇 调理转速信号为 PWM 波 以脉冲计数方式测量风扇转速 风扇转速显示在 LCD 上风冷系统是较水冷 气冷 氮冷几种主流冷却系统中性价比最高的冷却方式, 是现在大多数电子设备散热的首选, 该作品根据风扇自身的转速反馈信号测算出风扇的实际转速, 若能再结合温度检测模块, 则可构成一个完整的散热系统.3.3 窗帘电机控制器 图.3.3 窗帘电机控制器该作品特点 : MSP430G 位主控芯片 单片机驱动直流电机 手动按键控制和自动感光控制两种方式 自动感光模式下光线强时自动关闭窗帘智能家居概念提出至今, 各式各样的家居智能产品在技术上已没有什么难题, 核心障碍是如何做到人性化, 如何想用户之所想, 代用户之所劳, 而家用窗帘控制器就解决的很多想拉窗帘而懒于行动的人烦恼.3.4 数字频率计 该作品特点 : 图.3.4 频率计实物图

13 MSP430G3 位主控芯片 定时计数法测频率 兼容正弦波 三角波 锯齿波 矩形波 频率测量结果显示在 LCD 上频率是电学领域常见参数, 频率测量是测控领域的一个重要课题, 除了本作品这种定时测量方法外, 还有很多复杂精密的方案, 低频的频率测量只需要普通 IO 口就行了, 频率稍高的则要用到定时器或者其他分频方法, 目前频域测量的尖端已经触及太赫兹领域, 在普通人看来是一个不可能的数量级但是测控界确实已经做到了.3.5 自行车里程表 图.3.5 自行车里程表该作品特点 : MSP430G3 位主控芯片 定时计数法测计算车轮转速 LCD 显示当前速度 里程 手动复位里程计数 系统掉电数据不丢失户外运动一直也是这些年来人们业余活动的一个热点, 但是在人们尽情享受自行车越野带来的欢乐时, 安全却成了常常被户外运动新手忽视的一个关键, 而对于缺乏对外界地形 气候等户外经验的人来说, 带上一个电子助手是一个不错的选择, 当然这个助手除了能解决户外问题, 还得低功耗, 但是这对于 MSP430 单片机而言并非什么难事, 实际上就在 0 年 TI 杯全国 MCU&C000 大赛中, 西安电子科技大学的一个参赛队就以一部用 MSP430 单片机为核心, 具有谷歌地图定位, 记录海拔 时间 温湿度测量显示的 户外助手 作品, 获得了专业组特等奖 3

14 第二章 CCS 快速上手 第一节 CCS 简介 Code Composer Studio 是一种针对 TI 的 DSP 微控制器和应用处理器的集成开发环境 CCStudio 包括一套用于开发和调试嵌入式应用程序的工具 它包括用于各种 TI 设备系列的 编译器 源代码编辑器 项目生成环境 调试程序 探查器 模拟器和其他许多功能 CCStudio 提供一个单一用户界面, 指导用户完成应用程序开发流程的每一步骤 类似的工具和界面使 用户能够比以前更快地开始使用, 并且能够向他们的应用程序添加功能, 这些都归功于成熟 的生产能力工具 本章节着重讲解 CCS 的使用的基本方法和功能, 旨在与读者读完后能够快速上手, 开始 自己的 MSP430 单片机学习 练习之路, 当然这里提到的使用方法也同样适用与 DSP 等其他 CCS 支持的处理器 功能总览. 调试 CCStudio 的集成调试程序具有用于简化开发的众多功能和高级断点 条件断点或硬件 断点以全 C 表达式 本地变量或寄存器为基础 高级内存窗口允许您检查内存的每一级别, 以便您可以调试复杂的缓存一致性问题 CCStudio 支持复杂的多处理器或多核系统的开发 全局断点和同步操作提供了对多个处理器和多核的控制. 分析 CCStudio 的交互式探查器使快速测量代码性能并确保在调试和开发过程中目标资源的 高效使用变得更容易 探查器使开发人员能够轻松分析其应用程序中指令周期内或其他事件 内的所有 C/C++ 函数, 例如缓存未命中 / 命中率 管道隔栏和分支 分析范围可用于在优化 期间将精力集中在代码的高使用率方面, 帮助开发人员开发出经过优化的代码 分析可用于 任何组合的汇编 C++ 或 C 代码范围 为了提高生产能力, 所有分析设备在整个开发周期中 都可供使用 3. 脚本 某些任务, 例如测试, 需要运行数小时或数天而不需要用户交互 要完成此类任务,IDE 应能自动执行一些常见任务 CCStudio 拥有完整的脚本环境, 允许自动进行重复性任务, 例如测试和性能基准测试 一个单独的脚本控制台允许您在 IDE 内键入命令或执行脚本 图像分析和虚拟化 CCStudio 拥有许多图像分析及图形虚拟化功能 其中包括以图形方式在能够自动刷新 的屏幕上查看变量和数据的能力 CCStudio 还能以本机格式 (YUV RGB) 查看主机 PC 或在 目标电路板中加载的图像和视频数据 4. 编译器 TI 已经开发了专门为了最大程度地提高处理器的使用率和性能而优化的 C/ C ++ 编译 器 TI 编译器使用各种各样经典的 面向应用的 成熟的 因设备而异的优化, 专为所有 支持的结构而优化 其中部分优化包括 : 消除公共子表达式 ; 软件流水 ; 强度折减 ; 自动增量寻址 ; 基于成本的寄存器分配 ; 指令预测 ; 硬件循环 ; 函数内联 ; 矢量化 TI 编译器还执行程序级别优化, 在应用程序级别评估代码性能 通过程序级别视图, 编译器能够像具有完整系统视图的汇编程序开发人员一样生成代码 编译器充分利用此应用 程序级别视图, 找出能够显著提升处理器性能的折衷 TI ARM 和 Microcontroller C/C++ 编译器经过专门针对代码大小和控制代码效率的优 4

15 化 它们具备行业领先的性能和兼容性 5. 模拟模拟器向用户提供一种在能够使用开发板之前开始开发的方式 模拟器还具有更加透彻地了解应用程序性能和行为的优势 提供了几种模拟器, 让用户能够权衡周期精确性 速度和外围设备模拟, 一些模拟器特别适合算法基准测试, 而另一些特别适合更加详细的系统模拟 6. 仿真 TI 设备包含高级硬件调试功能 这些功能包括 : IEEE 49. (JTAG) 和边界扫描 ; 对寄存器和内存的非侵入式访问 ; 实时模式, 用于调试与不得禁用的中断进行交互的代码 实时模式允许您在中断事件挂起后台代码, 同时继续执行时间关键中断服务例程 ; 多核操作, 例如同步运行 步进和终止 其中包括跨核触发, 该功能可以让一个核触发另一个核终止 ; 高级事件触发 (AET), 可在选定设备上使用, 允许用户依据复杂事件或序列, 例如无效数据或程序内存访问, 终止 CPU 或触发其他事件 它能够以非侵入式方式测量性能及统计系统事件数量 ( 例如缓存事件 ); CCStudio 提供有关选定设备的处理器跟踪, 帮助客户发现以前 看不到的 复杂实时缺陷 跟踪能够探测很难发现的缺陷 - 事件之间的争用情况 间歇式实时干扰 堆栈溢出崩溃 失控代码和不停用处理器的误中断 跟踪是一种完全非侵入式调试方法, 依赖处理器内的调试单元, 因此不会干扰或更改应用程序的实时行为 跟踪可以微调复杂开关密集型多通道应用程序的代码性能和缓存优化 处理器跟踪支持程序 数据 计时和所选处理器与系统事件 / 中断的导出 可以将处理器跟踪导出到 XDS560 跟踪外部 JTAG 仿真器或选定设备上, 或导出到芯片缓存嵌入式跟踪缓存 (ETB) 上 7. 实时操作系统支持 CCS 具有两个版本的 TI 实时操作系统 : DSP/BIOS5.4x 是一种为 DSP 设备提供预清空多任务服务的实时操作系统 其服务包括 ISR 调度 软件中断 信号灯 消息 设备 I/O 内存管理和电源管理 此外,DSP/BIOS5.x 还包括调试诊断和加工, 包括低系统开销打印和统计数据收集 BIOS6.x 是一种高级可扩展实时操作系统, 支持 ARM96 ARM Cortex M3 C674x C64x+ C67x 和基于 8x 的设备 它提供 DSP/BIOS 5.x 没有的若干内核和调试增强, 包括更快 更灵活的内存管理 事件和优先级继承互斥体 注意 :BIOS6.x 包括 DSP/BIOS5.x 兼容层, 从而使应用程序源代码的迁移非常轻松 5

16 第二节 CCS 的使用.. CCS 的安装 () 运行下载的安装程序 ccs_setup_ exe, 当运行到如图.. 处时, 选 择 Custom 选项, 进入手动选择安装通道 图.. 安装过程 () 单击 Next 得到如图.. 所示的窗口, 为了安装快捷, 在此只选择支持 MSP430 Low Power MCUs 的选项 单击 Next, 保持默认配置, 继续安装 ( 如果需要作为 C8x 3-bit Real-time MCUS 或者其他处理器的集成开发环境, 则勾选相应的选项 ) 图.. 安装过程 6

17 图..3 软件安装中 图..4 软件安装完成 (3) 单击 Finish, 将运行 CCS, 弹出如图..5 所示窗口, 打开 我的电脑, 在某一磁盘下, 创建以下文件夹路径 :C:\MSP-EXP430G-Launchpad, 单击 Browse, 将工作区间链接到所建文件夹 CCS 首先要求的是定义一个工作区, 即用于保存开发过程中用到的所有元素 ( 项目和指向项目的链接, 可能还有源代码 ) 的目录 默认情况下, 会在 C:\Users\< 用户 >\Documents 或 C:\Documents and Settings\< 用户 >\My Documents 目录下创建工作区, 但可以任意选择其位置 每次执行 CCS 都会要求工作区目录 如果计划对所有项目使用一个目录, 只需选中 Use this as the default and do not ask again( 默认使用此目录且不再询问 ) 选项 以后随时可以在 CCS 中更改工作区 7

18 图..5 Workspace 选择窗口 (4) 单击 OK, 第一次运行 CCS 需进行软件许可的选择, 如图..6 所示 在此, 选择 CODE SIZE LIMITED(MSP430) 选项, 在该选项下, 对于 MSP430,CCS 免费开放 6KB 的程序空间 ; 若您有软件许可, 可以参考以下链接进行软件许可的认证 : 单击 Finish 即可进入 CCSv5. 软件开发集成环境, 如图..7 所示 图..6 软件许可选择窗口 8

19 图..7 CCSv5 软件开发集成环境界面 9

20 第三节 CCS 的调试.3. 利用 CCSv5. 导入已有工程 ( ) 首先打开 CCSv5. 并确定工作区间 C:\MSP-EXP430G-Launchpad, 选择 File-->Import 弹出图.3. 对话框, 展开 Code Composer Studio 选择 Existing CCS/CCE Eclipse Projects () 单击 Next 得到图.3. 对话框 图.3. 导入新的 CCSv5 工程文件 图.3. 选择导入工程目录 ( 3 ) 单击 Browse 选择需导入的工程所在目录, 在此, 我们选择 : 0

21 C:\MSP-EXP430G-Launchpad\MSP-EXP430G-Launchpad( 需在此之前, 将实验代码复制到 工作区间下 ), 得到图.3.3 图.3.3 选择导入工程 (4) 单击 Finish, 即可完成既有工程的导入 (5) 此外也可以通过 project-->import Exiting CCS/CCE Eclipse Project 导入已有工程, 如图.3.4 所示, 其他步骤与步骤 ()-(4) 相同 图.3.4 导入工程.3. 利用 CCSv5. 新建工程 () 首先打开 CCSv5. 并确定工作区间, 然后选择 File-->New-->CCS Project 弹出图.3.5 对话框

22 图.3.5 新建 CCS 工程对话框 () 在 Project name 中输入新建工程的名称, 在此输入 myccs (3) 在 Output type 中有两个选项 :Executable 和 Static library, 前者为构建一个完整的可执行程序, 后者为静态库 在此保留 :Executable (4) 在 Device 部分选择器件的型号 : 在此 Family 选择 MSP430;Variant 选择 MSP430Gxxxx family, 芯片选择 MSP430G0;Connection 保持默认 (5) 选择空工程, 然后单击 Finish 完成新工程的创建 (6) 创建的工程将显示在 Project Explorer 中, 如图.3.6 所示 图.3.6 初步创建的新工程

23 特别提示 : 若要新建或导入已有.h 或.c 文件, 步骤如下 : (7) 新建.h 文件 : 在工程名上右键点击, 选择 New-->Header File 得到图.3.7 对话框 图.3.7 新建.h 文件对话框 在 Header file 中输入头文件的名称, 注意必须以.h 结尾, 在此输入 myo.h (8) 新建.c 文件 : 在工程名上右键单击, 选择 New-->source file 得到图.3.8 对话框 图.3.8 新建.c 文件对话框 在 Source file 中输入 c 文件的名称, 注意必须以.c 结尾, 在此输入 my0.c (9) 导入已有.h 或.c 文件 : 在工程名上右键单击, 选择 Add Files 得到如.3.9 对话框 3

24 图.3.9 导入已有文件对话框 找到所需导入的文件位置, 单击打开, 得到图.3.0 对话框 图.3.0 添加或连接现有文件选择 Copy files, 单击 OK, 即可将已有文件导入到工程中 若已用其它编程软件 ( 例如 IAR), 完成了整个工程的开发, 该工程无法直接移植入 CCSv5, 但可以通过在 CCSv5 中新建工程, 并根据步骤 (7) (8) 和 (9) 新建或导入已有.h 和.c 文件, 从而完成整个工程的移植.3.3 利用 CCSv5. 调试工程.3.3. 创建目标配置文件 () 在开始调试之前, 有必要确认目标配置文件是否已经创建并配置正确 在此以实验一为例进行讲解 : 首先导入 Lauchpad 实验的工程, 导入步骤请参考.3. 节, 如图.3. 所示, 其中 MSP430G3.ccxml 目标配置文件已经正确创建, 即可以进行编译调试, 无需重新创建 ; 若目标配置文件未创建或创建错误, 则需进行创建 为了讲解目标配置文件创建过程, 在此对 LAB 的工程再次创建目标配置文件 4

25 G3 目标 配置文件 File 图.3. 导入工程目标配置文件 () 创建目标配置文件步骤如下 : 右键单击项目名称, 并选择 NEW --> Target Configuration 5

26 图.3. 创建新的目标 (3) 在 File name 中键入后缀为.ccxml 的配置文件名, 将配置文件命名为 MSP-EXP430G3.ccxml, 如图.3.3 所示 图.3.3 目标配置文件名 (4) 单击 Finish, 将打开目标配置编辑器, 如图.3.4 所示 6

27 图.3.4 目标配置编辑器 (5) 将 Connection 选项保持默认 :TI MSP430 USB (Default), 在 Board or Device 菜单中选择单片机型号, 在此选择 MSP430G3 配置完成之后, 单击 Save, 配置将自动设为活动模式 如图.3.5 所示, 一个项目可以有多个目标配置, 但只有一个目标配置在活动模式 要查看系统上所有现有目标配置, 只需要去 View --> Target Configurations 查看 图.3.5 项目与配置后的目标文件.3.3. 启动调试器 () 首先将 LAB 工程进行编译通过 : 选择 Project-->Build Project, 编译目标工程 在第一次编译实验工程时, 系统会提示自动创建 rts430xl.lib 库文件, 您可以选择等待创建完成, 但可能会花费较长的时间 或者, 为了方便, 推荐在编译之前将本实验文件夹内的 rts430xl.lib 库文件复制到 CCSV5. 的库资源文件夹内, 其复制路径为 :----\tools\compiler\msp430\lib(---- 为 CCSv5. 的安装路径 ) 编译结果, 如图.3.6 所示, 表示编译没有错误产生, 可以进行下载调试 ; 如果程序有错误, 将会在 Problems 窗口显示, 根据显示的错误修改程序, 并重新编译, 直到无错误提示 7

28 图.3.6 LAB 工程调试结果 () 单击绿色的 Debug 按钮进行下载调试, 得到图.3.7 所示的界面 调试窗口 变量 观察及寄存器窗口 程序窗口 控制台窗口 图.3.7 调试窗口界面 (3) 单击运行图标 运行程序, 观察显示的结果 在程序调试的过程中, 可通过设置断点来调试程 序 : 选择需要设置断点的位置, 右击鼠标选择 Breakpoints Breakpoint, 断点设置成功后将显示图标, 可以通过双击该图标来取消该断点 程序运行的过程中可以通过单步调试按钮 配合断 点单步的调试程序, 单击重新开始图标 定位到 main() 函数, 单击复位按钮 复位 可通过中止按钮 返回到编辑界面 (4) 在程序调试的过程中, 可以通过 CCSV5. 查看变量 寄存器 汇编程序或者是 Memory 等的信息 显示出程序运行的结果, 以和预期的结果进行比较, 从而顺利地调试程序 单击菜单 View Variables, 可以查看到变量的值, 如图.3.8 所示 图.3.8 变量查看窗口 8

29 (5) 点击菜单 View Registers, 可以查看到寄存器的值, 如图.3.9 所示 图.3.9 寄存器查看窗口 (6) 点击菜单 View Expressions, 可以得到观察窗口, 如图.3.0 所示 可以通过 添加观察变量, 或者在所需观察的变量上右击, 选择 Add Watch Expression 添加到观察窗口 图.3.0 观察窗口 (7) 点击菜单 View Disassembly, 可以得到汇编程序观察窗口, 如图.3. 所示 9

30 图.3. 汇编程序观察窗口 (8) 点击菜单 View Memory Browser, 可以得到内存查看窗口, 如图.3. 所示 图.3. 内存查看窗口 (9) 点击菜单 View Break points, 可以得到断点查看窗口, 如图.3.3 所示.3.4 CCSv5. 资源管理器介绍及应用 图.3.3 断点查看窗口 30

31 .3.4. CC5. 资源管理器介绍 ()CCSv5. 具有很强大的功能, 并且其内部的资源也非常丰富, 利用其内部资源进行 MSP430 单片机开发, 将会非常方便 现在演示 CCSv5. 资源管理器的应用 如图.3.4 所示, 通过 Help-->Welcome to CCS 打开 CCSv5. 的欢迎界面 图.3.4 欢迎界面打开途径 () 具体 TI 欢迎界面如图.3.5 所示, 利用 New Project 链接可以新建 CCS 工程, 具体新建步骤可以参考.3. 节 : 利用 CCSv5. 新建工程 ; 利用 Examples 链接可以搜索到示例程序资源 ; 利用 Import Project 链接可以导入已有 CCS 工程文件, 具体导入步骤可以参考.3. 节 : 利用 CCSv5. 导入已有工程 ; 利用 Support 链接可以在线获得技术支持 ; 利用 Web Resources 链接可以进入 CCSv5. 网络教程, 学习 CCSv5. 有关知识 图.3.5 TI 欢迎窗口界面 (3) 在 Packages 下拉菜单下选择 ALL, 进入 CCSv5. 资源管理器, 如图.3.6 所示 在左列资 源浏览器中, 包含 MSP430Ware MSP430Ware 将所有的 MSP430 MCU 器件的代码范例 数据表与其他设计资 3

32 源整合成一个便于使用的程序包, 基本上包含了成为一名 MSP430 MCU 专家所需要的一切 图.3.6 CCSv5. 资源管理器窗口 (4) 如图.3.7 所示, 展开 MSP430ware, 其包含三个方面内容 :MSP430 单片机资源 开发装置资源 以及 MSP430 资源库 图.3.7 MSP430ware 界面 (5) 展开 MSP430 单片机资源, 得到如图.3.8 所示的界面, 展开 MSP430F5xx/6xx, 其中包含 F5xx/6xx 系列的用户指导 数据手册 勘误表以及示例代码 图.3.8 单片机资源管理图 (6) 展开 Code Examples, 在下拉选项上选择 MSP430F55x, 在右面窗口中, 将得到 MSP430F55x 有关各内部外设的应用程序资源, 如图.3.9 所示 若您打算在 ADC 模块的基础上, 开发 MSP430, 首先可以选择一个有关 ADC 的工程, 作为讲解, 在此选择第二个工程 :MSP430F55xx_adc_0.c 单击该工程名称, 3

33 将会弹出一个对话框, 选择单片机型号, 在此选择 MSP430F559, 单击 OK 之后您将在工程浏览器中, 看 到导入的工程 :MSP430F55xx_adc_0, 您可以在此基础上进行单片机的开发 图.3.9 MSP430F55x 应用程序资源 (7) 展开 Development Tools 开发装置资源, 得到如图.3.30 所示的界面, 其中包含 MSP-EXP430F559 开发板资源 图.3.30 开发装置资源管理图 (8) 单击 User Experience Project (Code Limited), 在右面窗口中将得到如图.3.3 所示窗口 示例程序导入步骤分为四步, 在保证开发板仿真器连接正确的前提下 ( 在此利用开发板内置仿真器 ), 单击第一步, 将示例工程导入 CCS, 您将在资源浏览器中, 看到导入的工程 : MSP-EXP430F559 User Experience_6KB, 并且第一步和第三步后面蓝色的对号变亮 单击第二步, 对示例工程进行编译, 编译完成后, 将发现第二步后面蓝色的对号变亮 单击第四步, 将示例工程下载到开发板 33

34 将示例工程导入 CCS 编译示例工程 调试器配置 下载示例工程 图.3.3 MSP-EXP430F559 原板载程序资源 (9) 展开 Libraries 资源库, 得到如图.3.3 所示的界面, 其中包含 MSP430 驱动程序库以及 USB 的开发资源包 MSP430 驱动程序库 为全新高级 API, 这种新型驱动程序库能够使用户更容易地对 MSP430 硬件进行开发 就目前而言,MSP430 驱动程序库可支持 MSP430F5xx 和 F6xx 器件 MSP430USB 开发资源包包含了开发一个基于 USB 的 MSP430 项目所需的所有源代码和示例应用程序, 该开发资源包只支持 MSP430USB 设备 图.3.3 资源库管理图 Ware 使用指南 () 430Ware 是 CCS 中的一个附带应用软件, 在安装 CCSV5 的时候可选择同时安装 430Ware, 在 TI 官网上也提供单独的 430Ware 安装程序下载 ( 在 430Ware 中可以容易地找到 MSP430 所有系列型号的 Datasheet,User s guide 以及参考例程, 此外 430Ware 还提供了大多数 TI 开发板 ( 持续更新中 ) 的用户指南, 硬件设计文档以及参考例程 针对 F5 和 F6 系列还提供了驱动库文件, 以方便用户进行上层软件的开发 () 在 CCS 中单击 view -> TI Resource Explorer, 在主窗口体会显示如图.3.33 所示的界面 其中,Package 右侧的下拉窗口中可以观察目前 CCS 中安装的所有附加软件 在 package 旁的下拉菜单中 34

35 选择 MSP430Ware, 进入 430Ware 的界面 图.3.33 TI Resource Explorer 界面 (3) 在 430Ware 的界面左侧可以看到 3 个子菜单, 分别是 Device, 里面包含 MSP430 所有的系列型号 ;Development Tools, 里面包括 TIMSP430 较新的一些开发套件的资料 ; 和 Libaries, 包含了可用于 F5 和 F6 系列的驱动库函数以及 USB 的驱动函数 图.3.34 TI Resource Explorer 界面 (4) 单击图.3.35 所示界面菜单前的三角下拉键, 查看下级菜单, 可以看到在 Devices 的子目录下有目前所有的 MSP430 的型号, 找到正在使用的型号, 例如 MSP430Gxx, 同样单击文字前的三角下拉键, 在子目录可以找到该系列的 User s Guide, 在用户指南中有对该系列 MSP430 的 CPU 以及外围模块, 包括寄存器配置, 工作模式的详细介绍和使用说明 ; 同时可以找到的是该系列的 Datasheet, 数据手册是与具体的型号相关, 所以在 datasheet 的子目录中会看到具体不同型号的数据手册 ; 最后在这里还可以找到的 35

36 是参考代码 图.3.35 MSP430ware 界面 (5) 在 430Ware 中提供不同型号的 CCS 示例程序, 以及基于 Grace 的示例程序供开发者参考 如图.3.36 所示, 选择具体型号后, 在右侧窗口中看到提供到的参考示例程序 为更好地帮助用户了解 MSP430 的外设,430Ware 中提供了基于所有外设的参考例程, 从示例程序的名字中可以看出该示例程序涉及的外设, 同时在窗口中还可以看到关于该例程的简单描述, 帮助用户更快地找到最合适的参考程序 如图.3.37 所示, 单击选中的参考例程, 在弹出的对话框中选择连接的目标芯片型号 图.3.36 MSP430ware 界面 36

37 图.3.37 MSP430ware 界面 (6) 经过上一步操作后,CCS 会自动生成一个包含该示例程序的工程, 用户可以直接进行编译, 下载和调试 在 Development Tools 的子目录中可以找到 TI 基于 MSP430 的开发板, 部分资源已经整合在软件中, 另外还有部分型号在 430Ware 中也给出了链接以方便用户的查找和使用 在该目录下可以方便地找到相应型号的开发板的用户指南, 硬件电路图以及参考例程 图.3.38 MSP430ware 界面 (7) 为简化用户上层软件开发,TI 给出了 MSP430 外围模块的驱动库函数, 这样用户可以不用过多地去考虑底层寄存器的配置 这些支持可以在 430Ware 的 Libraries 子目录中方便地找到 目前对 DriverLib 的支持仅限于 MSP430F5 和 F6 系列 37

38 图.3.39 MSP430ware 界面驱动库函数通过上述描述可以看出,430Ware 是一个非常有用的工具, 利用 430Ware 可以很方便地找到进行 430 开发所需要的一些帮助, 包括用户指南, 数据手册和参考例程 (8) 管理断点作为任何调试器都会拥有的最基本功能,CCSv5 中的断点添加了一系列选项, 帮助增加调试进程的灵活性 硬件断点可从 IDE 直接进行设置 ; 软件断点仅受到设备可用内存的限制 ; 软件断点可设置为无条件或有条件停止 ; 除了停止目标之外, 软件断点还可执行其他功能 : 文件 I/O 传输 屏幕更新等 图.3.40 断点选项 要设置断点, 只需在源代码或反汇编视图中双击代码行即可 硬件 或软件 断点 的图标会指示其状态和放置位置 注意 : 在优化代码中, 有时无法将断点设置到 C 源代码中确切的某一行 这是因为优化 器可能会将代码紧缩起来, 从而影响汇编指令和 C 源代码之间的相关性 38

39 所有断点 ( 软件 硬件 已启用 已禁用 ) 都可在断点查看器中看到 图.3.4 断点查看器要配置断点, 只需右键单击蓝点, 或者在断点视图中右键单击并选择 Breakpoint Properties...( 断点属性...) (9) 图形显示工具 CCSv5 中提供了一个高级图形和图像可视化工具 它可通过图形形式显示数组, 并且可采用多种格式 要添加图形, 只需转到菜单 Tools -> Graph( 工具 -> 图形 ), 然后从各种显示选项中选择一个 基于时间的图形 : Single Time( 单曲线图 ) 和 Dual Time ( 双曲线图 ) 基于频率的图形 : 所有 FFT 选项图形窗口中的顶部工具栏可控制多种功能, 例如更新速率 ( 冻结 连续 目标停止时或手动 ) 缩放 配置属性等 图.3.4 图形工具栏默认情况下, 图形窗口会在目标停止时立即更新 使用自动缩放并以样本数显示 X 轴, 以整数值显示 Y 轴 所有这些选项都可进行设置 注意 : 请记住, 图形更新时所传输的数据量可能会影响目标硬件的实时操作 教程 : 下面的过程显示了包含正弦波发生器输出内容的图形 在源代码窗口中, 右键单击断点蓝点 ( 已在上一部分设置 ) 并选择 Breakpoint Properties... ( 断点属性...) 变量 output[] 包含 6 个正弦波发生器输出样本, 因此整个缓冲区必须立即显示在图形窗口中 单击 Tools -> Graph -> Single Time( 工具 -> 图形 -> 单曲线图 ), 然后将选项配置如下 : 属性 值 采集缓冲区大小 6 Dsp 数据类型 6 位带符号整数 Q_value 5 开始地址 output 屏幕底部应该出现一个图形窗口 如果需要, 可通过单击 按钮更改图形属性 单击 Target -> Run( 目标 -> 运行 ) 该图形应该以 6 个样本为一组分批更新 要查看 output 数组的实际值, 请单击 Watch( 监视 ) 选项卡 ( 应当在屏幕右上角部分 ), 然后单击 New( 新建 ) 键入 output 并展开此数组以显示其中的所有值 这些值以 6 位 39

40 带符号整数输出, 因此可通过调整 Q 值使其标准化 : 在 Watch( 监视 ) 窗口中选择所有 值, 右键单击并选择 Q-values -> Q-value(5)(Q 值 -> Q 值 (5)) 图.3.43 正弦波示例 (7) 图像显示工具要显示图像, 只需转到菜单 Tools -> Image( 工具 -> 图像 ) 屏幕底部将打开两个视图 : Image( 图像 ) 和 Properties( 属性 ) CCSv5 显示的信息既可以是来自 PC 主机中的文件, 也可以是目标开发板中加载的图像 在属性页面中, 只需将 Image source( 图像源 ) 选项设置为 File( 文件 ) 或 Connected Device( 连接的设备 ) 即可 与图形查看器类似, 需要设置其他所有属性才能使显示内容有意义 彩色障板 线条尺寸和数据宽度等几种选项会影响图像的正确显示 教程 : 要显示加载至目标的图像, 请执行以下操作 : 转到菜单 View -> Memory( 查看 -> 内存 ) 打开内存视图 在地址框中键入有效的目标地址 :0xC 将图像文件 <sample_4bpp.dat> 加载至 0xC : 单击内存操作图标 旁边 的三角形, 然后单击 Load( 加载 ) 浏览至下面的目录, 然后单击 Next( 下一步 ) C:\Program Files\Texas Instruments\ccsv4\c6000\examples 键入与内存窗口中相同的起始地址, 并将 Type-size( 类型大小 ) 设置为 3 位 按下图所示设置属性 : 40

41 图.3.44 图像属性选择 Image( 图像 ) 选项卡, 然后右键单击并选择 Refresh( 刷新 ) 应该会显示下面的图像 图.3.45 图像显示 另外还提供了其他一些调试器功能和视图 强烈建议您尝试一下所有这些选项, 了解调 试器的所有功能 4

42 第三章 MSP43OG 系列单片机硬件资源应用技术 在这一章中结合 MSP43OG 系列单片机, 对 LaunchPad 能够提供的各种硬件资源进行全 面介绍, 先解析相关的硬件器件, 包括组成框图和寄存器, 再介绍具体的使用方法和注意事 项 第一节时钟与休眠模式 3.. 时钟系统简介 MSP430G 系列单片机的时钟系统需要支持系统低功耗运行的需要 通过对三个内部时钟信号的运用, 用户可很容易的选择功耗最低, 效率最高的系统时钟方案 在软件的控制下, MSP430G 系列单片机运行时可以不接外接晶振, 也可接一只外接电阻或者接一到两只外接晶振, 也可以外接频率发生器, 如图 3.. 所示为 G 系列的时钟系统 图 3.. 时钟模块组成框图基本时钟模块包括二至四个时钟源 : LFXTCLK: 外接低频或高频振荡器, 如手表晶振, 频率发生器, 外部时钟源 (400kHz 至 6MHz). XTCLK: 外接高频晶振, 范围在 400kHz 至 6MHz 4

43 DCOCLK: 内部时钟震荡 VLOCLK: 内部低频低功耗晶振, 标准频率是 khz 三种时钟信号可被 CPU 和外设所使用 : ACLK: 辅助时钟,ACLK 可被软件配置成从 LFXTCLK 或 VLOCLK 输入震荡 ACLK 可以被,,4,8 分频 ACLK 可以被选用作为外围模块的时钟输入 MCLK: 主时钟, 主时钟可以从 LFXTCLK 或 VLOCLK,XTCLK 或 DCOCLK 输入 MCLK 用在 CPU 系统之中 SMCLK: 辅助主时钟 SMCLK 可被选择从 LFXTCLK,VLOCLK,XTCLK 或 DCOCLK 输入 SMCLK 可以被,,4,8 分频 SMCLK 可被选用为外围模块的时钟 如图 3.. 所示为 G 系列的时钟系统 需要说明的是并非每一款 G 系列的单片机都具有如上的时钟系统, 以下做详细说明 : MSP430Gx0: 无 LFXT, 无 XT, 不支持 ROSC MSP430Gx,MSP430Gxx,MSP430Gxx3:LFXT 不支持 HF 模式, 无 XT, 不支持 ROSC MSP430xx: 无 XT 3.. 时钟系统的操作在一个 PUC 信号之后,MCLK 和 SMCLK 开始从 DCO( 大约在.MHz), ACLK 从 LFXTCLK ( 内部电容为 6pF) 获取时钟 状态控制位 SCG0,SCG,OSCOFF 和 CPUOFF 配置 MSP430 的操作模式并时能或停止基本时钟模块, 控制寄存器 DCOCTL,BCSCTL,BCSCTL 和 BCSCTL3 寄存器配置基本时钟模块 3..3 基本时钟模块特性低频时钟是为了节省系统能耗实现定时 ; 高频时钟是为了对事物有很快的响应 ; 时钟的稳定性取决于温度和供电电压 以上的需求决定了用户可以选择三种时钟信号进行使用,ACLK,MCLK 和 SMCLK 对于 ACLK 主要使用在一些速度不高的外设, 以实现低功耗 ;SMCLK 可从 DCO 或外部引入主要是为了满足高速外设的使用需求 ;MCLK 主要向 CPU 提供时钟 一般情况下 MCLK 频率最高,ACLK 频率最低 3..4 VLO 时钟内部低频时钟产生器提供一个 khz 的振荡频率, 并且不需要外接晶振 通过 XTS=0 和 LFXTSx=0. 可使能 VLOCLK 在 LPM4 状态下,OSCOFF 位停止 VLO 时钟 当选择 VLO 发生频率时, 接到 LFXT 上的晶振会被禁止使用 VLO 如果不用的话将不会被使能 3..5 LFX 时钟 在 MSP430Gx0 中不含有 LFXT 系列振荡器, 如图 3.. 所示为 LFXCLK 的逻辑图 LFXT 振荡器支持极低功耗的手表晶振 手表晶振可以连接到 XIN 和 XOUT 之间且不需要外 43

44 接任何电容 我们可以通过软件设置内部电容 XCAPx 的值, 它可以被配置成 pf,6pf,0pf 或.5pF LFXT 振荡器也支持高频晶振模式既可外接高频晶振, 也可外接高频振荡器 通过控制位 LFXTSx=,OSCOFF=0,XCAPx=00 若选择为高频模式后, 从 LFXT 输入的频率较低, LFXTOF 位会停止 LFXTCLK 图 3.. LFXCLK 时钟控制逻辑 3..6 XT 晶振在 MSP430 系列单片机的一些型号芯片中还有第二个晶振 XT,XT 从 XTCLK 获取振荡信号, 它的特性和 LFXT 的 HF 模式较为相似 XTSx 选择 XT 的频率变化范围, 如果不将 XTCLK 用作 MCLK 和 SMCLK XTOFF 位关闭 XT 振荡器,XT 的逻辑结构如图 3..3 所示 XT 可以从 XTIN 引入, 此时需置 XTSx= 和 XTOFF=0 当用外部信号输入时, 时钟频率必须满足 XT 的需求, 否则 CPU 将其关闭 图 3..3 XT 时钟控制逻辑 3..7 DCO DCO 是由 MSP430 内部产生的, 可通过 DCOx,MODx 和 RSELx 进行调节, 关闭 DCO 模块 当 SMCLK 和 MCLK 不需要 DCO 提供频率时, 软件可通过置位 SCG0 停止 DCOCLK 44

45 图 3..4 DCO 控制逻辑 3..8 调整 DCO 的频率在 PUC 复位信号之后, 系统设置 RSELx=7 和 DCOx=3, 使 DCO 在一个中等大小的频率上起震 此时,SMCLK 和 MCLK 都从 DCOCLK 获取频率, 代码在 PUC 信号后 us 之内开始运行, DCOX 和 RSELx 的变化和梯度图如图 3..5 所示 图 3..5 DCOx 和 RSELx 所决定的 DCO 频率图几乎每一款 MSP430G 系列单片机都有时钟校准系统 可将 DCO 校准成精准的时钟, 将校准值储存在内存之中, 运行校准指令之后, 将内存中校准的数据存入 DCOCTL 和 BCSCTL 寄存器 运行以下代码可将 DCO 校准至精准的 MHz DCOCTL=0; BCSCTL=CALBC_MHZ; DCOCTL=CALDCO_MHZ; 3..9 运用外部电阻 Rosc 调整 DCO 的值 MSP430G 系列单片机可以通过在 Rosc 引脚外接震荡电阻调整振荡频率, 如果 DCOR=, 则将其接 DVcc,RSElx 可以从 0 7 进行选择 3..0 DCO 调制器调制器将 fdco 和 fdco+ 进行混频, 产生一个在 fdco 和 fdco+ 之间的频率 调制器在 3 个 DCOCLK 周期之内, 对 fdco 和 fdco+ 进行混频, 当 MODx=0 时调制器关闭 调制器的公式为 :t=(3-modx)*tdco+modx*tdco+ 由于 fdco 的频率低于已知的频率, 而 fdco+ 高于已知的频率, 经混频后频率误差接近于 0 且不会累加 混频器的设置和 DCO 的控制可以通过软件进行设置 45

46 图 3..6 DCO 混频时序图 3.. 基本时钟系统的错误检测时钟系统可检测来自外接晶振错误, 错误分为以下三类 LF 模式下的低频振荡错误 HF 模式下的 LFXT 错误 XT 错误当发生错误时, 时钟发生器错误位 LFXTOF 和 XTOF 会被置位, 如果错误不被恢复, 则错误发生位会一直被置位 当 LFXTOF 或 XTOF 置位后,OFIFG 位会被置位并引起 POR 复位 当 OFIFG 置位后,MCLK 会从 DCO 输入时钟,OFIE 是时钟错误允许中断, 若发生错误且 OFIE 置位, 则会产生一次 NMI 中断, 当中断产生以后,OFIE 会被自动复位 OFIFG 位必须通过软件清除 主频时钟发生错误后, 会从 DCO 获取频率, 但 SELM 的值不会发生变化 图 3..7 时钟错误控制逻辑 3.. 从外部晶振获取 MCLK 在 PUC 复位信号之后, 基本时钟模块使用 DCOCLK 作为 MCLK 如果需要更高的频率可以选用 LFXT 或 XT 从 DCO 切换到外部晶振的步骤如下 : 开启外部晶振模式选择合适的模式 ; 清除 OFIFG 位 ; 等待 50us; 测试 OFIFG 位是否被复位 3..3 基本寄存器表 表 3. 寄存器名称地址表 DCOCTL:DCOCTL 寄存器, 它分为两部分 :DCOx 和 MODx 46

47 DCOx:DCO 频率选择, 这些位可以在由 RSELx 决定的八个离散的 DCO 频率中选择 MODx: 调制系数, 这个系数决定在 3 个周期中 fdco+ 占多少,fDCO 占多少 BCSCTL: 基本时钟系统控制寄存器 XTOFF: 0 XT 开启 XT 如果不被用作 MCLK 和 SMCLK 则关闭 XTS: 0 低频模式 高频模式 DIVAx: ACLK 分频控制 00 / 0 / 0 /4 /8 RSELx: DCO 频率范围选择,RSELx=0 时频率最低, 当 DCOR= 时 RSEL3 被忽略 BCSCTL 寄存器 : SELMx: MCLK 频率选择 00 DCOCLK 0 DCOCLK 0 XT 如果出现在片上则是 XTCLK, 当 XT 不出现在片上则选择 LFXTCLK 或 VLOCLK LFXTCLK 或 VLOCLK DIVM: MCLK 分频 00 / 0 / 0 /4 /8 SELS: SMCLK 频率选择 0 DCOCLK 片上若有 XT 则选择 XTCLK, 若没有 XT 则选择 VLOCLK 或 XT DIVSx: SMCLK 的分频 00 / 0 / 0 /4 47

48 /8 DCOR: DCO 震荡电阻选择 BCSCTL3 寄存器 : 0 内部电阻 外部电阻 XTSx: XT 范围选择 ~MHz 晶振或振荡器 0 ~3MHz 晶振或振荡器 0 3~6MHz 晶振或振荡器 外部 0.4~6MHz 振荡器 LFXTSx: 低频时钟选择和 LFXT 范围选择 当 XTS=0 时这些位在 LFXT 和 VLO 之选择, 当 XTS= 时选择 LFXT 的频率范围 XTS=0 时 00 LFXT 的 3768Hz 晶振 0 保留 0 VLOCLK( 仅在 MSP430Fx 中有 ) 外部数字时钟源 XTS= 时 MHz~MHz 晶振或振荡器 0 MHz~3MHz 晶振或振荡器 0 3~6MHz 晶振或振荡器 0.4~6MHz 振荡器 XCAPx: 内部电容选择 00 ~pf 0 ~6pF 0 ~0pF ~.5pF XTOF: XT 错误标示位 0 无错误 有错误 LFXTOF: LFXT 错误 IE: 中断允许寄存器 0 无错误 有错误 48

49 OFIE: 振荡器错误中断允许 0 中断不允许 中断允许 IFG: 中断标志寄存器 OFIFG: 0 无中断申请 晶振错误中断申请 49

50 第二节 通用 IO 口 3.. IO 口 IO 口是微处理器系统对外界沟通的最基本部件, 从基本的键盘 LED 到复杂的外设芯片等, 都是通过 IO 口的输入输出操作来进行的 在 MSP430 系列中, 不同的单片机 IO 口数量不同 体积最小的 MSP430F0xx 系列中只有 0 个 IO 口, 适合在超小型设备中应用 ; 功能最丰富的 MSP430FG46xx 系列中多达 80 多个 IO 口, 足够应付外部设备繁多的复杂应用 在 MSP430G553 单片机中, 共有 6 个 IO 口, 属于 IO 口较少的系列 3.. IO 寄存器 和大部分单片机类似,MSP430 系列单片机也是将 8 个 IO 口编为一组 每个 IO 口有四 个控制寄存器,P 和 P 还有额外的 3 个中断寄存器 寄存器情况可参见表 3. 表 3. I/O 寄存器表 寄存器名 寄存器功能 读写类型 复位初始值 PxIN Px 口输入寄存器 只读 无 PxOUT Px 口输出寄存器 可读可写 保持不变 PxDIR Px 口方向寄存器 可读可写 0( 全部输入 ) PxSEL Px 口第二功能选择 可读可写 0( 全部为 IO 口 ) PxIE Px 口中断允许 可读可写 0( 不允许中断 ) PxIES Px 口中断沿选择 可读可写 保持不变 PxIFG Px 口中断标示位 可读可写 0( 未发生中断 ) PxDIR 寄存器用于设置每一位的 IO 口方向 MSP430 单片机的 IO 口是双向 IO 口 :0= 输入 = 输出 在使用 IO 口时首先要选择寄 存器来设置每个 IO 口方向 例如下面的语句 : PDIR = BIT+BIT3+BIT4; PDIR = ~(BIT5+BIT6+BIT7); 以上语句将 P.,P.3 和 P.4 的方向置为输出,P.5,P.6 和 P.7 的方向置为输入 PxDIR 寄存器在复位的过程中会被清零, 没有被设置的 IO 口方向均为输入状态, 所以 第二句可以省略 注意, 将未用的 IO 口置为输出可减小漏电流 对于所有已经设成输出的 IO 口可通过 PxOUT 寄存器设置其输出电平 ; 对于所有已经被 设成输入的 IO 口, 可通过 PxIN 寄存器读回其输入电平 PxSEl 寄存器用于设置每一位 IO 口的功能 :0= 普通 IO 口, = 第二功能 在 MSP430 系列单片机中, 很多内部功能模块也需要和外界进行数据交换, 为了不增加 芯片的管脚数量, 大部分都和 IO 口管脚复用, 这就导致 MSP430 系列单片机的大多数 IO 管 50

51 脚都具有第二功能 通过 PxSEL 可以指定某些 IO 口作为第二功能使用 如 MSP430G553 中 P. 和 RXD,P. 和 TXD 复用 3..3 IO 口中断在 MSP430 系列所有的单片机中,P 口 P 口总共 6 个 IO 口均能引发中断 PxIE 用于设置每一位 IO 口的中断允许 :0= 不允许 = 允许 PxIES 用于选择每一个 IO 口的中断触发沿 :0= 上升沿 = 下降沿在使用 IO 口中断之前, 需要先将 IO 口设置为输入状态, 并允许该位 IO 中断, 再通过 PxIES 寄存器选择上升沿触发还是下降沿触发 如下例, 将 P.5,P.6 和 P.7 设置为中断源, 下降沿触发 PDIR&=~(BIT5+BIT6+BIT7); PIES =BIT5+BIT6+BIT7; PIE =BIT5+BIT6+BIT7; _EINT(); PxIFG 是 IO 口中断标志寄存器 :0= 中断标志不成立,= 中断条件曾经成立无论中断是否被允许, 也无论是否可以执行中断服务程序, 只要对应 IO 口满足中断条件,PxIFG 中相应位都会立即置 并保持, 只能通过软件人工清除 这种机制的目的在于最大可能的保证不会漏掉每一次中断 在 MSP430 系列单片机中,P 口的 8 个中断各共用了一个中断入口, 因此该寄存器另一重要作用在于判断是哪一位 IO 产生了中断 注意, 在退出中断前, 一定要人工清除中断标志, 否则该中断会不停被执行 类似的原理, 即使 IO 口没有出现中断条件, 人工向 PxIFG 寄存器写, 也会引发中断 更改中断沿选择寄存器也相当于跳变, 也会引发中断 所以, 更改 PxIES 寄存器应该在关闭中断后进行, 并且在打开中断后及时清除中断标示位 3..4 线与逻辑 MSP430 系列单片机的 IO 口是 CMOS 型, 特点是当 IO 处于输入状态时时, 呈高阻状态 ; 当 IO 处于输出状态时, 高低电平都具有较强的输出能力 若输出高电平的 IO 口和输出低电平的 IO 口直接相连, 则会因短路造成损坏, 不像 805 的 IO 那样能实现 线与 功能 但可以通过 IO 方向的切换来模拟 以 P.0 口为例, 硬件上加一个上拉电阻至 Vcc, 软件中先将 POUT 的 BIT0 置 0, 再通过软件切换方向来改变输出 #define IO_H PDIR &= ~BIT0 #define IO_L PDIR =BIT0 #define IO_R (PIN&BIT0) 用这种方法来模拟 IO 操作, 高电平不是由 IO 直接输出的, 而是通过上拉电阻拉高的, 因此这种高电平的电流输出能力很弱 ; 而低电平由 IO 直接输出, 驱动能力较强 当高电平遇到低电平的时候会被拉低 当若干 IO 连在一起时, 只要有 根输出 0, 整体就输出 0, 总输出相当于各 IO 相与 线与 逻辑在 IC 总线 多机通信中都有重要用途 5

52 3..5 兼容性为了电池供电应用,MSP430 系列单片机工作电压较低 (.8V~3.6V) 大部分应用取 3V 左右, 因此单片机的 IO 口属于 3V 逻辑 且 MSP430 单片机的任何一个管脚的输入电压不能超过 Vcc+0.3V, 不能低于 -0.3V, 否则将启动内部泄放电路 泄放电路最大值只能吸收 ma 的电流, 超过可能毁损换 IO 口 在 MSP430 单片机与 5V 逻辑连接时, 必须考虑电平转换问题, 分以下几种情况进行讨论 :.5V 逻辑器件输出至 MSP430 单片机, 这是一种最简单的情况, 将 5V 逻辑通过 0K 和 0K 电阻分压后转换成 3V 逻辑 若 5V 逻辑属于弱上拉型, 也可以直接连接, 利用 MSP430 单片机内部泄放电路将电压钳至 3V 当然, 最为可靠的方法还是使用 74LVC 系列缓冲器, 如 74LVC44 等, 它可以 3V 供电, 并具有 5V 的输入承受能力 MSP430 单片机输出至 5V 逻辑器件输入, 这种情况首先要看接收器件的高电平门限, 一般的接收芯片或设备手册都会给出 某些器件具有.5V 以下的门限可直接连接无需额外电路 若接收方门限较高, 可在两者之间加一片 74HCT4 缓冲器 74HCT 器件具有.V 的固定逻辑门限, 在 5V 电源时能够识别 3V 的逻辑输入 双向数据传输中, 不仅要转换电平, 还需要切换方向, 最好选用电平转换芯片 74LVC445 实现 驱动 5V 以上的逻辑电路, 利用漏级开路门电路可以实现逻辑电平的转换 无论出现何种转换方案,3V 逻辑和 5V 逻辑电路中都是不值得推荐的 这不仅破坏了 MSP430 系统的简洁设计原则, 还额外增加了功耗, 增加了电源管理难度 所以在设计 MSP430 系统时应尽量使用 3V 逻辑 和所有 CMOS 电路一样,MSP430 单片机的 IO 口输入状态也呈高阻态 若悬空, 则等效于天线, 会因附近电场而随机的感应出中间电平 MSP430 单片机内部带有施密特触发器和总线保持器, 悬空或输入中间电平不会造成错误或损坏, 但会因为输入级 CMOS 门截止不良, 额外增加系统耗电 所以在超低功耗应用中每个 IO 口都应具有确定电平, 对于未用的 IO 口, 可接地或设置为输出状态, 以保证电平确定 5

53 第三节 0 位 ADC MSP430 系列单片机内部集成了 ADC, 这为工程师在设计硬件电路时提供了很大的方便 同时, 不同的单片机中集成了不同类型的 ADC, 有精度高但速度慢的 SD6, 有适用于多通道采集的 ADC, 也有适用于高速度采集的 ADC0 在 MSP430G 系列单片机内部通常集成的是 0 位 ADC 3.. ADC0 的特点 ADC0 是 MSP430 单片机的片上模数转换器, 其转换位数为 0 比特, 该模块内部是一个 SAR 型的 AD 内核, 可以在片内产生参考电压, 并且具有数据传输控制器 数据传输控制器能够在 CPU 不参与的情况下, 完成 AD 数据向内存任意位置的传输 它具有如下特点 : 最大转换速率大于 00ksps 转换精度为 0 位 采样保持器的采样周期可通过编程设置 可利用软件或者 TimerA 设置转换初始化 编程选择片上电压参考源, 选择.5V 或者.5V 编程选择内部或者外部电压参考源 8 个外部输入通道 具备对内部温度传感器 供电电压 VCC 和外部参考源的转换通道 转换时钟源可选择 多种采样模式 : 单通道采样 序列通道采样 单通道重复采样 序列通道重复采样 提供自动数据传输方法 ADC 的内核和参考源可分别单独关闭. ADC0 的结构与原理图 3.3. 是 ADC0 模块的结构框图 从图中可以看出 ADC0 有 6 个采样通道 A0~A5, 其中 A0 到 A7 是外部采样通道,A0 是对内部温度传感器的采样通道 ADC0 模块工作的核心是 ADC0 的核, 即图中的 0-bit SAR ADC0 的核将模拟量转换成 0 位数字量并储存在 ADC0MEM 寄存器里 这个核使用 VR+ 和 VR- 来决定转换模拟值的高低门限 当输入电压超过 VR+ 时它会停在 03FFh 上, 当输入门限低于 VR- 时它会停在 0 上 采样值的计算公式为 : NADC=03*(VIN-VR-)/(VR+-VR-) 下面将对 ADC0 模块的配置和操作进行介绍 () 转换时钟选择 ADC0CLK 需要可作为转换时钟也可作为产生采样周期的时钟,ADC0CLK 可通过 ADC0SSELx 位进行选择, 通过 ADC0DIVx 进行分频 可供选择的 ADC0CLK 时钟源是 SMCLK, MCLK,ACLK 或者是内部晶振 ADC0OSC ADC0OSC 最大可达到 5MHZ, 但是会根据具体片子的不同而有所差别, 详见数据手册 用户必须确保 ADC0CLK 的时钟处于开启状态, 否则转换 53

54 将无法开始 ADC0CTL = ADC0SSEL_3+ADC0DIV_0;// 时钟源选择 SMCLK, 分频 ADC0CTL = ADC0SSEL_+ADC0DIV_7;// 时钟源选择 ACLK,8 分频 ()ADC0 的输入和复用八个外部和四个内部模拟信号可被选择为输入的通道, 他们通过复用器共同作为转换器的前端 不被选中的通道将被与转换核心剥离 当模拟信号输入到 ADC 的 CMOS 输入门时寄生电流会从 VCC 到地变化 禁止端口输入端缓冲可以减少寄生电流 8 位的 ADC0AE 寄存器可以对应开启或关闭 8 个外部采样通道 ADC0AE0 = 0x5; // 开启外部通道 0, 通道 和通道 4 图 3.3. ADC0 模块的结构框图 (3) 电压参考产生 寄存器 SREFx 可选择 ADC0 模块的电压参考源 ADC0 模块含有内部电压参考源 使用 54

55 内部参考源时, 令 SREFx=00(B), 则 ADC0 模块电压参考源选择内部电压参考, 同时将 REFON 置 使能内部参考源 当 REF_5V= 时, 内部参考源电压是.5V 当 REF_5V=0 时, 参考值是.5V, 如果将 REFOUT= 可向外输出参考源电压 ADC0CTL0 = SREF_+REFON+REF_5V; // 选择并使能内部参考源, 电压.5V (4) 采样和转换时间 ADC0 转换可以被 SHI 信号的上升沿所触发,SHI 信号可以被 SHSx 位所选择为 :ADC0SC 位 TIMER_A.OUT TIMER_A.OUT0 和 TIMER_A.OUT 采样延时可通过 SHTx 位进行选择, 时间可以是 4,8,6,64 个 ADC0CLK 周期 当 SAMPCON 置高时, 采样定时器开始计时采样时间等于 SAMPCON 由高到低的时间, 采样完后开始转化, 大约需要 3 个 ADC0CLK 的时间进行转化 如图 3.3. 所示 图 3.3. ADC0 采样和转换时间 3.. ADC0 转换模式 ADC0 有四个操作模式可以通过一个两位的寄存器 CONSEQx 被选择 具体情况如下表 : 表 3.3 ADC0 的转换模式选择 CONSEQx 模式 操作 00 单通道单次采样 一个通道被采样转换一次 0 序列通道采样 多个通道被依次采样转换 0 单通道重复采样 一个通道被多次采样转换 序列通道重复采样 多个通道被重复采样转换. 单通道单次采样模式 单个被 INCHx 所选中的通道 x 被采样并转换一次 ADC 结果被写入 ADC0MEM 寄存器 如图 所示为单通道单次转换状态转移图 可用 ADC0SC 触发一次转换, 当切换至其他 触发源时, 在两次转换之间,ENC 需要被切换 在采样模式 0 下, 首先令 ADC0ON= 即开启 ADC0 模块, 接着确定采样通道 x, 然后等 待触发 当 SHS=0,ENC= 时,ADC0SC 可触发采样开始 或者用 TIMERA 进行触发采样, 当 ENC 的上升沿到来之后, 它将等待 TIMERA 所产生的 PWM 波进行触发 ADC0 采样完成后, 经 过 个 ADC0CLK 的时钟周期进行采样结果转换, 再经过 个 ADC0CLK 的时钟周期,ADC0 55

56 将转换后的结果存入寄存器 ADC0MEM, 同时 ADC0 的中断标志位 ADC0IFG 被置 在转换 过程中的任意时刻, 如果将 ENC 置 0 则会关闭 ADC0 模块 图 单通道单次采样状态转移图. 序列通道采样模式如图 序列通道采样状态转移图所示,ADC0 在这种工作模式下,INCHx 中值意义和在单通道单次采样模式下不同,INCHx 写入的通道时序列通道中的最高通道, 采样开始后采样通道从选中的通道依次转换到通道 0, 并且只完成一次序列通道采样 每一个 ADC 采样结果都会被存入 ADC0MEM 寄存器 当转换到通道零时, 转换序列会停止 可以使用 ADC0SC 来触发一个序列的转换 当其他的触发源被使用时,ENC 必须被复位 56

57 图 序列通道采样状态转移图 3. 单通道重复采样模式 在这种模式下, 一个被 INCHx 可以被选中通道 x 被多次采样转换 每次转换结果, 都将 被存入 ADC0MEM 寄存器 若旧的值未被读取, 则新的值将被旧的值所覆盖 图 单通道重复采样状态转移图 4. 序列通道重复采样模式这种模式和序列通道采样模式基本相同, 采样通道从 INCHx 所选中的通道开始依次转换到通道 0, 然而在这种工作模式下 ADC0 可进行重复序列通道采样 ADC0 每次转换结果都会被写入 ADC0MEM 寄存器的值 每次采样完成之后, 会自动将通道值重新置入 INCHx 57

58 图 序列道重复采样状态转移 ADC0 寄存器 ADC0 的寄存器如表 所示 表 3.4 ADC0 寄存器 寄存器 形式 寄存器类型 地址 初始状态 ADC0 输入使能寄存器 0 ADC0AE0 可读写 04Ah 上电复位 ADC0 输入使能寄存器 ADC0AE 可读写 04Bh 上电复位 ADC0 控制寄存器 0 ADC0CTL0 可读写 0B0h 上电复位 ADC0 控制寄存器 ADC0CTL 可读写 0Bh 上电复位 ADC0 数据传输控制寄存器 0 ADC0DTC0 可读写 048h 上电复位 ADC0 数据传输控制寄存器 ADC0DTC 可读写 049h 上电复位 ADC0 数据传输起始地址 ADC0SA 可读写 0BCh 上电后为 000h ADC0 内存 ADC0MEM 只读 0B4h 无变化 下面对常用的部分寄存器进行介绍. ADC0CTL0 ADC0CTL0 寄存器结构如图 所示 只有 ENC=0 时 ADC0CTL0 的内容才能被修改 图 ADC0CTL0 寄存器结构 SREFx: 基准源选择位 000 VR+=Vcc VR-=Vss 00 VR+=VREF+ VR-=Vss 00 VR+=Veref+ VR-=Vss 0 VR+=BufferedVeREF+ VR-=Vss 58

59 00 VR+=Vcc VR-=VREF-/VeREF- 0 VR+= VREF+ VR-=VREF-/VeREF- 0 VR+= VeREF+ VR-=VREF-/VeREF- VR+=BufferedVeREF+ VR-=VREF-/VeREF- ADC0SHTx: ADC0 采样和保持时间设置位 00 4 个 ADC0CLK 周期 0 8 个 ADC0CLK 周期 0 6 个 ADC0CLK 周期 64 个 ADC0CLK 周期 ADC0SR: ADC0 采样率设置位 该位的选择参考缓冲器驱动能力的最大采样率 设置 ADC0SR 可降低基准缓冲器的电流消耗 0 参考缓冲器支持高达 00 ksps 的采样速度 参考缓冲器支持高达 50 ksps 的采样速度 REFOUT: 参考源输出控制位 0 参考源输出关闭 参考源输出开启 REFBURST: 可利用此位降低功耗 0 参考源一直开启 只有在采样和转换时开启参考源 MSC: 多重采样和转换 这一位只用于序列或重复采样模式 0 SHI 信号的上升沿触发每个采样和转换 SHI 信号的第一个上升沿触发采样定时器, 但是进一步的采样和转换 只有在前一次的转换完成时才进行 REF_5V: 参考源电压选择位, 更改时 REFON 必须开启 0 参考源电压.5V 参考源电压.5V REFON: 参考源开关 0 参考源关闭 参考源开启 ADC0ON: ADC0 模块开关 0 ADC0 关闭 ADC0 开启 ADC0IE: ADC0 模块使能开关 0 禁止 ADC0 中断 允许 ADC0 中断 ADC0IFG: 中断标志位 采样转换完成后,ADC0IFG 被置为 单片机响应 ADC0 中断以后, ADC0IFG 自动被置位 0, 也可软件置 0 0 无中断请求 59

60 有中断请求 ENC: 采样使能开关 0 ADC0 使能关闭 ADC0 使能开启 ADC0SC: 采样开始 0 停止采样 开始采样. ADC0CTL ADC0CTL 寄存器结构如图 所示 只有 ENC=0 时 ADC0CTL 的内容才能被修改 图 ADC0CTL0 寄存器结构 INCHx: 通道选择 0000 A0 000 A 000 A 00 A3 000 A4 00 A5 00 A6 0 A7 000 VeREF+ 00 VREF-/VeREF- 00 内部温度传感器 0 (Vcc-Vss)/ 00 (Vcc-Vss)/,MSP430Fxx 系列单片机才有此通道 0 (Vcc-Vss)/,MSP430Fxx 系列单片机才有此通道 0 (Vcc-Vss)/,MSP430Fxx 系列单片机才有此通道 (Vcc-Vss)/,MSP430Fxx 系列单片机才有此通道 SHSx: 采样保持源选择 00 ADC0SC 位 0 Timer_A.OUT 0 Timer_A.OUT0 Timer_A.OUT ADC0DF: 数据格式 0 二进制数 60

61 二进制数的补码 ISSH: 输入采样信号反转 0 输入的采样信号不反转 输入的采样信号反转 ADC0DIVx: ADC0 时钟分频选择 000 分频 00 分频 00 3 分频 0 4 分频 00 5 分频 0 6 分频 0 7 分频 8 分频 ADC0SSELx: ADC0 时钟源选择 00 ADC0OSC 0 ACLK 0 MCLK SMCLK CONSEQx: ADC0 工作模式选着 00 单通道单次采样模式 0 序列通道采样模式 0 单通道重复采样模式 序列通道重复采样模式 ADC0BUSY: ADC0 模块忙标志 0 ADC0 模块无操作 ADC0 模块正在进行采样或转换 3. ADC0AE0 ADC0 输入使能寄存器有 ADC0AE0 和 ADC0AE 两个,ADC0AE0 对应 8 个外部通道, ADC0AE 可对应使能 A 到 A5,ADC0AE 只存在于 MSP430Fx 中, 这里不作介绍 ADC0AE0 寄存器结构如下图所示 : 图 ADC0AE0 寄存器结构从图中可知 ADC0AE0 有 8 位, 从低位到高位分别对应使能通道 A0 到 A7, 只要对应的位置, 则对应的通道被使能 下面给出两个 ADC0 寄存器配置的例子 例 : 用单通道重复采样模式对 A 采样, 将采样结果 0 次求平均, 然后将结果存在变量 ADC0_Result 内 假设选择 分频后的 ACLK 做采样时钟, 选择内部参考源.5V,ADC0SC 6

62 触发采样, 禁止 ADC0 中断, 采样时间设置为 64 个采样时钟 int ADC0_Result; ADC0CTL = CONSEQ_; // 单通道重复采样模式 ADC0CTL0 = SREF_+REFON+REF_5V;// 选择内部参考源.5V, 打开基准源 ADC0CTL0 = ADC0SHT_3+MSC; // 过采样率设置为 64 个采样周期, 打开 AD 转换 ADC0CTL = ADC0SSEL_+ADC0DIV_+SHS_0; //ACLK 分频为采样时钟, 用 ADC0SC 触发采集 ADC0CTL =INCH_; // 选择通道 A ADC0CTL0 = ADC0ON; // 开启 ADC0 ADC0AE0 = 0x0; // 开启外部通道 A for(int i=0;i<0;i++) ADC0CTL0 =ENC+ADC0SC; // 开始转换 while((adc0ctl0 &ADC0IFG)==0); // 等待 ADC0IFG 标志变高 ( 转换完成 ) ADC0_Result+=ADC0MEM; // 读取采样结果 ADC0_Result= ADC0_Result/0; 例 : 用序列通道采样模式对通道 A A5 A7 采样, 将采样结果在中断中读出, 并将 A A5 A7 采样的结果分别存入 ADC0_A[] ADC0_A5[] 和 ADC0_A7[] 数组中 选择 SMCLK 无分频作为采样时钟, 选择内部参考源.5V,ADC0SC 触发采样, 采样时间设置为 6 个采样时钟周期 unsigned int u=7; unsigned int ADC_timers =0; unsigned int ADC_Result[8]; unsigned int ADC0_A[0]; unsigned int ADC0_A5[0]; unsigned int ADC0_A7[0]; void main () WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 ADC0CTL = CONSEQ_; ADC0CTL0 = SREF_+REFON+ADC0IE;// 选择内部参考源.5V, 开启 AD 允许中断 ADC0CTL0 = ADC0SHT_+MSC; // 打开 AD 转换, 过采样率设置为 6 个采样周期 ADC0CTL = ADC0SSEL_3+SHS_0; // 选择 SMCLK 无分频作为采样时钟,ADC0SC 触发采集 ADC0CTL =INCH_7; // 最高通道设为通道 7 ADC0CTL0 = ADC0ON; // 打开 ADC0 模块 6

63 ADC0AE0 = 0xa; // 开启通道 A A5 A7 bis_sr_register(gie); // 开总中断 while() ADC0CTL0 =ENC+ADC0SC; // 开始转换 for(int i=0;i<0000;i++); // 加入延时等待 ADC0 一轮序列通道采样完成 /**************************************************************************** * 名称 : * 功能 :AD 采样中断, 没完成一次采样中断一次, 将采样值存入数组 AD_Result[0] 然后将想要的采样值读出 ****************************************************************************/ #pragma vector=adc0_vector interrupt void ADC0_ISR (void) ADC_Result[u]=ADC0MEM; u--; if(u>8) u=7; ADC0_A7[AD_timers]=ADC_Result[7]; ADC0_A5[AD_timers]=ADC_Result[5]; ADC0_A[AD_timers]=ADC_Result[]; ADC_timers++; 内部温度传感器 ADC0 内部集成了一个温度传感器, 使用此温度传感器时, 只要对 ADC0 的通道 0 进行采样, 就可的出此温度传感器的输出值 图 是 ADC0 内部温度传感器输出电压和温度的理想线性关系 但是按照图 中的线性关系计算得到的温度值会有很大误差, 实际使用时要对其进行校准, 让单片机在一个基准温度 T0 下, 采样计算的此时温度传感器输出电压值 V0, 以此点为基准进行校准, 温度 TEMPc=(VTEMP-V0)/ T0 63

64 图 内部温度输出电压与温度的线性关系 void main () int ADC0_Result; int TEMP; ADC0CTL = CONSEQ_; // 单通道重复采样模式 ADC0CTL0 = SREF_+REFON;// 选择内部参考源.5V, 打开基准源 ADC0CTL0 = ADC0SHT_3+MSC; // 过采样率设置为 64 个采样周期, 打开 AD 转换 ADC0CTL = ADC0SSEL_3+SHS_0; //ACLK 分频为采样时钟, 用 ADC0SC 触发采集 ADC0CTL =INCH_; // 选择通道 A ADC0CTL0 = ADC0ON; // 开启 ADC0 while() ADC0CTL0 =ENC+ADC0SC; // 开始转换 while((adc0ctl0 &ADC0IFG)==0); // 等待 ADC0IFG 标志变高 ( 转换完成 ) ADC0_Result=ADC0MEM; // 读取采样结果 TEMP= (ADC0_Result-746)/( *678)+86; // 计算温度值, 扩大 0 倍, 单片机在 8.6 下 ADC0 采样值为 746, 选择此点进行校准 同时要将 ADC0 采样值转换为电压值,V 电压时, 采样值为

65 第四节 6 位定时 / 计数器 在 MSP430 系列单片机中, 都带有一个 6 位定时 / 计数器 TIMER_A, 用以精确定时或计 数 在普通计数器的基础上还添加了 3 路捕获比较模块, 能够在无需 CPU 的干预的情况下自 动根据触发条件捕获定时器的计数值或自动产生输出波形 3.4. Timer_A 定时 / 计数器的主计数器模块结构和原理 Timer_A 分为 部分 : 主计数器和比较捕获模块 主计数器负责定时, 计时或计数 计数值 (TAR 寄存器的值 ) 被送到各比较捕获模块中, 它们可以在无需 CPU 干预的情况下根据触发条件与计数器值自动完成某些测量和输出功能 只需定时或计数功能时, 可以只使用主计数器部分 在 PWM 调制, 利用捕获测量脉宽, 周期等应用之中还需要捕获比较模块配合 与 Timer_A 定时器中的主计数器相关的控制位都位于 TACTL 寄存器中, 主计数器的计数数值存放与 TAR 寄存器中 每个比较捕获寄存器 TACCRx(x=0,,) 在一般定时器应用中,TACCRx 可提供额外的定时中断触发条件 ; 在 PWM 输出模式之下,TACCRx 可用于设置周期和占空比 ; 在捕获模式下,TACCRx 存放捕获结果 主计数器结构如图 3.4. 所示, 它包括时钟源选择, 预分频, 计数器与计数模式选择几个部分 图 3.4. TA 主计数器结构相关控制字有 : TASSELx:Timer_A 计数器的时钟源选择 ( 位于 TACTL 寄存器 ) 00= 外部管脚 (TACLK) 0=ACLK 0=SMCLK = 外部管教 (TACLK 取反 ) 快捷宏定义 :TASSEL_0 TASSEL_ TASSEL_ TASSEL_3 IDx:Timer_A 计数器预分频系数 ( 位于 TACTL 寄存器 ) 00= 无分频 0= 分频 0=4 分频 =8 分频快捷宏定义 :ID_0 ID_ ID_ ID_3 通过上面两组控制位, 可以设置定时计数时钟源 在低功耗应用以及需要长时间定时或计时的情况下, 可以用 ACLK 作为作为时钟, 加上预分频, 最长的定时计时周期可达 6s 在高分辨率短时间应用之中, 可以选择 SMCLK 作为时钟源 若选择 TACLK 作为, 定时器实际上成为计数器, 累积从 TACLK 管脚上输入的脉冲, 上升沿计数 若选择 TACLK 取反作为时钟源,TACLK 的下降沿计数 TACLR:Timer_A 计数器清零控制位 ( 位于 TACTL 寄存器 ) 65

66 0= 不清零 = 清零将该控制位置, 可以立即将 Timer_A 计数器清零, 无需通过软件赋值操作来实现 计数器复位后该标志位自动归零, 因此读该标志位将永远读回 0 MCx:Timer_A 计数器的技术模式 ( 位于 TACTL 寄存器 ) 00= 停止 0= 增计数 0= 连续增计数 = 增减计数快捷宏定义 :MC_0 MC_ MC_ MC_3 TAIFG:Timer_A 计数器溢出标志位 ( 位于 TACTL 寄存器 ) 0= 未发生溢出 : 发生了溢出 Timer_A 计数器提供了 3 种计数模式 : 增计数, 连续计数和增减计数 在增计数模式下, 每个时钟周期 TAR 加 在 TAR 值超过 TACCR0 寄存器 ( 捕获比较模块 0 模式值 ) 时自动清零, 同时将 Timer_A 溢出标志位 TAIFG 置 如果 TA 中断被允许, 还会引发中断 改变 TACCR0 寄存器可以改变定是周期, 且不存在初值装载问题, 非常适合产生周期定时中断, 只要改变 TACCR0 的值即可随意调整定时周期 在连续计数模式下, 其工作方式与 805 的定时器基本相同 每个时钟周期 TAR 加, 计数器值超过 0xFFFF 后溢出,TAR 回到 0, 同时将 TAIFG 置, 或引发中断 如果中断内给 TAR 重新赋初值, 也可以产生不同周期的定时中断 用增计数模式产生定时中断比连续模式更加简单, 一般不用连续模式更简单 ; 连续模式一般在捕获下使用较多, 让计数器自由运行, 利用捕获功能在事件发生时自动记录下计数值, 通过对比几个值可以确定时间发生的准确时间或者准确的时间间隔 在增减模式下, 计数器从 0 开始递增, 计到 TACCR0 后, 自动切换为递减模式, 减到 0 后又恢复为递增模式, 如此往复, 在 TAR 从 变为 0 的时刻产生 TAIFG 中断标志 在一般应用中, 不用增减模式来定时或计数, 而多用于 PWM 发生器 借助增减模式, 捕获比较模块能够产生带死区的对称 PWM 驱动波形, 可以直接驱动半桥电路, 无需专门的死区产生电路 例如, 在 MSP430 单片机中, 为 Timer_A 配置时钟源及工作模式, 使 Timer_A 在无需 CPU 的干预下, 每隔.35s 溢出一次 ( 假设 SMCLK=MCLK= MHz,ACLK=3.768kHz) 首先.35 时间较长, 若使用 SMCLK 作为时钟源 6 位计数器不够用, 应该使用低频 ACLK 作为时钟源 再考虑周期性定时,3 种模式都能实现, 其中增计数模式最简单, 无需重复置初值等操作 最后计算 TACCR0 的值应该.35 乘以 ACLK 频率得到设置值 计数从 0 开始, 实际应设置为 TACTL =TASSEL_+ID_0+MC_; TACCR0=43008-; 3.4. Timer_A 定时 / 计数器比较模块当 CAP 控制位设为 0 时, 捕获比较模块工作在比较模式 此时 TACCRx 的值由软件写入, 并通过比较器与主计数器的计数值进行比较 每次相等产生 EQU 信号, 该信号触发输出逻辑, 通过 OUTMODE 控制位可以配置输出逻辑, 通过不同的输出逻辑配合产生不同的输出波形 整个过程无需 CPU 干预, 软件中只需改变 TACCRx 的值即可改变输出波形的某些参数 对于不同型号的芯片, 波形输出 TAx 所对应的管脚有所不同, 读者可参考相应型号所对应的芯片手 66

67 册 例如在 MSP430F4x 系列单片机中,TA0 对应 P.0,TA 对应 P.,TA 对应 P.0. 某些 芯片会将多个管脚对应一个输出方便布线, 使用时可利用 IO 口的 PxSEl 寄存器激活输出功 能 如图 3.4. 所示为 TA 输出模块的逻辑图 图 3.4. TA 输出模块逻辑图 OUTMODx:Timer_A 比较模块的输出模式位 (TACCTL0// 寄存器 ) OUT:Timer_A 比较模块的输出电平控制位 ( 位于 TACCTL0// 寄存器 ) Timer_A 比较模块的 8 种输出模式如表 3.4. 所示 : 表 3.5 Timer_A 比较模块输出模式表 OUTMODEx 控制位 输出模式控制 说明 000( 模式 0) 电平输出 Tax 管脚输出电平由 OUT 控制位决定 00( 模式 ) 延迟置位 当主计数器计至 TACCRx 值时,TAx 置 00( 模式 ) 取反 / 清零 当主计数器计至 TACCRx 值时,TAx 管脚取反当主计数器计至 TACCR0 值时,TAx 管脚置 0 0( 模式 3) 置位 / 清零 当主计数器计至 TACCRx 值时,TAx 管脚置 当主计数器计至 TACCR0 值时,TAx 管脚置 0 00( 模式 4) 取反 当主计数器计至 TACCRx 值时,TAx 管脚取反 0( 模式 5) 延迟清零 当主计数器计至 TACCRx 值时,TAx 管脚置 0 0( 模式 6) 取反 / 置位 当主计数器计至 TACCRx 值时,TAx 管脚取反当主计数器计至 TACCR0 值时,TAx 管脚置 ( 模式 7) 清零 / 置位 当主计数器计至 TACCRx 值时,TAx 管脚置 0 当主计数器计至 TACCR0 值时,TAx 管脚置 () 模式 0( 电平输出 ): 在输出模式 0 下,TAx 管脚与普通的输出 IO 口一样, 可以由 软件操作 OUT 控制位来控制 TAx 管脚的高低电平 () 模式 与模式 5( 单脉冲输出 ): 利用比较模块的模式 和模式 5, 可以替代单稳 态电路, 产生单脉冲波形 67

68 在输出模式 下, 当主计数器计至 TACCRx 值时,TAx 管脚置 如果通过 OUT 控制位事先将 TAx 的输出设为低, 经过 TACCRx 个周期后,TAx 将自动变高 这样做可以输出一个低电平脉冲 通过改变 TACCRx 的值, 可以改变低电平脉冲的周期, 且脉冲过程无需 CPU 的干预 在输出模式 5 下, 当主计数器计至 TACCRx 值时,TAx 管脚置 0. 如果通过 OUT 控制位事先将 TAx 输出设置为高, 经过 TACCRx 个周期后,TAx 将自动变低 这样做可以输出一个高电平脉冲 通过改变 TACCRx 的值可以改变该点评脉冲的周期, 且脉冲过程无需 CPU 的干预 (3) 模式 3 和模式 7(PWM 输出 ): 脉宽调制是最常用的功率调整手段之一 所谓脉宽调制, 顾名思义, 是指在脉冲方波周期一定的情况之下, 通过调整脉冲的宽度, 改变负载通断时间的比例, 以达到功率调节的目的 PWM 波形中, 负载接通时间与一个周期总时间之比叫做占空比 占空比越大, 负载功率就越大 如果 PWM 频率足够高以至于不足以表现表现出负载断续, 从宏观上看, 负载实际功率将是连续的 在 PWM 调整负载功率的过程中, 负载断开时晶体管无电流通过, 不发热 负载接通时晶体管饱和, 虽然通过有较大电流, 但压降很小, 发热功率也很低 所以使用 PWM 控制负载时, 开关器件的总发热量很小 相比于串联耗散式的调整方法, 效率会高很多, 适合大功率, 高效率的负载调整应用 但 PWM 的缺点是负载功率高频波动很大, 不适合要求输出平稳无纹波要求的场合 此外,PWM 控制本身属于开环控制, 具有调节功能, 但不具有稳定负载的能力, 也不保证输出结果正比于占空比 例如在电机调速实验中, 通过 PWM 控制可以改变电动机的功率, 但不能稳定电动机的转速, 电动机的转速会受负载力矩的影响 需要得到高精度, 高稳定性, 快速且无超调的控制结果时, 需要反馈式控制系统 在 MSP430 单片机中, 通过 ADC 采集功能测量实际被控量作为反馈信号, 结合强大 CPU 计算能力实现各种反馈控制算法, 最终通过 PWM 控制输出量, 可以用单芯片构成各种反馈式控制系统 在输出模式 7 下, 每次 TA 计数值 TACCRx 时,TAx 管脚会自动置低, 当 TA 计至 TACCR0 时,TAx 管脚会自动置高, 实际输出波形就是调制 PWM 方波 改变 TACCR0 的值即可改变 PWM 的周期, 改变 TACCRx 的值即可改变从 TAx 管脚输出信号的占空比,TACCRx 越大, 占空比越大 在模式 3 下, 与模式 7 刚好相反 TACCRx 越大, 占空比越小 对于某些低电平接通负载的电路, 用模式 3 更符合习惯 模式 3 和模式 7 也常一起用, 用于产生两路对称的波形 TACCR0 被用于 PWM 周期设定, 通过 Timer_A 产生的若干路 PWM 波形的周期都是一样的 且对于含有 3 个捕获比较模块的 TimerA, 最多只能产生两路 PWM 波形 某些型号的单片机中含有 5 个比较捕获模块的 TimerA, 最多产生 4 路独立的 PWM 波形 (4) 模式 4( 可变频率输出 ): 输出模式 4 下,TA 计数每次达到 TACCRx 的值时,TAx 管脚电平自动取反 因此, 改变 TA 计数周期可以改变 Tax 管脚的输出频率 ; 同时若改变 TACCRx 的值可以改变波形的相位 改变 TACCR0 的值, 即可同时改变 3 路输出波形的频率, 改变 TACCR 与 TACCR 的值, 68

69 可以改变 TA 与 TA 输出波形与 TA0 波形之间的相位差 由于 TACCR 与 TACCR 最大值只能 等于 TACCR0, 所以最大值只能滞后 0 80 度 如果需要超过 80 度的移相, 可以通过改变 管脚的初始值来实现 Timer_A 捕获模块在捕获模式下, 用某个指定管脚的输入电平跳变触发捕获电路, 将此刻主计数器的计数值自动保存到响应的捕获值寄存器中 该过程纯硬件实现, 无需 CPU 的干预, 不存在中断响应等时间延迟 可以用于测频率 测周期 测脉宽 测占空比 门控计数等需要获得精确时间量的场合 将 TACCTLx 中的 CAP 位置 使能捕获模块 通过 CMx 选择触发沿 ( 详见寄存器表 ) 触发沿可以根据实际需要进行选择 例如, 测量方波周期时用上升沿或者下降沿都可以, 测量脉宽时用上升下降触发方式较为方便 捕获过程通过纯硬件进行实现, 实时性很强,CPU 可以通过查询或中断内读取捕获值, 根据两次捕获值之间的差即可计算出周期脉宽等信息 即使读取略有延迟也不影响捕获结果 这比单纯靠外部中断保存计数器值的方法高效得多, 且不要求 CPU 直接进行读取 但也可能遇到第一次捕获值尚未来得及被 CPU 读取的情况下, 第二次捕获又成立了, 这种情况称为捕获溢出 会导致计算错误 为此, 模块中留有一个标志位用于指示溢出 COV 为 时发生了捕获溢出 该标示位必须通过软件清除 SCS 位为 0 时, 捕获过程的锁存直接由硬件电路控制, 不受时钟的约束 当该标示位为 时, 捕获触发信号经过 D 触发器与定时器时钟同步 假设捕获触发条件触发在值为 N 的时间段内, 异步模式将捕获到数值 N, 同步模式下捕获到数值 N+ 一般建议工作在同步模式下, 以免数字逻辑部分出现竞争产生毛刺 CCI:Timer _A 捕获模块的输入信号电平 ( 异步 ) SCCI:Timer_A 捕获模块的输入信号电平 ( 同步 ) Timer_A 定时器中断 Timer_A 定时器的下列四种事件均能产生中断 : () 主计数器 (TACCR0) 计满后复位,TAIFG 标志被置 中断发生在计数值从 TACCR0 跳至 0 时刻 () 捕获通道 0 发生捕获事件, 或让主计数器值 TAR 计至 TACCR0( 计数值从 TACCR0- 跳至 TACCR0 的时刻 ),TACCTL0 寄存器内的 CCIFG 标志被置 (3) 捕获通道 发生捕获事件, 或主计数值 TAR 计至 TACCR( 计数器从 TACCR- 跳至 TACCR0 的时刻 ),TACCTL 寄存器内的 CCIFG 标志被置 (4) 捕获通道 发生捕获事件, 或主计数器 TAR 计至 TACCR( 计数值从 TACCR- 跳至 TACCR 的时刻 ),TACCTL 寄存器内的 CCIFG 标志被置 这 4 种事件占用了两个中断源, 其中, 事件 ( 计至 TACCR 或捕获通道 0 发生捕获事件 ) 独占一个中断源 TIMERA0_VECTOR, 其余 3 种事件共用另一个中断源 TIMERA_VECTOR 对于需要紧急处理的捕获事件建议使用通道 0, 因为它独占一个中断源, 在终端内无需分之判断, 反应最快 69

70 相应的标志位有 : TAIFG:Timer_A 计数器计满复位标志 ( 位于 TACTL 寄存器 ) TAIE :Timer_A 主计数器计满中断允许位 ( 位于 TACTL 寄存器 ) CCIFG:Timer_A 捕获 / 比较模块中断标志 ( 位于 TACCTL0// 寄存器 ) 比较模式下, 当主计数器计至 TACCRx 时, 该标志位置. 在捕获模式下, 当捕获条件发 生时, 该标志位置 TACCTL0 内的 CCIFG 标志会在中断执行后自动清零, 其余模块共用了 中断入口, 它们的 CCIFG 标志位会根据 TAIV 寄存器的值在执行相应的中断后自动清除 CCIE:Timer_A 比较捕获模块中断允许位 ( 位于 TACCTL0// 寄存器 ) TAIV:Timer_A 中断向量寄存器 几个事件共用了 TIMERA_VECTOR 中断向量, 需要在中断服务程序中通过软件判断 TAIV 寄存器的值来确定具体中断原因 表 3.6 Timer_A 中断向量寄存器表 TAIV 值 中断源 中断标志 优先级 00H 无中断发生 0H 捕获 / 比较模块 TACCTL 内的 CCIFG 最高 04H 捕获 / 比较模块 TACCTL 内的 CCIFG 06H * 捕获 / 比较模块 3 TACCTL3 内的 CCIFG 08H * 捕获 / 比较模块 4 TACCTL4 内的 CCIFG 0AH 主计数器计满溢出 TAIFG 最低 注 : 带 * 号的中断源只对 Timer_A5 单片机有效 寄存器图 TACTL: 未使用 : 5~0 位 TASSELx: 9~8 位 Timer_A 时钟源选择 00 TACLK 0 SMCLK 0 ACLK 03 INCLK IDx: 7~6 位 时钟分频选择 00 / 0 / 0 /4 03 /8 MCx: 5~4 位 模式控制 70

71 00 停止模式 0 增计数模式, 计至 TACCR0 0 连续技术模式, 计至 0xFFFF 03 增减计数模式, 增计数计至 TACCR0 减至 0 未使用 : 3 位 未使用 TACLR: 位 清零位, 计数器清零, 分频和模式位也清零 TAIE: 位 中断允许位, 中断允许时置 TAIFG: 0 位 中断允许标志位, 有中断时置 TARx: 5~0 位 Timer_A 计数器寄存器 TACCRx: TimerA 比较捕获寄存器比较模式 :TACCRx 与 TAR 比较, 当相等时改变输出管脚的电平捕获模式 : 当捕获源到来时将 TAR 复制到 TACCRx TACCTLx CMx: 捕获比较控制寄存器 5~4 位捕获模式 00 无捕获 0 上升沿捕获 0 下降沿捕获 03 上升下降沿捕获 CCISx: 3~ 位捕获比较输入选择 00 CCIxA 0 CCIxB 0 GND 03 Vcc SCS: 位 同步异步选择 7

72 0 异步捕获 同步捕获 SCCI: 0 位捕获同步信号输入端 未使用 : 9 位 CAP: 8 位 捕获模式 0 比较模式 捕获模式 OUTMODEx: 7~5 位 输出模式配置 000 模式 0 00 模式 00 模式 0 模式 3 00 模式 4 0 模式 5 0 模式 6 模式 7 CCIE: 4 位 0 不允许中断 中断允许 CCI: 3 位 捕获比较输入 OUT: 位 在模式 0, 该位直接控制输出电平 COV: 位 捕获溢出控制位 0 无捕获溢出 捕获溢出 CCIFG: 0 位 捕获比较中断 无中断发生 0 中断发生 7

73 第五节 FLASH 控制器 本节将介绍 MSP430G553 单片机 Flash 控制器的结构和原理,FLASH 控制器的相关寄存 器定义和 FLASH 的读写操作 3.5. Flash 存储介绍 MSP430 Flash 存储器可以按位 按字节和按字进行寻址和编程的 Flash 块带有一个可 以控制编程和擦除操作的控制器, 该控制器内有 4 个寄存器 个时序信号发生器和 个提 供编程和擦除电压的电压发生器 MSP430 Flash 存储器的特征包括 : () 内部编程电压的产生 () 可按位 字节或字可编程 (3) 超低功耗操作 (4) 段擦除和全部擦除主 Flash 区 (5) 边界 0 和边界 读模式 Flash 控制器的结构框图如图 3.5. 所示 : 注意 : 在对 Flash 进行读和写操作期间供电电压 V CC 的最小值.V, 如果低于这个电 压值, 则写和擦除的结果将是不可预知的 图 3.5. Flash 存储器块结构框图 3.5. Flash 存储器的分段 MSP430 Flash 被分割成不同的段 (segment) 虽然单一的位 字节或字都可以被写入到 Flash 中, 但段是 Flash 可擦除的最小单位 Flash 的段分别隶属于主 Flash(MainFlash) 区和信息 Flash(InfoFlash) 区 在对主 Flash 区和信息 Flash 区进行操作时几乎没有差别, 所以代码和数据可以放置于这两个区中 73

74 的任意一个 这两个区的区别在于它们段的大小和所处的物理地址范围不同 信息 Flash 区有 4 个 64 字节的段 主 Flash 区至少有两个 5 字节的段 段又进一步被划分成块 (block), 下图显示了一个带有 8 个主 Flash 区段和 4 个信息 Flash 区段的 3KB Flash 分段结构图 : 图 KB Flash 段划分结构 InfoA 段 : 可以使用 LOCKA 位将信息 Flash 区的 InfoA 段独立于其他的段被单独锁住 当 LOCKA= 时,Flash 被锁定, 用户不能对 InfoA 段进行写和擦除的操作, 并且整个信息 Flash 区在全部擦除主 Flash 区和编程期间不响应其他的擦除操作 ; 而当 LOCKA=0 时,Flash 解除锁定, 用户可以像对 flash 中其他的段一样对 InfoA 段进行擦除和写入, 并且整个信息 Flash 区在全部擦除主 Flash 区和编程期间被擦除 对 LOCKA 位写 该位的状态将被取反, 写 0 时不起作用 这使得现有的 Flash 编程程序被使用而不发生改变 InfoA 段的开锁和上锁分别使用下面的语句就可以了 : FCTL3=FWKEY; // 开锁 FCTL3=FWKEY+LOCKA; // 上锁 Flash 的操作 Flash 的默认状态下的模式是读模式 在该模式下,Flash 是不能被擦除或者写入的, 此时 Flash 的时序信号发生器和电压发生器处于关闭状态, 对 Flash 的操作几乎就和 ROM 一样 MSP430 Flash 可在线编程的 (in-system programmable,isp), 无需额外部电压的供应 MSP430 CPU 可以对自身的 Flash 进行写和擦除操作, 具体的模式是通过 BLKWRT WRT MERAS 和 ERASE 位来进行选择的, 分别有 : 74

75 () 写字节 / 字模式 () 写块模式 (3) 单段擦除模式 (4) 全部擦除主 Flash 区模式 ( 针对所有主 Flash 区的段, 保留信息 Flash 区的内容 ) (5) 全部擦除所有 Flash 模式 ( 针对所有的段 ) 在编程和擦除期间禁止向 Flash 进行读写操作 在读 写 Flash 期间 CPU 执行的代码必 须放置于 RAM 中 用户可以从 Flash 内部或 RAM 对 Flash 进行任意的更新.Flash 时序信号发生器 如图 所示, 用户对 Flash 进行的写和擦除操作是由 Flash 时序信号发生器来控制 的 Flash 时序信号发生器的工作频率 f FTG 必须在 57KHz~476KHz 范围内 ( 查看具体器件的 数据手册 ) 图 Flash 存储器时序信号发生器结构框图 Flash 时序信号发生器的选择 : Flash 时序信号发生器可以选择活动时钟 (ACLK) 子系统时钟 (SMCLK) 或者主时钟 (MCLK) 作为自己的时钟源, 被选择的时钟源可以通过 FN 位分频以满足 Flash 工作频率 f FTG 要求 如果读 写操作期间 f FTG x 的频率偏离如上所述的说明规定, 那么写和擦除操作 的结果将是不可预知的, 或者 Flash 将在被迫能可靠工作的极限范围之外工作 如果写或擦除操作期间时钟信号检测不到时钟信号, 操作将被终止, 这时 FAIL 标志位被置位, 操作的结果同样是不可预料的 当写或者擦除操作正在进行时, 用户是不能通过禁用所选择的时钟源以使 MSP430 进入低功耗模式的, 时钟源要等到操作完成后才能被禁用. Flash 的擦除 Flash 位擦除的电平为高电平 每个位可单独地被从 复位成 0 但需要一个擦除周期才能将其从 0 重新置位成 Flash 可被擦除的最小单位是段 用户可以通过 ERASE 和 MERAS 位的设置来选择三种擦除模式, 如表 3.6 所示 : 表 3.6 擦除模式的选择 MERAS ERASE 擦除模式 0 单段擦除模式 0 全部擦除主 Flash 区模式 ( 针对所有主存储区的段 ) LOCKA=0: 擦除主 Flash 区和信息 Flash 区的内容 LOCKA=: 只擦除主存储区的内容任何的擦除操作都在所要擦除的地址范围内进行的空写操作 空写开启 Flash 时序信号发生器和擦除操作 图 说明了擦除操作的时序, 在进行空写操作后,BUSY 位即刻被 75

76 置位并且在擦除周期内一直保持置位状态 BUSY MERAS 和 ERASE 位在擦除周期结束后被自 动清零 擦除周期的时序不依赖于器件上 Flash 的大小 所有的 MSP430FXX 和 MSP430GXX 器件擦除的次数是一样的 图 擦除周期的时序对一个不在擦除范围内的地址进行的空写操作不会启动擦除周期, 是不会对 Flash 产生影响的, 也无论如何不会改变标志位的 这个错误的空写操作也将被忽略 () 从 Flash 存储器内部启动一个擦除操作任意一个擦除周期都可以从 Flash 内部或者从 RAM 启动 当在一个 Flash 的段上进行擦除操作时, 所有的时序是由 Flash 控制器来控制的,CPU 的执行将被延迟 当擦除周期结束时,CPU 用一条跟随着空写操作的指令来恢复代码的执行 当从 Flash 内部启动一个擦除周期, 有可能会擦除在擦除之后要执行的代码, 如果发生这种情况的话, 那么在擦除周期之后,CPU 要执行的内容将是不可预知的 下面就是从 Flash 内部启动一个擦除操作的流程图 : 图 从 RAM 启动清除周期流程图 写成 C 代码如下 ( 以擦除 InfoD 段作为例 ): #define SegD 0x000 // 准备对 InfoD 段进行擦除 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 FCTL=FWKEY+FSSEL+FN0; // 选择 SMCLK 作为时钟源, 二分频 FCTL3=FWKEY; // 开锁 FCTL=FWKEY+ERASE; // 准备擦除 *((* int)segd)=0x00; // 段擦除 -- 空写 FCTL3=FWKEY+LOCK; // 上锁 76

77 WDTCTL=WDTPW+WDTCNTCL; // 打开看门狗 () 从 RAM 启动一个写擦除操作任何的清除周期都可能是从 RAM 开始的 在这种情况下,CPU 的执行是不被延迟的, 它仍然可以继续执行 RAM 中的代码, 但是必须通过轮询 BUSY 位的状态, 确定清除周期已经结束 CPU 才能重新访问任意的 Flash 地址 如果 Flash 在 BUSY= 时被访问, 将引起访问冲突, 这时 ACCVIFG 标志位也将被置位, 这样清除的结果也是不可预知的 从 RAM 启动 Flash 的擦除流程如图 所示 : 关闭看门狗 YES BUSY= NO 设置 flash 控制器和清除模式 空写 YES BUSY= NO 设置 LOCK=, 打开看门狗 图 从 RAM 启动擦除周期的流程图 写成 C 代码如下 ( 以擦除 InfoD 段作为例 ): WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 while(busy==(fctl3&busy)); // 检测忙, 若忙, 则等待 FCTL=FWKEY+FSSEL+FN0; // 选择 SMCLK/ 作为时钟源, 二分频 FCTL3=FWKEY; // 开锁 *((* int)segd)=0x00; // 空写 while(busy==(fctl3&busy)); // 检测忙, 若忙则等待 FCTL3=FWKEY+LOCK; // 上锁 WDTCTL=WDTPW+WDTCNTCL; // 打开看门狗 写 Flash: 通过 WRT 和 BLKWRT 位的设置来选择写模式的方法, 如表 3.5. 所示 表 3.6 写模式的选择 BLKWRT WRT 写模式 0 写字节 / 字 写块 两种写模式使用各自不同的一些列写命令来实现的, 但是写块的模式速度大约是写字节 / 字模式的两倍, 因为电压发生器在写块的整个过程中一直保持开启状态 任意一条修改目 77

78 的操作数的命令都可以用来修改写字节 / 字模式或写块模式的 Flash 的位置 在两次擦除之间, 同一个 Flash 字 ( 低字节 + 高字节 ) 一定不能被写入两次以上 否则, 将对 Flash 产生损害 BUSY 位在写操作正在进行时被置位, 在操作完成时被清零 如果写操作是从 RAM 启动的, 在 BUSY= 时,CPU 一定不能访问 Flash, 否则将产生访问冲突, 这时 ACCIFG 也将被置位, 对 Flash 写的后果也是不可预知的 () 写字节 / 字一个写字节 / 字操作可以从 Flash 内部或 RAM 里启动 当从 Flash 内部启动写字节 / 字操作时, 所有的时序是由 Flash 控制器控制的,CPU 的执行被延迟直至写操作完成 写操作完成后,CPU 用一条跟随着下一个写操作的指令恢复代码的执行 字节 / 字的写时序如图 所示 : 图 写字节 / 字时序 当从 RAM 中执行一个字节 / 字写操作的时候,CPU 将继续执行 RAM 中的代码 BUSY 位在 CPU 再次访问 Flash 之前必须清零, 否则将产生访问冲突,ACCIFG 将被置位, 写操作的后果 是不可预知的 在字节 / 字模式下, 每写一次字节 / 字需要花费 30 个 f FTG 周期, 而其中有 7 个周期整 个 64 字节的块上需要施加内部产生的编程电压 随着每一个字节或字的写入, 块上施加编 程电压的时间量不断累积, 但是任何一个块来说, 编程电压累积的时间量都不能超过累积编 程时间 t CPT 如果达到了累积编程时间, 那么在对块内的任意地址执行任何进一步的写操作 之前, 就必须对块进行擦除 () 从 Flash 内启动一个写字节 / 字操作 从 Flash 发起一个字 / 字节的写操作的流程图如下 : 关闭看门狗 设置 flash 控制器和 WRT= 写字节或字 设置 WRT=0,LOCK=, 打开看门狗 图 从 Flash 启动一个写字节 / 字操作 78

79 写成 C 代码如下 : #define Addr 0x000 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 FCTL=FWKEY+FSSEL+FN0; // 选择 SMCLK/ 作为时钟源, 二分频 FCTL3=FWKEY; // 开锁 FCTL=FWKEY+WRT; // 写使能 *((* int )Addr)=0x34; // 向地址 0x000 写入字 0x34, 假设该地址单元已被擦除过 FCTL=FWKEY; // 写关闭 FCTL3=FWKEY+LOCK; // 上锁 WDTCTL=WDTPW+WDTCNTCL; // 打开看门狗 (3) 从 RAM 启动一个字节 / 字操作从 RAM 启动一个字节 / 字操作的流程图如下 : 关闭看门狗 YES BUSY= NO 设置 flash 控制器和 WRT= 写字节 / 字 YES BUSY= NO 设置 WRT=0,LOCK= 打开看门狗 图 从 RAM 启动一个写字节 / 字操作写成 C 代码如下 : #define Addr 0x000 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 While(BUSY==(FCTL3&BUSY)); // 检测忙, 若忙, 则等待 FCTL=FWKEY+FSSEL+FN0; // 选择 SMCLK/ 作为时钟源, 二分频 FCTL3=FWKEY; // 开锁 FCTL=FWKEY+WRT; // 写使能 *((* int )addr)=0x34; // 向地址 0x000 写入 0x34, 假设该地址单元已被擦除过 While(BUSY==(FCTL3&BUSY)); // 检测忙, 若忙, 则等待 79

80 FCTL=FWKEY; FCTL3=FWKEY+LOCK; // 写关闭 // 上锁 WDTCTL=WDTPW+WDTCNTCL; // 打开看门狗 (4) 写块 当有许多连续的字节 / 字需要写入 Flash 时, 使用写块模式可以加速对 Flash 的写入进 程 在对大小为 64 字节的块进行写操作期间,Flash 的编程电压始终保持开启状态 但是 任何块上编程电压累积的时间量都不能累积编程时间 t CPT 写块操作不能从 Flash 而只能从 RAM 启动 BUSY 位在整个写块期间始终保持置位状态 此外, 每对块写一个个字节 / 字必须检查 WAIT 位的状态 当 WAIT 位被置位, 说明上一次写 操作已经完成, 则块的下一个字节 / 字就可以被写入到 Flash 中 当连续写入块时,BLKWRT 位必须在当前块写入后清零, 经过必要的恢复时间 t end 之后,BLKWRT 可以被再次置位以启动 下一个写块操作 BUSY 位在每一个写块操作完成之后清零预示着下一个块将要被写入 图 3.5. 说明了写块操作的时序 : 图 3.5. 写块周期的时序 (5) 写块例子的流程图写块的流程图和例子如下 : 写成 C 代码如下 : // 从 RAM 启动写, 假设 Flash 已经被擦除 char Write_Counter=3 ; // 写计数 int Addr=0x000; // 从地址 000h 开始写 WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 while(busy==(fctl3&busy)); // 检测忙, 若忙, 则等待 FCTL=FWKEY+FSSEL+FN0; // 选择 SMCLK/ 作为时钟源 FCTL3=FWKEY; // 开锁 FCTL=FWKEY+BLKWRT+WRT; // 使能写块模式 while(wait==(fctl3&wait)); // 检测 Flash 是否已准备好被写入下一个字节 / 字, 若否, // 则等待准备好 Addr++; // 指向下一个地址 80

81 Write_Counter --; // 待写入值计数减 if(write_counter ==0) FCTL=FWKEY; // 写关闭 *((int *)Addr)=Write_Value; // 这里 Write_Value 是用户要写入的值 While(BUSY==(FCTL3&BUSY)); // 检测忙, 若忙, 则等待 FCTL3=FWKEY+LOCK; // 上锁 WDTCTL=WDTPW+WDTCNTCL; // 打开看门狗关闭看门狗 YES BUSY= NO 设置 flash 控制器 设置 BLKWRT=WRT= 写字节 / 字 YES WAIT=0? NO NO 块边界? YES 设置 BLKWRT=0 YES BUSY= NO YES 另一个块? NO 设置 WRT=0,LOCK=, 打开看门狗 4. 读写或擦除期间 Flash 的访问 图 3.5. 写块流程图 8

82 若在 BUSY= 时从 RAM 启动的任何写或擦除操作,CPU 可能无法对 Flash 的任意位置进 行读写操作 否则, 将产生访问冲突,ACCIFG 将被置位, 产生的后果也将是不可预知的 若在 WRT=0 尝试对 Flash 进行写操作,ACCIFG 中断标志将被置位,Flash 将不受影响 从 Flash 内启动一个写字节 / 字或者任意的擦除操作时,Flash 控制器将在 CPU 获取下 一条指令时返回操作码 03FFFh( 它是一条跳转指令 JMP PC), 这将导致 CPU 一直循环直 至 Flash 操作完成为止 当操作完成并且 BUSY=0,Flash 控制器将允许 CPU 获取合适的操作 码并且恢复程序的执行 BUSY= 时 Flash 的访问情况如表 3.7 所示 : 表 3.7 当 BUSY= 时 Flash 的访问 Flash 操作 Flash 访问 WAIT 位结果 任意的清除 或写字节 / 字 写块 读 0 ACCVIFG=0, 读取到的值是 03FFFh 写 0 ACCVIFG=, 写操作被忽略 取指令 0 ACCVIFG=0,CPU 取操作码 03FFFh, 也就是 JMP PC 指令 任意操作 0 ACCVIFG=,LOCK= 读 ACCVIFG=0, 读到的值是 03FFFh 写 ACCVIFG=0, 写入要写入的内容 取指令 ACCVIFG=,LOCK= 内存擦除周期开始之前应禁用看门狗定时器 ( 在看门狗模式下 ) 在这种情况下, 复位 将终止擦除操作因此产生的结果也将是不可预知的 在擦除周期结束以后, 看门狗可能重新 被使用 5. 停止一个写或擦除周期 任意的写或擦除操作都可以在该操作正常结束之前通过设置紧急退出位 EMEX 使其停 止 通过设置 EMEX 位, 用户可以立即停止当前执行的操作和 Flash 控制器 所有的 Flash 操作都将停止,Flash 将回到读模式状态, 而且 FCTL 寄存器中的所有位都将被清 0, 这将 产生不可预知的结果 6. 边界读模式 边界读模式可以被用来验证 Flash 内容的完整性 在边界读模式下, 可以检测到被边 界编程 Flash 位的位置 产生这种情况的事件包括在擦除 / 编程操作期间不恰当的 或者是供电电压低于最小的 V CC f FTG 设置 值 找到这种存储位置的一种办法是对 Flash 的一个区 ( 例 如, 一个 Flash 的段 ) 周期性地计算一次校验和并且在边界读使能的情况下重复这一过程 如果它们不匹配的话, 就肯预示着 Flash 区域的编程不足 可以通过禁用边界读模式 把 Flash 段复制到 RAM 擦除 Flash 段和从 RAM 将其写回到 Flash 中来刷新受影响的 Flash 段 检查 Flash 中内容的程序必须从 RAM 中执行 从 Flash 中执行代码将自动禁用边界读 模式 边界读模式由 MRG0 和 MRG 寄存器的位来控制 寄存器 MRG 的设置是用于检测那些 包含一个 编程不足的 Flash 单元 ( 被擦除的位 ), 而寄存器 MRG0 的设置用于检测那些 包含一个 0 的编程不足的 Flash 单元 ( 被编程的位 ) 的不足 在这些位中每次只能有一位 被置位 因此, 一个完整的边界读校验需要两次通过 Flash 内容完整性的检查 在边界读模 式期间,Flash 的访问速度 (MCLK) 必须限定在 MHz 8

83 7. 配置和访问 Flash 控制器 FCTLx 是 6 位的 受密码保护的 可读 / 可写的寄存器 任何的读或写访问必须使用字 指令并且写访问时必须在高字节包含 0A5h 对 FCTLx 寄存器写入其高字节不是 0A5h 的任何 值都是违反安全密钥的, 也都将使 KEYV 标志位置位和触发系统的复位 另外, 从 FCTLx 寄 存器的读取的值的高字节都是 096h 在 Flash 被擦除或写字节 / 字操作期间对 FCTL 寄存器的任何写入都将产生访问冲突也 都将使 ACCIFG 位置位 虽然允许在写块模式和 WAIT= 情况下写寄存器 FCTL, 但在写块模 式和 WAIT=0 的情况下写 FCTL 却会产生访问冲突,ACCIFG 也将被置位 突的 在 BUSY= 的情况下, 任何对 FGCTL 寄存器写入将产生访问冲突 任何一个 FCTLx 寄存器都可以在 BUSY= 的情况下被读取, 并且是读取不会产生访问冲 8. Flash 控制器中断 Flash 存储器有 KEYV 和 ACCVIFG 两个中断源 ACCIFG 在产生访问冲突时被置位 当 ACCVIE 位在 Flash 写或擦除操作后被重新使能 ACCVIFG 位置位将产生一个中断请求, ACCVIFG 中断源于 NMI( 非可屏蔽 ) 中断向量, 不需要置位 GIE 位来产生中断请求 ACCVIFG 也可以通过软件校验来确定是否发生了访问冲突 ACCVIFG 位必须要软件复位 违反密钥的标志位 KEYV 在任意一个 Flash 控制寄存器被写入不正确的密码时被置位 当这种情况发生时, 单片机将立即产生一个 PUC( 上电清除 ) 信号使器件复位 9. Flash 存储器编程 有三种方式可以对一个 MSP430 Flash 器件编程, 这三种方式都支持在线编程 : ) 通过 JTAG 编程 ) 通过引导加载程序 (bootstrap loader) 编程 3) 通过用户自定义的方法编程 () 通过 JTAG 对 Flash 编程 我们可以通过 JTAG 端口对 MSP430 器件编程 JTAG 接口需要 4 个信号 ( 在 0 和 8 个 引脚的器件上需要 5 个信号 ): 地 可选择端 V CC 和 RST / NMI JTAG 端口由保险丝保护 烧断保险丝将使 JTAG 端口被完全禁用, 此过程是不可逆的, 即不可能再通过 JTAG 实现对器件的进一步访问 具体的细节, 请查看 the MSP430 Programming Via JTAG Interface User s Guide 这篇文章 () 通过引导加载程序 (BSL) 对 Flash 编程 大多数的 MSP430 Flash 中都储存有一个引导加载程序 引导加载程序使用户可以通过 使用 UART 串口对 Flash 进行读和编程 另外, 通过引导加载程序对 MSP430 的 Flash 的访问 是受一个 56 位的密码的 更多的细节请查看 the MSP430 Programming Via the Bootstrap Loader User's Guide 这篇文章 (3) 通过用户自定义的方法对 Flash 编程 MSP430 CPU 可以通过在线的和外部自定义编程的方法写自身的 Flash, 如图 所 示 用户可以选择通过 UART SPI 等任何一种方式向 MSP430 提供数据 用户开发的软件也 可以接收数据和编程 Flash 由于这种方法是由用户开发的, 所以完全可以通过自定义来满 83

84 足编程 擦除和更新 Flash 的要求 图 用户开发的编程方案 Flash 寄存器 Flash 寄存器如表 3.8 所示 表 3.8 Flash 寄存器 寄存器 缩写形式 寄存器类型 地址 初始状态 Flash 控制寄存器 FCTL 可读 / 写 0x08 0x9600( 上电清除时 ) Flash 控制寄存器 FCTL 可读 / 写 0x0A 0x964( 上电清除时 ) Flash 控制寄存器 3 FCTL3 可读 / 写 0x0C 0x9658( 上电清除时 )() 中断使能 IE 可读 / 写 0x0000 复位 ( 上电清除时 ) 中断标志 IFG 可读 / 写 0x000 注 :()KEYV 在上电复位 (POR) 时复位 () 不是所有的器件中都有这个寄存器 请看具体器件的数据手册 ()Flash 控制寄存器 FCTL FRKEY, 读出值总为 096h FWKEY, 写入值必须为 0A5h BLKWRT WRT Reserved MERAS ERASE Reserved rw-0 rw-0 rw-0 rw-0 rw-0 rw-0 rw-0 rw-0 FRKEY: 第 5-8 位 FCTLx 密码 读出值总是 096h FWKEY: 写入值必须为 05Ah, 否则将产生一个上电清除 (PUC) 信号 BLKWRT: 第 7 位 写块模式 写块模式时 WRT 也必须被置位 BLKWRT 在 EMEX 被置位时自动清 0 0 写块模式关 写块模式开 WRT: 第 6 位 写模式 该位用于选择任意一种写模式 WRT 在 EEMEX 被置位时自动清 0 0 写模式关闭 写模式开启 Reserved: 第 5 位 保留位 总是读出 0 84

85 MERAS: 第 位 全部擦除和擦除 这些位一起被用来选择擦除模式 ERASE: 第 位 EMEX 被置位时,MERAS 和 ERASE 被自动清 0 MERAS ERASE 擦除周期 0 0 不擦除 0 只擦除单段 0 擦除主存储器中所有的段 LOCKA=0: 擦除主 Flash 存储器和信息 Flash 存储器 LOCKA=: 只擦除主 Flash 存储器 Reserved: 第 0 位 保留位 总是读为 0 ()Flash 控制寄存器 FCTL FWKEY, 读出值总为 096h 写入值必须为 0A5h FSSELx FNx rw-0 rw- rw-0 rw-0 rw-0 rw-0 rw- rw-0 FWKEY: 第 5-8 位 FCTLx 密码 读出值总为 096h 写入值必须为 0A5h 否则将产生一个上电清除 (PUC) 信号 FSSELx: 第 7-6 位 Flash 控制器时钟源选择 00 ACLK 0 MCLK 0 SMCLK SMCLK FNx: 第 5-0 位 Flash 控制器时钟分频器 这六位为 Flash 控制器时钟选择分频器 分频值为 FNx+ 例如, 当 FNx=00h, 分频值是 当 FNx=03Fh, 分频值是 64 (3)Flash 控制寄存器 3 FCTL FWKEYx, 读出值总为 096h 写入值必须 0A5h FAIL LOCKA EMEX LOCK WAIT ACCVIFG KEYV BUSY r(w)-0 r(w)- rw-0 rw- r- rw-0 rw-(0) r(w)-0 FWKEYx: 第 5-8 位 FCTLx 密码 读出值总为 096h 写入值必须为 0A5h 否则将产生一个上电清除 (PUC) 信号 FAIL: 第 7 位操作失败位 该位在 f FTG 时钟源失效 Flash 操作在 EEIEX= 时被中断终止 的情况下被置位 FAIL 必须通过软件复位 0 无失效 85

86 失效 LOCKA: 第 6 位 InfoA 段和信息锁 对该位写 将改变 InfoA 段和信息锁的状态 写 0 不产生影响 0 在全部擦除主 Flash 区期间, InfoA 段开锁, 所有的信息 Flash 区被擦 除 在全部擦除主 Flash 区期间,InfoA 段锁定, 所有的信息 Flash 区受 保护无法被擦除 EMEZ: 第 5 位 紧急退出位 LOCK: 第 4 位 锁定位 这个位可以使 Flash 开锁以进行写入和擦除操作 LOCK 位可以在一个写字节 / 字或者擦除操作和操作正常完成期间随时被置位 在写块模式下, 如果 LOCK 被置位, 且 BLKWRT=WAIT=, 那么 BLKWRT 和 WAIT 位将被清 0, 写块模式将正常终止 0 开锁 锁定 WAIT: 第 3 位 等待位 指示 Flash 正在被写入 0 Flash 还未准备好被写入下一个字节 / 字 Flash 已经准备好被写入下一个字节 / 字 ACCVIFG: 第 位 访问冲突标志位 0 无中断挂起 中断挂起 KEYV: 第 位 Flash 安全密钥冲突 该位指示错误的 FCTLx 密码被写入到任意一个 Flash 控制寄存器中, 在被置位时产生一个上电清除 (PUC) 信号 KEYV 必须通过软件清 0 0 FCTLx 密码写入正确 FCTLx 密码写入不正确 BUSY: 第 0 位 忙位 这个位指示 Flash 时序信号发生器的状态 0 时序信号发生器处于非忙状态 时序信号发生器处于忙状态 (4) 中断使能寄存器 IE ACCVIE rw-0 第 7-6 位这些位可以被用于其它的块 ACCVIE: 第 5 位 Flash 访问冲突中断使能 该位将使能 ACCVIFG 中断 0 中断不使能 中断使能第 4-0 位这些位可能被用于其它的块 注 : 寄存器位的规约 : 每一个寄存器的每一个单独的位都用一个键来指示该位的可访问性和初始值 : 86

87 表 3.9 寄存器位的规约键位可访问性 rw 可读 / 写 r 只读 r0 读出值为 0 r 读出值位 w 只写 w0 写入值为 0 w 写入值为 (w) 无寄存器位执行 ; 写入 将产生一个脉冲 寄存器位读出值为 0 h0 硬件清 0 h 硬件置位 -0,- 上电清除 (PUC) 后的初始值 -(0),-() 上电复位 (POR) 后的初始值下面是关于 Flash 使用的代码样例, 其中包括了 Flash 初始化 段擦除 写字节 读字节 写字 读字 改字节和批量写等操作的子程序, 读者可以在此基础上作适当修改, 以用于不同的应用中或移植到其他系列的 msp430 单片机中 #include "msp430g553.h" /**************************************************** g553 有 4 个数据段, 每个数据段有 64bytes, 共 56bytes D:0x x003F C:0x x07F B:0x x0BF A:0x0C0 -- 0x0FF ****************************************************/ #define uint unsigned int #define uchar unsigned char #define SegA 0x00C0 #define SegB 0x0080 #define SegC 0x0040 #define SegD 0x0000 #define SegSize 64 /********************Flash 初始化 ********************/ void FlashInit() FCTL=FWKEY+FSSEL_+FN; // 选择 SMLCK 作为时钟源, 二分频 /********************Flash 检测忙 ********************/ void FlashCheckBusy() while(busy==(fctl3&busy)); // 检测是否忙 87

88 /********************Flash 段擦除 *******************/ void FlashErase(int SegX) _DINT(); // 关闭总中断 FlashCheckBusy(); // 检测 Flash 是否处于忙状态 FCTL3=FWKEY; //lock=0 开锁 FCTL=FWKEY+ERASE; // 使能段擦除 *((int *)SegX)=0x00; // 段擦除 -- 空写 FlashCheckBusy(); // 检测 Flash 是否处于忙状态 FCTL3=FWKEY LOCK; // 上锁 return; /********************Flash 写字节 ********************/ void FlashWriteChar(uint addr,char wdata) _DINT(); // 关闭总中断 FlashCheckBusy(); // 检测 Flash 是否处于忙状态 FCTL3=FWKEY; //lock=0 开锁 FCTL=FWKEY+WRT; // 写使能 *((uchar *)addr)=wdata; // 将 wdata 存入 addr 变量地址中 FCTL=FWKEY; // 写关闭 FCTL3=FWKEY+LOCK; // 上锁 return; /********************Flash 读字节 ********************/ char FlashReadChar(uint addr) char rdata; rdata=*(char*)addr; // 读取 addr 所指地址的值 return rdata; /********************Flash 写字 ********************/ void FlashWriteWord(uint addr,uint wdata) _DINT(); // 关闭总中断 FlashCheckBusy(); // 检测忙, 若忙, 则等待 FCTL3=FWKEY; //lock=0 开锁 88

89 FCTL=FWKEY+WRT; // 写使能 *((uint *)addr)=wdata; // 向地址 addr 处写入 wdata FCTL=FWKEY; // 写关闭 FCTL3=FWKEY+LOCK; // 上锁 return; /********************Flash 读字 ********************/ uint FlashReadWord(uint addr) uint rdata; rdata=*(uint *)addr; // 读取变量 addr 地址的值 return rdata; /********************Flash 修改字节 ********************/ void FlashModifyChar(uint SegX,char AddrNum,char wdata) char i,temparry[segsize]; for(i=0;i<segsize;i++) // 读入内存 TempArry[i]=*(uint *)(SegX+i); TempArry[AddrNum]= wdata; // 在数组中的某一位置 AddrNum 写入 wdata FlashErase(SegX); // 段擦除 FCTL3=FWKEY; //lock=0 开锁 FCTL=FWKEY+WRT; // 准备写 for(i=0;i<segsize;i++) // 向段中重新写数组 *(uint *)(SegX+i)=TempArry[i]; FCTL=FWKEY; // 写关闭 FCTL3=FWKEY+LOCK; // 上锁 /********************Flash 批量写 ********************/ void FlashBurstWrite(int SegX,int *pstr) int i; FlashErase(SegX); // 段擦除 FCTL3=FWKEY; //lock=0, 开锁 89

90 FCTL=FWKEY+WRT; // 写使能 for(i=0;i<*sizeof(pstr);i++) // 将数组内容写入段中 *(uchar *)(SegX+i)=*(pStr+i); FCTL=FWKEY; // 写关闭 FCTL3=FWKEY+LOCK; // 上锁 main() char ReadChar; uint ReadWord; int p[]='a','b','c','d'; WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 PDIR=0xff; //P 口设为输出, 闲置的 I/O 不悬空 PDIR=0xff; //P 口设为输出, 闲置的 I/O 不悬空 POUT=0xff; //P 口输出 POUT=0xff; //P 口输出 FlashInit(); //Flash 初始化 FlashErase(SegD); FlashWriteChar(0x0007,0x); // 向地址 0008h 写入 h ReadChar=FlashReadChar(0x0007); // 读取地址 0008h 的值 FlashWriteWord(0x0008,0x3456); // 向地址 0009h 和 000Ah 依次写入 56h 和 34h ReadWord=FlashReadWord(0x0008); // 读取从地址 0009h 起的一个字 FlashWriteChar(0x007,ReadChar); // 向地址 008h 写入 h FlashWriteWord(0x008,ReadWord); // 向地址 009h 和 00Ah 依次写入 56h 和 34h FlashBurstWrite(SegC,p); // 向 SegD 段从地址 00h 依次写入 a b c d FlashModifyChar(SegB,0x0,0xef); // 将地址 0h 和 03h 内容改为 e 和 f _BIS_SR(CPUOFF); // 关闭 CPU 90

91 第六节通信接口 (USCI 和 USART) 串行通信接口是处理器与外界进行数据传输最常用的方式之一 顾名思义, 串行通信是指使用一条数据线, 将数据一位一位地依次传输, 每一位数据占据一个固定的时间长度 与并行通信相比, 串行通信速度较慢, 但占用更少的 I/O 资源, 只需要少数几条线就可以在系统间交换信息, 特别适用于计算机与计算机 计算机与外设之间的远距离通信 串行通信可以分为同步通信和异步通信两种类型 如果带有同步时钟, 则称为同步串行通信, 如常用的 SPI 和 IC 接口就属于同步串行通信接口 如果没有同步时钟, 依靠严格的时间间隔来传输每一比特, 则称为异步串行通信 MSP430 系列单片机有两种串行通信接口, 较早的 USART 模块和较新的 USCI 模块 其中, 系列和 4 系列单片机多为 USART 模块, 而 系列 5 系列 6 系列和 4 系列较新的型号多配置 USCI 模块 各型号包含的模块个数为 0 4 个不等, 如较为简单的单片机如 MSP430G 不含串行通信模块, 此时可以用定时器软件模拟串口功能 ;MSP430F45 有一个串行通信模块 ;MSP430F49 有两个串行通信模块 ; MSP430F5438 有 4 个串行通信模块, 等等 具体请参看选型手册 USART 又可配置为 UART SPI 或 IC 模式 ;USCI 中,USCI_Ax 支持 UART LIN( 波特率自检 ) IrDA 编解码及 SPI 功能,USCI_Bx 支持 SPI 和 IC 功能, 具体将在以下章节详细介绍 3.6. 串行同步和串行异步通信原理的简述. 同步通信和异步通信同步通信方式, 是把许多字符组成一个信息组, 这样, 字符可以一个接一个地传输 但是, 在每组信息 ( 通常称为信息帧 ) 的开始要加上同步字符, 在没有信息要传输时, 要填上空字符, 因为同步传输不允许有间隙 同步方式下, 发送方除了发送数据, 还要传输同步时钟信号, 信息传输的双方用同一个时钟信号确定传输过程中每 位的位置 见下图 3.6. 所示 图 3.6. 串行同步通信示意图在异步通信方式中, 两个数据字符之间的传输间隔是任意的, 所以, 每个数据字符的前后都要用一些数位来作为分隔位 从图 3.6. 中可以看到, 按标准的异步通信数据格式 ( 叫做异步通信帧格式 ), 个字符在传输时, 除了传输实际数据字符信息外, 还要传输几个外加数位 具体说, 在 个字符开始传输前, 输出线必须在逻辑上处于 状态, 这称为标识态 传输一开始, 输出线由标识态变为 0 状态, 从而作为起始位 起始位后面为 5~8 个信息位, 信息位由低往高 9

92 排列, 即先传字符的低位, 后传字符的高位 信息位后面为校验位, 校验位可以按奇校验设置, 也可以按偶校验设置, 或不设校验位 最后是逻辑的 作为停止位, 停止位可为 位.5 位或者 位 如果传输完 个字符以后, 立即传输下一个字符, 那么, 后一个字符的起始位便紧挨着前一个字符的停止位了, 否则, 输出线又会进入标识态 在异步通信方式中, 发送和接收的双方必须约定相同的帧格式, 否则会造成传输错误 在异步通信方式中, 发送方只发送数据帧, 不传输时钟, 发送和接收双方必须约定相同的传输率 当然双方实际工作速率不可能绝对相等, 但是只要误差不超过一定的限度, 就不会造成传输出错 图 3.6. 是异步通信时的标准数据格式 图 3.6. 异步通信示意图比较起来, 在传输率相同时, 同步通信方式下的信息有效率要比异步方式下的高, 因为同步方式下的非数据信息比例比较小. 传输率所谓传输率就是指每秒传输多少位, 传输率也常叫波特率 在计算机中, 每秒传输多少位和波特率的含义是完全一致的, 但是, 在最初的定义上, 每秒传输多少位和波特率是不同的, 前者是指每秒钟传输的数位是多少, 而波特率是指每秒钟传输的离散信号的数目 所谓离散信号, 就是指不均匀的 不连续的也不相关的信号 在计算机里, 只允许高电平和低电平两种离散信号, 它们分别表示 l 和 0, 于是, 造成了波特率与每秒传输数位这两者的吻合 但在其他一些场合, 就未必如此 比如, 采用脉冲调制时, 可以允许取 4 种相位, 而每种相位代表 个数位, 这种情况下, 按每秒传输多少位 (bps) 计算的传输率便是波特率的两倍 国际上规定了一个标准波特率系列, 标准波特率也是最常用的波特率, 标准波特率系列为 大多数接口的波特率可以通过编程来指定 作为例子, 我们可以考虑这样一个异步传输过程 : 设每个字符对应 个起始位 7 个数据位 个奇 / 偶校验位和 个停止位, 如果波特率为 00, 那么, 每秒钟能传输的最大字符数为 00/0=0 个 作为比较, 我们再来看一个同步传输的例子 假如也用 00 的波特率工作, 每个字符为 7 位, 用 4 个同步字符作为信息帧头部, 但不用奇 / 偶校验, 那么, 传输 00 个字符所用的时间为 7 (00+4)/00=0.6067, 这就是说, 每秒钟能传输的字符数可达到 00 /0.6067=65 个 3. 异步通信的差错类型异步通信过程中, 可能发生通信错误, 一般有 3 种错误 :. 帧格式错 : 在应该接收到停止位的时候, 接收到逻辑的 0, 便产生帧格式错误 9

93 . 奇偶错 : 接收到的奇偶校验位错 3. 覆盖错 : 通信接口接收到数据并存放到数据输入寄存器中, 但是 CPU 没有及时来取, 后面新接收的数据覆盖了前面收到的数据, 叫做覆盖错 发生帧格式错和奇偶错的原因可能为下面几种 : 发送和接收双方采用了不同的传输率, 或虽然双方约定了相同的传输率, 但传输率不可能绝对相等 在通信的速率比较高的情况下, 如果双方的传输率误差达到一定的程度, 也会造成通信出错 ; 通信双方采用了不相同的帧格式 ; 干扰 3.6. USCI 模块的相关寄存器定义.USCI 模块原理图 图 USCI_Ax 方框图 : UART 模式 (UCSYNC = 0) USCI_Ax 模块结构图 所示 该模块包含 4 个部分 : 波特率部分 : 控制串行通信数据接收和发送的速度 接收部分 : 接收串行输入的数据 发送部分 : 发送串行输出的数据 93

94 接口部分 : 完成并 / 串 串 / 并转换. USCI 串行通信模块寄存器硬件 USCI 方式可实现串行通信时, 允许 7 或 8 位串行位流以预先编程的速率或外部时钟确定的速率输入 输出给 MSP430 单片机 用户对 USCI 的使用是通过对硬件原理和通信协议理解, 在进行一系列寄存器设置之后, 由硬件自动实现数据的输入输出 USCIx 分为 USCI_Ax 和 USCI_Bx, 其中只有 USCI_Ax 可配置为 UART,MSP430 单片机中有的型号有两个通信模块 USCI0 和 USCI, 因此它们有两套寄存器, 参见表 3.0 和表 3. USCI 的中断相关寄存器有所不同, 使用时请注意参照手册配置 表 3.0 USCI_A0 控制和状态寄存器 表 3. USCI_A 控制和状态寄存器 ()UCAxCTL, USCI_Ax 控制寄存器 0 UCPEN: 第 7 位校验允许位 94

95 0 校验禁止 ; 校验允许 校验允许时, 发送端发送校验, 接收端接收该校验 多机模式中, 地址位包含校验操作 UCPAR: 第 6 位奇偶校验选择位, 该位在校验允许时有效 0 奇校验 ; 偶校验 UCMSB: 第 5 位大小端存储方式选择, 控制发送和接收寄存器的存储方向 0 低位在前 高位在前 UC7BIT: 第 4 位数据长度, 选择 7 位或 8 位数据长度 0 8 位数据 7 位数据 UCSPB: 第 3 位停止位选择, 选择停止位位数 0 位停止位 位停止位 UCMODEx: 第 - 位 USCI 模式, 当 UCSYNC = 0 时,UCMODEx 位选择异步通信模式 00 UART 模式 ; 0 线路空闲多机模式 ; 0 地址多机模式 带自动波特率检测的 UART 模式 UCSYNC: 第 0 为同步模式使能 0 异步模式 同步模式 ()UCAxCTL, USCI_Ax 控制寄存器 UCSSELx: 第 7-6 位 USCI 时钟源选择, 这些位选取 BRCLK 的时钟源 00 UCLK 0 ACLK 0 SMCLK SMCLK UCRXEIE: 第 5 位接收数据错误中断允许 0 拒收错误字符,UCAxRXIFG 不置位 ; 接收错误字符并置位 UCAxRXIFG UCBRKIE: 第 4 位接收暂停字符中断允许 0 接收暂停字符不置位 UCAxRXIFG; 接收暂停字符置位 UCAxRXIFG UCDORM: 第 3 位休眠, 令 USCI 进入睡眠状态 95

96 0 不休眠, 所有接收字节都置位 UCAxRXIFG; 休眠, 只有前导为空闲线路的字节才置位 UCAxRXIFG 在带自动波特率检测的 UART 模式下只有同步场和间断的组合才能置位 UCAxRXIFG UCTXADDR: 第 位发送地址, 如果选择了多机模式, 发送的下一帧将被标识为地址 0 下一帧发送的是数据 ; 下一帧发送的是地址 UCTXBRK: 第 位发送隔断 通过向发送缓冲区写下一字节来产生隔断 在带自动波特率检测的 UART 模式下必须向 UCAxTXBUF 写 055h 来产生要求的隔断 / 同步区域 其他情况则要向发送缓冲写 0h 0 下一帧不是隔断 ; 发送的下一帧是隔断或者是隔断 / 同步 UCSWRST: 第 0 位软件复位允许 0 禁止 USCI 复位释放来允许操作 ; 允许 USCI 逻辑保持在复位状态 (3)UCAxBR0, USCI_Ax 波特率控制寄存器 (4)UCAxBR, USCI_Ax 波特率控制寄存器 UCBRx: 第 7-0 位波特率发生器的时钟预分频设置 (UCAxBR0 + UCAxBR 56) 这个 6 位的值构 成预分频的值 (5)UCAxMCTL, USCI_Ax 调制控制寄存器 UCBRFx: 第 7-4 位第一调制阶段选择. 当 UCOS6 = 时, 这些位决定 BITCLK6 的调制模式 当 UCOS6 = 0 时这些位被忽略 UCBRSx: 第 3- 位 第二调制阶段选择. 这些位决定 BITCLK 的调制模式 表 5- 给出调制模式 UCOS6: 第 0 位过采样模式使能 0 禁止 使能 (6)UCAxSTAT, USCI_Ax 状态寄存器 UCLISTEN: 第 7 位侦听允许,UCLISTEN 位选择回路模式 0 禁止 ; 允许,UCAxTXD 被从内部反馈到接收器 96

97 UCFE: 第 6 位帧差错标志 0 无错误 ; 字符在低停止位下被接收 UCOE: 第 5 位覆盖错误标志., 当 UCAxRXBUF 中前一帧数据还未读出新的子节就被写入时这一位被置位 当 UCxRXBUF 被读后,UCOE 会被软件自动清除, 否则, 它将无法正常工作 0 无错误 ; 发生覆盖错误 UCPE: 第 4 位奇偶校验错误标志. 当 UCPEN = 0, UCPE 被读为 0. 0 无错误 ; 接收数据奇偶校验出错 UCBRK: 第三位暂停检测标志 0 没有暂停条件 ; 暂停条件发生 UCRXERR: 第 位接收错误标志位, 这一位表明接收数据出现错误 当 UCRXERR =, 一个或更多个错误发生 (UCFE, UCPE, UCOE) 也被置位 当 UCAxRXBUF 被读取后 UCRXERR 被清除 0 没有接收错误 ; 有接收错误 UCADDR: 第 位在地址位多机模式下地址被接收 0 接收内容为数据 接收内容为一地址 UCIDLE: 在空闲线路多机模式下的空闲线路检测状态 0 未检测到空闲线路 检测到空闲线路 UCBUSY: 第 0 位 USCI 忙标志. 这一位表明是否有发送或接收操作正在进行 0 USCI 闲置 USCI 正在发送或接收 (7)UCAxRXBUF, USCI_Ax 接收缓冲寄存器 UCRXBUFx: 第 7-0 位接收缓存从接收移位寄存器最后接收的字符, 可由用户访问 读取 UCAxRXBUF 会复位接收错误位,UCADDR UCIDLE 和 UCAxRXIFG 在 7 位数据位模式下,UCAxRXBUF 是低位在前的 (8)UCAxTXBUF, USCI_Ax 发送缓冲寄存器 UCTXBUFx: 第 7-0 位发送数据缓存使用户可访问的, 它可以保持数据直到数据被传送至发送移位寄 存器, 然后由 UCAxTXD 传输 对发送缓存进行写操作可以复位 UCAxTXIFG, 在 7 位数据模式下 UCAxTXBUF 97

98 的 MSB 位没有使用并被复位 (9)UCAxIRTCTL, USCI_Ax IrDA 发送控制寄存器 UCIRTXPLx: 第 7- 位发送脉冲宽度 脉冲宽度 tpulse = (UCIRTXPLx + ) / ( firtxclk) UCIRTXCLK: 第 位 IrDA 发送脉冲时钟选择 0 BRCLK 当 UCOS6 =,BITCLK6; 否则, BRCLK UCIREN: 第 0 位 IrDA 编码 / 解码使能 0 IrDA 编码 / 解码禁止 IrDA 编码 / 解码使能 (0)UCAxIRRCTL, USCI_Ax IrDA 接收控制寄存器 UCIRRXFLx: 第 7- 位接收脉冲宽度 接收最小脉宽由下式给出 :tmin = (UCIRRXFLx + 4) / ( firtxclk) UCIRRXPL: 第 位 IrDA 接收输入 UCAxRXD 极性 0 当接收到一个光脉冲时 IrDA 发送器传递一个正脉冲 当接收到一个光脉冲时 IrDA 发送器传递一个负脉冲 UCIRRXFE: 第 0 位 IrDA 接收滤波器使能 0 接收滤波器禁止 接收滤波器使能 ()UCAxABCTL, USCI_Ax 自动波特率控制寄存器 保留第 7-6 位保留 UCDELIMx: 第 5-4 位间断 / 同步字符长度 00 位长度 0 位长度 0 3 位长度 4 位长度 UCSTOE: 第 3 位同步字段超时错误 0 无错误 同步字段长度超过可测量的时间 UCBTOE: 第 位间隔字段超时错误 0 无错误 98

99 间隔字段长度超过 位次保留第 位保留 UCABDEN: 第 0 位自动波特率检测允许 0 波特率检测禁止, 间隔和同步域长度不被测量 波特率检测允许, 间隔和同步域长度被测量并且相应的对波特率设置做出改变 ()IE, 中断使能寄存器 未用 第 7-4 位未用 第 3- 位这些位在其他的 USCI 模式下可能被使用 UCA0TXIE: 第 位 USCI_A0 发送中断允许 0 中断禁止 中断允许 UCA0RXIE: 第 0 位 USCI_A0 接收中断允许 0 中断禁止 中断允许 (3)IFG, 中断标志寄存器 未用 第 7-4 位未用 第 3- 位这些位在其他的 USCI 模式下可能被使用 UCA0TXIFG: 第 位 USCI_A0 发送中断标志位, 当 UCA0TXBUF 为空时, UCA0TXIFG 被置位 0 无中断挂起 中断挂起 UCA0RXIFG: 第 0 位 USCI_A0 接收中断标志, 当 UCA0RXBUF 接收到一整帧数据, UCA0RXIFG 将被置位 0 无中断挂起 中断挂起 (4)UCIE, USCI_A 中断使能寄存器 未用 第 7-4 位未用 第 3- 位这些位在其他的 USCI 模式下可能被使用 UCATXIE: 第 位 USCI_A 发送中断允许 0 中断禁止 中断允许 99

100 UCARXIE: 第 0 位 USCI_A 接收中断允许 0 中断禁止 中断允许 (5)UCIFG, USCI_A 中断标志寄存器 未用 第 7-4 位未用 第 3- 位这些位在其他的 USCI 模式下可能被使用 UCATXIFG: 第 位 USCI_A 发送中断标志位, 当 UCATXBUF 为空时, UCATXIFG 被置位 0 无中断挂起 中断挂起 UCARXIFG: 第 0 位 USCI_A 接收中断标志, 当 UCARXBUF 接收到一整帧数据, UCARXIFG 将被置位 0 无中断挂起 中断挂起 USART 的相关寄存器定义. USART 模块原理图 00

101 图 异步串行通信模块原理图 USART 模块结构图 所示 该模块包含 4 个部分 : 波特率部分 : 控制串行通信数据接收和发送的速度 接收部分 : 接收串行输入的数据 发送部分 : 发送串行输出的数据 接口部分 : 完成并 / 串 串 / 并转换. USART 通信模块寄存器硬件 USART 方式可实现串行通信时, 允许 7 或 8 位串行位流以预先编程的速率或外部时钟确定的速率输入 输出给 MSP430 单片机 用户对 USART 的使用是通过对硬件原理和通信协议理解, 在进行一系列寄存器设置之后, 由硬件自动实现数据的输入输出 MSP430 器件中有的型号有两个通信模块 USART0 和 USART, 因此它们有两套寄存器, 参见表 3. 和表 3.3 表 3. 串口 0(USART0) 的控制寄存器 表 3.3 串口 (USART) 的控制寄存器 注 : 两套串口相互独立, 且寄存器结构相同, 这里我们仅介绍一套串口, 用 Ux 表示 ()UxCTL 串口控制寄存器 0

102 PENA: 校验允许位 0 校验禁止 ; 校验允许 校验允许时, 发送端发送校验, 接收端接收该校验 地址位多机模式中, 地址位包含校验操作 PEV: 奇偶位校验位, 该位在校验允许时有效 0 奇校验 ; 偶校验 SPB: 停止位选择 决定发送的停止位数, 但接收时接收器只检测 位停止位 0 位停止位 位停止位 CHAR: 字符长度 0 7 位 8 位 LISTEN: 反馈选择 选择是否讲发送数据由内部反馈给接收器 0 无反馈 有反馈, 发送信号由内部反馈给接收器 SYNC:USART 模块的模式选择 0 UART 模式 ( 异步 ) SPI 模式 ( 同步 ) MM: 多机模式选择位 0 线路空闲多机协议 ; 地址多机协议 SWRST: 控制位该位的状态影响着其他一些控制位和状态位的状态 在串行口的使用过程中, 这一位是比较重要的控制位 一次正确的 USART 模块初始化应该是这样的顺序 : 先在 SWRST= 情况下设置串行口 ; 然后设置 SWRST=0; 最后如果需要中断, 则设置相应的中断使能 ()UxTCTL 串口发送寄存器 CKPL: 时钟极性控制位 0 UCLKI 信号与 UCLK 信号极性相同 ; UCLKI 信号与 UCLK 信号极性相反 ; SSELx: 时钟源选择位这两位确定波特率发生器的时钟源 0 外部时钟 UCLKI 辅助时钟 ACLK 子系统时钟 SMCLK 0

103 3 子系统时钟 SMCLK URXSE: 接收触发沿控制位 0 没有接收触发沿检测 ; 有接收触发沿检测 TXWAKE: 传输唤醒控制 0 下一个要传输的字符为数据 下一个要传输的字符为地址 TXEPT: 发送器空标志在异步模式与同步模式时不一样 0 正在传输数据或者发送缓冲器 (UTXBUF) 有数据 ; 表示发送移位寄存器和 UTXBUF 空或者 SWRST= (3)UxRCTL 串口接收寄存器 FE: 帧错误标志 0 没有帧错误 ; 帧错误 PE: 校验错误标志位 0 校验正确 ; 校验错误 OE: 溢出标志位 0 无溢出 有溢出 BRK: 打断检测位 0 没有被打断 ; 被打断 URXEIE: 接收出错中断允许位 0 不允许中断, 不接收出错字符并且不改变 URXIFG 标志位 ; 允许中断, 出错字符接收并且能够置位 URXIFG URXWIE: 接收唤醒中断允许位当接收到地址字符时, 该位能够置位 URXIFG, 当 URXEIE=0, 如果接收内容有错误, 该位不能置位 URXIFG 0 所有接收的字符能够置位 URXIFG; 只有接收到地址字符才能置位 URXIFG RXWAKE: 接收唤醒检测位在地址位多机模式, 接收字符地址位置位时, 该机被唤醒, 在线路空闲多机模式, 在接收到字符前检测到 URXD 线路空闲时, 该为被唤醒,RXWAKE 置位 0 没有被唤醒, 接收到的字符是数据 ; 唤醒, 接收的字符是地址 03

104 RXERR: 接收错误标志位 0 没有接收错误 ; 有接收错误 (4)UxBR0 波特率控制寄存器 0 (5)UxBR 波特率控制寄存器 UxBR0 和 UxBR 两个寄存器用于存放波特率分频因子的整数部分 其中 UXBR0 位低字节,UXBR 为高字节 两字节和起来为一个 6 位字, 成为 UBR 在异步通信时,UBR 的允许值不小于 3 如果 UBR<3, 则接收和发送会发生不可预测的错误 (6)UxMCTL 波特率调整寄存器 如果波特率发生器的输入频率 BRCLK 不是所需的波特率的整数倍, 带有一小数, 则整数部分写入 UBR 寄存器, 小数部分由调整控制寄存器 UxCTL 的内容反映 波特率由以下公式计算 : 波特率 = BRCLK / (UBR+ (M7+M6+..+M0) / 8 ) 其中 M0,M, M6 及 M7 为控制器 UxMCTL 中的各位 调整寄存器的 8 为分别对应 8 次分频, 如果 M=, 则相应次的分频增加一个时钟周期 ; 如果 Mi=0, 则分频计数器不变 (7)UxRXBUF 串口接收缓冲寄存器 接收缓存从接收移位寄存器最后接收的字符, 可由用户访问 当接收和控制条件为真时, 接收缓存装入当前接收到的字符, 如下表所列 : 条件 结果 URXEIE URXWIE 装入 URXBUF PE PE BRK 0 无差错地址字符 所有地址字符 X X X 0 0 无差错字符 所有字符 X X X (8)UxTXBUF 串口发送缓冲寄存器 发送缓存内容可以传送至发送移位寄存器, 然后有 UxTXDx 传输 对发送缓存进行写操作可以复位 UxTXIFGx (9)ME ME 串口模块控制寄存器 ME 模块允许寄存器 04

105 ME 模块允许寄存器 UTXE0: 串口 0 的发送允许 URXE0: 串口 0 的接收允许 UTXE: 串口 的发送允许 URXE: 串口 的接收允许 0 禁止 允许 (0)IFG IFG 串口中断标志控制寄存器 IFG 中断标志寄存器 IFG 中断标志寄存器 UTXIFG0: 串口 0 的发送中断标志 URXIFG0: 串口 0 的接收中断标志 UTXIFG: 串口 的发送中断标志 URXIFG: 串口 的接收中断标志 0 无中断请求标志 有中断请求标志 ()IE IE 串口中断控制寄存器 IE 中断控制寄存器 IE 中断控制寄存器 UTXIE0: 串口 0 的发送中断允许 URXIE0: 串口 0 的接收中断允许 UTXIE: 串口 的发送中断允许 URXIE: 串口 的接收中断允许 0 中断请求禁止 中断请求允许 USCI 模块初始化和收发操作步骤流程.USCI 模块的串行异步通信操作 USCI_Ax 在某一特定波特率下异步的发送和接收数据 每一字符的发送或接收所用时间与 USCI 选取的波特率有关, 发送和接收功能使用相同的波特率 05

106 在异步通信模式下,MSP430 单片机通过两个引脚, 即接收引脚 UCAxRXD 和发送引脚 UCAxTXD 与外界相连 当 UCSYNC 位被清除时,UART 模式被选择 异步通信的特点如下 : 传输 7 位或 8 位数据, 可采用奇校验或偶校验或者无校验 两个独立移位寄存器 : 输入移位寄存器和输出移位寄存器 独立的发送和接收缓冲寄存器 从低位在前或高位在前的数据发送和接收 对多机系统内置有线路空闲 / 地址位通信协议 通过有效的起始位检测将 MSP430 从低功耗唤醒 可编程实现分频因子为整数或小数的波特率 状态标志检测和抑制错误 状态标志检测地址位 独立的发送和接收中断能力 ()USCI 初始化和复位 USCI 在 PUC 后或者通过设置 UCSWRST 位 在 PUC 后,UCSWRST 位自动置位, 保持 USCI 在复位状态 当置位时,UCSWRST 位复位 UCAXRXIE,UCAXTXIE,UCAXRXIFG,UCRXERR,UCBRK, UCPE,UCOE,UCFE,UCSTOE 和 UCBTOE 位并置 UCAXTXIFG 位 清除 UCSWRST 位释放 UCSI 的操作 注解 : 初始化或者从新配置 USCI 模块, 推荐的 USCI 初始化 / 重配置的过程如下 : a. 设置 UCSWRST b.ucswrst= 时初始化所有的 UCSI 寄存器 ( 包括 UCAXCTL) c. 配置端口 d. 软件清除 UCSWRST e. 通过 UCAXRXIE 和 / 或 UCAXTXIE 允许中断 ( 可选 ) () 字符格式 UART 的字符格式展示在图 中, 包括一个开始位,7 或 8 个数据位, 一个奇 / 偶 / 无校验位, 一个地址位 ( 地址位模式 ), 一个或两个停止位 UCMSB 位控制传输的方向以及选择 LSB 或 MSB 的优先 必须满足 UART 通信才能 LSB-FIRST 图 字符格式 (3) 异步通信格式当两个设备异步通信时, 多机的模式是协议所要求的 当三个或更多的设备通信时,USCI 支持空闲线和地址位多机的通信格式 空闲线路多机模式 : 06

107 当 UCMODEX=0 时, 空闲线路多机模式被选中 块数据在发送和接收线上被一段空闲时间隔开, 如图 所示 当 0 个或更多的持续标志被在一个或两个字符的停止位之后接收到时一条空闲接收线被监测 在接收到一次空闲线之后波特率发生器被切断, 直到下一次开始边沿被监测到 当一次空闲线被监测到时,UCIDLE 位被表示为多机形式,UCDORM 位被用来控制数据接收 当 UCDORM= 时, 所有的非地址字符被组装但不会传输到 UCAXRXBUF 中, 此时中断不会发生 当接收一个地址字符时, 这个字符被传输到 UCAXRXBUF 中,UCAXRXIFG 被置位, 当 UCRXEIE= 时任何可用的错误标志被置位 当 UCRXEIE= 时并且一个带有帧错误或奇偶错误的地址字符被接收到时, 字符就不会传输到 UCAXRXBUF 中, 而且 UCAXRXIFG 不会置位 如果接收到一个地址, 使用者需软件确认此地址 同时, 为继续接收数据必须复位 UCDORM 如果 UCDORM 保持置位就只能接收到地址字符 在接收字符的过程中一旦 UCDORM 被清除, 接收中断标志将在接收完成后被置位,UCDORM 位不会被 USCI 的硬件自动改变 在空闲线多机形式进行地址传输, 为了在 UCAXTXD 上发生地址字符确认, 一个精确的空闲周期会被 USCI 产生 如果下一个字符先于 位的空闲线被装载到 UCAXTXBUF 中, 这通过双缓存 UCTXADDR 标志展示出来, 当开始位发生时,UCTXADDR 将被自动清除 图 空闲线路格式发送空闲帧 : 以下操作为发送一个空闲帧来展示一个地址字符及其关联的数据 : 置位 UCTXADDR, 然后写地址字符到 UCAXTXBUF 中,UCAXTXBUF 必须准备发送新数据 (UCAXTXIFG=) 这可以产生一个 位的空闲周期以及随后的地址字符 UCTXADDR 在地址字符从 UCAXTXBUF 传输到移位寄存器中后自动复位 写预期数据到 UCAXTXBUF 中,UCAXTXBUF 必须准备发送新数据 (UCAXTXIFG=) 写到 UCAXTXBUF 中的数据传输到移位寄存器中并且一旦移位寄存器准备新数据就开始发送 空闲周期不能超过地址和数据传输的间隙或者数据和数据传输的间隙, 否则传输的数据将被误解为地址 地址位多机模式 : 当 UCMODEX=0, 地址位多机模式被选中 如图 所示, 每个待处理的字符包含一 07

108 个用作地址指示的位 字符块的第一个字符带有一个设置指示字符地址的地址位 USCI 的 UCADDR 位在包含地址位的字符中, 被传输到 UCAXRXBUF 中时即置位 在地址位多机模式中 UCDORM 位被用来控制数据接收 当 UCDORM 置位时, 地址位为 0 的字符数据被接收器组装起来但不传输到 UCAXRXBUF 中, 同时没有中断发生 当接收一个包含已置地址位的字符时, 此字符被传输到 UCAXRXBUF 中,UCAXRXIFG 被置位, 同时当 UCRXEIE= 时所有可用错误标志被置位 当 UCRXEIE= 时接收一个包含已置地址位的字符, 但是没有帧错误和极性错误发生, 此时这个字符不会传输到 UCAXRXBUF 中而且 UCAXRXIFG 不会被置位 如果接收到一个地址, 用户需要软件使地址生效同时复位 UCDORM 去继续接收数据 如果 UCDORM 保持置位, 仅仅是已置地址位的地址字符被接收到 UCDORM 位不会被 USCI 模块自动改变 当 UCDORM= 时所有已接收的字符将置位中断标志 UCAXRXIFG 如果在接收数据期间清除 UCDORM 接收中断标志将在接收完成之后置位 在地址位多处理模式的地址传输中, 字符的地址位被 UCTXADDR 位控制,UCTXADDR 的值装载到字符的地址位后从 UCAXTXBUF 传送到发送移位寄存器中 当开始位发生时 UCTXADDR 被自动清除 图 地址位多机格式暂停接收的产生 : 当 UCMODEX=00,0 或 0 时, 不管是奇偶位, 地址模式还是字符设置, 接收器在监测到一次暂停时数据位, 奇偶位, 停止位都要变低 当一次暂停被监测到时,UCBRK 位置位 如果暂停中断允许位 UCBRKIE 置位, 接收中断标志 UCAXRXIFG 也会置位 这样的话, UCAXRXBUF 的值在所有数据位为 0 后变成 0 设置 UCTXBRK 位来发生暂停, 然后写 0 到 UCAXTXBUF 中,UCAXTXBUF 必须准备新的数据 (UCAXTXIFG=) 这就会发生暂停, 同时所有位变低 当开始位发生时, UCTXBRK 自动清除 (4) 自动波特率检测当 UCMODEX= 时 UART 模式的自动波特率监测被选中 在这种情况下, 数据帧在一个包含暂停和异步域的异步序列之后 当 个或更多的 0 被接收到时监测到暂停 如果暂停 08

109 时间超过 位的传输时间暂停超时错误标志 UCBTOE 将被置 暂停的异步域如图 所 示 图 自动波特率监测 - 暂停 / 同步序列为了 LIN 一致, 字符格式应该设置为 8 位数据位,LSB 在前, 无奇偶校验位和停止位 没有可用的地址位 在一个字节域内同步域所包含的数据 055H 如图 所示 同步的时间范围在第一个下降沿和最后一个下降沿之间 如果自动波特率监测通过置位 UCABDEN 而被允许发送波特率发生器就可以用来测量 否则, 这个模式只被接收而不测量 测量的结果被传送到波特率控制寄存器 UCAXBR0, UCAXBR 和 UCAXMCTL 中 如果同步域的长度超过了测量时间同步超时错误标志 UCSTOE 将置位 图 自动波特率监测 - 同步域在这种模式中 UCDORM 位被用来控制数据接收 当 UCDORM 置位时, 所有字符被接收而不传输到 UCAXRXBUF 中去, 而且中断不发生 当一个暂停 / 同步域被监测到时 UCBRK 标志被置位 随后的暂停 / 同步域的字符被传送到 UCAXRXBUF 中同时 UCAXRXIFG 中断标志置位 任何可用的错误标志也会置位 如果 UCBRKIE 位置位, 暂停 / 同步的接收置位 UCAXRXIFG 通过读接收缓存 UCAXRXBUF,UCBRK 位被用户软件置位 当一个暂停 / 同步域被接收时, 为继续接收数据用户必须软件置位 UCDORM 如果 UCDORM 保持置位状态, 仅仅在接受下一个暂停 / 同步域时字符才能被接收 UCDORM 位不会被 USCI 硬件自动更改 当 UCDORM=0 时所有的接收字符将使接受中断标志 UCAXRXIFG 置位 如果在接收字符的过程中 UCDORM 被清除, 接收中断标志在完成接受后将置位 发送暂停 / 同步域 : 以下为发送一个暂停 / 同步域的程序流程 置位 UCTXBRK 且 UMODEX= 写 0X55 到 UCAXTXBUF UCAXBUF 必须准备新数据 (UCAXTXIFG=) 伴随着中断分割符和同步字符将会产生一个 3 位的暂停域 暂停域的长度被 UCDELIMX 位控制 当同步字符从 UCAXTXBUF 传输到移位寄存器中时 UCTXBRK 将自动复位 09

110 3 写数据字符到 UCAXTXBUF 中 UCAXTXBUF 必须准备新数据 (UCAXTXIFG=) 写到 UCAXTXBUF 中的数据传输到移位寄存器中, 一旦移位寄存器有新数据就立即发送 (5)IrDA 编码和解码当 UCIREN 置位,IrDA 解码器和译码器被允许, 同时提供修整 IrDA 通信的硬件位,IrDA 译码 IrDA 编码 : 如图 3.6.0, 在来自 UART 的发送字节流中, 译码器为每个 0 位发送一个脉冲, 脉冲持续时间由 UCIRTXPLX 位决定 UCIRTXPLX 位指定被 UCIRTXCLK 选中的时钟周期的数目 图 UART VS IRDA 数据格式 由 IrDA 标准要求去设置 3/6 位的周期脉冲, 通过置 UCIRTXCLK= 选中 BITCLK6 时钟, 同时脉冲长度由 UCIRTXPLX=6-=5 来设置 6 个半时钟循环 当 UCIRTXCLK=0, 基于 BRCLK 的脉冲长度 Tpluse 由下面的公式计算 : 当 UCIRTXCLK=0 时计数器 UCBRX 必须被设置成一个大于或等于 5 的值 IrDA 解码 : 当 UCIRRXPL=0 时, 解码器监测到高脉冲 否则就监测到低脉冲 除模拟抗尖峰脉冲滤波器外, 可编程数字滤波器也能通过设置 UCIRRXFE 被允许 当 UCIRRXFE 置位, 只有比可编程滤波器长的脉冲能通过 短脉冲被丢弃 可编程滤波器长度 UCIRRXFLX 的方程式如下 : 这里 : Tpulse: 接受脉冲的最小宽度 ; Twake: 从任何低功耗中唤醒 当 MSP430 单片机处于活动模式时为 0 (6) 自动错误检测干扰脉冲抑制会阻止 USCI 的突然启动 在 UCAXRXD 上的任何小于抗尖峰脉冲时间 Tt ( 大约 50NS) 的脉冲都被忽略 参见设备数据手册的参数 当在 UCAXRXD 上有超过 Tt 的低脉冲多数情况都会被当开始位 如果多数情况没有监测到一个有效的开始位 USCI 将停止接收字符同时等待 UCAXRXD 上的下一个低电平 为阻止错误这种方法也用在每一位数据的接收上 在接收字符过程中 USCI 模块自动监测帧错误, 奇偶校验错误, 溢出错误以及暂停条件 0

111 在相应的情况被监测到时 UCFE,UCPE,UCOE 以及 UCBRK 等位置位 当 UCFE,UCPE 和 UCOE 等错误标志置位时,UCRXERR 也置位 错误条件在表 3.4 中描述 表 3.4 接收错误情况错误情况错误标志描述当一个低停止位被监测到时此错误发生 当使用两个停止位, 两位帧错误 UCFE 都会被检查是否有帧错误 当检测到帧错误时,UCFE 置位 奇偶校验错一个奇偶校验错误是一次字符中校验位的实际值和设置值的不匹配 UCPE 误包括在奇偶位中的计算 当一次错误被监测到时,UCPE 置位 在读前一个字符之前另一个字符被装载到 UCAXRXBUF 中引发一次溢接收溢出 UCOE 出错误 当溢出错误发生时,UCOE 置位当不使用自动波特率监测时, 在所有的数据, 校验位和停止位为低时暂停情况 UCBRK 暂停被监测到 同时 UCBRK 置位 如果暂停中断允许位 UCBRKIE 置位暂停发生时还会置位其中断标志 UCAXRXIFG 当 UCRXEIE=0 时以及帧错误或奇偶校验错误被监测到时, 不会有字符被接收到 UCAXRXBUF 中 当 UCRXEIE= 时, 字符被接收到 UCAXRXBUF 中, 同时相应的错误位置位 当 UCFE,UCPE,UCOE,UCBRK 或 UCRXEER 置位时, 其状态保持到用户软件复位或 UCARXBUF 中的数据被读出 UCOE 必须通过读 UCAXRXBUF 复位, 否则它不会起作用 (7)USCI 接收使能 USCI 模块通过清除 UCSWRST 位, 接收器做好准备和在空闲状态下被允许 接收波特率发生器保持在准备状态但不计时, 不产生任何时钟 开始位的下降沿允许波特率发生器同时 UART 状态机器检查一个有效的开始位, 如果没有监测到有效的开始位 UART 机器状态返回到空闲态同时波特率发生器再次被关掉 ; 如果一个有效的开始位被监测到字符就能被接收 当 UCMODEX=0 空闲线多机模式被选中,UART 机器状态在接收一个字符后检查空闲线 如果监测到开始位, 另一个字符会被接收 否则在接收 0 个字符后 UCIDLE 标志置位, 同时 UART 的机器状态返回到空闲态并且波特率发生器被关掉 接收数据干扰脉冲抑制 : 干扰脉冲抑制会阻止 USCI 的突然启动 在 UCAXRXD 上的任何小于抗尖峰脉冲时间 Tt( 大约 50NS) 的脉冲都被忽略, 同时进一步的情况会发生, 如图 3.6. 所示 参见设备数据手册的参数 图 3.6. 干扰脉冲抑制,USCI 不开始接收当干扰脉冲时间大于 Tt 时, 或者一个有效的开始发生在 UCAXRXD 上 USCI 开始接收操作而且多数情况在图 3.6. 中展示 如果多数情况没有监测到一个有效的开始位 USCI 将停止接收字符

112 图 3.6. 干扰脉冲抑制,USCI 启动 (8)USCI 发送使能 USCI 模块通过清除 UCSWRST 位, 接收器做好准备和在空闲状态下被允许 接收波特率发生器保持在准备状态但是不计时, 不产生任何时钟 一次传输通过写数据到 UCAXTXBUF 中初始化 当初始化发生后, 波特率发生器被允许 同时, 在发送移位寄存器为空后的下一个 BITCLK 周期 UCAXTXBUF 中的数据被移到发送移位寄存器, 当新数据被写进 UCAXTXBUF 时,UCAXTXIFG 置位 先前的数据发送结束时, 只要在 UCAXTXBUF 中的新数据有效发送就会不断进行 在前一个数据发送后如果没有新数据在 UCAXTXBUF 中, 发送器返回到空闲态并且波特率发生器被关掉 (9)UART 波特率产生 USCI 波特率发生器能从非标准源频率中产生一个标准的波特率 通过 UCOS6 位提供两种操作选择低频波特率生成 : 当 UCOS6=0 时低频模式被选中 这种模式允许波特率从低频时钟源中产生 ( 比如 3768HZ 晶振产生 9600 波特率 ) 通过使用较低的输入频率, 能减少模块的能量消耗 在低频模式中波特率发生器使用一个计数器和一个调节器产生位时钟时序 这种组合支持波特率产生的小数部分 在这种模式下, 最大的 USCI 波特率能达到时钟源频率的 /3 每一位的时序展示在图 中, 对接收的每一位, 多数表决被采用以决定位值 这些采样过程发生在 N/-/,N/, 和 N/+/ 个 BRCLK 周期处,N 是每个 BITCLK 周期中 BRCLK 的数目 图 UCOS6=0 时 BITCLK 波特率时序基于 UCBRSX 的调制如表 所示 表中 A 表示了 m= 并且相应的 BITCLK 周期比 m=0 时的 BITCLK 大一个 BRCLK 的情况 调制经 8 位循环一次, 但是在每一个新的起始位会重启 表 3.5 BITCLK 调制模式

113 过采样波特率生成 : 当 UCOS6 = 时过采样模式被选择 这一模式支持以更高的时钟频率取样一个 UART 比特流 这导致多数表决总是相距 /6 位时钟周期 当 IrDA 编码和解码器使能时, 这一模式也非常易于用 3/6 位时间支持 IrDA 脉冲 这一模式使用一个预定标器和一个调幅器来产生 BITCLK6 时钟信号, 这一时钟比 BITCLK 快 6 倍 一个额外的分频器和调幅器从 BITCLK6 阶段产生 BITCLK 这一组合支持 BITCLK6 和 BITCLK 波特率发生的小数分频 在这一模式下, 最大的 USCI 波特率位 /6 UART 时钟源频率 BRCLK 当 UCBRx 置 0 或 时, 第一个预定标和调幅器被旁路并且 BRCLK 等于 BITCLK6 BITCLK6 的调制基于表 3.6 给出的设置 表中表示 BITCLK6 的相应周期比 m=0 时长一个 BRCLK 周期 每个新的位定时重新启动调制过程 表 3.6 BITCLK6 调制模式 (0) 设定波特率 对于给定的 BRCLK, 波特率有除数因子 N 决定 除数因子 N 通常不是一个整数值, 因此至少需要一个除法器和一个调制器去调整波特率 如果 N 等于或大于 6, 过采样波特率产生模式能通过设置 UCOS6 被选中 低频波特率模式设置 : 在低频模式下, 除法器的整数部分由计数器实现 : 3

114 同时小数部分由调制器通过下面的公式实现 : 对于任何给定的位, 通过计算增加或减少 UCBRSX 设定可能会降低最大位误差 为了决定是否是这种情况, 在每一次的 UCBRSX 的设定中必须对误差进行详细的计算 过采样波特率模式设置 : 在过采样模式中计数器被设置为 : 同时前级调节器被设置为 : 当要求更高的精度时,UBRSX 调节器也可以通过从 0-7 调节实现 为了对任何给定位的在最坏情况下的最大误差进行查明, 必须对 USCBSX 的 0-7 位的误差进行详细的计算, 而且这 0-7 位的随着 UCBRFX 设定增加或减少 () 发送位时序每个字符的时序是单个位时序的总和 使用波特率发生器的调节特性可以减少累计的位误差 单个位误差可以通过以下的步骤被计算出来 低频波特率模式设置 : 在低频模式中, 计算 Tbit,TX[I] 位的长度是基于 UCBRX 和 UCBRSX 的设定 : 这里 : mucbrsx[i]= 调制位 i 来自表 3.5 中过采样波特率模式设置 : 在过采样波特率模式中计算位 I Tbit 的长度,TX[I] 的设定基于波特率发生器 UCBRX, UCBRFX 和 UCBRSX: 这里 总和来自相应的表 3.6 中的内容 调制位 i 来自表 3.5 中 结束位 Tbit,TX[i] 需要的时间相当于所有的以前的和当前位的时间 : 为了计算位误差, 时间和理想的位时间 Tbit, 比较,TX[i]: 对于一个理想位的时间 (/ 波特率 ) 在标准化误差中的结果为 : 4

115 () 接收位时序接收时序误差包括两个误差源 第一个是位到位的时序误差, 和发送位时序误差相似 第二个是介于一个上升沿事件和被 UCSI 模块接受了的上升沿 图 所示的是在 UCAXRXD 脚上的数据和内部波特率时钟之间的异步时钟误差 这导致一个另外的异步误差 异步误差 Tsync 是介于 -0.5BRCLKS 和 +0.5BRCLKS 之间 这取决于所选择的波特率发生模式 图 接收误差 理想的采样时间 Tbit,ideal,RX[i] 在一位周期之间 : 真实采样时间 Tbit.rx[i] 等于先前所有的位的总和, 通过下面所列的公式的发送时序 部分可以看出, 再加上当前位 i 的 / 个 BITCLK 以及异步误差 Tsync 对于低频波特率模式结果在以下的 Tbit,RX[i] 中 这里 : 调制的 i 位来自表 3.5 中 对于过采样波特率模式 Tbit,rx[i] 的 i 位采样时间由以下公式计算 : 这里 5

116 : 来自 0-7 列的总和 + 来自表 3.6 中相应的列 来自表 3.5 中的调制 以下公式的结果是标准化的误差中的一个理想位时序 (/ 波特率 ) (3) 典型波特率和错误对于使用 3768 的晶振源 ACLK 和典型的 SMCLK 频率, 通过 UCBRX,UCBRSX 和 UCBRFX 设置的标准的波特率数据被列于表 3.7 和 3.8 中 表 3.7 常用波特率, 设置, 误差,UCOS6=0 6

117 接收误差是时间累计起来的与在每位中间的理想扫描时间相对 最糟糕的误差由给定的 带有校验和一个包括异步误差的停止位的接收产生 发送误差是时间累计起来的与位周期的理想时间相对 最糟糕的误差由给定的带校验和 停止位的传输产生 表 3.8 常用波特率, 设置, 误差,UCOS6= (4) 在低功耗模式下使用 USCI 模块的 UART 模式低功耗模式下,USCI 模块支持自动激活 SMCLK 时钟 当 SMCLK 作为 USCI 模块的时钟源, 因为设备处于低功耗模式 SMCLK 未激活, 如果必要 USCI 模块将自动激活, 不管时钟源的控制位如何 时钟将保持活动状态直到 USCI 模块返回空闲状态 在 USCI 返回空闲状态后, 时钟源的控制将受制于其控制位 自动激活模式不适用于 ACLK 当 USCI 模块激活一个不活动的时钟源, 整个设备以及使用此时钟源的外围配置的时钟 7

118 将激活 例如, 在 USCI 模块强制激活 SMCLK 时使用 SMCLK 的定时器将计数 (5)USCI 中断 USCI 有一个发送中断向量和接收中断向量 USCI 发送中断操作 : UCAXTXIFG 中断标志被发送器置位表示 UCAXTXBUF 准备接收另一个字符 如果 UCAXTXIE 和 GIE 也置位将产生一个中断请求 如果字符被写到 UCAXTXBUF 中 UCAXTXIFG 将自动复位 USCI 接收中断操作 : 一个字符被接受并装载到 UCAXRXBUF 中去时 UCAXRXIFG 中断标志置位一次 如果 UCAXRXIE 和 GIE 置位将产生一个中断请求 复位 PUC 信号或者 UCSWRST= 时 UCAXRXIFG 和 UCAXRXIE 将被系统复位 当 UCAXRXBUF 被读时 UCAXRXIFG 将自动复位 其他的中断控制特性包括 : 在 UCAXRXEIE=0 时错误字符不会置位 UCAXRXIFG 在 UCDORM= 时, 在多处理机模式下非地址字符不会置位 UCAXRXIFG 当 UCBRKIE= 时一个中断条件将置位 UCBRK 位和 UCAXRXIFG 标志 USCI 中断用法 : USCI_AX 和 USCI_BX 使用同一个中断向量 接收中断标志 UCAxRXIFG 和 UCBxRXIFG 和同一个中断向量连接, 发送中断标志 UCAxTXIFG 和 UCBxTXIFG 分享另一个中断向量.USCI 模块串行异步通信例程以 MSP430G553 的 USCI 模块串行异步通信操作为例, 介绍串口寄存器配置及收发程序处理过程 () 初始化串口 void UART_init(void) UCA0CTL =UCSWRST; UCA0CTL = UCSSEL_; //SMCLK UCA0BR0 = 0x68; //3.768/9600= UCA0BR = 0x00; // 000kHz/9600 = =0X68 波特率 9600 UCA0MCTL = UCBRS_; // Modulation UCBRSx = UCA0CTL0 &=~UCPEN; UCA0CTL0 &=~UCSPB; UCA0CTL0 &=~UC7BIT; UCA0CTL &=~UCSWRST; PSEL =BIT+BIT; PSEL =BIT+BIT; //PDIR =BIT; 第二功能无需配置?? IE = UCA0RXIE+UCA0TXIE; unsigned int j; 8

119 for(j=0;j<000;j++); () 串口发送函数 /**************************************************************** 宏定义 ****************************************************************/ unsigned char RX_BUFF[RXBUF_SIZE]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; // 接收缓冲区 unsigned int UART_InLen=6; // 输入数据长度 unsigned int RX_IndexR = 0; // 接收 FIFO 的读指针 unsigned int RX_IndexW = 0; // 接收 FIFO 的写指针 unsigned char TX_BUFF[TXBUF_SIZE]=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; // 发送缓冲区 unsigned int UART_OutLen =6; // 发送 FIFO 内待发送的字节数 unsigned int TX_IndexR = 0; // 发送 FIFO 的读指针 unsigned int TX_IndexW = 0; // 发送 FIFO 的写指针 uint8 ch=0; /**************************************************************** 串口发送一字节函数, 查询方式 ****************************************************************/ void UART_sent(uint8 Chr) IFG&=~UCA0TXIFG; UCA0TXBUF=Chr; while ((IFG&UCA0TXIFG)==0); // USCI_A0 TX buffer ready? /**************************************************************** 串口发送一帧数据函数, 中断方式 ****************************************************************/ char UART0_PutFrame(unsigned char *Ptr,unsigned int Lenth) int i; if(ie&uca0txie) return(0); if(lenth>txbuf_size) return(0); 9

120 for(i=0;i<lenth;i++) delay_us(00); TX_BUFF[i]=Ptr[i]; TX_IndexR=0; UART_OutLen=Lenth; IFG =UCA0TXIFG; IE =UCA0TXIE; return(); /***************************************************************** * 名称 :USCIxTX_ISR() * 功能 : 串口发送中断, 每发完 字节会发生一次中断 *****************************************************************/ #pragma vector=usciab0tx_vector interrupt void USCI0TX_ISR (void) if (UART_OutLen > 0) UART_OutLen--; UCA0TXBUF = TX_BUFF[TX_IndexR]; while (!(IFG&UCA0TXIFG)); // 查看上一字节是否发送完毕 if (++TX_IndexR >= TXBUF_SIZE) TX_IndexR = 0; else IE &=~UCA0TXIE; (3) 串口接收函数 /***************************************************************** 串口接收一字节函数, 查询方式, 此处虽定义但并未使用, 不保证其正确性 *****************************************************************/ uint8 UART_receive(void) while ((IFG&UCA0RXIFG)==0); // 收到一字节? 0

121 IFG&=~UCA0RXIFG; return(uca0rxbuf); #pragma vector=usciab0rx_vector interrupt void USCI0RX_ISR(void) UART_InLen++; RX_BUFF[RX_IndexW] = UCA0RXBUF; if (++RX_IndexW >= RXBUF_SIZE) RX_IndexW = 0; // 保存在缓冲区中 USART 模块的初始化和收发操作步骤流程.USART 模块的串行异步通信操作 MSP430 单片机串行异步通信模式通过两个引脚, 即接收引脚 URXD 和发送引脚 UTXD 与外界相连 异步通信的特点如下 : 异步模式, 包括线路空闲 / 地址位通信协议 两个独立移位寄存器 : 输入移位寄存器和输出移位寄存器 传输 7 位或 8 位数据, 可采用奇校验或偶校验或者无校验 从最低位开始的数据发送和接收 可编程实现分频因子为整数或小数的波特率 独立的发送和接收中断 通过有效的起始位检测将 MSP430 从低功耗唤醒 状态标志检测错误或者地址位 () 异步通信字符格式异步通信字符格式由 4 部分组成 : 起始位 数据位 奇偶校验位和停止位, 如图 所示 其中用户可以通过软件设置数据位 停止位的位数, 还可以设置奇偶位的有无 通过选择时钟源的波特率寄存器的数据来确定位周期 异步通信字符格式接收操作以收到有效起始位开始 起始位由检测 URXD 端口的下降沿开始, 然后以 3 次采样多数表决的方法取值 如果 3 次采样至少两次是 0 才表明是下降沿, 然后开始接收初始化操作, 这一过程实现错误起始位的拒收和帧中各数据的中心定位功能 MSP430 单片机可以处于低功耗模式, 通过上述过程识别正确起始位后,MSP430 单片机

122 可以被唤醒, 然后按照通用串口接口可以控制寄存器中设定的数据格式, 开始接收数据, 直到本帧采集完毕 异步模式下, 传送数据是以字符为单位传送的 因为每个字符在起始位处被唤醒, 所以传输时多个字符可以一个接一个地连续传送, 也可以断续发送和接收 () 异步多机通信模式在异步模式下,USART 支持两种多机通信模式, 即线路空闲和地址位多机模式 在信息以一个多帧数据快, 从一个指定地源传送到一个或者多个目的位置 在同一个串行链路上, 多个处理器之间可以用这些格式来交换信息, 实现了在多处理器通信系统间的有效数据传输 它们也用于使系统的激活状态压缩最低, 以节省电流消耗或处理器所用资源 控制寄存器的 MM 位用来确定这两种模式 这两种模式采用唤醒发送 地址特性和激活等功能 线路空闲多机模式 : 在这种模式下, 数据块被空闲时间分割 在字符的第一个停止位之后, 收到 0 个以上的, 则表示检测到接收线路空闲, 如图 所示 图 线路空闲多机模式如果采用两位停止位, 第二个停止位被认为空闲周期的第一个标志 空闲周期的第一个字符是地址字符 RXWAKE 位于可用于地址字符的标志 当接收到的字符是地址字符时, RXWAKE 被置为, 并送入接收缓存 用发送空闲帧来识别地址字符的步骤如下 : TXWAKE=, 将任意数据写入 UTXBUF(UTXIFG=) 当发送移位寄存器为空时,UTXBUF 的内容将被送入发送移位寄存器, 同时 TXWAKE 的值移入 WUF 如果此时 WUT=, 则将发送的起始位 数据位及校检位等被抑止, 发送一个正好 位的空闲周期 在地址字符识别空闲周期后移出串口的下一个数据是 TXWAKE 置位后写入 UTXBUF 中的第二个字符 当地址识别被发送后, 写入 UTXBUF 中的第一个字符被抑制, 并在以后被忽略 这时需随便往 UTXBUF 中写入一个字符, 以便能将 TXWAKE 的值移入 WUF 中 地址位多机模式 : 地址位多机模式的格式如图 所示 在这种模式下, 字符包含一个附加的位作为地址标志 数据块的第一个字符带有一个置位的地址位, 用以表明该字符是一个地址 当接收字符是地址时,RXWAKE 置位, 并且将接收的字符送入接收缓存 URXBUF

123 图 地址位多机模式在 USART 的 URXWIE= 时, 数据字符在通常方式的接收器内拼装成字节, 但他们不会被送入接收缓存, 也不产生中断 只有当接收到一个地址位为 的字符时, 接收器才被激活, 接收到的字符被送往 URXBUF, 同时 URXIFG 被置位 如果有错误, 则相应的错误标志被设置 应用软件在判断后作出相应的处理 在地址位多机模式下, 通过写 TXWAKE 位控制字符的地址位 每当字符由 UTXBUF 传送到发送器时,TXWAKE 位装入字符的地址位, 再由 USART 将 TXWAKE 位清除 串行操作自动错误检测 : USART 模块接收字符时, 能够自动进行校验错误 帧错误 溢出错误和打断状态检测 各种检测错误的含义标志如下 : FE: 标志帧错误 : 当一个接受字符的停止位为 0 并被装入接收缓存, 则认为接收到一个错误桢 PE: 奇偶校验错误 : 当接收的 的个数与它的效验位不相符 OE: 溢出错误标志 : 当然一个字节写入 UxRXBUF 时, 前一个字符还没有被读出, 则溢出 BRK: 打断检测标志 : 当发生一次打断同时 UxRXEIE 置位, 该位为 当上述任何一种错误出现, 位 RXERR 置位, 表明有一个或者多个出错标志 (FE PE OE 和 BRK 等 ) 被置位 如果 URXEIE=0 并且有错误被检测到, 那么接收缓存不接收任何数据 如果 URXEIE=, 接收缓存接收字符, 相应的错误检测标志置位, 直到用户软件复位或者接收缓存内容被读出, 才能复位 波特率的产生 : 在异步通信中, 波特率是很重要的指标, 表示为每秒钟传送二进制数码的位数 波特率反映了异步串行通信的速度 波特率发生器产生同步信号表明各位的位置 波特率部分由时钟输入选择和分频 波特率发生器 调整器和波特率寄存器组成 串行通信时, 数据接收和发送的速率就由这些构件控制 图 为其较为详细的结构 3

124 图 波特率生成器结构整个模块的时钟源来自内部 3 个时钟或外部输入时钟, 由 SSEL 和 SSEL0 选择, 以决定最终进入模块的时钟信号 BRCLK 的牝鹿 时钟信号 BRCLK 送入一个 5 位的分频器, 通过一系列的硬件控制, 最终输出移位寄存器使用的移位时钟 BITCLK 信号 这个信号 (BITCLK) 的产生, 由图 的下半部分可以看出, 是分频器在起作用 当计数器减到 0 时, 输出触发器翻转, 送给 BITCLK 信号周期的一半就是定时器 ( 分频计数器 ) 的定时时间 下面介绍波特率的设置与计算 采集每位数据的时候, 在每位数据的中间都要进行 3 次采样, 以多数表决的原则进行数据标定与移位接收操纵, 如此依次采集 由此看出, 分频因子要么很大, 要么是整数, 否则, 由于采集点的积累偏移, 会导致每帧后面的几位数据采样点不在其数据的有效范围内 MSP430 单片机的波特率发生器使用一个分频计数器和一个调整器, 能够用低时钟频率实现高速通信, 从而在系统低功耗的情况下实现高性能的串行通信 使用分频因子加调整的方法可以实现每一帧的各位有不同的分频因子, 从而保证每个数据钟的 3 个采样状态都处于有效的范围内 分频因子 N 由分频计数器的时钟 (BRCLK) 的频率和所需的波特率来决定 : N= BRCLK / 波特率如果使用常用的波特率与常用晶体产生的 BRCLK, 则一般得不到整数的 N, 还有小数部分 分频计数器实现分频因子的整数部分, 调整器使得小数部分尽可能准确 分频因子定义如下 : N 为目标分频因子 :UBR 为 UXBR0 中的 6 位数据值 :MX 为调整寄存器 (UXMTCL) 中的各数据位 波特率可由下式计算 : 波特率 = BRCLK / N = BRCLK / ( UBR + ( M7 + M6 + +M0 ) / 8 ) 例如 :BRCLK=3.768KHz, 要产生 BITCLK=400Hz, 分频器的分频系数为 3768 / 400 = 3.65 所以设置分频器的计数值为 3 接下来用调整寄存器的值来设置小数部分的 0.65 调整器是一个 8 位寄存器, 其中每一位分别对应 8 次分批情况, 如果对应位 0, 则分频器按照设定的分频系数分频计数 ; 如果对应位为, 则分频器按照设定的分频系数加 分频计数 按照这个原则 0.65*8=5, 也就是说,8 次分频计数过程中应有 5 次加 计数,3 次不加 计数 调整寄存器的数据由 5 个 和 3 个 0 组成 调整器的数据每 8 次周而复始循环使用, 最 4

125 低位最先调整, 比如设置调整寄存器的值为 6BH(000), 当然也可以设置其他值, 必须有 5 个, 而且 5 个 要相对分散 即分频器按顺序 来分频 在 8 位调整器调整位都使用后, 再重复这一顺序 常用波特率设置表 : 表 3.9 常用波特率设置.USART 模块异步串行通信操作例程 () 初始化串口 初始化串口 0, 允许接收和发送, 允许接收中断, 禁止发送中断,8bit 字符发送 时钟 ACLK = 3.768KHz, 波特率 4800 注意 : 对串口寄存器操作的时候务必保证 SWRST=, 设置完成后 SWRST=0 // 串口初始化函数 void InitUSART(void) U0CTL = CHAR; // 8bit 字符 U0TCTL = SSEL0; // ACLK U0BR = 0x00 // 4800 波特率 U0BR0 = 0x06 U0MCTL = 0x6f U0CTL &= ~SWRST; // 设置完成 ME = UTXE0 + URXE0; // 接收发送允许 IE = URXIE0; // 接收发送中断 P3SEL = (0x80 + 0x40); // 引脚切换到特殊功能上 _EINT(); // 不要忘了开中断 () 串口发送函数 采用软件查询式发送, 将 个字节写入发送寄存器, 然后等待发送完成的标志 本方法 适合波特率较高的场合 ( 大于 4800) // 所涉及的全局变量 unsigned char TBuff[8]; // 发送缓冲区 unsigned char RBuff[8]; // 接收缓冲区 5

126 unsigned char Flag_Receive = 0; // 标志 : 接收到有效数据 // 串口发送函数 ( 不需要开发送中断 ) 发送一个数组 ( 共 8 个字节 ) void USART_Send(unsigned char *pdata) unsigned char i; for(i=0; i<8; i++) TXBUF0 = pdata[i]; // 装入发送寄存器 while ((IFG & UTXIFG0) == 0); // 判断 : 发送是否完成 IFG &= ~(UTXIFG0); (3) 串口接收函数在 RAM 开辟接收缓冲区, 等到接收的数据组满足要求或者为一帧数据时才处理 中断中接收 // 所涉及的全局变量 unsigned char TBuff[8]; // 发送缓冲区 unsigned char RBuff[8]; // 接收缓冲区 unsigned char Flag_Receive = 0; // 标志 : 接收到有效数据 // 串口接收函数 ( 需要开接受中断 ) #pragma vector=uart0rx_vector interrupt void USART0_RXIRQ (void) unsigned char Temp; // 暂存接收数据 Temp = RXBUF0; // 8 字节接收缓冲队列 RBuff[0] = RBuff[]; RBuff[] = RBuff[]; RBuff[] = RBuff[3]; RBuff[3] = RBuff[4]; RBuff[4] = RBuff[5]; RBuff[5] = RBuff[6]; RBuff[6] = RBuff[7]; RBuff[7] = Temp; // 判断数据有效 ( 有效则设置标志位, 等待处理 ) if (RBuff[0] == 0xd0)Flag_Receive = ; return; elseflag_receive = 0; 6

127 (4) 串口校验 CRC6 函数常用函数, 使用的 CRCKey = 0xA00 输入一个数组和长度, 则计算出该部分的 CRC 值 // CRC-6 循环冗余效验函数 unsigned int Caculate_CRC6(unsigned char *DAT, unsigned char Lenth) // *DAT 指向要计算 CRC 的数组, Lenth 为数据的有效长度 unsigned int CRC = 0xffff; // CRC 的初始值为 FFFF unsigned char i; unsigned char j; for(i=0; i<lenth; i++) CRC = CRC ^ DAT[i]; // 和当前字节异或一次 for(j=0; j<8; j++) // 循环 8 次 if(crc & 0x0) // 判断最低位, 如果为 CRC = CRC >> ; // 右移一位 CRC = CRC ^ 0xA00; // 和多相式异或 else // 判断最低位, 如果为 0 CRC = CRC >> ; // 右移一位 return(crc); 7

128 第七节比较器 A+ 比较器 A+ 是一个模拟电压比较器 本节将讲述 MSP430G553 单片机中比较器 A+ 的操作 3.7. 比较器 A+ 的介绍比较器 A+ 模块支持精度斜率的模数转换 电源电压的管理以及对外部模拟信号的监控 Comparator_A+ 所具有的特征 : () 同相端和方向端输入多路器 () 可软件选择的比较器输出 RC 滤波器 (3) 输出可作为 Timer_A 的捕获输入 (4) 端口输入缓存的软件控制 (5) 中断的能力 (6) 可供选择的参考电压产生器 (7) 比较器和参考电压发生器可掉电 (8) 输入多路器比较器 A+ 结构框图如图 3.7. 所示 : 图 3.7. 比较器 A+ 功能框图 3.7. 比较器 A+ 的操作比较器 A+ 模块是用户通过软件配置的 下面的篇幅中将着重论述比较器 A+ 的配置和操作 :. 比较器 8

129 比较器的作用是比较其同相输入端和反相输入端的模拟电压 若同相输入端的电压高于反相输入端的电压, 比较器输出 CAOUT 为高电平, 否则输出 CAOUT 为低电平 比较器可以使用 CAON 位进行开启或关闭 在不使用比较器的情况下应该将其关闭以减少电流的消耗 当比较器被关闭后,CAOUT 总是呈现低电平状态. 输入模拟开关用户可以通过对 PCAx 位的设置控制模拟输入开关对比较器两输入端与相关端口引脚的连接 比较器的两个输入端可以单独控制 PCAx 位允许 : () 对输入到比较器同相端和反相端的外部信号的应用 () 内部参考电压到相关输出端口引脚的的路由 比较器内部的输入开关被构造为 T 型开关, 这样利于抑制信号通路上的失真 注意 : 比较器的输入连接比较器处于开启状态时, 输入端应该连接到信号 电源或地, 否则, 悬空的电平将产生无法预料的中断并且电流的消耗也会增加 CAEX 位用于控制输入多路器, 而多路器正是用于交换输入到比较器同相输入端和反相输入端的信号 此外, 当比较器的输入端信号被交换时, 比较器的输出信号也将反相 这使得用户可以确定比较器的输入失调电压的存在或者对其进行补偿 (3) 输入短路开关通过 CASHORT 位的配置可以使比较器的输入端短路 这可以用于搭建一个简单的比较器的采样和保持电路, 如图 3.7. 所示 : 图 3.7. 比较器 A+ 的采样和保持 采样时间与采样电容 C 的电容值 与短路开关串联的输入开关电阻 R 的阻值以及外部 S 源电阻 R s 的阻值的大小成正比 总内部电阻 R l 大小范围是 ~0 K 采样电容 C S 的电容值应该大于 00pF, 其充电的时间常数 T au 可以通过下面的等式来计算 : T au Rl RS CS 采样时间应该是 T au 值的 3~0 倍, 这取决于对采样精度的要求 若使用 3 倍于 T au 的采样时间, 采样电容充电电压的最大值将达到输入信号电压值的 95%, 若使用 5 倍于 T au 的采样时间, 采样电容充电电压的最大值将超过输入信号电压值的 99%, 若使用 0 倍于 T au 的采 样时间, 采样电压对 位的精度要求来说是足够的 (4) 输出滤波器 i 9

130 用户可以选择是否需要将比较器的输出通过其内置的滤波器滤波后再使用 当 CAF 控制位被置位, 比较器输出使用片上 RC 滤波器进行滤波 只要比较器的两输入端上有小幅的电压差, 输出端就会有振荡现象产生 这种现象产生的原因是源于信号线 电源线和系统的其他部分之间的寄生效应和串扰的影响, 如图 所示 比较器输出端的振荡将降低比较器的精度和比较结果的分辨率 选择输出滤波器可以减小由比较器振荡产生的误差 (5) 参考电压发生器 图 比较器输出端的 RC 滤波器响应 参考电压发生器产生连接到比较器任意一个输入端的参考电压 V CAREF CAREFx 位控制电压发生器的输出 CARSEL 位选择连接参考电压 V CAREF 的比较器的输入端 如果外部信号 被连接到比较器的输入端, 此时应当关断内部参考电压发生器以减少电流的消耗 参考电压 发生器可以可以产生对 V CC 进行分压后的三种电压值的电压或者大小固定约为 0.55V 的晶 体管阈值电压 (6) 比较器 A+, 端口禁用寄存器 CAPD 比较器输入和输出的功能是通过复用相关的数字 CMOS 门构成的 I/O 端口引脚实现的 当模拟信号被施加于 CMOS 门上, 寄生电流就会从 VCC 流动到 GND 若输入电压接近 CMOS 门 的跳变电平时就会产生这种寄生电流 禁用端口引脚的缓冲器可以消除寄生电流的流动因此 也可以减少总的电流消耗 当 CAPDx 位被置位时, 相应引脚的输入和输出缓冲器也将被禁用, 如图 所示 当 电流消耗比较严重的时候, 任何连接模拟信号的端口引脚都应该通过设置相应的 CAPDx 位使 其缓冲器被禁用 不管与它相关的 CAPDx 位的状态如何, 用 PCAx 位选择比较器多路器上输入信号的输入 端引脚都将自动禁用那个引脚的输入和输出缓冲器 图 CMOS 反相器 / 缓冲器的传输特性和功耗 30

131 (7) 比较器 A+ 中断如图 所示, 比较器 A+ 与一个中断标志和一个中断向量有关 中断标志 CAIFG 在比较器输出的上升沿和下降沿被置位, 通过 CAIES 位可以选择具体的边沿 如果 CAIE 和 GIE 都被置位, 那么 CAIFG 标志就产生一个中断请求 CAIFG 标志在中断请求服务完毕后自动清 0 或者被软件清 0 (8) 比较器 A+ 用于热敏电阻的温度测量 图 比较器 A+ 中断系统 如图 所示, R ref 为参考电阻, R meas 为热敏电阻, 单片机的 I/O 口 Px.x 输出高电平对电容充电直至充满, 此时电容两端的电压为 V CC, 高于 0.5 VCC, 比较器输出高电平 ; 然后 Px.x 输出低电平, 使电容通过电阻 R 进行放电 当电容两端电压低于 0.5 VCC 时, 比较器从高电平跳变为低电平, 该下降沿被定时器捕获, 得到捕获值 ref N ref 的 I/O 口 Px.y 输出高电平对电容充电, 直至充满, 此时电容两端的电压为 V 同样, 单片机 CC, 高于 0.5 V CC, 比较器输出高电平 ; 然后 Px.y 输出低电平, 使电容通过电阻 R meas 进行放电 当电容两端电压低于 0.5 VCC 时, 比较器从高电平跳变为低电平, 此下降沿被定时器捕获, 得到捕获值 N meas 图 温度测量系统 MSP430 单片机上用于计算由 R 检测到的温度的资源有 : meas ) 两个对电容充放电的数字 I/O 引脚 )I/O 输出高电平 ( V CC ) 对电容进行充电, 输出低电平使电容放电 3) 当 I/O 口闲置时, 用 CAPDx 位将其切换到高阻抗输入状态 4) 一个 I/O 口的输出通过参考电阻 R ref 对电容进行充放电 3

132 5) 另一个 I/O 口的输出通过电阻 R meas 对电容充放电 6) 比较器同相端连接到电容的正极 7) 比较器反相端连接参考电压, 例如 0.5 VCC 8) 输出滤波器用来尽可能地减小开关噪声 9) 比较器的输出 CAOUT 连接到 Timer_A 的捕获口 CCIB, 通过电平跳变沿捕获获取电 容器的放电时间 使用这种方法用户至少可以对一个电阻元件的阻值进行测量 其余的电阻元件可以连接 到其他未被使用的 I/O 引脚上, 当这些 I/O 口闲置时请将其切换到高阻态 热敏电阻的温度 测量是基于比例转换的原则 两个电容放电次数的计算如下图所示 : 图 温度测量系统的电容充放电波形 在转换期间, V CC 电压和电容值应该保持恒定, 但这并不是关键, 因为它们都在比例化 简中被消去了 : N N meas ref R R meas ref V C ln V V C ln V ref CC ref CC N N meas ref R R meas ref R meas R ref N N meas ref 得到当前温度下热敏电阻的阻值 R 即得当前环境下的温度值 meas 后, 根据热敏电阻厂家提供的温度阻值对照表可 比较器 A+ 寄存器 比较器 A+ 的寄存器如表所示 : 3

133 表 3.0 比较器 A+ 的寄存器 寄存器缩写形式寄存器类型地址初始状态 比较器 A+ 控制寄存器 CACTL 可读 / 写 059h 上电复位时被清 0 比较器 A+ 控制寄存器 CACTL 可读 / 写 05Ah 上电复位时被清 0 比较器 A+ 端口禁用 CAPD 可读 / 写 05Bh 上电复位时被清 0 () 比较器 A+ 控制寄存器 CACTL CAEX CARSEL CAREFx CAON CAIES CAIE CAIFG CAEX: 第 7 位比较器 A+ 交换, 该位交换比较器的两个输入端信号和使比较器的输出反相 CARSEL: 第 6 位比较器 A+ 参考电压的选择 该位选择参考电压 当 CAEX=0: 0 V CAREF V CAREF 当 CAEX=: 0 V CAREF V CAREF 连接到比较器的同相输入端 连接到比较器的反相输入端 连接到比较器的反相输入端 连接到比较器的同相输入端 CAREF: 第 5-4 位比较器 A+ 参考电压 这些位用于选择参考电压 V CAREF 00 关闭内部参考电压源, 连接外部参考电压 VCC VCC 选择二极管参考电压 V CAREF 连接到比较器的哪个端 CAON: 第 3 位 比较器 A+ 开启 该位启动比较器 关闭比较器则其电流消耗停止 参考电路被独立 地使能和禁用 CAIES: 第 位 比较器 A+ 中断边沿选择 0 上升沿 下降沿 CAIE: 第 位 比较器中断使能 0 禁用 使能 CAIFG: 第 0 位 比较器 A+ 中断标志 0 无中断挂起 中断挂起 () 比较器 A+ 控制寄存器 CACTL CASHORT PCA4 PCA3 PCA PCA PCA0 CAF CAOUT rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) r-(0) CASHORT: 第 7 位输入短路 该位将比较器的同相输入端和反相输入端短路 0 比较器两输入端不短路 比较器两输入端短路 33

134 PCA4: 第 6 位输入选择位 该位和 PCA0 一起, 在 CAEX=0 时, 选择同相端输入, 在 CAEX= 时, 选择反相端输入 PCA3: 第 5-3 位 输入选择位 当 CAEX=0 时, 这些位选择反相端输入, 当 CAEX=,PCA 这些位选择同相端的输入 PCA: 000 无连接 00 CA 00 CA 0 CA3 00 CA4 0 CA5 0 CA6 CA7 PCA0: 第 位 输入选择 该位和 PCA4 一起, 在 CAEX=0 时, 选择同相端输入, 在 CAEX= 时, 选择反相端输入 00 无连接 0 CA0 0 CA CA CAF: 第 位 比较器 A+ 输出滤波器 0 对比较器 A+ 输出不作滤波处理 不对比较器 A+ 输出作滤波处理 CAOUT: 第 0 位 比较器 A+ 输出 该位反映了比较器的输出值 写该位不起作用 (3) 比较器 A+ 端口禁用寄存器 CAPD CAPD7 CAPD6 CAPD5 CAPD4 CAPD3 CAPD CAPD CAPD0 rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) CAPDx: 第 7-0 位比较器 A+ 端口禁用 这些位单独禁用比较器 A+ 有关的端口引脚的输入缓冲器 例 如,CA0 在 P.3 引脚上,CAPDx 位可以单独使能或禁用每一个 P.x 引脚的缓冲器 CAPD0 禁用 P.0,CAPD 禁用 P. 等等 0 使能输入缓冲器 禁用输入缓冲器注 : 寄存器位的规约 : 每一个寄存器的每一个单独的位都用一个键来指示该位的可访问性和初始值 : 表 3. 键 rw r 可读 / 写 只读 寄存器位的规约 位可访问性 34

135 r0 读出值为 0 r 读出值位 w 只写 w0 写入值为 0 w 写入值为 (w) 无寄存器位执行 ; 写入 将产生一个脉冲 寄存器位读出值为 0 h0 硬件清 0 h 硬件置位 -0,- 上电清除 (PUC) 后的初始值 -(0),-() 上电复位 (POR) 后的初始值例 : 利用 MSP430G553 单片机内置的比较器 CA5 作为外部输入信号的输入端口, 连接到内置比较器的反相输入端, 同时将 0.5VCC 参考电压连接到比较器的同相输入端,P.6 口接有绿色 LED 等, 观察灯光变化情况 #include "msp430g553.h" void main() WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 CACTL=CAON+CAIE+CAREF_+CAEX+CARSEL; // 打开比较器, 允许中断, 选择 //0.5VCC 为参考电压 CACTL&=~PCA; CACTL=PCA3+PCA+CAF; // 选通 CA5 作为输入, 输出作滤波处理 PDIR&=~BIT5; //P.5 作为输入口 PSEL =BIT5; //P.5 作为第二功能即作为比较器输入口使用 PDIR =BIT6; //P.6 作为输出控制发光二极管的亮灭 _EINT(); // 打开总中断 while(); #pragma vector=comparatora_vector // 比较器中断声明的固定格式 interrupt void COMPARE(void) // 比机器中断处理程序, 无返回值 POUT^=BIT6; // 将 P.6 引脚取反, 即使发光二极管闪烁 35

136 第八节 Grace 软件技术 经过前面几章的讲解, 相信大家已经对 MSP430Gxxx 系列单片机有了一定的了解 初学者可能会为它功能强大的功能和丰富的外设而惊叹, 同时又对难以迅速而有效地记住并熟练配置各种寄存器而感到担忧 TI 是一家非常注重用户体验的公司, 他们当然也考虑到了这个问题, 在推出其产品的同时, 也配套推出了简单易用的图形化 I/O 与外设配置软件 Grace,Grace 是基于 GUI 的 I/O 与外设配置的软件工具, 适用于 MSP430FXX/GXX 器件 Grace 使得开发人员能够生成经全面注释的易读型 C 代码并快速完成外设的配置, 利用 Grace 代码的生成, 快速启动开发工作, 使开发者可以在数分钟内完成 MSP430 单片机的外设模块的配置, 并可以生成 C 语言代码, 极大的缩减了开发者花在配置外设上的时间, 缩短了开发周期 Grace 软件在 TI 官网上以两种形式发布, 一是作为 Code Composer Studio(CCS) 的一个插件, 如果您使用的是 CCS5. 以上版本, 那么 Grace 插件已经被包含在软件中了 ; 如果您使用的是 CCS4., 那么您可以单独在 TI 官网上下载 Grace 插件, 安装后即可使用 ; 二是 Standalone 版本, 它可以在您电脑上独立运行, 您只需把最终生成的代码复制到您的工程中即可 下面就以 CCS 5. 版本为例, 使用 Grace 软件实现 LED 闪烁 : 3.8. 创建 Grace 工程如图 3.8. 所示, 打开 CCS,Project->New CCS Project, 弹出如下对话框 Project name 由用户来命名, 但是不能含有中文 图 3.8. 创建 Grace 工程 36

137 在这里填 LED Blink Family 选择默认的 MSP430, 因为 CCS 5. 还可以用于 TI ARM 处理器的开发, 所以如果你安装了 ARM 模块, 还需要在这里进行选择 Variant 选择您所使用的芯片, 本例中选择 MSP430G553 Project templates and examples 选择第一个 Empty Projects 中的 Empty Grace(MSP430) Project. 其余项保持默认即可, 点击 Finish 完成 Grace 工程的创建 3.8. 使用 Grace 配置 I/O 口及外设 本应中用到 IO 口及 TA 定时器 现在分别对它们进行配置 图 3.8. Grace 的起始界面. 点击 Device Overview 按钮, 等待数秒钟,Grace 会把片上可供配置的外设模块 ( 用蓝色标记 ) 列出来, 如果您想要使用哪个模块, 只需在该模块上单击鼠标右键, 选择 Use xxxx, 正在使用的模块左下角会有一个绿色的标记 如图 所示 : 图 片上资源框图 37

138 . 或者直接点击某个模块, 出现图 所示界面, 选中 Enable Timer0_A3 in my configuration: 图 选择 Timer0 模块 3. 等待数秒钟后, 出现图 所示界面 在 Basic User 里面可以进行一些简单的设置, 如果您需要使用更复杂 更高级的功能, 点击 Power User 图 使能 Timer0 模块 4. 现在就可以对 TA 定时器进行配置了 要让 LED 每秒钟闪一次, 即需要产生一个频率为 Hz 的中断, 在这里选择 ACLK 为时钟源, 再进行 8 分频, 可以看到一个.5kHz 的时钟就产生并被送到 TA 定时器了 选择计数模式为增计数模式, 在 Desired Timer Period 或 Capture Register 里面设置定时时间或时钟脉冲数,Grace 会自动算出定时周期和频率, 这点非常方便 由于只需要产生一个定时间隔, 所以选择输出比较模式, 禁用输出管脚 如果要输出 PWM 波, 则可选择对应的管脚, 然后在 Output Mode 中选择相应的输出模式 注意 CCR0 寄存器不能设为模式 3 6 和 7, 如果设置了其中任何一个,Grace 会自动报错并提示出错的原因 这里可以看到左边的 Input Selection 和 Capture Mode 两栏变为灰色, 即不能进行选择, 因为在输出捕获模式下没有意义 只有选择输入捕获模式, 灰色部分才会被激活 再在下面使能捕获 / 比较中断, 填写中断句柄, 该句柄相当于是自定义的一个中断服务函数, 在中断函数中被调用 最后选择中断之后的状态, 低功耗休眠或唤醒 CPU 在本应用中的配置如图 所示 : 38

139 图 配置 Timer0 模块也可以点击 Register 查看寄存器每一位的值 当不清楚某一位的功能时, 只需把鼠标移动到这一位上面,Grace 会自动弹出提示信息 如图 所示 : 图 Timer0 寄存器 5. 下面点击左下角的 Grace 标签或右上角的图标, 回到图图 下面配置 I/O 口 39

140 点击 I/O 口模块, 根据所使用的芯片封装点击相应的按钮 在此选择 Pinout 0-TSSOP/0-TDIP, 一个 MSP430G553 芯片就出现了, 每个管脚外侧都会显示 IO 口的当前设置, 点击蓝色向下箭头, 就可以重新配置 IO 口 在些配置 P.0 为 GPIO Output, 用来驱动 LED 图 所示 : 图 IO 口配置 6. 这样 Grace 就配置完了, 然后点出 CCS 工具栏上的图标, 生成代码, 这时会提示错误, 这是因为刚才定义的中服务函数没有定义 右键单击 main 函数里面的 CSL_init() 函数, 选择 Open Declaration, 打开 CSL_init.c 文件, 或者在 Project Explorer 中找到并打开 CSL_init.c 文件 如图 所示 : 图 软件调试在如图 所示位置 ( 蓝色部分 ) 添加代码, 然后编译, 没有错误, 然后连接 LaunchPad, 点击图标开始下载仿真 40

141 图 添加代码点击全速运行, 可以看到 LED 大概每秒钟闪一次, 任务完成了 Grace 的 Standalone 版本和 CCS 版本差别不大, 下面以 ADC 内部温度传感器为例, 重点讲解一下二者的区别 () 打开 Grace 后点击图标新建一个 Grace 工程, 输入工程名, 同样不能包含非 ASCII 码字符, 选择要保存的位置, 选择您所使用的芯片, 如图 3.8. 所示 然后点击 OK 完成 图 3.8. 新建 Grace 工程 () 同样来到图 的界面, 选择时钟模块 MSP430G553 单片机在 Flash 中存了四个数字时钟振荡器 DCO(Digital Controlled Oscillator) 的频率校准点, 分别为 MHz 8MHz MHz 6MHz, 用户可以根据需要选择, 从而省去了手工配置 DCO 当然 Grace 的强大之处在于, 它不仅有这四个频率可供选择, 而且用户可以自定义频率,Grace 会根据用户输入的值自动配置好相应寄存器 注意, 如果 CPU 要运行在比较高的频率, 在图 中, 4

142 DVCC 应该选择 3.3V, 不然 Grace 会报错 本例中 MCLK 配置为 6MHz,SMCLK MHz,ACLK 的时钟源为 VLO(Very Low Power Lowe Frequency Oscillator, 大约 khz) 并且可以在 P.0 上输出 ACLK, 如图 3.8. 所示 Grace 的高明之处在于, 在某模块设置 IO 口后, 在 GPIO 模块, 相应的 IO 口会同时改变 图 3.8. 基础时钟模块 (3) 配置 ADC0 模块 选择采样通道, 注意, 必须同时选中通道对应的外部 IO 口 现在如果我们选择通道 0 和 P.0,Grace 会报错, 因为刚才我们已经把 P.0 用作 ACLK 的输出了 Grace 的这个优点避免了配置冲突的错误 图 ADC0 模块 4

143 然后设置正负参考电压 转换类型 采样保持时间 ADC 时钟源和触发信号, 最后打开中断, 输入中断句柄, 如图所示 时钟源选择 ADC0OSC, 这样配置的好处是可以使单片机进入更低功耗的休眠而不影响 ADC 转换 如果触发信号选择定时器,Go to Timer 按钮就会生效, 点击可以进入定时器进行相应的配置 使用定时器触发 ADC 转换, 甚至可以省去中断, 降低了软件的复杂度, 还可进一步降低功耗 (4) 配置完成后, 保存并点击生成代码 然后就可以在..\Temperature\csl(..\ 表示相对目录, 即工程所在的文件夹 ) 里面看到生成的代码了 然后将其复制到您的应用中就可以了 43

144 0 TDO TDI TMS T C K RESET X XTAL J TDO TDI TMS T C K RST N MSP430JTAG C TEST VCC N N N N N VCC C C C C C 8B0D S 0 S S S 3 S VCC DVcc A0.0+ A.0+ A.0+ A0.0- A.0- A.0- XIN X O U T Vref P./STE0 S 0 S S S 3 S 4 VCC AVcc DVss AVss RESET TCK TCK TMS TMS TDI TDO SCK SID PWM P.5/TACLK/ACLK/S8 P.6/SIMO0/S7 P.7/SOMIO/S6 P./UCLK0/S4 MSP430F45 P.0/TA/S5 COM3 COM COM COM0 R33 R3 R3 R03 S 3 S S button button button3 PWM COM3 COM COM COM0 R 3 M R 5 M R 6 M 西安电子科技大学 MSP430G 教程 第九节 MSP43OG 系列单片机调试接口 JTAG 和 SBW 3.9. JTAG 简介 JTAG 是一种国际标准测试协议, 用于对 MSP430 进行在线仿真 任一款 msp430 都支持 JTAG 协议 标准的 JTAG 接口是 4 线 :TMS TCK TDI TDO, 分别为模式选择 时钟 数据输入和数据输出线 JTAG 最初是用来对芯片进行测试的,JTAG 的基本原理是在器件内部定义一个 TAP(Test Access Port; 测试访问口 ) 通过专用的 JTAG 测试工具对进行内部节点进行测试 JTAG 测试允许多个器件通过 JTAG 接口串联在一起, 形成一个 JTAG 链, 能实现对各个器件分别测试 现在,JTAG 接口还常用于实现 ISP(In-System Programmable? 在线编程 ), 对 FLASH 等器件进行编程 JTAG 编程方式是在线编程, 传统生产流程中先对芯片进行预编程现再装到板上因此而改变, 简化的流程为先固定器件到电路板上, 再用 JTAG 编程, 从而大大加快工程进度 JTAG 接口可对 PSD 芯片内部的所有部件进行编程 具有 JTAG 口的芯片都有如下 JTAG 引脚定义 : TCK 测试时钟输入 ; TDI 测试数据输入, 数据通过 TDI 输入 JTAG 口 ; TDO 测试数据输出, 数据通过 TDO 从 JTAG 口输出 ; TMS 测试模式选择,TMS 用来设置 JTAG 口处于某种特定的测试模式 可选引脚 TRST 测试复位, 输入引脚, 低电平有效 含有 JTAG 口的芯片种类较多, 如 CPU DSP CPLD 等 JTAG 内部有一个状态机, 称为 TAP 控制器 TAP 控制器的状态机通过 TCK 和 TMS 进行状态的改变, 实现数据和指令的输入 3.9. JTAG 接口对于运用 MSP430 进行开发的工程师而言, 我们只需学会将仿真器上的引脚分别连接到芯片上即可 CNTRA CNTRB P.4/S9 P./TA/S3 P.0/TA0 TDO/TDI TDI/TCLK RST/NMI P.5/URXD0 P.4/UTXD0 P.3/SVSIN P.3/SVSOUT/S30 P./TA0/MCLK S 0 S 9 S 8 S 7 S 6 S 5 S 4 S 3 S S S 0 S 9 S 8 S 7 S 6 S S 5 S 4 S 3 S S S 0 S 9 S 8 S 7 S 6 S 5 图 3.9. JTAG 连接图 44

145 C Y 0 p F VCC VCC C 0 u R 0 K C 7 0 p F TDO TDI TMS C 0 4 T C K TEST RESET VCC P TEST RESET MSP TEST Vcc P.5.Rosc Vss X O U T XIN RST/NMI P.0/ACLK/A0 P./INCLK/A P./TA0/A P3.0/STE0/A5 P3./SIMO0 P3./SOMI0 P3.3/UCLK0 MSP430F3IPW P.4/TA/A4/VREF+/VeREF+ P.3/TA/A3/VREF-/VeREF- P.0/TACLK/ADC0CLK P.7/TA/TDO/TDI P.6/TA/TDI/TCLK P.4/SMCLK/TCK P.5/TA0/TMS P3.5/URXD0 P3.4/UTXD0 P.3/TA P./TA P./TA0 P3.7/A7 P3.6/A TDO TDI TMS T C K PWM RXD TXD 西安电子科技大学 MSP430G 教程 如图所示为标准的 JTAG 连接方法 : 仿真器上的 TDO,TDI,TMS,TCK,GND,RESET 分别 连接到单片机上的 TDO/TDI,TDI/TCLK,TMS,,TCK,GND,RST/NMI 端 图 3.9. JTAG 连接图 也有如图 3.9. 所示的下载仿真接口, 该接口多出了一个 TEST 口, 用于帮助仿真器区分单片机处于仿真状态还是运行状态, 将它与单片机的 TEST 脚直接连起来 SBW 接口对于一些引脚较少的单片机来说, 使用大量引脚来完成仿真下载工作是不合适的 比如, MSPG3 只有 4 个管脚, 而 JTAG 则需要至少 5 个管脚, 这显然不合理 因此 TI 提出了两线制下载的解决方案 SBW, 它之运用两根线就可完成下载功能, 及其的简洁方便 具体连接方法以 MSP430G553 单片机为例 : 只需将单片机的 6 脚 SBWTDIO 和 7 脚 SBWTCK 分别与仿真其上的 TDO 和 TCK 连接起来即可 特别需要注意的是 : 无论在 JTAG 还是在 SBW 上都应该注意, 如果单片机靠仿真器上提供的电压供电, 则需要将 VCC 接到仿真器上 号脚上, 如果有外接电源, 则将仿真器的第 4 脚接到 VCC 上, 最好的方法是设置一个开关进行选择如图 所示 图 JTAG 供电 45

146 第十节触摸按键 触摸按键可分为两类 : 电阻式触摸按键与电容式感应按键, 即滑动式按键和点触式按键 3.9. 电阻式按键电阻式的触摸按键原理非常类似于触摸屏技术, 需要由多块导电薄膜上面按照按键的位置印制成的, 因此这种按键需要在设备表面贴一张触摸薄膜 电阻式触摸屏一直由于其低廉的价格而深受厂商的喜爱, 但是由于导电薄膜的耐用性较低, 并且也会降低透光性, 因此已经被越来越多的厂家所抛弃 3.9. 电容式按键电容式触摸按键主要是为了克服电阻屏的耐用性所提出的, 电容式触摸按键的结构与电阻式的相似, 但是其采用电容量为判断标准 简单来说, 就是一个 IC 控制的电路, 该电路包括一个能放置在任何介质面板后的简单阻性环形电极组件, 因此, 按键的操作界面可以是一整块普通绝缘体 ( 如有机玻璃一般材料都可 ), 不需要在界面上挖孔, 按键在介质下面, 人手接近界面和下面的电极片形成电容, 靠侦测电容量的变化来感应 温度, 静电, 水, 灰尘等外界因素一般不会影响, 界面没有太多要求, 可以加上背光, 音效等, 靠人手感应, 整个界面没有按键的存在, 便于清洁, 让产品在外观上更加高档美观, 由于按键没有接点, 使用寿命也是非常的长久, 一般来说是半永久性. 电容式感应按键的原理电容感应原理是利用人体的感应电容来检测是否有手指存在, 在手指没有按下时, 按键上由于分布电容的存在, 因此按键对地存在一定的静态电容, 当人的手指按下或者接近按键时, 人体的寄生电容将耦合到这个静态电容上, 使按键的最终电容值变大, 该变化的电容信号再输入到单片机进行信号转换, 将变化的电容量转换成某种电信号的变化量, 再由一定的算法来检测和判断这个变化量的程度, 当这个变化量超过一定的域值时就认为手指按下 在电路上任意两个相邻的极板之间形成一个等效电容, 因此在电容感应的应用中就人为的创造了这样的两个电极, 以此来获取一个等效电容 如图 3- 的示意图, 在没有手指按下时, 各按键对地有一个等效的静态电容 C 基, 当有手指按下时, 人体电容 C 就叠加到按键上, 使按键对地的电容增加, 这样获得的电容再输入到芯片中进行处理, 即 C=C 基 + C. 触摸按键的实现 图 3.0. 电容感应原理图 46

147 电容式感应触摸按键实际只是 PCB 上的一小块覆铜焊盘, 当没有手指触摸时, 焊盘和地信号产生的电容成为 基准电容 触摸按键最关键的设计是在 PCB 排版上, 为了获得稳定的且较高的灵敏度, 应遵从以下原则 : 基电容容值小 基电容稳定抗噪 尽量获得大的 C 常见的作法有 : 优化触摸铜盘大小尺寸 减小铜盘与地之间的距离 减小铜盘与手的距离 触摸盘背面铺地用 30%~60% 的网格铺设等 表面电容按键设计方法 : 一个表面电容按键由一个与控制器相连接的单端铜电极组成 它不需要有太高的灵敏度, 只需能够识别手指的触摸与否 () 按键形状任何形状的按键均可用于电容感应式触摸中, 如图 3- 所示 不同的形状不会影响感应的性能, 仅与板子的美观程度有关 图 3.0. 按键形状图 () 按键尺寸在其它条件都相等的情况下, 通常按键越大越好 两个使用相同走线与控制器连接的按键, 如果它们的大小不同, 则灵敏度也将不同 小的按键因其表面积小, 触摸电容 (CT) 也很小, 相应地灵敏度会较差, 按键过大并不会显著提高 CT 但是, 将按键面积增大至与触摸物 ( 手指, 拇指等 ) 相当, 则会显著提高 CT 对于手指感应, 推荐按键的直径至少为 0.4 英寸 (0mm) 较小的按键也可工作, 但性能较差 大的按键灵敏度较高, 但感应式触摸物的有效接触面积决定了按键尺寸的上限 (3) 按键间距按键可以相互邻近, 但如果节距太小, 相互之间太过靠近, 则会带来不期望的相互影响 (4) 按键 - 地的间隙如果可能, 地层不应与感应元件放在同一层 如果地层与感应元件太近, 将会增加电容并影响对手指存在与否的检测 (5) 电容感应应用中的走线触摸感应控制器与传感器之间的走线会增加按键电容并降低信号, 从而降低传感器的灵敏度 走线长度会降低灵敏度, 因为它会增加感应电路的并联电容 走线长度也会增加噪声, 因为走线同时会受内部电路与外部噪声环境的影响 (6) 走线长度缩短从控制器至传感器之间的走线长度可降低其它元件与走线产生耦合的风险 触摸感应控制器与传感器之间的走线应尽可能短 (7) 走线宽度线宽会增加整个系统的铜覆盖面积, 从而增加传感器的电容 同时也会增加与其它层上元件的耦合 因此, 走线应尽可能细小, 且远离地层 47

148 (8) 走线放置无论何时, 电容感应中的走线放置必须以与其它设计元件, 包括其它电容感应走线的相互影响最小为准则 同时, 将走线放置在用户 PCB 的背面可降低手指对走线的影响, 以确保传感器引脚上的所有电容值变化是来自于手指 ( 或其它导体 ) 与有效传感面积的相互作用, 而不是来自于手指与走线的相互作用 (9) 分组放置触摸感应控制器同一端口上的引脚由软件库一起驱动, 并通过软件映射在同一组 同一组中的引脚走线可最大限度地靠近在一起 48

149 第四章 MSP43OG 系列单片机一体化实验系统 通过前三章的学习, 相信读者对 MSP430Gxx 系列单片机的特点 其开发软件的使用方法 及其单片机内部资源的使用方法有了很好的掌握 学习单片机的最好途径就是实践 对于初学者来说, 接下来的问题就是 : 如何运用掌握的知识进行实践? 进行什么样的实践? 为帮助读者进行单片机学习实践, 本章介绍一种 MSP430G 系列单片机一体化实验系统 该系统采用美国 TI 公司最新推出的 MSP430G 超低功耗系列 LaunchPad 作为核心板, 引入模块化设计理念, 采用系统底板加功能模块的结构形式, 基本配置 4 种实验模块, 可完成十余个实验, 让使用者方便地进行单片机学习实践 同时, 使用者也可以根据实验系统预留的接口和提供的 MSP430G553 单片机核心板, 设计自己开发的功能模块和实用性功能设备 本实验系统包括一个实验系统标准板 一个实验系统简化板和 4 种配置的实验模块, 本章将具体对它们的适用对象 基本功能 适用方法 结构原理 连接方式等进行具体的介绍 第一节 MSP43OG 系列单片机一体化实验系统标准板 4.. 实验系统标准版结构结构组成 MSP430G 系列单片机一体化实验系统标准版由系统底板 功能模块区和扩展实验区组 成 图 4.. MSP43OG 系列单片机一体化实验系统标准板实物图 4... 功能模块区 49

150 P 3 HD VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C SW BM_key6 A A 3 A 4 A 5 A 6 A A A 3 A 4 A 5 A B B 3 B 4 B 5 B 6 B N C N C 3 SW6 6 A B B 3 B 4 B 5 B 6 B R 0 k D L E D M 扩展口扩展口 Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C V B U S X O U T 个 6 位拨码开关模块插槽 个 6 位拨码开关 P.7 P.6 P.5 P.4 P.3 XIN T E S T RST N N C C R 3 0 k D 3 L E D SW BM_key6 SW7 A A 3 A 4 A 5 A 6 A A A 3 A 4 A 5 A 6 A B B 3 B 4 B 5 B 6 B B B 3 B 4 B 5 B 6 B V C C 5 XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C P 4 HD 西安电子科技大学 MSP430G 教程 如图 4.. 所示, 实验板的左端是实验板的功能模块区, 功能模块区留有四个实验模块插槽, 插槽的两端各有 个 6 位的拨码开关, 拨码开关用于选通插槽端口和 LaunchPad 的连接 另外模块插槽两边还各引出对应的一排扩展口, 用于外接扩展电路, 也可用来测试 LaunchPad 上接口的状态 最后每个模块插槽对应两个电源指示灯 功能模块区的电路连接图如图 4.. 所示 图 4.. 实验板功能模块区中单个模块插槽部分的电路连接 图 4..3 实验板功能模块区中单个模块插槽部分的实物图 如图 4..3 所示, 拨码开关和扩展口和它们之间的丝层字符相对应 在使用模块时, 将 模块按图 4..3 中丝层箭头指向对齐插入模块插槽中, 然后开启要联通的拨码开关, 向右拨 动为开启, 例模块要用到 VCC3.3 和 P.0, 就将拨码开关 SW 中的前两位开关合上 系统上 50

151 LCD_VCC R6 0 k R7 0 k R8 0 k V C C 5 J VCC3.3 J J 3 C9 P S B 0 u F 电平选择跳线端子 R S RST P.5 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C XIN X O U T P.0 P. P. P.3 P.4 P.5 P.6 P.7 0 位跳线端子 V C C P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C 3 N C 3 U 3 CoireBoard N C P Power5 MSP-EXP430G TEXAS INSTRUMENTS LaunchPad 插槽 LCD_VCC V 0 R R/W E S D B 0 D B D B D B 3 D B 4 D B 5 D B 6 D B 7 P S B N LCD_RST VEE BLA BLK C LCD864 P P.7 P.6 P.5 P.4 P.3 XIN X O U T T E S T RST N C 4 N C XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 西安电子科技大学 MSP430G 教程 电后, 模块就可以供给 LaunchPad 核心板使用 4... 系统底板区图 4.. 所示实验板的中间部分就是系统底板区, 系统底板区包括 LaunchPad 插槽 LCD864 插槽及其跳线和触摸按键三个部分 6 5 VBUS VBUS 图 4..4 LaunchPad 插槽实物图和电路连接图 图 4..3 是 LaunchPad 插槽的实物图和电路连接图 使用 LaunchPad 时, 将 LaunchPad 按图 4.. 所示 USB 口朝下, 以 LaunchPad 插槽低端为基准对齐插入 5

152 图 4..5 LCD864 显示电路连接 图 4..3 是 LCD864 显示电路的原理图 LCD864 有 5V 供电和 3.3V 供电两种, 有串行和并行两种工作方式, 在串行工作方式下, 只有 R/W 和 E 两根线和 LaunchPad 核心板相连, 同时 RS 电平置高 PSB 电平置低 ; 在并行方式下, 图 4..4 中 LCD864 从 RS 到 DB7 这 根线都要和 LaunchPad 核心板相连, 同时 PSB 电平要置高 使用者可以根据自己的需要改变跳线的连接, 来选着 LCD864 的工作方式 有关 LCD864 的内容后面章节会详细介绍 图 4..6 触摸按键示意图 图 4..5 是触摸按键的示意图, 图中标明了每个触摸按键对应 LaunchPad 核心板的 IO 口 扩展实验区图 4.. 所示实验板的右端就是扩展实验区 扩展实验区由两排引出的扩展口 固定在底板上的面包板和底板上的焊盘矩阵组成 两排引出的扩展口电路连接如下图所示, 它们的接口与 LaunchPad 和模块插槽接口一一对应 5

153 V C C 5 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 N C P header V C C 5 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 N C P header 西安电子科技大学 MSP430G 教程 图 4..7 扩展区扩展口电路连接扩展实验区的面包板和焊盘矩阵可以供给使用者搭建电路 设计自己的作品, 使用者可将搭建的电路通过其旁边的两排扩展口与 LaunchPad 连接, 这样使用者可以方便的使用此实验系统标准版对自己的电路和作品做测试工作 4.. 实验系统标准版使用对象和使用特点实验系统标准版, 可通过提供的 MSP-EXP430G LauchPad 和不同功能的 4 种实验模块, 完成 4 种模块各自的实验 使用者也可以将几种模块一起组合使用 同时实验系统标准版 留出了扩展区, 便于使用者设计自己的电路和实验, 当然使用者也可以利用提供的实验模块 结合自己的电路完成使用者自己设定的系统性 创新性实验的实验 MSP430G 系列单片机一体化实验系统具有开放性 方便使用者使用 操作简单等特点, 它不但能够很好地让使用者进行单片机学习实践, 也更能激发使用者的创造力和想象力 53

154 第二节 MSP43OG 系列单片机一体化实验系统简化板 图 4.. MSP43OG 系列单片机一体化实验系统简化板 图 4.. 是 MSP43OG 系列单片机一体化实验系统简化板装配以后的实物图 从实物图中我们可以看出, 实验系统简化板相比于试验系统标准版来说大大简化了, 省略了拨码开关 扩展口和扩展实验区等内容, 并且简化板只留出了一个模块插槽 简化板在 LCD864 液晶显示上也做了改动, 标准版可通过跳线选着 LCD864 的工作方式, 而简化板的 LCD864 只能用串行工作方式 虽然简化板相比于标准板有以上所说的不足之处, 但是其具有体积小 便于携带 成本低等优点 并且简化板保留了标准版的主要功能部分, 如触摸按键 简化板使用方法 : 将 LaunchPad 如图 4.. 所示 USB 口朝下, 以 LaunchPad 插槽低端为准对齐插入 ; 将 LCD864 有插针的一段朝下, 插入 LCD864 的插槽中 ; 将模块有丝层汉字字符一段朝上, 插入模块插槽中 ; 最后上电即可使用 54

155 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C 3 4 N C 3 P R 3 M Moudle 0 k VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C P. 模块插槽接口 R 4 0 k P.3 R 5 S Power5 V C C 5 0 k P.4 R 6 0 k V B U S X O U T T E S T C 4 C 5 C 6 C 7 C 8 触摸按键 电源开关 P.7 P.6 P.5 P.4 P.3 XIN RST N N C C P R 7 0 k V C C 5 XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C C 3 0 u F LCD_VCC V C C P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C 3 N C 3 XIN V C C 5 R 8 V C C LCD864 显示电路 U CoireBoard 核心板 MSP430LaunchPad N C X O U T E N K R/W R LCD_RST S P S B Power5 MSP-EXP430G TEXAS INSTRUMENTS LCD_VCC R R/W E N S D B 0 D B D B D B 3 D B 4 D B 5 D B 6 D B 7 P S B N LCD_RST VEE LCD_VCC C V 0 Power5 P LCD X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 XIN N C 4 N C XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 西安电子科技大学 MSP430G 教程 6 5 VBUS VBUS 图 4.. MSP43OG 系列单片机一体化实验系统简化板原理图 55

156 第三节实验模块配置 4.3. 模拟滤波器实验功能模块 实验功能模块功能说明滤波器是一种选频装置, 可以使信号中特定的频率成分通过, 而极大地衰减其它频率 成分 在测试装置中, 利用滤波器的这种选频作用, 可以滤除干扰噪声或进行频谱分析 广义地讲, 任何一种信息传输的通道 ( 媒质 ) 都可视为是一种滤波器 因为, 任何装 置的响应特性都是激励频率的函数, 都可用频域函数描述其传输特性 因此, 构成测试系统 的任何一个环节, 诸如机械系统 电气网络 仪器仪表甚至连接导线等等, 都将在一定频率 范围内, 按其频域特性, 对所通过的信号进行变换与处理 该实验功能模块具有低通滤波和带通滤波的功能, 可以完成对带有杂波分量的频率信 号进行滤波和频率的测量 实验功能模块组成及工作原理图 4.3. 是该模拟滤波器模块的整体组成框图 : DIP 开关状态选择 (OFF) (OFF) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(OFF) 8(OFF) 9(ON) 0(ON) (OFF) (OFF) 波形整 形电路 低通滤波器 带通滤波器 输入信号选择开关外部信号输入端子 DIP 开关状态选择 (OFF) (OFF) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(OFF) 8(OFF) 9(OFF) 0(OFF) (OFF) (OFF) 图 4.3. 模拟滤波器功能模块组成框图 该实验功能模块通过开关的选择, 外部带有高频分量的输入信号可以进入低通滤波器或者带通滤波器, 从而可以分别实现带通滤波和低通滤波的功能 用示波器检测相应滤波器的输入和输出的波形, 对比两波形的光滑程度或者两者幅度的衰减量等指标可以观察带通或者低通的效果 将对从滤波器的输出光滑的特定的频率信号进行整形, 处理后形成的高低电平信号进入单片机 MSP430G553 的捕获管脚, 通过单片机机一定的运算和数据处理得出频率值 然后单片机将结果送入到显示终端进行显示, 方便用户观察当前信号的频率值 二阶有源滤波器概述滤波器是一种二端口网络, 它的作用是允许某频率范围的信号通过, 滤掉或抑制其他频 率的信号 允许通过的信号频率范围称为通带, 其余信号的频率范围称为阻带 许多通过电 信号进行通信的设备, 如电话 收音机 电视和卫星等都需要使用滤波器 严格的说, 实际 的滤波器并不能完全滤掉所选频率的信号, 只能衰减信号 无源滤波器通常由 RLC 元件组成, 一般采取多节 T 型或 型结构, 制造难, 成本高, 特 别是电感元件的重量和体积都很大 用 RC 元件与运放集成块构成的有源滤波器, 不用电感 线圈, 因此广泛用于工程电路 此外, 运放的开环电压增益很大, 输入阻抗高, 输出阻抗低, 56

157 组成的滤波器有一定的放大 隔离和缓冲作用 相比于无源滤波器, 有源滤波器有许多优点 : () 可以按要求灵活设置增益, 并且无论输出端是否带载, 滤波特性不变, () 有源滤波电路一般由 RC 网络和集成运放组成, 因而必须在适合直流电源作用下才能正常工作 ; (3) 不用电感, 故体积小, 重量轻, 不需加磁屏蔽 ; (4) 可加电压串联负反馈, 使 Ri 高 Ro 低, 在输入与输出之间有良好的隔离性 (5) 除能滤波外, 还能将信号放大, 而且 Au 易调节 (6) 不适宜高电压大电流的负载, 只适用于信号处理 (7) 不适宜高频范围, 频率范围 0 的负 3 次方到 0 的 6 次方 Hz (8) 有源滤波器有着极高的输入阻抗和极低的输出阻抗, 可直接进行级联, 不需进行阻抗匹配 同时, 有源滤波器电路还可进行增益调整, 通过调节桥臂电阻, 可补偿电路中的增益衰减 电路对直流信号及低频信号几乎无增益衰减 二阶有源滤波器的设计原则 : ) 品质因数 Q 的选择 ( 对有源二阶 ) ⑴ Q=0.707, 构成巴特沃思滤波器 ( 常用 ) ⑵ Q=0.577, 构成贝塞尔滤波器 ⑶ Q=, 切比雪夫滤波器 0-3dB -6dB A 0lg u Au p / db 贝塞尔滤波器 切比雪夫滤波器 巴特沃思滤波器 ω/ω 0 图 4.3. 二阶有源滤波器频率特性 关键芯片及各单元电路介绍. 运算放大器 OPA365 OPA365 与普通放大器的不同在于它是轨对轨, 高性能的 CMOS 运算放大器是非常适合低电压和单电源供电的应用 下面介绍一下 OPA365 的主要特性 : 增益带宽 :50MZ 轨对轨输入 / 输出 低噪声 :nv/ Hz 输入失调电流 : 0.pA 转换速率 :5V/us 快速建立时间 :0.3us 到达 0.0% 工作电压范围 :.V 到 5.5V () 二阶有源低通滤波器 本次实验设计采用压控电压源型设计二阶有源低通滤波器, 压控电源型 (VCVS) 同 57

158 输 入 低 通 R7 0 3 C4 0 3 R8 0 3 C R5 3 K +5.0V R6 8.K C U5A OPA356 R0 0 K 输 出 D 3 西安电子科技大学 MSP430G 教程 相输入, 输入阻抗很高, 输出阻抗很低, 如下图所示电路为常用二阶低通 由于 C4 接到集成运放的输出端, 形成正反馈, 使电压放大倍数在一定程度上受输出电压控制, 且输出电压近似为恒压源, 所以称之为二阶压控电压源低通滤波器 其优点是电路性能稳定 增益容易调节 本实验采用的是 Q=0.7 的伯特瓦兹低通滤波器, 伯特瓦兹低通滤波器的特点 ) 伯特瓦兹低通滤波器在通频带内具有最大的平坦度, 阶数越高, 平坦度越好 在截止频率处, 所有的伯特瓦兹低通滤波器都有 -3dB 的增益衰减 ) 伯特瓦兹低通滤波器的阶数越高, 在通频带内愈平坦, 且对高频噪声的抑制能力也越强 滤波器阶数不同对性能有着影响, 下图为二阶有限增益的低通滤波器的原理图 图 二阶有源低通滤波器连接电路图 一般的, 电路中通常取 : C8=C4=C,R7=R8=R 幅频特性 : V R i ( CS) V R V R SCV V ( CS) R H o o V R H 0 0 o 0 0 传递函数为 : V0 ( S) H( S) V ( S) (3 H i o Ho ) RCS ( RCS ) 增益为 : H o R5 R R 5 6 滤波器的低通截止频率为 : 0 RC 说明 : ) 这种二阶低通滤波器中, 放大倍数 H0 不能任意指定, 当 3 H o, 0滤波器电路不稳定 ) 电路中元件离散性少, 电路参数调整方便 不过由于电路中通过引进了正反馈, 所 58

159 输 入 带 通 R 0 0 K C R 3.9K 0 n 0 n C R K +5.0V 6 5 C6 0 4 U5B OPA356 7 R5 Res 0 K D 4 输 出 西安电子科技大学 MSP430G 教程 以整个电路的增益大小受到一定的限制 ( 二 ) 二阶有源带通滤波器本次实验设计无限增益多路反馈型 (MFB) 设计二阶有源低通滤波器,MFB 运放为反相输入 其优点是电路有倒相作用, 使用元件较少, 但增益调节对其性能参数会有影响, 故应用范围比 VCVS 电路要小 图 所示为一个无限增益多路反馈带通滤波器电路, 电路中一般去 C=C=C, 传递函数为 : K Bs Hs () s Bs p 0 其中各系数为 : R B, ( ), K R C R R R 3 0 p 3 RC 图 二阶有源带通滤波器连接电路图表征带通滤波器性质的重要参数有三个, 分别是 : 0 : 中心频率, 也即谐振频率, 带通滤波器在中心频率处转移函数的幅值最大 ; RC R : 带宽, 定义为两个截止频率之差 ; 截止频率 c 的定义为 : 转移函数 L 的幅值由最大值下降为最大值的 / 时的频率, 即 H( j c ) Hmax Q L R CR 0 0 : 品质因数, 定义为中心频率与带宽之比 0 比较器 TLC37: TLC37 是采用 LinCMOSE 技术制造的, 它由两个独立的电压比较器组成, 每个比较器由单一的单电源供电, 从 V 至 8 V 的双电源供电也是可以的 每个比较器具有极高的输入阻抗 ( 通常大于 0 的 次方欧姆 ), 可直接接口与高阻抗信号源 输出是 N 沟道开漏型的 TLC37 内部有静电放电 (ESD) 保护电路 下面介绍一下 TLC37 的主要特性 : 单或双电源供电 宽电源电压范围 : V 至 8 V 非常低的电源电流消耗, 在典型值 5V 时只有 50mA 的消耗 内置 ESD 保护 极低的输入偏置电流, 典型值 5 pa 超稳定的低输入失调电压 59

160 输 出 R80 5.K 3 C V 8 4 R 0 K U7A TLC37 R00 K 输出 0 西安电子科技大学 MSP430G 教程 共模输入电压范围包括地 输出兼容 TTL,MOS,CMOS 电平单一比较器内部原理图如图 4.XX 所示 图 比较器内部等效原理图从原理图可以看出比较器是集电极输出, 所以在其输出端必须接上拉电阻, 否则得不出输出信号 长期以来, 比较器的应用一直受到运算放大器的冲击, 直到目前随着比较器性能指标的不断改进, 这一现状才得到改善, 比较器的两路输入为模拟信号, 输出则为二进制信号, 当输入电压的差值增大或减小时, 其输出保持恒定 因此, 也可以将其当作一个 位模 / 数转换器 (ADC) 运算放大器在不加负反馈时从原理上讲可以用作比较器, 但由于运算放大器的开环增益非常高, 它只能处理输入差分电压非常小的信号 而且, 一般情况下, 运算放大器的延迟时间较长, 无法满足实际需求 比较器经过调节可以提供极小的时间延迟, 但其频响特性会受到一定限制 为避免输出振荡, 许多比较器还带有内部滞回电路 因此, 比较器不能当作运算放大器使用 这也是运算放大器的应用范围相对比较广泛的主要原理之一 电压比较器 ( 以下简称比较器 ) 是一种常用的集成电路 比较器与运放的差别是运放可以做比较器电路, 但性能较好的比较器比通用运放的开环增益更高, 输入失调电压更小, 共模输入电压范围更大, 压摆率较高 ( 使比较器响应速度更快 ) 另外, 比较器的输出级常用集电极开路结构, 如图 4.XX 所示, 它外部需要接一个上拉电阻或者直接驱动不同电源电压的负载, 应用上更加灵活 但也有一些比较器为互补输出, 无需上拉电阻 它可用于报警器电路 自动控制电路 测量技术, 也可用于 V/F 变换电路 A/D 变换电路 高速采样电路 电源电压监测电路 振荡器及压控振荡器电路 过零检测电路等 本文主要介绍其基本概念 工作原理及典型工作电路, 并介绍一些常用的电压比较器 比较器的功能是比较两个电压的大小 常用的幅度比较电路有电压幅度比较器 窗口比较器和具有滞回特性的施密特触发器 这些比较器的阈值是固定的, 有的只有一个阈值, 有的具有两个阈值 比较器的基本特点为 : 工作在开环或正反馈状态 开关特性, 因开环增益很大, 比较器的输出只有高电平和低电平两个稳定状态 非线性, 因大幅度工作, 输出和输入不成线性关系 图 波形整形电路 60

161 模拟滤波器 V B U S V3.3 V 0 V P.0 P. LauchPad 西安电子科技大学 MSP430G 教程 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与程控放 大模块的连接关系如图 4.XX 所示 图 LaunchPad 开发板与模拟滤波器模块连接图 滤波器的频率信号经过整形后分别输入到 MSP430G553 单片机的 P.0 P. 两管脚, 为了需要与 MSP430G553 单片机的 3.3V 和 5V 电源连接 ; 程控放大器模块通过引出两排 3 针的排针与 LaunchPad 开发板结合在一块, 该模块的实物图及 PCB 图可参见图 图 模拟滤波器模块实物图及 PCB 图 4.3. 程控放大器实验功能模块 实验功能模块功能说明信号放大是信号调理技术的重要组成部分, 应用十分广泛 例如, 在信号采集过程中, 输入信号通常是微弱信号, 就要求信号调理电路具有放大功能 在很多情况下, 需要根据输 入信号的变化情况对放大器的增益做相应的改变, 这就需要采用程控放大器电路来进行处 理 程控放大器实验功能模块在 MSP430G553 单片机支持下, 可实现对输入信号的增益进行 选择与控制 该模块的核心芯片是 TI 公司的程控放大器 PGA, 通过 MSP430G553 与 PGA 之间的 SPI 接口控制程控放大器的增益 该实验功能模块通过与 MSP430G553 单片机的 SPI 接口及 I/O 口的连接, 可以完成 I/O 口输入输出 SPI 接口输出 A/D 转换和点阵液晶显示器控制等基础性实验, 并在此基础上 6

162 VCC_3 LM385 R Res K D.5V R Res 0 K R 3 Res 7 5 INPUT0 西安电子科技大学 MSP430G 教程 实现对输入信号的增益选择与控制的功能性实验, 还可以结合按键功能模块及点阵液晶显示 器实现对输入信号 输出信号及放大倍数的选择 控制与显示等较为复杂的应用实验 实验功能模块组成及工作原理图 是该程控放大器模块的整体组成框图 : DIP 开关状态选择 (ON) (ON) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(ON) 8(ON) 9(OFF) 0(OFF) (OFF) (OFF) GND VCC5 DIP-3 DIP-4 内部基准电压 产生电路 内部 / 外部输入 电压选择开关 外部输入电压 产生电路 PGA 程控运算放大器放大倍数选择 4 位 DIP 开关 VCC3.3 GND DIO SCLK CS 输出电压 端子 VCC3.3 DIP- DIP- DIP 开关状态选择 (ON) (ON) 3(ON) 4(ON) 5(ON) 6(ON) 7(ON) 8(ON) 9(OFF) 0(OFF) (OFF) (OFF) 图 程控放大器功能模块组成框图该实验功能模块的输入信号包括内部输入和外部输入, 通过 S 拨动开关选择输入信号, 当 S 拨动开关打在右方时选择内部输入状态, 反之选择外部输入状态 内部输入信号由 LM385 芯片将 3.3V 电源电压稳压到.5V, 然后经过电阻网络分压得到十几毫伏的直流电压信号, 如图 4.XX 所示 外部输入信号由外部信号源提供, 与 P 端子连接 ( 可选择一定频率的小信号 ) 程控放大器的增益选择通过单片机 MSP430G553 与 PGA 进行 SPI 通信控制, 所选择的放大倍数由四位 DIP 拨码开关的状态确定, 即通过读取四位拨码开关的不同状态, 控制不同的增益 PGA 的输出信号接到 MSP430G553 单片机的 I/O 口 P.0, 进行 A/D 转换和采样, 另一方面 PGA 的输出信号通过 P 端子引出来, 可与示波器结合观察放大前后的信号大小和波形 图 内部输入信号产生连接图综上所述, 该模块的工作原理可简单概括为 : 将输入信号接到 PGA 的信号输入引脚, PGA 通过与单片机 MSP430G553 进行的 SPI 通信来改变其增益, 单片机通过读取四位 DIP 拨码开关的状态, 向程控放大器 PGA 发送不同的 SPI 命令控制其增益变化, 并将 PGA 输出的信号接到单片机进行 A/D 转换和采样, 为在点阵 LCD 显示器上显示相关参数提供必要 6

163 的数据 关键芯片及各单元电路介绍. 程控运算放大器 PGA 程控运算放大器与普通放大器的不同在于反馈电阻网络可变且受控于控制接口 给出的控制信号 不同的控制信号, 将产生不同的反馈系数, 从而改变放大器的增益 图 4.3. 是 PGA 芯片内部结构及与单片机的典型连接图 图 4.3. PGA 芯片内部结构及与单片机的典型连接图由图 4.3. 可知,PGA 芯片内部结构由校准部分 运放部分及 SPI 接口部分组成 当系统校准时, 为了使用四个内部校准通道,VCAL/CH0 连接到低阻抗的外部参考电压, 这四个内部通道分别连接到地 0.9V VCAL 0.V VCAL 及 VREF PGA 的 SPI 接口包括时钟线 数据线及片选线, 分别与单片机对应的 SPI 口连接, 完成对输入信号的增益控制 对于运放部分, 由其内部结构图可知, 当 VREF 接地时, 该程控放大器的增益为 (+RF/R), 改变 PGA 的增益, 实际上是改变了 RF 的值 PGA 是具有单端输入 单电源供电 可编程增益特征的放大器, 它可以通过标准 SPI 接口实现多路通道的选择和增益的选择, 其中二进制增益包括 八种选择 下面介绍一下 PGA 的主要特性 : 轨对轨输入 / 输出 偏移 :5uV( 典型值 ) 00uV( 最大值 ) 零漂移 :0.35mV/ C( 典型值 ).mv/ C( 最大值 ) 低噪声 :nv/ Hz 输入失调电流 :±5nA 最大 (+5 C) 增益误差 :0.% 最大 (G 3),0.3% 最大 (G > 3) 二进制增益 :,,4,8,6,3,64,8 增益开关时间 : 00ns 双通道选择 四个内部校准通道 输出摆幅 :50mV 至供电轨 AVDD 和 DVDD 混合电压系统 IQ =.ma ( 典型值 ) 63

164 VIN VIN0 VCC_5 P_0 C 0.uF AVDD CH VCAL/CH0 VREF VOUT PGA U 4 DVDD SCLK DIO C S VCC_3 P_5 P_ P_4 C 0.uF 西安电子科技大学 MSP430G 教程 温度范围 : 40 C 到 +5 C 标准 SPI 接口 (0MHz) PGA 具有 0 个引脚, 其引脚功能如表 4.xx 所示 表 4. PGA 引脚介绍 PIN# 名称 引脚功能描述 AVDD 模拟电源电压 (+.V 到 +5.5V) CH 输入通道 3 VCAL/CH0 输入通道 0 及 VCAL 输入, 可用于系统校准 4 VREF 参考输入引脚 5 VOUT 模拟电压输出 6 GND 接地引脚 7 SCLK 时钟输入 SPI 串行接口 8 DIO 数据输入 / 输出 SPI 串行接口 9 *CS 片选线 SPI 串行接口 0 DVDD 数字和运算放大器输出级的供电电压 (+.V 多电源系统, 以 +5.5V) 程控运算放大器 PGA 顾名思义由程序控制其输入信号的放大倍数, 具体来说是通过与单片机的 SPI 接口进行通信, 单片机通过发送不同的指令来选择不同的增益 PGA 具有标准 SPI 接口, 通过 SCLK DIO *CS 与单片机 MSP430G553 进行 SPI 通信 图 4.XX 是 PGA 连接电路图 图 4.3. PGA 连接电路图 VIN 和 VIN0 是 PGA 的两个不同的模拟输入通道, 可通过不同的命令选择当前输入通道 ( 该程控放大器模块默认选择通道 ) PGA 的 SPI 接口与单片机的 P.(SIMO) P.4(UCA0CLK) P.5( 普通 I/O) 连接, 通过 SPI 通信实现对 PGA 的增益控制 下面介绍一下 SPI 通信 : SPI 是高速同步串行口, 具有 3~4 线接口, 收发独立, 可同步进行 它通过主从方式工作, 这种模式通常有一个主设备和一个或多个从设备, 需要至少 4 根线, 分别是 SDI( 数据输入 ),SDO( 数据输出 ),SCK( 时钟 ),CS( 片选 ), 事实上 3 根也可以 ( 单向传输时 ) PGA 工作于从模式, 它只接收单片机发来的指令即可, 属于单向传输, 所以只需 3 根线, 单片机 MSP430G553 工作于主模式, 通过配置单片机各寄存器完成 SPI 的初始化, 在配置 SPI 接口时钟时注意一定要弄清楚从设备的时钟要求, 因为主设备这边的时钟极性和相位都是以从设备为基准的, 因此在时钟极性的配置上一定要明确从设备是在时钟的上升沿还是下降沿接收数据 另外要注意的是, 由于主设备的 SDO 连接从设备的 SDI, 从设备的 SDO 连接主设备的 SDI, 从设备 SDI 接收的数据是主设备的 SDO 发送过来的, 主设备 SDI 接收的数据是从设备 SDO 发送过来的, 所以主设备这边 SPI 时钟极性的配置 ( 即 SDO 的配置 ) 跟从设备 64

165 的 SDI 接收数据的极性是相反的, 跟从设备 SDO 发送数据的极性是相同的 时钟极性和相位 配置正确后, 数据才能够被正确的发送和接收, 因此应该对照从设备 SPI 接口时序来正确配 置主设备的时钟, 该程控放大器模块的 SPI 寄存器配置可参考 PGA 数据手册的 SPI 时序 图 单片机通过 SPI 通信发送不同的指令控制 PGA 的增益, 表 4.xx 给出了 PGA 的 SPI 指令集 表 4. PGA SPI 指令集 D5 D4 D3 D D D0 D9 D8 D7 D6 D5 D4 D3 D D D0 三线 SPI 指令 READ G3 G G G0 CH3 CH CH CH0 WRITE NOP WRITE SDN_DIS WRITE SDN_EN WRITE 注 :()SDN= 关断模式, 通过发出 SDN_EN 输入命令关断模式 由 SDN_DIS 命令或任何有效的写命令使关 断模式被清除, 返回到最后的有效写配置 ()POR (Power-on-Reset) 后的内部增益 / 频道选择寄存器均是 0s; 此时设定增益为, 通道选择为 VCAL/CH0 由于 PGA 通过接收单片机发送的 WRITE 指令控制其增益, 而增益选择位由 G3 G G G0 决定, 表 4.3 给出增益选择位 表 4.3 PGA 增益选择位 G3 G G G0 二进制增益 因为该程控放大器模块默认选择输入通道, 由 PGA 数据手册知 CH3 CH CH CH0 为固定值 000, 结合表 4.xx 和表 4.xx 知,,PGA 的八种二进制增益 分别对应指令 0xA,0x0 0xA,0x 0xA,0x 0xA,0x3 0xA,0x4 0xA,0x5 0xA,0x6 0xA,0x7, 所以 SPI 通信时发送上述八种指令之一即可选择 PGA 不同的放大倍数. 四位 DIP 拨码开关该程控放大器模块上的四位 DIP 拨码开关是 PGA 八种放大倍数的选择开关, 即四位 DIP 拨码开关拨向不同的位置时, MSP430G553 单片机通过读取 DIP 拨码开关的状态向 PGA 发送相应指令进而控制 PGA 的增益 图 是四位 DIP 拨码开关连接电路图 65

166 VCC_3 VCC_3 VCC_3 VCC_3 程控运算放大模块 AVDD DVDD VOUT SCLK DIO C S R R R R P_ P_3 P_6 P_7 3 S 4 5 DIP_8_KEY V C C 5 VCC3.3 P.0 P. P.4 P.5 LaunchPad 西安电子科技大学 MSP430G 教程 图 四位拨码开关连接电路图 由图 4.XX 可知, 四位 DIP 拨码开关与 MSP430G553 单片机的普通 I/O 口 P. P.3 P.6 P.7 连接, 且为低电平有效, 通过读取 I/O 口的高低电平即可判断四位 DIP 拨码开关的状态 该模块中, 当 DIP 拨码开关的第 4 脚有效时, 软件才扫描其它 的三个脚, 且 3 脚构成的八种组合控制 PDA 的八种增益, 四位拨码开关的 状态与放大倍数的选择关系如表 4.4 所示 表 4.4 拨码开关状态与放大倍数选择的关系表 放大倍数 DIP-4 状态 DIP-3 状态 DIP- 状态 DIP- 状态 ON OFF OFF OFF ON OFF OFF ON 4 ON OFF ON OFF 8 ON OFF ON ON 6 ON ON OFF OFF 3 ON ON OFF ON 64 ON ON ON OFF 8 ON ON ON ON 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与程控放 大模块的连接关系如图 4.XX 所示 图 LaunchPad 开发板与程控放大模块连接图 PGA 与单片机进行 SPI 通信需要与 MSP430G553 单片机的 P. P.4 P.5 连接, 为了测量 PGA 放大后的模拟电压值, 则需要将 PGA 的输出脚与 MSP430G553 单片机的 P.0 口连接, 对其进行 A/D 转换和采样 另外给 PGA 芯片供电, 需要与 MSP430G553 单片机的 3.3V 和 5V 电源连接 ;DIP 拨码开关需要与单片机 MSP430G553 的 P. P.3 P.6 P.7 口连接 程控放大器模块通过引出两排 3 针的排针与 LaunchPad 开发板结合在一块, 该模块的实物图及 PCB 图和电路原理图可参见图

167 VCC_3 VCC_3 LM385 R Res K R R R R D P 3 Header_6.5V P_ P_3 P_6 P_7 P Header 3 3 R Res 0 K INPUT INPUT0 R 3 Res S 3 S SW-SPDT 4 5 DIP_8_KEY VCC_ P Header VIN VIN0 P_0 VCC_3 P_0 P_ P_ P_3 P_4 P_5 P_0 P_ P_ NC NC C 0.uF M Moudle AVDD CH VCAL/CH0 VREF VOUT VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C PGA U 4 DVDD SCLK DIO C S VCC_3 P_5 P_ P_4 VBUS X O U T TEST XIN RST P.7 P.6 P.5 P.4 P.3 N N C C C 0.uF VCC_5 XIN X O U T TEST RST P_7 P_6 P_5 P_4 P_3 NC3 NC4 西安电子科技大学 MSP430G 教程 图 程控放大器模块实物图及 PCB 图 P_0 INPUT0 VIN0 VIN VCC_5 图 程控放大器模块电路原理图 晶体管特性测试模块 实验功能模块功能说明 晶体管又称 半导体三极管 或 晶体三极管 它是由半导体锗或硅的单晶上制备两 67

168 个能相互影响的 PN 结, 组成一个 PNP( 或 NPN) 结构 中间的 N 区 ( 或 P 区 ) 叫基区, 两边的区域叫发射区和集电区, 这三部分各有一条电极引线, 分别叫基极 B(base) 发射极 E (emitter) 和集电极 C(collector) 晶体管是能起到放大 振荡或开关等作用的半导体电子器件 由于晶体管广泛应用于信号的调理放大电路中, 且管型多种多样, 故在此设计了晶体管特性测试模块 该模块的实验功能是在 MSP430G553 单片机的支持下完成的 可实现判断管型 ( 是 NPN 还是 PNP 型 ) 判断引脚( 辨别 e b c) 和计算放大倍数 β 的功能 该模块由三个 74LS5 三态门组成, 这样利于编程对晶体管进行测试 该实验模块通过与 MSP430G553 单片机的 I/O 口 ADC 口连接, 可以完成 I/O 口输入 ADC 转换 FLASH 存储 比较器比较等基础性实验, 并在此基础上实现对目标晶体管特性的测量实验, 并通过液晶显示屏向用户显示所需的实验结果 实验功能模块组成及工作原理图 是该晶体管特性测试模块的整体组成框图 DIP 开关状态选择 (ON) (ON) 3(ON) 4(ON) 5(ON) 6(ON) 7(ON) 8(ON) 9(ON) 0(ON) (ON) (OFF) P.5 P.4 P.3 P.4 P.0 P. P. 三态门 二 P.3 P.3 P.5 待测晶体管三态门一 三态门 三 P.6 P.7 P.0 P. P. DIP 开关状态选择 (ON) (OFF) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(ON) 8(ON) 9(ON) 0(ON) (ON) (OFF) 图 晶体管特性测试模块组成框图该实验功能模块的输入信号包括外部输入 P.3 和 P.4 口, 其功能是控制三态门的输入引脚的电平状态, 其中 P.5 至 P.7 口分别用来控制三态门一上的三个控制端,P.0 至 P.5 分别用来控制三态门二和三态门三上的六个控制端 该模块的输出信号包括 A0 至 A 三个 ADC 端口, 分别测算待测晶体管的三个引脚电压 MSP430G553 芯片的 FLASH 模块和比较器模块联合作用, 将测得的数据进行存储 比较和计算, 得到实验所需的结果并显示在液晶屏幕上 图 晶体管特性测试的电路原理图 68

169 综上所述, 该模块的工作原理可简单概括如下 : 通过向待测晶体管的三个引脚施加不同的电压值, 引发晶体管内部的 PN 结导通与否, 就可以测得晶体管的类型是 PNP 型还是 NPN 型, 以及基极 B 是哪个引脚, 在通过 K 电阻和 300K 电阻与晶体管所组成的基本放大电路, 就可以确定集电极 C 和射极 E 的位置, 并求出晶体管的放大倍数 β 关键芯片及各单元电路介绍该模块用到的关键芯片有三态门 74LS5, 在本小节着重描述这一器件的功能和用途 74LS5 是一种三态输出的四总线缓冲器, 共有 4 个引脚, 由一个 GND 引脚 一个 VCC 引脚和四组三态门组成 它的管脚图如下 图 LS5 的内部原理图 注 : 引出端符号 :A~A4 输入端 C~C4 三态允许端 ( 低电平有效 ) Y~Y4 输出端 表 LS5 功能表 输入 输出 A C Y L L L H L H X H Hi Z 说明 :H 高电平 L 低电平 X 任意 Hi-Z 三态 ( 输出无效 ) 根据三极管的放大特性, 先由三态门一向晶体管的两个引脚上两两施加高电平, 再测 量另一个引脚的电平高低, 来判断晶体管的管型和基极 B 的位置 图 判断管型的单元电路图 ( 以 PNP 型为例 ) 69

170 用上述单元电路并配置 PNP 型晶体管测量后总结得到的数据如下表 : 表 4.6 晶体管管型测量结果 引脚 引脚 引脚 3 结论 H H L* 管型为 PNP 型 H L* H 引脚 为 B 为 E 3 为 C H* H H 引脚 引脚 引脚 3 结论 H H H* 管型为 NPN 型 H L* H H* H H 引脚 为 E 为 B 3 为 C 注 : 星号标出的为 ADC 测量所得到的电压值, 未加星号的是通过 I/O 赋给晶体管的电压值 H 高电平 L 低电平 得出晶体管的管型后就可以用该晶体管组成最简单的基本放大电路, 在放大电路中引入 300K 和 K 电阻的意义在于将电压的压降与电阻阻值相比得到电流值, 通过集电极的电流值与基极的电流值相比就可以得到该晶体管的放大倍数, 同时也可以确定集电极 (C) 和射极 (E) 的位置 若测得的晶体管是 PNP 型晶体管, 且求得基极 B 的位置, 则需要按照图 4.xx 进行连接 图 4.3. PNP 晶体管的基本放大电路 通过对三态门一 二 三进行编程对控制线置高或者置低, 将目标晶体管按照图 4.xx 连接, 用三个 ADC 口测量晶体管的引脚电压, 根据公式 =(3.3V- /KΩ =(3.3V- /300KΩ 70

171 β= / 就可以求出晶体管的放大倍数 β 若测得的晶体管是 NPN 型晶体管, 且知道基极 B 的位置, 则需要按照图 4.xx 进行连接 图 4.3. NPN 型晶体管的基本放大电路 通过对三态门一 二 三进行编程对控制线置高或者置低, 将目标晶体管按照图 4.xx 连接, 用三个 ADC 口测量晶体管的引脚电压, 根据公式 =( /KΩ =( /300KΩ β= / 就可以求出晶体管的放大倍数 β 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与程控放大模块的连接关系如图 所示 图 LaunchPad 开发板与晶体管特性测试模块连接图 为了测量晶体管引脚的电压, 将晶体管与 MSP430G553 单片机的 P.0 P. P. 连 7

172 接, 利用这几个接口的 ADC 功能 为了控制三态门的输入电压值, 则需要将三态门的输入端与 MSP430G553 单片机的 P.3 和 P.4 接口连接, 实现单片机对三态门的输入控制 其次, 为了控制三态门的控制端选通与中断, 需要将三态门的控制端分别连接到 MSP430G553 的 P.5 至 P.7 和 P.0 至 P.5 另外给 74LS5 芯片供电, 需要与 MSP430G553 单片机的 3.3V 电源连接 晶体管特性测试模块通过引出两排 3 针的排针与 LaunchPad 开发板结合在一块, 该模块的实物图及 PCB 图和电路原理图可参见图 图 晶体管特性测试模块实物图 PCB 图和电路原理图 光照度检测实验功能模块 实验功能模块功能说明在日常生活中, 我们与光息息相关, 可能偶尔一次光线的变化就直接影响我们的心情 例如 : 在平时居住的房间内, 一般要求窗户的面积不小于地板面积的八分之一, 这是为了房间内有较好的的采光条件, 让人们觉得没有压抑感 ; 又如我们看书时, 光线较差会直接伤害我们的眼睛, 如此等等, 总之, 我们的生活离不开光 光照强度的检测也显得尤为重要, 本 7

173 模块即为基于这个理念来设计的 该功能模块通过光电池加上一定的信号调理电路, 最后与单片机 ADC 模块相连, 可以完成所在对环境实时光强的检测, 同时, 将检测结果通过点阵式 LCD864 显示出来 通过该模块的实验, 学生可以学习本模块调理电路的设计方法 单片机 ADC 模块的应用以及 LCD864 的使用方法 实验功能模块组成及工作原理图 是该光照度检测模块的整体组成框图 : DIP 开关状态选择 (OFF) (ON) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(ON) 8(OFF) 9(OFF) 0(OFF) (OFF) (OFF) VCC3.3 P.4 光照度检测模块硅光电池供电部分 I/V 转换电路供电部分量程转换电路量程指示灯 VCC5 P.4 P.3 DIP 开关状态选择 (OFF) (ON) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(OFF) 8(OFF) 9(ON) 0(ON) (OFF) (OFF) 图 光照度检测模块组成框图 该实验功能模块的主体部分为信号调理电路即 I/V 转换电路, 硅光电池输出部分要么是开路电压, 要么是短路电流, 本模块使用的是短路电流 ( 具体见 小节 ), 通过电流电压转换器, 将短路电流信号变成电压信号, 然后将此调理后的信号输入到单片机 ADC 模块, 经过单片机的处理, 将所得到的结果显示在 LCD864 上 由于光照度量程范围较宽, 故本模块采取两个量程切换的方法, 通过用户手动切换量程来显示不同强度下的光照强度 关键元器件及各单元电路介绍. 硅光电池光电池简介 : 要想测得环境中光照强度的值, 必须要有一定的感光元件, 硅光电池就是其中用的比较多的一种传感器 像平时我们见到的各种干电池一样, 光电池也会产生一定的电压和电流, 只不过普通的干电池不需要外界条件的参与, 而光电池需要由光照射才会产生电 光电池是一种无源元件, 即不需要外界供电就能工作, 有源元件必须外界供电才能工作 光电池是一种在光的照射下产生电动势的半导体元元件 光电池的种类很多, 常用有硒光电池 硅光电池和硫化铊 硫化银光电池等 主要用于仪表, 自动化遥测和遥控方面 有的光电池可以直接把太阳能转变为电能, 这种光电池又叫太阳能电池, 图 列举了几种太阳能电池 73

174 图 太阳能电池光电池是一种特殊的半导体二极管, 能将可见光转化为直流电 有的光电池还可以将红外光和紫外光转化为直流电 本次设计所使用到的光电池是型号为 SP-0A 的二脚直插式硅光电池, 其外形如图 所示 图 SP-0A 硅光电池在图 所示的硅光电池中, 顶部 E 型的方块区域即为受光区, 改变这部分的光通量即会改变光电池的电动势 一般情况下 E 型右侧为正极, 左侧为负极 读者可用万用表自行检测, 通过不同程度的遮挡受光区, 观察光电池的输出电压有何变化 硅光电池的工作原理 : 硅光电池是一种利用光生伏特效应制成的光电转换器件, 通过将光信号转变为电信号来检测待测量 光电池工作原理, 当光照射 P N 结时, 原子受激发而产生电子一空穴对, 由于电子和空穴分别向两极移动而产生电动势, 两极接入电路就能产生电流了 硅光电池是一种直接把光能转换成电能的半导体器件 它的结构很简单, 核心部分是一个大面积的 PN 结如图 所示 图 硅光电池结构示意图硅光电池响应时问短 (0-0 ~0-6 s), 光电池转换效率高 ( 目前转换效率高达 7.5% 的硅光电池已经研制成功 ) 若有 lm 的这种光电池, 在足够的阳光照射下, 可以产生 00 多瓦的电能 硅光电池主要有两个方面的应用, 即作为电源和作为光电检测器件的应用 硅光电池作为测量元件使用时, 应当作电流源, 不宜作电压源 为什么呢? 请读者带着这个疑惑继续 74

175 硅光电池 VCC R LM358 西安电子科技大学 MSP430G 教程 往下看 硅光电池的基本特性 : 硅光电池的基本特性包括 : 伏安特性 光照特性和光谱特性等 在本次设计中, 主要使用了硅光电池的光照特性, 因此在本小节主要介绍本特性, 其他特性请读者自行查看硅光电池的数据手册 光照特性指在不同光照强度下, 硅光电池的短路电流和开路电压的大小 具体如图 所示 图 硅光电池的光照特性曲线在图 所示的光照特性曲线中, 可以清楚的看到, 当照度在 000Lx 之前, 硅光电池的开路电压随着光照度的增加迅速上升, 而照度在 000Lx 之后, 开路电压基本上趋于平坦, 即达到了饱和状态 ( 这是由硅光电池的内部特性决定的 ), 但是其短路电流与照度的关系却成正比关系, 这也就是在硅光电池工作原理部分最后提到硅光电池作为测量元件使用时, 应当作电流源, 不宜作电压源的原因. 光电转换与信号调理电路一个线性度好 稳定度高的光电转换与信号放大电路对于整个测试系统是至关重要的 它直接影响整个系统的测量精度, 灵敏度 稳定性及系统的测试速度等指标 前面已经多次提到硅光电池作为测量元件使用时, 应当作电流源, 但是单片机能够识别的是电压信号, 因此我们需要将硅光电池的输出电流转换成电压, 这就需要使用 I/V 转换器 ( 即电流 / 电压转换器 ) 其电路如图 所示 I/V 转换电路在图 中, 硅光电池电流的方向从上到下, 由运放的特性 虚断 可得到该电流全部流经电阻 R, 因此在 R 上会产生一个压降, 又由运放特性 虚短 可得到, 运放的 端和 3 端电势相同,3 端与地连接, 故这两端电势均为零, 从而 端输出的电势就等于 R 上的压降, 75

176 硅光电池 3 C 8 4 VCC R LM358 R C 3 西安电子科技大学 MSP430G 教程 注意电流的流动方向是从 R 的右端流向左端, 因此 端的输出电压为正电压 根据硅光电池的光照特性曲线可知, 硅光电池的短路电路与光照度成正比, 带任何负载后形成的电流都不再是短路电流, 也就谈不上与光照度成正比这个关系, 下面来探讨为何图 5 所示的电压所使用的电流就能看作是短路电流 还是从运放特性出发, 运放 虚短 特性表明, 端和 3 端电压相同, 即硅光电池负载电阻 RL=0, 相当于硅光电池工作时处于短路状态, 因此硅光电池的电流就能看作短路电流 ; 由于运放的输入电阻很大, 因此可看成该短路 i 电流全部流经 R, 所以运放输出端所得到的电压 Vo 为 : Vo=i R 从上式可知, 运放输出电压 Vo 是硅光电池的短路电流放大 R 倍的结果, 另外此电压也与光照度成正比 根据以上推导过程可以得到 : 光照度与 I/V 转换后输出的电压成正比关系, 因此光照度的计算公式可由下式表示 Lx=Vo x 上式中 Lx 为索要显示的光照度,x 为比例系数, 具体为多少请读者参考第五章第 节 A/D 转换基础实践中本模块软件设计部分 图 改进后的 I/V 转换电路图 是改进后的 I/V 转换电路, 也就是光电转换与信号前置放大电路 改进后的光电检测电路在放大器的输出和检测电路的输出之间加一个 RC 滤波电路, 这样就限制了放大器输出信号的带宽, 滤掉经过放大的噪声和放大器本身的噪声 该电路具有较高的信噪比 ; 电阻 R3 采用了温度系数小的精密电阻, 从而保证了电流 / 电压转换放大电路的稳定性 3. 运放选型在仪器仪表的设计过程中, 精度是设计时要考虑的最主要因素之一, 运放作为最主要的元器件必须认真选择 由于影响微电流测量灵敏度的首要因素是运放偏置电流, 其次是噪声电压和零点漂移要实现微电流测量, 运算放大器的输入须满足 : 输入阻抗 >> 反馈电阻 ; 偏置电流 < 被测电流 ; 失调电压及漂移小 ; 增益与共模抑制比高 ; 噪声小 在本次设计中, 运放选择 TI 公司的 LM358, 其具有以下优点 : 76

177 硅光电池 SW DPDT P.3 VCC5 P.4 UA LM358 R C 0.uF D LED-red R 3 D LED-green 0 K 0 0 K 0.uF R 5 R 4 C R K C 3 0.uF P.4 VCC3.3 西安电子科技大学 MSP430G 教程 内部频率补偿 低输入偏流 低输入失调电压和失调电流 共模输入电压范围宽, 包括接地 差模输入电压范围宽, 等于电源电压范围 直流电压增益高 ( 约 00dB) 单位增益频带宽 ( 约 MHz) 电源电压范围宽 : 单电源 (3 30V) 双电源 (±.5 一 ±5V) 低功耗电流, 适合于电池供电. 输出电压摆幅大 (0 至 Vcc-.5V) 通过 Multisim 仿真, 该芯片能够较好的工作, 综合考虑多种因素, 最终确定使用 TI 公司的 LM 多量程设计在不同强度的光线照射下, 硅光电池的短路电流范围较大, 大概从 0.uA 到 0mA, 从图 5 可以得知, 假设 R 为 0KΩ,I/V 变换后输出电压 Vo 的范围为从 mv 到 00V, 这显然是不可能的, 因为运放 OPA356 的工作电压不可能达到 00V, 因此,I/V 变换后输出电压 Vo 的范围最多只能是从 ma 到 VCC( 理想情况下 ) 所以, 当光线较强势, 运放输出饱和, 所测得的光照度也就不是真实的光照度, 这显然不是我们想要的结果 反之, 假设 R 为 00Ω,I/V 变换后输出电压 Vo 的范围为从 0uV 到 V, 对于单片机来说 0uV 太小了 那怎么样才能做到即使大电流也不至于使运放输出饱和 小电流不至于使转换后的电压过小呢? 这就是在本次设计加入多量程设计的原因所在 本次多量程设计的原理是 : 当光线较弱时, 硅光电池产生的短路电流较小, 适当取较大的反馈电阻 R; 当光线较强时, 硅光电池产生的短路电流较大, 适当取较小的反馈电阻 R 总之, 要使经 I/V 转换后的电压在合适的范围内, 以便于单片机进行处理 综合考虑成本 结构 实用等多方面因素, 最终本次设计选用两个量程, 一大一小供用户选择 具体电路原理如图 所示 图 多量程设计的 I/V 转换器 图 中,SW DPDT 是双刀双掷开关, 即用于切换量程用 ;LED-red 和 LED-green 是量 77

178 硅光电池 SW DPDT 3 光照度检测模块 8 4 P.3 VCC5 VCC5 VC3.3 P.4 P.4 P.3 P.4 UA LM358 R C 0.uF D LED-red R 3 D LED-green 0 K 0 0 K 0.uF R 5 R 4 C R K C 3 0.uF P.4 VCC3.3 J CON LaunchPad VCC5 VC3.3 P.4 P.3 P.4 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. NC NC J CON VCC5 XIN X O U T TEST RST P.7 P.6 P.5 P.4 P.3 NC4 NC3 西安电子科技大学 MSP430G 教程 程指示灯, 用户可通过指示灯的亮灭清楚的看到当前选用哪个量程 ;R4 R5 是两个指示灯的限流电阻, 用于保护指示灯 ;R R6 即为 I/V 转换的反馈电阻, 其精度越高越好, 具体阻值可按测试环境的不同来选取 看到这里, 可能有些仔细的人会有疑惑 : 为什么加入两个指示灯就使用双刀双掷开关呢? 用单片机 IO 来控制指示灯的亮灭不是更简单吗? 其中自有有一定的原因, 在这里, 笔者先不作介绍, 读者可在第五章第 节 A/D 转换基础实践中本模块软件设计部分找到这个问题的答案 实验功能模块信号引脚与 LaunchPad 系统连接图 给出了光照度检测模块的外接引脚, 在本模块中只用到了 VCC3.3 VCC5 P.4 P.3 P.4 五个引脚 其中 VCC3.3 为量程转换指示灯供电,VCC5 为 LM358 供电,P.4 是单片机 ADC 转换模块的输入通道 4, 与调理好之后的信号相连, 用于 AD 转换,P.3 和 P.4 是量程切换的信号端, 用于 告诉 单片机当前用户具体选择哪个量程, 以便采取不同的处理方式 图 光照度检测模块的外接引脚图 封装成两排 3 排针, 对应实验底板的两排 3 排针的排座, 无需额外的连线即可实现实验过程中的即插即用, 非常方便 该模块的电路原理图如图 所示, 最终实物图及 PCB 可分别参考图 和图 图 光照度检测模块原理图 78

179 图 光照度检测模块实物 图 光照度检测模块 PCB 三种温度测量模块 实验功能模块功能说明温度是一个重要的基本物理量, 自然界中任何物理 化学过程都紧密地与温度相联系, 温度与我们的生活和生产都紧密相关, 因此温度测量具有重要的意义 三种温度测量模块上有三种温度传感器, 分别是 DS8B0 LM35 和 PT00 MSP430G553 单片机可利用三种温度测量模块上的三种温度传感器和单片机的内部温度传感器实现温度 的综合测量 该实验功能模块通过与 MSP430G553 单片机的 I/O 口及 ADC0 的连接, 可实现 对每个温度传感器测量温度的实时监测, 并可以设置与 ADC0 连接的温度传感器的采样次数 和采样间隔, 最后将测量结果加以比较, 求其相对误差和绝对误差 实验功能模块组成及工作原理图 是该三种温度测量模块的整体组成系统框图 : DIP 开关状态选择 (ON) (OFF) 3(ON) 4(OFF) 5(OFF) 6(OFF) 7(ON) 8(OFF) 9(OFF) 0(OFF) (OFF) (OFF) VCC3.3 VCC5 GND DS8B0 恒流源产测温电路生电路 P. GND GND LM35 测温电路 A5 PT00 温度传感器 信号调理电路 A6 DIP 开关状态选择 (ON) (ON) 3(ON) 4(ON) 5(ON) 6(OFF) 7(ON) 8(OFF) 9(ON) 0(ON) (ON) (ON) 图 三种温度测量模块组成框图模块上 DS8B0 温度传感器是一个数字温度传感器, 它和单片机的一根 IO 相连与单片机通信, 将其测量的温度数据传送给单片机 LM35 温度传感器输出的电压值和温度成线性关系, 其输出电压 Vout=0.0mV/ * T, 其中 T 为当前温度, 因此单片机 ADC0 对其输出电压进行采样, 便可求的当前的温度 PT00 是一个种使用非常广泛的热电阻传感器, 其阻值和温度成函数关系 本模块设计了一个恒流产生电路, 使 PT00 上流过一个恒定电流, 这样 PT00 两端的电压值只与其阻值有关, 在将 PT00 两端的电压经过信号调理, 再送给单 79

180 片机 ADC0 采样, 便可计算出 PT00 的阻值, 从而求得温度值 最后, 单片机将通过模块上的三种温度传感器测量的温度值和单片机内部温度传感器测 得的温度值送给 LCD 进行显示 关键芯片及各单元电路介绍. 温度传感器 DS8B0 DS8B0 是一种可编程分辨率的数字温度传感器 DS8B0 的核心功能是它的直 接到数字温度传感器 温度传感器的分辨率可以配置成 9,0,, 位, 相应的递增量 分别为 0.5 C,0.5 C, 0.5 C, 和 C 加电默认分辨率为 位 其特 点如下 : 独特的 -Wire 接口, 只需一个端口引线来通信 每个器件都有一个独一无二的 64 位序列编码存储在板级 ROM 内 多点能力简化了分布式温度采集应用 无需外部器件 可从数据线供电, 供电电压范围从 3.0V 到 5.5V 测温范围从 -55 C 到 +5 C(-67 F 到 +57 F) -0 C 到 +85 C 精确度 ±0.5 C 用户可选择从 9 到 位测温分辨率 750ms( 最大值 ) 内温度转换成 位数位字 用户定义非易失性 (NV) 报警设置 报警搜索命令识别并寻址温度超出指定的极限 ( 温度报警状态 ) 的器件 可用封装有 8-PinSO(50 mils),8-pinμsop, 和 3-PinTO-9 可应用于温度控制, 工业系统, 消费产品, 温度测量以及任何热敏感系统 DS8B0 的封装图如图 所示 DS8B0 的管脚说明见表 4.6 图 DS8B0 封装图 表 4.6 DS8B0 管脚说明 80

181 管脚 SO μsop TO-9 名称 功能,,6,7,8,3,5,6,7 NC 未连接 VDD 可选的 VDD, 寄生供电模式下须接地 4 4 DQ 数据输入输出, 开漏一线接口管脚 寄生供电模式下也为器件提供电源 5 GND 接地 图 是 DS8B0 的内部组成框图, 管脚描述在管脚描述表中给出 64 位 ROM 存储着器件独一无二的序列码 暂存器包括存储温度传感器的数字输出的 字节温度 寄存器 另外寄存器提供对 字节高低警报触发寄存器 (TH 和 TL) 和 字节配置寄存 器的读写 配置寄存器允许用户设置温度到数字转换的分辨率为 9, 0,, 或 位.TH, TL 和配置寄存器是非易失性的 (EEPROM), 所以器件掉电时数据会保持 图 : 图 DS8B0 内部组成框图 DS8B0 仅靠数据线 DQ 一根线和单片机进行通信, 其与单片机的电路连接如下 VCC3.3 J R 3 Res V D D 5.K P. D Q DS8B0 图 DS8B0 电路图连接 DS8B0 的数据线通过上拉电阻和单片机 P. 连接, 可利用单片机的 IO 口模拟 DS8B0 的读写时序, 便可完成对 DS8B0 暂存器的访问, 读出 DS8B0 测量的 位温度数据 具体程序实现详见 节. 温度传感器 LM35 LM35 是 TI 公司推出的一款集成精密温度传感器, 其输出电压正比于温度 ( 单位 ) 其特点如下: 8

182 无需外部校准便能达到 ±/4 的精度 输出电压为 0mV/ 在 5 时能保证 0.5 精度 测温范围 -55 ~50 适合远程应用 成本低廉 供电电压范围从 4V 到 30V 漏电流小于 60uA 非线性误差只有 ±/4 低阻抗输出 (0.Ω 的负载输出 ma) 其管脚说明见下表 : 表 4.7 LM35 管脚说明名称管脚号功能 +VSS 供电电源 4V~30V Vout 输出端, 输出电压等于 0mV/ GND 3 接地 LM35 工作电压 4~30V, 在上述电压范围以内, 芯片从电源吸收的电流几乎是不变的 ( 约 50μA), 所以芯片自身几乎没有散热的问题 其输出电压和温度成良好的线性关系, 无需外部校准,Vout=0.0mV/ * T, 其中 T 为当前温度 下图为 LM35 的电路连接图 LM35 输出端接单片机 P.5, 即 ADC0 的通道 5 J 3 P.5 Vout +Vs LM35 V C C 5 图 LM35 电路连接 3. 温度传感器 Pt00 Pt00 是铂热电阻, 其阻值会随着温度的变化而改变 其工作原理 : 当 Pt00 在 0 摄氏度的时候他的阻值为 00 欧姆, 在 00 时它的阻值约为 38.5 欧姆,Pt00 阻值会随着温度上升而成近似匀速的增长 但他们之间的关系并不是简单的正比的关系, 而更应该趋近于一条抛物线 铂电阻的阻值随温度的变化而变化的计算公式 : -00<t<0 Rt=R0[+At+Bt+C(t-00)t] () 0<t<850 Rt=R0(+At+Bt ) () Rt 为 t 时的电阻值,R0 为 0 时的阻值 公式中的 A,B, 系数为实验测定 这里给出标准的系数 :A=3.9080*0-3 ;B=-5.80*0-7 ; C= *0-8

183 C D LM R 6 0 K 3 C 0 4 V C C UA LM358N B 3 B R.5K P P T 0 0 E C E C Q 9 0 C R 3 K 6 5 C 0 4 R 4 3 K 7 UB LM358N R 5 K C P.6 西安电子科技大学 MSP430G 教程 8 4 图 Pt00 部分电路 由上图可知本模块选用恒流源驱动 Pt00, 从而使 Pt00 两端的电压变化直接反映出其 电阻变化 但是根据公式 P=I R 电流流过电阻, 电阻会发热 因此流过 Pt00 上的电流不能 太大, 本模块上电路设计流过 Pt00 上的电流为 ma, 这样 Pt00 发热非常小, 基本上不影 响测温结果 然后将 Pt00 两端电压经过放大电路接入到单片机 ADC0 的通道 6 最后, 可根据采样 的电压值计算出温度值 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与三种温 度测量模块的连接关系如图 所示 三种温度测量模块 GND VCC5 3 VCC3.3 4 P. 5 A5 6 A LaunchPad GND VCC5 VCC3.3 P. P.5 P.6 图 LaunchPad 开发板与三种温度测量模块连接图模块上的三个温度传感器 DS8B0 LM35 和 Pt00 对应的三个部分电路分别接在 LaunchPad 上的 P. P.5 和 P.6 P.5 和 P.6 对应 MSP430G553 的 ADC0 的通道 5 和通道 6 模块两端还引出两排 3 针的排阵, 模块插在一体化实验板上后, 排阵引脚就与 LaunchPad 开发板上的引脚对应, 排阵引脚如图 所示 83

184 J 3 CON VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C J 4 CON V C C 5 XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 N C 3 DS8B0 测温 LM35 测温排针接口 J DS8B0 V D D D C 3 Q 0 4 D LM VCC3.3 R 6 0 K R Res 5.K 3 C P. V C C 5 UA LM358N J LM35 Vout +Vs B 3 B 3 R.4K P P T 0 0 E C V C C 5 E C C J 3 CON3 R 3 K C VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N C N C 0 4 R 4 3 K 7 J 4 CON R 5 K V C C 5 XIN X O U T T E S T RST P.7 P.6 P.5 P.4 P.3 N C 4 N C 3 图 模块排阵引脚图 该模块的实物图及 PCB 图和该模块的原理图如图 和图 所示 图 三种温度测量模块实物图及 PCB 图 P.5 Q 9 0 Pt00 测温电路 8 4 UB LM358N P.6 C 西安电子科技大学 MSP430G 教程 图 三种测温模块原理图 84

185 4.3.6 矩阵键盘及数码管实验模块 实验功能模块功能说明该模块由 4 位数码管和 4 4 矩阵键盘组成, 主要用于辅助实验板上其它模块, 也可以 用作简易计算器 实验功能模块组成及工作原理 GND DIP 开关状态选择 8(ON) DOUT VCC3.3 DCLK DIP 开关状态选择 (ON) 9(ON) 0(ON) LOAD DIN CH45A SEG0~7 4 位数 0(ON) 4 4 矩 码管 DIP 开关 阵键盘 DIP 开关 状态选择 状态选择 均处 OFF DIG0~3 (ON) 图 矩阵键盘及数码管功能模块组成框图实验模块通过矩阵键盘进行输入, 数码管可对输入输出进行显示 芯片 CH45A 可同时驱动矩阵键盘和数码管, 由于该实验模块需用到实验底板上的两个模块, 因此在上图 4.xx 中位于上面的两个 DIP 开关状态选择 同属于底板上的一个模块, 而位于下面的两个 DIP 开关状态选择 同属于底板上的另外一个模块 此外, 除在上图 4.xx 中标示出的位置的 DIP 开关处于拨通 (ON) 外, 其它未标示出的位置的 DIP 开关均处于断开 (OFF) 状态 关键芯片及各单元电路介绍. 驱动芯片 CH45A CH45A 是数码管显示驱动和键盘扫描控制芯片 内置时钟振荡电路, 可以动态驱动 8 位数码管或者 64 只 LED, 具有 BCD 译码 闪烁 移位 段位寻址等功能 ; 同时还可以进行 64 键的键盘扫描 ;CH45A 通过可以级联的 4 线串行接口或 线串行接口与单片机等交换数据, 并且可以对单片机提供上电复位信号 特点 : 图 CH45A 管脚图 85

186 显示驱动 内置电流驱动级, 段电流不小于 0mA, 字电流不小于 00mA; 动态显示扫描控制, 直接驱动 8 位数码管 64 支发光管 LED 或 64 级光柱 ; 可选数码管的段与数据位相对应的不译码方式或者 BCD 译码方式 ; BCD 译码支持一个自定义的 BCD 码, 用于显示特殊字符 ; 数码管的字数据左移 右移 左循环 右循环 ; 任意段位寻址, 独立控制各个 LED 或者各数码管的各个段的亮与灭 ; 扫描极限控制, 支持 到 8 个数码管, 只为有效数码管分配扫描时间 ; 可以选择字驱动输出极性, 便于外部扩展驱动电压和电流 键盘控制 内置 64 键盘控制器, 基于 8 8 矩阵键盘扫描 ; 内置按键状态输入的下拉电阻, 内置去抖动电路 ; 键盘中断, 可选择低电平有效输出或者低电平脉冲输出 ; 提供按键释放标志位, 可供查询按键按下或释放 ; 支持按键唤醒, 处于低功耗节电状态中的 CH45 可以被部分按键唤醒 外部接口 同一芯片, 可选择高速的 4 线串行接口或经济的 线串行接口 ; 4 线串行接口 : 支持多个芯片级联, 时钟速度从 0 到 MHz, 兼容 CH45 芯片 ; 4 线串行接口 :DIN DCLK 信号线可与其它接口电路公用, 节约引脚 ; 线串行接口 : 支持两个 CH45 并联 ( 由 ADDR 引脚电平设定各自地址 ); 线串行接口 :400kHz 时钟速度, 兼容 I C 总线, 节约引脚 ; 内置上电复位, 可以为单片机提供高电平有效和低电平有效复位输出 其它 内置时钟振荡电路, 不需要外部提供时钟或者外接振荡元器件, 更抗干扰 ; 支持低功耗睡眠, 节约电能, 可以被按键唤醒或者被命令操作唤醒 ; 支持 3V 到 5V 电源电压 ; 支持 SOP8 和 DIP4S 无铅封装. 数码管电路 CH45 可以动态驱动 8 个共阴数码管,CH45 的 5 脚 SEG0 接数码管的 脚 (a 段 ), CH45 的 6 脚 SEG 接数码管的 7 脚 (b 段 ),CH45 的 7 脚 SEG 接数码管的 4 脚 (c 段 ), CH45 的 8 脚 SEG3 接数码管的 脚 (d 段 ),CH45 的 9 脚 SEG4 接数码管的 脚 (e 段 ), CH45 的 0 脚 SEG5 接数码管的 0 脚 (f 段 ),CH45 的 脚 SEG6 接数码管的 5 脚 (g 段 ), CH45 的 脚 SEG7 接数码管的 3 脚 (dp 段 ) 一定要为段驱动引脚( 即 CH45 的 5~ 脚 ) 串接电阻 R~R8, 用以限制和均衡各个段的驱动电流 串接限流电阻的阻值越大, 则驱动电流越小, 数码管的显示亮度越低, 其阻值一般在 60 到 k 之间, 在其他条件相同的情况下, 应该优先选择较大的阻值 在 5V 电源电压下, 串接 70 电阻通常对应段电流 0mA 如果启用了 CH45 的段电流 LMTC 功能, 那么限流电阻 R~R8 可以省掉 CH45 的 8 脚 DIG0 接数码管的 6 脚 ( COM4),CH45 的 7 脚 DIG 接数码管的 8 脚 ( COM3), CH45 的 6 脚 DIG 接数码管的 9 脚 (COM), CH45 的 5 脚 DIG3 接数码管的 脚 (COM) 由于某些数码管在较高工作电压时存在反向漏电现象, 容易被 CH45 误认为是某个按键一直按下, 所以应该实用二极管 D~D4 防止反向漏电, 确保按键扫描更可靠 86

187 SEG0 SEG SEG SEG3 DIG0 DIG DIG DIG3 DIG3 DIG DIG DIG0 SEG0 A SEG 7 B SEG 4 C 9 SEG3 D SEG4 D 4 D 3 D D E D P 8 K 0 K K K 3 3 R 9 R0 R R K 4 K 5 K 6 K 7 K 8 K 9 K0 K K K3 K4 K5 矩阵键盘及数码管模块 VCC D O U T LOAD DCLK DIN 5 G 3 COM4 6 COM COM3 F 4Segmet Digtal LED low com 0 DATA4 COM SEG5 SEG6 SEG7 VCC P.0 P. P. P.3 LaunchPad 西安电子科技大学 MSP430G 教程 图 CH45A 与 4 位数码管连接原理图 3. 矩阵键盘电路 CH45 具有 64 键的键盘扫描功能, 为了防止按键被按下后在 SEG 信号线和 DIG 信号线之间形成短路而影响显示, 应该在 CH45 的 DIG0~DIG3 引脚与矩阵键盘之间串接限流电阻 R9~R, 其阻值可以从 k 到 5k 图 CH45A 与矩阵键盘连接原理图 实验功能模块信号引脚与 LanchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与程控放 大模块的连接关系如图 4.XX 所示 图 LaunchPad 开发板与矩阵键盘及数码管模块连接图 CH45 的 H3L 脚接高电平 ( 或者悬空 ) 时,CH45 通过 4 线串行接口与单片机 G433 进行通信 由于实验板主板已经加了电源退耦电容, 所以该模块无需再加退耦电容, 否则要加之, 减少驱动大电流产生的干扰, 其中 CH45 的 4 脚 DOUT 与单片机 G334 的 P.0 连接, CH45 的 5 脚 LOAD 与单片机 G334 的 P. 连接,CH45 的 6 脚 DIN 与单片机 G334 的 P. 连接,CH45 的 4 脚 DCLK 与单片机 G334 的 P.3 连接 在与 CH45 进行远距离连接的电 87

188 C 3 0.uF VCC H3L RSTI SEG RST RST# DCLK DIN LOAD CH45 D O U T 键盘数码管扫描电路 DIG3 DIG DIG DIG0 SEG0 A DCLK DIN LOAD D O U T COM SEG 7 VCC B SEG 4 C 9 COM SEG3 D SEG0 SEG SEG SEG3 SEG4 SEG6 SEG7 DIG0 DIG DIG DIG3 DIG4 DIG5 DIG6 DIG7 SEG4 8 D 4 D 3 D D E COM SEG5 0 F 70RX8 R R R 3 R 4 R 5 R 6 R 7 R 8 DIG0 DIG DIG DIG3 6 COM4 SEG6 5 G 4Segmet Digtal LED low com SEG0 SEG SEG SEG3 SEG4 SEG5 SEG6 SEG7 SEG7 3 D P DATA4 四位数码管 D O U T LOAD DIN M Moudle SEG0 SEG SEG SEG3 DIG0 DIG DIG DIG3 VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C 3 R 9 R0 R R K 0 K K A K K K A A K 4 K 5 K 6 K 7 K 8 K 9 K0 K K K3 K4 K5 4X4 矩阵按键 接插端口 VBUS TEST XIN X O U T RST P.7 P.6 P.5 P.4 P.3 N N C C DCLK VCC M Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C K 3 3 A K VBUS TEST XIN 3 X O U T RST P.7 P.6 P.5 P.4 P.3 N N C C VCC P Header DIG3 SEG0 SEG4 SEG3 SEG7 SEG5 SEG SEG6 DIG DIG SEG DIG0 西安电子科技大学 MSP430G 教程 路中, 建议对 DOUT LOAD DIND CLK 加上上拉电阻减少干扰 该模块的实物图及 PCB 图和 电路原理图可参见图 和图 图 矩阵键盘及数码管模块实物图及 PCB 图 图 矩阵键盘及数码管电路原理图 触控 RGBLED 模块 实验功能模块功能说明由于 RGBLED 灯的参数使得其在更多的显示领域得到了广泛的应用 该实验功能模块主要是使用单片机及触控按键, 实现对 RGB LED 灯的控制 通过 MSP430G553 与 RGBLED 模块 88

189 的连接, 不仅可以完成简单的 I/O 口功能实验, 而且可以完成 TA 模块的各种功能模式测试的实验, 并且可以结合按键模块实现对 RGBLED 灯更为复杂的控制实验 实验功能模块组成及工作原理图 为该触控 RGBLED 模块的整体组成框图 DIP 开关状态选择 (ON) (OFF) 3(ON) 4(ON) 5(ON) 6(ON) 7(ON) 8(ON) 9(OFF) 0(OFF) (OFF) (OFF) LED LED LED3 LED4 B R G ST0B 控制电路 RGB LED B R G VCC5 GND DIP 开关状态选择 (ON) (ON) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(OFF) 8(ON) 9(OFF) 0(OFF) (OFF) (OFF) 图 触控 RGBLED 模块组成框图由框图可见实验模块通过两种方式来实现对 RGBLED 灯的控制 : () ST0B 是一个单通道带自校正功能的容性触摸感应器, 它是对输入感应电容的变化经过芯片内部电路控制得到相应的输出, 通过改变模式实现对 RGBLED 灯不同的控制 () 通过 G553 I/O 口控制 RGBLED 灯, 即编程定时 I/O 控制或者使用 PWM 波控制 LED 灯的闪烁 关键芯片及各单元电路介绍.RGB LED LED 的封装尺寸 :5mm 5mm.6mm ( 封装如图 4.xx ), 光通量可以达到 MCD( 纯白光, 暖光的稍微小一点 ), 它的工作电压和普通的 LED 一样, 只需要 V, 电流也是一样 0MA 图 封装由于 5050 贴片 LED 的体积比较小, 做工比较精细, 所以手工焊接不大方便, 但是不是不能焊接, 其焊接温度要控制在 50 度内, 否则会烫坏较贵的 5050 贴片 LED 由于 5050 贴片 LED 参数决定了他必定是款受人喜爱的 LED, 所以他常被用在高端民用节能灯, 汽车仪表板,LED 灯带 手机背光及按键, 仪器仪表背光及要求小体积 LED 之产品, LED 背光 开关及标志的平面背光, 来电显示 闪光灯 汽车 音响 户内显示屏 照明 89

190 灯具市场 () 光电特性参数 : 电流越大, 电压越高, 温度越高, 电流越小, 发光角度 :5 度等 ; 正向使用电流是 60mA, 反向电压最大不能超过 5V; 工作温度在 -35~+60 之间最好 如果不考虑光衰寿命问题, 也可在 +85 度以下工作 ; 功率 :0.8W( 与市面上号称 0.W 的相同功率 ) () 5050LED 白光应用参数 : a 电流:43-46mA( 这是最理想的驱动电流 ); 最大使用电流不能超过 60mA; b 电压:.8-3.6V( 要求灯珠的瞬间电压不能超过 5V, 要不就对 LED 灯珠有损坏或严重损坏而无法修复 ); c 环境温度:-0 ~+40 ( 要求灯具的散热设计做得比较好,LED 灯引脚的温度不能超过 60 度 ); d 如果电流在 4-0mA 的时候, 每降低 ma 电流, 其亮度相应降低 4%; e 功率在 43-46mA 的时候为 0.W, 在 46-53mA 的时候为 0.5W, 在 54-60mA 的时候为 0.8W; f 耗电量低 g 使用寿命长: 在恰当的电流和电压下,LED 的使用寿命可达 0 万小时 ; h 高亮度 低热量: 比 HID 或白炽灯更少的热辐射 ; i 环保 :LED 是由无毒的材料作成, 不像荧光灯含水银会造成污染, 同时 LED 也可以回收再利用 ; j 坚固耐用:LED 是被完全的封装在环氧树脂里面, 它比灯泡和荧光灯管都坚固 灯体内也没有松动的部分, 这些特点使得 LED 可以说是不易损坏的 ; k 可控性强: 易于实现颜色的变化和亮暗变化, 而且反应迅速.ST0B( 单通道带自校正功能的容性触摸感应器 ) ST0B 触摸感应器可以用平均电容值作为基准检测感应点的电容变化, 管脚如图 4.xx 它可以通过任何非导电介质来感应电容变化 这样感应模块就可以很好的跟水和灰尘隔离 ST0B 有更强的抗干扰性和更好的一致性 保留端口感应电容输入 GND 通道的输出 与 MD0 一起完成工作模式选择电源与 MD 一起完成工作模式选择通道的输出 图 ST0B () ST0B 特点 带自校正功能的单通道感应芯片 可以通过任何非导电介质感应 按键触摸 通过外部电容调整灵敏度 Open-Drain 的输出形式 工作电压范围 :.5v~6.5v () 额定值 ( 如表 4.8): 表 4.8 工作温度存储温度最大工作电压管脚的容限电压功率损耗直流输出电流 V VDD+0.3v 80mW 0.0 ma 90

191 T Touch pad C 5 p F BOUT0 VCC R Res 0 K 3 4 U ST0B N CIN C OUT0 MOD MOD0 OUT V D D MOD MOD0 BOUT VCC C 0 4 西安电子科技大学 MSP430G 教程 注意 : 超出上述额定值可能导致芯片工作不正常并且导致芯片的永久损坏 (3) 工作模式 普通按键无省电模式 (MD0=VDD MD=VDD) 时序 时段 时段 时段 3 时段 4 时段 5 时段 6 端口 芯片复位 无手指 手指触摸 无手指 手指触摸 无手指 OUT0 高阻 高阻 低电平 高阻 低电平 高阻 OUT 低电平 低电平 高电平 低电平 高电平 低电平 普通按键带省电模式 (MD0=VDD MD=GND) 时序 时段 时段 时段 3 时段 4 时段 5 时段 6 端口 芯片复位 无手指 手指触摸 无手指 手指触摸 无手指 OUT0 高阻 高阻 低电平 高阻 低电平 高阻 OUT 低电平 低电平 高电平 低电平 高电平 低电平 3 锁存按键无省电模式 (MD0=GND MD=VDD) 时序 时段 时段 时段 3 时段 4 时段 5 时段 6 端口 芯片复位 无手指 手指触摸 无手指 手指触摸 无手指 OUT0 低电平 低电平 高电平 高电平 低电平 低电平 OUT 高电平 高电平 低电平 低电平 高电平 高电平 4 锁存按键带省电模式 (MD0=GND MD=GND) 时序 时段 时段 时段 3 时段 4 时段 5 时段 6 端口 芯片复位 无手指 手指触摸 无手指 手指触摸 无手指 OUT0 低电平 低电平 高阻 高阻 低电平 低电平 OUT 高电平 高电平 低电平 低电平 高电平 高电平 5 锁存按键无省电模式 (MD0= 悬空 MD=VDD) 时序 时段 时段 时段 3 时段 4 时段 5 时段 6 端口 芯片复位 无手指 手指触摸 无手指 手指触摸 无手指 OUT0 高阻 高阻 低电平 低电平 高阻 高阻 OUT 低电平 低电平 高电平 高电平 低电平 低电平 6LED 调光模式 (MD0= 悬空 MD=GND) 在 LED 调光模式下,OUT0 为 open-drain 结构, 低电平有效 ( 如果需要输出高电平, 则 外部必须加上拉电阻 ) 芯片复位后,OUT0 端口的 PWM 输出的预设的默认占空比为 00%, 长 时间按键 秒以上则进入调光模式, 进入调光模式后每 0.5 秒左右占空比减小 6.5%, 直到 占空比减小到最小值 5% 或手指离开 如果用户需要调高占空比, 则需要先将占空比调至最 小值 5%, 然后再一次长时间按键超过 秒钟以上 OUT 的输出是 push-pull, 输出电平和 OUT0 相反 图 为 ST0B 的电路连接图 : (4) 功能参数 图 ST0B 的电路连接图 9

192 初始化时间芯片复位之后会读取外部电容值做为判断基准值 此过程大约 300ms 左右 自校正功能芯片在检测到有按键时, 会停止自校正大约 30s 左右 其余的时间内不停的进行自校正, 根据外部环境的漂移来调整基准值 3 省电模式当芯片的工作模式选择带省电功能时, 大约 30 秒钟无按键操作芯片会进入省电模式 省电模式下, 按键采样时间间隔是 500ms 左右 检测到有按键后会马上进入正常工作模式 4 按键反应时间正常工作模式下可以检测到的按键频率大于 0 次 / 秒 (5) ST0B 应用电路 如下两个图的 ST0B 的经典的应用电路 : 调光模式应用线路 ( 见图 ) 该线路是通过模式的选择, 触摸按键感应电容的输入, 则在 OUT 会输出相应的高低电平或者是 PWM 波, 这样就可以来控制 LED 灯的闪烁 图 调光模式应用电路 开关模式应用线路可以选择锁存按键模式, 触摸按键的感应电容的输入, 则在 OUT0 OUT 的输出端就会产生开关式的高低电平 图 开关模式应用电路注意 :.C 是灵敏度调整电容, 根据产品的灵敏度需求调整, 调整范围是 0.5pf~80pf, 电容值越大灵敏度越低 9

193 RGB 模块 BOUT ROUT LED LED LED3 LED4 VCC G O U T VCC P.0 P. P. P.3 P.4 P.5 P.6 LaunchPad 西安电子科技大学 MSP430G 教程.R 当 OUT0 的输出模式选择为强驱动时, 上拉电阻是不必要的 3.MD0,MD 端口根据功能要求, 直接连接到 VDD 或 GND 或悬空 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与触控 RGBLED 模块的连接关系如图 所示 : 图 LaunchPad 开发板与触控 RGBLED 模块连接图通过 MSP430G553 的 P.0 P. P. P.3 控制 RGBLED 灯是否工作, 该模块通过三个单刀双掷开关实现两种方式的选择 ; 当使用 MSP430G553 编程来控制 RGBLED 灯时则将灯的另一端与单片机的 I/OP.4 P.5 P.6 连接, 实现定时或者自行规定的 PWM 波的控制 触控 RGBLED 模块通过引出两排排针与 LaunchPad 开发板结合在一块, 该模块的 PCB 图及原理图如图 和 所示 图 触控 RGBLED 模块 PCB 图 93

194 T Touch pad T Touch pad T 3 Touch pad MOD0 S 4 SW-SPDT C 5 p F C 4 5 p F C 6 5 p F 3 R 7 Res 5 BOUT0 ROUT0 GOUT0 VCC VCC VCC R Res 0 K R Res 0 K R 6 Res 0 K VCC U ST0B U ST0B U 3 ST0B N CIN C OUT0 N CIN C OUT0 N CIN C OUT0 MOD MOD MOD0 OUT MOD MOD0 OUT MOD MOD0 OUT V D D V D D V D D S 5 SW-SPDT MOD MOD0 BOUT MOD MOD0 ROUT MOD MOD0 GOUT R 8 Res 5 VCC VCC VCC VCC C 0 4 C C P Header BOUT 6 BLED R 3 N3904 P.4 3 P.5 GOUT P.6 GOUT ROUT BOUT GOUT0 ROUT0 BOUT0 P.0 5 RLED 3 S SW-SPDT S 3 SW-SPDT 4 3 GLED LEDS TH5050 Res R 5 Res BLED P. 5 RLED BLED GLED 4 3 GLED Q Q 3 N3904 LEDS TH5050 ROUT 6 BLED 3 P. 5 RLED S SW-SPDT 4 3 GLED LEDS3 TH5050 R 4 Res BLED P.3 5 RLED RLED Q N GLED LEDS4 TH5050 P.0 P. P. P.3 P.4 P Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C VBUS X O U T TEST XIN RST P.7 P.6 P.5 P.4 P.3 N N C C P.6 VCC 西安电子科技大学 MSP430G 教程 图 触控 RGBLED 模块原理图 频率计及 D/A 转换模块 实验功能模块功能说明频率信号测量是最常用测量任务之一, 掌握频率测量技术也是单片机应用的重要内容 利用单片机和 D/A 转换器件实现模拟信号的输出控制技术, 也是应熟练掌握的内容 在频率计及 D/A 转换功能模块的设计中, 可提供三路独立的 0 5V 交直流电压输出和一路频率测量输入, 能够更好的帮助学习和了解 MSP430G 系列单片机定时 / 计数器的使用方法, 掌握频率测量和模拟电压输出技术 实验功能模块组成及工作原理图 是该频率计及 D/A 转换功能模块的整体组成框图 : DIP 开关状态选择 (ON) (OFF) 3(ON) 4(ON) 5(ON) 6(ON) 7(OFF) 8(ON) 9(OFF) 0(OFF) (OFF) (OFF) CLK 按键 按键 3 按键 按键 CLKIN 频率输入 DAC855 DA DA DA3 D/A 输出 V5.0 GND SIMO SYNC DIP 开关状态选择 (ON) (ON) 3(OFF) 4(OFF) 5(OFF) 6(ON) 7(OFF) 8(ON) 9(ON) 0(OFF) (OFF) (OFF) 图 频率计及 D/A 转换功能模块组成框图该实验模块的主要功能有两个, 测量频率和 D/A 输出. 测量频率的常用方法为 : 方案一 : 时间闸门法 精确定时 S, 对 S 以内到来的信号进行上升沿计数, 计多少次频率就是多少 方案二 : 计算周期法 用 TA 对输入的信号进行捕获, 通过计算两次捕获 TAR 的差来计算输入信号的周期, 最后算出频率 94

195 方案三 : 单片机定时 / 计数器计数法 当 TimerA 选择外部时钟输入时, 每当一个外部时钟 TACLK 到达,TAR 的值加, 可在 s 内统计 TAR 的值, 算出脉冲频率 方案四 : 单片机 A/D 转换器比较法 可以通过 ADC0 模块, 对假设的高电平设置一个上门限, 一旦采样值高于上门限, 就将计数器的值加, 在 s 内统计计数器的值即可计算出信号的频率 以上的频率测量方案各有特点 : 方案一容易实现, 简单直观, 但是由于使用软件计数所以会占用 CPU 周期, 而且无法测量测量低频率信号, 比如当测量 0.HZ 的信号时, 要定时 0s 才能产生捕获到一次上升沿, 这显然不合理 方案二由于是测上升沿之间的时间间隔所以适合测量低频率信号 方案三适合于测量高频率信号, 且由于是硬件技术所以所占用 CPU 周期很少 方案四适合于测量频率不高, 没有一定规律且已知高电平上门限的信号 在硬件连接关系中, 可将单片机的 P.0 口连接至频率输入端,P.0 可作为 TACLK 输入端,ADC 输入端和普通 IO 口的输入端, 可以兼容以上所提到的方案一 方案三和方案四. D/A 输出的常用方法为 : 方案一 :PWM+ 二阶低通滤波器 PWM 调制的本质是改变波形中高电平的比例 实际上是波形在一个周期内的 面积 如果将 PWM 调制波进行低通滤波, 取出其直流分量 滤波后的输出电压将线性正比于 PWM 占空比 根据这个原理可以利用 PWM 输出作为低速 DAC 使用例如, 当 MSP430 单片机 3V 供电,PWM 输出在 0 3V 之间切换 PWM 的输出高电平的时间比例越大, 其平均值电压越高 经过简单的 RC 低通滤波取出平均电压, 则最终的输出电压 = 占空比 *3.0V RC 滤波时常数越大, 剩余的纹波越小, 但是 DAC 稳定所需的时间越长 必要时可以使用较小的时间常数进行二次滤波, 获得更低的纹波并兼顾速度 该电路的缺点 : 首先,PWM 输出电压等于单片机的电源电压, 因此该电路的稳定性依赖于电源电压的稳定性 实际中电源电压是很不稳定的 其次, 该电路输出阻抗很高, 如果后端所接的负载电阻较小, 会与内阻分压造成误差 解决的办法是为单片机提供稳压电源, 或者在 PWM 输出部分使用基准源供电, 并在输出前加一个运放跟随器, 获得理想的输出特性 PWM-DAC 的缺点是速度很慢只适合于低速运用, 但优点是成本低, 线性度高, 而且数字信号很容易通过光耦隔离, 在设计隔离变送系统时非常方便 方案二 : 外接 DAC 输出 外接 DAC 输出是较为普遍的方法, 在该模块中, 我们选用了 TI 公司的 DAC855 这一外界 DAC 芯片 它具有两路电压输出,SPI 接口, 速度高, 失调低, 6 位精度 具体性能在后面详细介绍 关键芯片及各单元电路介绍. D/A 转换器 DAC855 DAC855 是一个 6 位, 双通道电压输出型 DA 转换器 为用户提供了 SPI 接口 供电电压在.7V~5.5V, 能够实现轨对轨输出, 在 VDD 位 5V 时输出速度可达 30MHz 由于 MSP430G 系列单片机内存和主频的限制, 在该模块中, 可实现 MHz 的输出速率, 并得到了完美的输出波形 95

196 图 DAC855 芯片内部结构及与单片机的典型连接图 由图 可知,DAC855 芯片内部结构由输入施密特触发器,4 位串行转并行控制 逻辑, 数据输入缓冲,DAC 寄存器,DA 转换电阻网络, 输出通道选择逻辑以及 SPI 接口组成 芯片的原理是 : 将输入的串行 SPI 信号解析成数据和控制字两组, 数据送往 DAC 转换 网络, 控制字送往通道模式选择逻辑, 经过缓冲转换后进行两路模拟信号输出 以下是 DAC855 的技术指标 实际精度 :4LSB 最低功耗 :.7V 时 55uA 上电后将输出复位至 0 电源电压 :.7V 至 5.5V 建立时间 :0us 至 0.003%FSR 低功耗的串行接口外接施密特触发器 输出轨对轨 双缓冲的输入架构 双通道选择 温度范围 : 40 C 到 +5 C 标准 SPI 接口 (0MHz) DAC855 具有 8 个引脚, 其引脚功能如表 4. 所示 表 4.9 DAC855 引脚介绍 PIN# 名称 引脚功能描述 VDD 模拟电源电压 (+.7V 到 +5.5V) Vref 基准源输入 3 VoutB 通道 B 输出 4 VoutA 通道 A 输出 5 ~SYNC SPI 帧同步信号 6 SCLK SPI 时钟信号 7 DIN SPI 数据输入 8 GND 地 96

197 VCC FRQ P. P. P.3 C L K U Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C VBUS X O U T TEST XIN RST P.7 P.6 P.5 P.4 P.3 N N C C SIMO ~SYNC TA. V5.0 V5.0 OUTB OUTA V U DAC855 V D D VREF VOUTB VOUTA ~SYNC SCLK DIN SIMO C L K ~SYNC 西安电子科技大学 MSP430G 教程 图 DAC855 连接电路图如图 所示,DAC855 与 553 的连接是通过 SPI 接口连接的,553 提供标准的 SPI 接口,SPI 是一种同步通信接口, 有自己的时钟信号, 输入输出口 SYNC 是一个单独的帧同步信号,MSP430 不提供帧同步信号, 用 IO 口模拟 图 DAC855 写时序图 如图 所示为 DAC855 的写周期时序图,SYNC 下降沿后有效,DAC855 在每个 SCLK 的下降沿读取 DIN 上的信号, 每帧是 4 位数据, 写入数据时 SYNC 必须处于低电平 单片机通过 SPI 通信发送不同的指令控制 DAC855 的数据输出, 表 4.3 给出了的 SPI 指令集 表 4.0 SPI 指令集 D3 D D D0 D9 D8 D7 D6 D5 D0 描述 保保装载装载无缓冲器 6 位转换数据 PD PD0 留留 B A 效选择最高位在前 =A 6 位转换数据 0 0 =B 最高位在前 写通道 A 或 B 的缓冲器 (D8) =A 6 位转换数据写通道 A 或 B 的缓冲器 (D8), 0 0 =B 最高位在前并且装载 DAC A =A 6 位转换数据写通道 A 或 B 的缓冲器, 并且 0 0 =B 最高位在前装载 DAC B =A 位转换数据 写通道 A 或 B 的缓冲器, 并且 97

198 =B 最高位在前装载 DAC A 和 B 图 帧格式图如图 所示为 DAC855 的帧格式图 D0 D5 为数据, 如在基准源是 5V 的时候, 要想输出 5V 的电压, 则应往 D5 D0 写入全 的数据, 设数据值位 data, 则写入的数据和电压值之间的关系为 : 输出电压 V=5*(data/65535) PD 和 PD0 用于选择输出阻抗, 详见数据手册 Buffer Select 位用于选择数据输入到哪一个缓冲区 LDB 和 LDA 用于选择将数据输出到哪一个通道, 如 :LDB 位置, 则将输出到 B 通道 举例 : 将数据输入至缓冲区 A, 并从从通道 A 输出 5V 电压, 基准源是 5V 则应写入控制字 : 二阶低通滤波器用电阻电容网络搭建的二阶低通滤波器如图 所示,,RC 常数要大于 PWM 周期 6~8 倍, 因此 PWM 频率可设置为 66HZ 以上 图 二阶低通滤波器 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与频率计 DA 模块的连接关系如图 所示 DAC855 需要外接从底板上引出 5V 电源作为参考源和外接电源 SPI 接口的时钟口 CLK 接到 P.5 上, 数据口 SIMO 接到 P.7 帧同步,SYNC 接到 P.5, 测频率信号输入 CLKIN 接到 P.0 98

199 VCC S SW-PB R 5 K P. VCC S SW-PB R 4 5 K P. VCC S 3 SW-PB R 5 5 K P.3 FRQ 5 P Header 5 4 频率计和 DA 模块 3 ~SYNC CLKIN VCC SIMO FRQ P. P. P.3 V5.0 C L K C L K U Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C VBUS X O U T TEST XIN RST P.7 P.6 P.5 P.4 P.3 N N C C SIMO ~SYNC TA. V5.0 V5.0 OUTB OUTA LaunchPad V5.0 TA. VCC5 P.7 P.5 P.5 P U DAC855 R V D D VREF 5 K VOUTB VOUTA ~SYNC C SCLK u F DIN R K SIMO C L K ~SYNC OUTC C u F 西安电子科技大学 MSP430G 教程 图 LaunchPad 开发板与频率计 DA 模块连接图 程控放大器模块通过引出两排 3 针的排针与 LaunchPad 开发板结合在一块, 该模块的 实物图及 PCB 图和电路原理图可参见图 和图 图 程控放大器模块实物图及 PCB 图 OUTC OUTB OUTA 图 程控放大器模块电路原理图 三种通信接口模块 实验功能模块功能说明本模块主要包括三种通信接口 :RS3 RS485 及 PS 接口 由于 MSP430G553 只有一 99

200 C 0.uF C+ C 3 0.uF 5 0.uF C 4 C 5 0.uF 0.uF U TRS33E V + C+ C- C- V - D O U T RIN D O U T R O U T DINT DINT RIN Vcc R O U T VCC3.3 T X D R X D OUT3 IN3 C T X D R X D J D Connector 9 0 西安电子科技大学 MSP430G 教程 个可配置为 UART 的 USCI 功能模块, 而 RS3 和 RS485 都是异步串行通信接口, 在此, 两种接口共用一套单片机串口, 用拨动开关进行切换 本模块可实现 PS 键盘解析 RS3/RS485 通信, 帮助读者学习工程中最常用的通信方式以及了解电脑必备外设 键盘的原理 本模块结构分布为 : 上面接口为 RS3 接头 ; 下面左侧端子为 RS485 接口, 右侧为 PS 键盘接口, 也可用于 PS 鼠标 中间部分位两个拨动开关用于切换 3 和 485, 拨到上端连接 3, 下端则连接 485; 两个芯片分别为 33 和 3485, 即 TTL 转 3/485 电平转换芯片 最上端两个 LED 用于指示数据的收发 实验功能模块组成及工作原理图 是该三种通信接口模块的整体组成框图 : DIP 开关状态选择 (ON) (OFF) 3(ON) 4(ON) 5(ON) 6(OFF) 7(ON) 8(OFF) 9(OFF) 0(OFF) (OFF) (OFF) RS3/RS485 选择开关数据收发指示电路 RS3 接口电路 RS485 接口电路 PS 接口电路 3 接口 485 接口端子 PS 接口 DIP 开关状态选择 (ON) (OFF) 3(OFF) 4(OFF) 5(OFF) 6(OFF) 7(ON) 8(OFF) 9(OFF) 0(OFF) (OFF) (OFF) 图 程控放大器功能模块组成框图本模块的电路组成可细分为以下五部分 :RS3 RS485 PS 接口 模块与底板接口和 3/485 切换及数传指示部分, 其中 RS3 和 RS485 部分均为 3.3V 供电,PS 部分为 5V 供电, 如果只使用串口通信部分,5V 电源开关可不打开 仅使用 PS 接口也一样 RS3 和 RS485 采用标准接口转换芯片, 将单片机输出的 TTL 电平转换为标准 3 电平或 485 电平, 又将外部进来的 3 电平或 485 电平的信号转换为 TTL 电平, 传给单片机串口, 其大大提高了数据的传输距离, 实际应用中可根据实际的通信距离需要选择合适的接口 而 5V 逻辑的 PS 接口通过分压网络达到电平匹配的目的, 同时根据协议要求进行上拉和下拉 将时钟线与数据线接与单片机 I/O 口, 这样, 当键盘有键按下时, 单片机这两个 I/O 口将接收到一定的方波信号, 在程序中进行解析, 即可判断出键值, 进而可以将其显示在液晶屏上 关键芯片及各单元电路介绍. RS3 接口电路 图 RS3 接口电路 00

201 使用芯片 TRS33E 简介 : RS3 电路采用 TI 的 3.3V 供电的双通道 RS3 芯片 TRS33E, 图中接法位该芯片数据手册中的典型接法 TRS33E 芯片特点如下 : 适用于自动化应用场合 对 RS-3 总线接口提供静电保护 ± 5-kV 人体静电模式 (HBM) ± 8 kv (IEC , 接触放电 ) ± 5 kv (IEC , 气隙放电 ) 满足或超越 TIA/EIA-3-F 和 ITU v.8 标准的要求 工作电压范围 : 3V 到 5.5V 运行速度可高达 50 kbit/s 两通道接收端和发送端 低供电电流 : 300 µ A (Typ) 外部电容器 : 4 0. µ F 在 3.3-V 供电电压下可接受 5-V 逻辑输入 引脚兼容可选的高速模式设备 ( Mbit/s): TRSF33E 图 引脚分配图及典型接法 DB9 接口引脚定义 : ()RS-3 端 (DB9 母头 / 孔型 ) 引脚定义引脚序号 信号定义 TXD RXD 地内部相连内部相连注 : 该口可直接插入计算机的 COM 口 ()RS-3 端 (DB9 公头 / 针型 ) 引脚定义引脚序号 信号定义 RXD TXD 地内部相连内部相连注 : 该口可接与计算机通讯的设备 (3)DB9 母头 / 孔型与 DB9 母头 / 孔型连接方式 :-,3-3,5-5 串行口常用的三根线 (TXD RXD GND), 有这三根就可以读写数据了 0

202 VCC3.3 R R 9 0 K OUT485 DIR IN U R R D D SN65HVD78 E E Vcc B A VCC VCC3.3 R 8 0 K R0 0 K B A U 3 C O N 西安电子科技大学 MSP430G 教程 图 DB9 实物图 9 芯 信号方向来自 缩写 描述 调制解调器 CD 载波检测 调制解调器 RXD 接收数据 3 PC TXD 发送数据 4 PC DTR 数据终端准备好 5 GND 信号地 6 调制解调器 DSR 通讯设备准备好 7 PC RTS 请求发送 8 调制解调器 CTS 允许发送 9 调制解调器 RI 响铃指示器 注 : 调制解调器 ( 在这里是一个例子, 它可以是其它的 RS3 终端设备 ).RS485 接口电路 图 RS485 接口电路 RS485 电路采用 TI 的 3.3V 供电的单通道半双工 RS485 芯片 SN65HVD78 该芯片特点如下 : 总线接口故障保护 : > ±70 V ('HVD780, 8) > ±30 V ('HVD78) 工作电压范围 3.3V 到 5V 总线引脚 ±6 kv 人体静电保护 最多支持 30 个节点单元载荷 接收器开路 短路和空闲线路条件下的失效保护, 低功耗 低待机供电电流, 最大 ma 工作期间不活动时 ICC 4 ma 0

203 D A T A C L K R 0 k R 5 0 k R 3 R 4 0 k 0 k V C C 5 R 0 k V C C 5 R 6 0 k V C C 5 P P S 西安电子科技大学 MSP430G 教程 引脚兼容工业标准 SN7576 信号变化范围从 5 kbps, Mbps, 最高至 0 Mbps 图 引脚分布及驱动功能表 3.PS 接口电路 图 PS 接口电路 PS 连接器种类及各种连接器引脚定义如下图所示 : 03

204 MTXD MRXD K KX_ K KX_ IN3 IN485 OUT3 OUT485 VCC3.3 VCC3.3 R 3 3 R 3 3 D LED_3 D LED_3 MRXD MTXD 西安电子科技大学 MSP430G 教程 图 PS 连接器种类及各种连接器引脚定义图在此, 我们使用的位圆形六脚插座母头, 与常见 PS 鼠标 键盘相对应 由于 PS 位 5V 逻辑, 为了使其与单片机 3.3V 逻辑匹配, 采用了图 所示的电阻分压网络 当时钟线输出 (PS 键盘输出 ) 高时,R4 与 R5 分压, 单片机输入为 3.3V; 当时钟线输入为低, 输入单片机的电压也为低 ; 数据线同理 另外, 由于数据和时钟都是集电极开路的, 这就意味着它们通常保持高电平而且很容易下拉到地 ( 逻辑 0), 任何连接到 PS/ 鼠标 键盘或 host 的设备在时钟和数据线上要有一个大的上拉电阻, 置 0 就把线拉低 ; 置 就让线上浮成高电平 所以图 中采用了上拉和下拉电阻 即键盘无输入时, 时钟和数据线保持 5V 高电平, 而单片机引脚输入为.5V 逻辑高点平, 满足 PS 通信协议要求 4.3/485 切换及数传指示 图 /485 切换及数传指示 RS3/485 的切换采用两个拨动开关 ( 单刀双掷 ), 当然, 使用一个双刀双掷开关更为简便 数传指示方面, 将 LED 灯直接接于单片机串口数据输入输出端, 另一端通过电阻上拉到 VCC3.3, 由于串口不发数据时处于高电平状态, 此时, 等两端压差小于 0.7V, 灯不亮 当有数据发送时, 会有若干个 0 被发送, 但由于间隔时间较短, 人眼无法识别, 看上去, 每发送或接收一次数据,LED 会闪烁一次, 以此来标示数据的成功传送 由于 LED 工作电流为 0mA, 故选取 330 欧电阻作为上拉电阻 04

205 VCC3.3 MRXD MTXD DIR C L K J Moudle VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C TEST V B U S X O U T RST P.7 P.6 P.5 P.4 P.3 XIN 6 5 N N C C D A T A V C C A K 西安电子科技大学 MSP430G 教程 实验功能模块信号引脚与 LaunchPad 系统连接 LaunchPad 开发板将 I/O 口及电源引脚引出来, 方便与其它模块结合使用, 其与三种通 信接口模块的连接关系如图 所示 图 LaunchPad 开发板与三种通信模块连接图 本模块使用了 3.3V 及 5V 电源, 另外, 使用了 USCI 模块的 UART 引脚 P. 和 P.; 485 还另加了方向切换引脚 P.3;PS 则使用了带 I/O 中断功能的两个引脚 P.5 P.6 作为时钟和数据线 模块与底板连接时, 注意 DB9 即 RS3 接口向上, 与底板插座一对一连接即可 三种通信接口模块通过引出两排 3 针的排针与 LaunchPad 开发板结合在一块, 该模块的 PCB 图和电路原理图可参见图 和图 K A 图 三种通信接口模块的 PCB 图 05

206 D A T A C L K C 0.uF R 0 k R 5 0 k R 3 R 4 C+ C 3 0.uF 5 0.uF C 4 C 5 0 k 0 k 0.uF 0.uF V C C R 0 k V C C 5 R 6 0 k V C C 5 U TRS33E V + C+ C- C- V - D O U T RIN D O U T R O U T DINT DINT RIN P Vcc R O U T P S VCC3.3 T X D R X D OUT3 IN3 C MTXD MRXD T X D R X D K KX_ K KX_ J D Connector 9 3 与 485 只能有一个工作, 因为只有一个串 上拉电阻加分压网络通过单刀双掷开关切换 IN3 IN485 OUT3 OUT485 0 VCC3.3 VCC3.3 R 3 3 R 3 3 D LED_3 D LED_3 MRXD MTXD VCC3.3 R R 9 0 K OUT485 DIR IN485 VCC3.3 MRXD MTXD DIR C L K 3 4 U R R D D SN65HVD78 E E J Moudle Vcc B A VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C VCC VCC3.3 R 8 0 K R0 0 K B A TEST V B U S RST P.7 P.6 P.5 P.4 P.3 XIN X O U T N N C C U 3 C O N D A T A V C C 5 西安电子科技大学 MSP430G 教程 图 三种通信模块电路原理图 声音强度检测模块 实验功能模块功能说明 声音是通过物体振动产生的, 通过介质 ( 如空气或固体 液体 ) 传播并能被人或动物听 觉器官所感知的波动现象 人耳所能听到的声音的频率范围一般在 0Hz 到 0KHz 之间, 而 人主观上感觉到的声音的大小称为响度, 单位为分贝 (db) 人耳刚能听见的声音大小大约 为 db, 这叫闻阈 ; 当大于 0OdB 的噪声就会使耳朵发胀, 疼痛, 这样的声响叫痛阈 人 们总是处于不同的响度的噪声包围之中, 而本功能模块为检测日常生活中的声音的大小带来 了很大的方便 该功能模块通过传声器采集声音信号, 加上部分前置放大电路和峰值检波电路, 最后与 单片机的 ADC 模块相连, 实现对周围声音强度的实时检测, 再加上 LCD864 点阵显示, 可 以准确的将检测结果显示出来 通过本实验的学习, 学生可以熟练的掌握本模块的电路设计 方法, 单片机 ADC 模块的应用以及 LCD864 点阵显示原理 实验功能模块组成及工作原理 图 是该声音强度检测模块的整体组成框图 : 传声器 供电部分 LaunchPad MSP430G553 LCD864 放大电路 峰值检波电路 06

207 图 声音照度检测模块组成框图该功能模块直接利用单片机的 Vcc 供给系统 3.3V 电压, 省去了较为复杂的外围电源部分, 传声器将声音信号转换为电压信号, 由于其输出信号很微弱, 不利于单片机 ADC 采集, 故需要配合适当的前置放大电路使用, 放大后的信号通过峰值检波电路将采集到的信号的峰值检出并输入单片机进行 A/D 转换和采样 经过单片机的处理后, 将检测结果通 LCD864 显示出来 这就是该实验模块的工作原理 关键芯片及各单元电路介绍. 传声器传声器是将声音信号转换为电信号的能量转换器, 俗称话筒 ( 麦克风 ) 而麦克风主要分为动圈式和驻极体电容式, 其中动圈式传声器音质很好, 但体积较大, 电容式传声器体积小巧, 成本低廉, 在手机 电话等设备中应用十分广泛 图 4.xx 为常见的两种传声器 动圈式传声器 驻极体电容式传声器 图 传声器基于驻极体电容式传声器的诸多优点和试验模块的本身特点, 在本次试验模块设计中首选驻极体电容式传声器 ) 驻极体电容式传声器简介驻极体电容式传声器是用事先已注入电荷而被极化的驻极体代替极化电源的电容传声器 其有两种类型, 一种是用驻体高分子薄膜材料做振膜 ( 振模式 ), 此时振膜同时担负着声波接收和极化电压双重任务 ; 另一种是用驻极材料做后极板 ( 背极式 ), 这时它仅起着极化电压的作用 由于驻极体传声器具有体积小 价格低廉 电声性能好 结构简单等特点, 被广泛应用于无线话筒 盒式录音机及声控等电路中, 从而成为最常用的电容传声器 由于输入输出阻抗很高, 所以要在这种话筒外壳内设置一个场效应管作为阻抗转换器, 为此驻极体电容式话筒在工作时需要直流工作电压 图 为本次试验模块选用的直插电容式传声器 EM-9767P 图 电容式传声器 EM-9767P 07

208 ) 驻极体电容式传声器结构及工作原理驻极体传声器的基本结构是由一片单面涂有金属的驻极体薄膜与一个上面有若干小孔的金属电极 ( 背称为背电极 ) 构成 驻极体面与背电极相对, 中间有一个极小的空气隙, 形成一个以空气隙和驻极体作绝缘介质, 以背电极和驻极体上的金属层作为两个电极构成一个平板电容器 电容的两极之间有输出电极 图 为实际驻极体话筒内部结构 图 驻极体话筒内部结构由于实际电容器的电容量很小, 输出的电信号极为微弱, 输出阻抗极高, 可达数百兆欧 以上 因此, 它不能直接与放大电路相连接, 必须连接阻抗变换器 通常用一个专用的场效 应管和一个二极管复合组成阻抗变换器 内部电气原理如图 所示 图 驻极体话筒内部电气原理由于高分子极化膜上生产时就注入了一定的永久电荷 (Q), 而没有放电回路, 所以这个 电荷量是不变的, 在声波的作用下, 极化膜随着声音震动, 因此和背极的距离也跟着变化, 也就是说极化膜和背极间的电容是随声波变化的 根据公式 :Q =CU, 则 U=Q/C 可知, 驻极 体总的电荷 Q 是不变的, 所以当极板在声波压力下后退时, 两极板间距变大, 导致电容 C 减小, 故电压 U 随电容 C 的变小而变大, 反之当电容量增加时电容两极之间的电压就会成反 比的下降 最后通过阻抗非常高的场效应将电容两端的电压取出来, 同时进行适当的放大, 我们就可以得到和声音对应的电压了 由于场效应管是有源器件, 需要一定的偏置和电流才 可以工作在放大状态, 因此, 驻极体话筒都要加一个直流偏置才能工作 这就是驻极体话筒 的工作原理 3)EM-9767P 传感器的性能参数 传声器的类型很多, 本设计选用 EM-9767P 作为传声器, 其相关电性能参数为 : 基准工作电压 (Standard Operation Voltage): 3VDC 阻抗 (Impedance):.kΩ (maximum) 灵敏度 (Sensitivity): -5dB±dB (0dB=V/ubar,kHz) 信噪比 (S/N Ratio): >60dB 消耗电流 (Current Consumption): 0.5mA (maximum) 频率响应曲线 (Frequency Response): 如图 所示 08

209 图 EM-9767P 传声器的频响特性曲线. 前置放大电路前面已经提过, 由于传声器的输出与声音的大小有关, 小可至微伏级别, 如果直接输入单片机的 ADC 信号将很难被采集到, 所以适当的放大信号, 对整个系统的灵敏度, 测试的稳定性,ADC 的采集与转换等都有很大的影响 基于此, 在本实验模块中, 前置放大电路如图 4.xx 所示 图 前置放大电路本设计选用的运放是 TI 公司的 LMV358 低功耗运算放大器, 其优点为 : 双通道低电压 (.7-5V) 版本 rail-to-rail 输出摆幅能力 共模输入电压范围宽, 包括接地 单位增益频带宽 ( 约 MHz) 双极性输入与输出, 提高了抗噪声性能的阶段和更高的输出电流驱动 低的供应电流 ( 约 45uA) 无交越失真, 节省空间包装, 适用于任何一种电池供电和便携式电子设备 由上图可知, 经传声器转换后的声音信号从 LMV358 的 3 端输入, 即为同向比例运算放 大电路的接法, 而同向比例运算放大器由于引入了深度电压负反馈, 所以其输出电阻很小 (Ro 约为 0), 而根据 虚断 的概念, 该电路的输入电流为 0, 所以输入电阻很大 (Ri 为无穷 ) 由同向比例运算放大器的增益计算方法可知, 其放大倍数为 : Au=R/R + =00K/K + =5 而放大后的信号由 LMV358 的 端, 经过负载 R5 输出 而负载电容 C7 与 R5 组成一个 RC 滤波电路, 滤除因输入端引入的干扰噪声, 平滑电压信号 3. 峰值检波电路 09

210 峰值检波电路是一种能记忆信号峰值的电路, 其输出电压的大小, 一直追随输入 信号的峰值, 而且保持在输入信号的最大峰值 本设计加入峰值检波电路, 为单片机 的采集和处理带来了很大的方便 具体的峰值检波电路如图 所示 图 峰值检波电路这是一个典型的峰值检波电路, 放大后的信号从 LMV358 的 3 端输入, 我们可以 控制电容 C3 的放电过程, 即当 P.0 置高时, 三极管 Q 导通, 保持器电容放电 ; 当 P.0 置低时, 三极管 Q 截止, 峰值信号可以被锁存在保存器中 同时, 该电路还加 入一定的保护措施以及阻抗匹配电路 ( 如跟随器等 ), 使得该电路可以重复的工作 检波后的信号由 LMV358 的 7 端输出, 通过 I/O 口 P.3 与单片机相连 总之, 该系统就是先将声音信号转换为电信号, 再将电信号转换为声强显示出来, 这就涉及到声学计算的问题, 与整个系统的灵敏度 ( 包括传声器灵敏度, 放大电路的 增益以及各种滤波电路的衰减等 ) 有着密切的关系, 其具体的转换方式将在软件中进 行说明 实验功能模块信号引脚与 LaunchPad 系统连接 为了将试验模块与实验板方便的连接, 故对应实验板上的两排 3 排针底座, 设 计了两排 3 排针, 如图 所示 而本模块中只用到 P.3 P.0 和 VCC3.3, 其 中,VCC3.3 为整个系统提供电源电压,P.0 通过软件改变其高低电平来控制保持器 电容的放电过程, 而 P.3 则是单片机 ADC 转换的输入通道 A3, 与调理好的信号相连, 实现 A/D 转换 所示 图 声音强度检测模块的外接引脚 该模块的最终原理图,PCB 图以及模块实物图如图 和

211 图 声音强度检测模块原理图 图 声音检测模块 PCB 图 声音检测模块实物图

212 第五章 MSP430G 系列单片机基础实验 第一节 I/O 基础实验 5.. 矩阵键盘按键扫描实验. 实验准备 lanchpad 核心实验板一套, 按键开关 6 个,K 直插电阻 4 个, 万用表一部, 导线若干. 实验目的掌握矩阵键盘的扫描的原理以及 IO 口输入扫描的方法 3. 实验步骤 () 用万用表的电阻档检测电阻是否正常, 用二极管档检测所需导线是否完好, 并检查按键开关是否有损坏 () 按照下图所示在面包板上搭建电路 图 5.. 矩阵键盘原理图 (3) 对照上图, 将 VCC3.3 P.0~P.7 分别与 lanchpad 的 VCC3.3 P.0~P.7 相连, 并仔细检查电路是否连接正确无误 (4) 打开电源, 并打开 CCS 对单片机仿真, 编写一段 IO 读取程序 IO 中高电平个数的总和 (5) 打开 watch register, 在按下其中任意一个按键开关, 观察开关在按下时 PIN 寄存器的数值, 并与原理图相比较, 看是否相符 4. 程序示例 #include <msp430g553.h> typedef unsigned char uchar; typedef unsigned int uint; /*************** 全局变量 ***************/ uchar key_pressed; // 按键是否被按下 :-- 是,0-- 否 uchar key_val; // 存放键值 uchar key_flag; // 按键是否已放开 :-- 是,0-- 否 // 设置键盘逻辑键值与程序计算键值的映射 uchar key_map[] =,,3,4,5,6,7,8,9,0,,,3,4,5,6;

213 /******************************************* 函数名称 :Init_Keypad 功能 : 初始化扫描键盘的 IO 端口参数 : 无返回值 : 无 ********************************************/ void Init_Keypad(void) PDIR = 0xf0; //P.0~P.3 设置为输入状态, P.4~P.7 设置为输出状态 POUT = 0xf0; // P.4~P.7 输出高电平 key_flag = 0; key_pressed = 0; key_val = 0; /********************************************* * Check_Key(), 检查按键, 确认键值 *********************************************/ /******************************************* 函数名称 :Check_Key 功能 : 扫描键盘的 IO 端口, 获得键值参数 : 无返回值 : 无 ********************************************/ void Check_Key(void) uchar row,col,tmp,tmp; tmp = 0x80; for(row = 0;row < 4;row++) // 行扫描 POUT = 0xf0; //P.4~P.7 输出全 POUT -= tmp; //P.4~p.7 输出四位中有一个为 0 tmp >>=; if ((PIN & 0x0f) < 0x0f) // 是否 PIN 的 P.0~P.3 中有一位为 0 tmp = 0x0; // tmp 用于检测出那一位为 0 for(col = 0;col < 4;col++) // 列检测 if((pin & tmp) == 0x00) // 是否是该列, 等于 0 为是 key_val = key_map[row * 4 + col]; // 获取键值 return; // 退出循环 tmp <<= ; // tmp 左移 位 /******************************************* 函数名称 :delay 3

214 功能 : 延时约 5ms, 完成消抖功能参数 : 无返回值 : 无 ********************************************/ void delay() uint tmp; for(tmp = 000;tmp > 0;tmp--); /******************************************* 函数名称 :Key_Event 功能 : 检测按键, 并获取键值参数 : 无返回值 : 无 ********************************************/ void Key_Event(void) uchar tmp; POUT &= 0x00; // 设置 POUT 全为 0, 等待按键输入 tmp = PIN; // 获取 pin if ((key_pressed == 0x00)&&((tmp & 0x0f) < 0x0f)) // 如果有键按下 key_pressed = ; // 如果有按键按下, 设置 key_pressed 标识 delay(); // 消除抖动 Check_Key(); // 调用 check_key(), 获取键值 else if ((key_pressed == )&&((tmp & 0x0f) == 0x0f)) // 如果按键已经释放 key_pressed = 0; // 清除 key_pressed 标识 key_flag = ; // 设置 key_flag 标识 else _NOP(); 5.. 控制数码管显示数字实验. 实验准备 LaunchPad 一个, 共阴极数码管一个,00K 电阻 8 个, 导线若干. 实验目的掌握动态扫描 静态扫描数码管的原理和方法, 以及 IO 口输出的原理和方法 3. 实验步骤 () 将 LaunchPad 插到实验系统标准板上 () 按下图在实验系统标准板上的面包板上搭好实验电路, 将导线接到 LaunchPad 的相应引脚上 4

215 图 5.. 数码管原理图 (3) 打开 CCS 新建工程, 将示例程序写入 main.c 文件 (4) 在工具栏上如下图所示点击鼠标, 开始硬件仿真 图 5..3 仿真步骤 (5) 不断点击工具栏上的 Step Over 按键, 观察数码管上显示的字符 4. 程序示例 #include <MSP430g553.h> #define Dis00 0x3F // 数码管显示字符 "0" #define Dis0 0x06 // 数码管显示字符 "" #define Dis0 0x5B // 数码管显示字符 "" #define Dis03 0x4F // 数码管显示字符 "3" #define Dis04 0x66 // 数码管显示字符 "4" #define Dis05 0x6D // 数码管显示字符 "5" #define Dis06 0x7D // 数码管显示字符 "6" #define Dis07 0x07 // 数码管显示字符 "7" 5

216 #define Dis08 0x7F // 数码管显示字符 "8" #define Dis09 0x6f // 数码管显示字符 "9" #define Dis0A 0X77 // 数码管显示字符 "A" #define Dis0B 0x7C // 数码管显示字符 "B" #define Dis0C 0x39 // 数码管显示字符 "C" #define Dis0D 0x5E // 数码管显示字符 "D" #define Dis0E 0x79 // 数码管显示字符 "E" #define Dis0F 0X7 // 数码管显示字符 "F" const unsigned char seg_[6] = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7; void delay_(int m) // 延时子程序 int i; int j; for (i=m;i>0;i--) for(j=00;j>0;j--); void Display( signed char i ) // 数码管显示子程序 // unsigned char result(); if(0<=i<=5) POUT = seg_[i]; // 数码管显示数值 // delay_(00); // while(); void main(void) 6

217 WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 PSEL = 0; PDIR = 0xff; POUT = 0X00; // 设置 P 口全为普通 IO 口 // 将 P 所有端口设为输出 //p 口先全部输出低电平 unsigned char i; for(i=0;i<6;i++) // 依稀显示从 0 到 F Display(i); 5..3 按键扫描并控制数码管显示键值实验. 实验准备 lanchpad 实验核心板一套,CH45 驱动芯片一块, 数码管 4 个, 二极管 4 个,70 欧电阻 8 个,K 电阻 4 个, 按键开关 6 个,0.uf 电容一个, 万用表一部, 导线若干. 实验目的掌握 CH45 芯片同时驱动键盘扫描和数码管显示的功能和应用 3. 实验步骤 () 用万用表分别检查电阻值是否准确, 二极管 导线是否完好 () 按照下图所示在面包板上搭建电路 图 5..4 键盘与数码管原理图 (3) 将 CH45 的 DOUT,LOAD,DIN,DCLK,VCC 分别与 lanchpad 的 P.0,P.,P.,P.3, VCC 相连, 并用 USB 为系统供电 (4) 打开 CCS 编译环境, 编写程序代码并对单片机进行仿真 (5) 打开 watch register 窗口, 按下键盘中任一按键, 看键值与数码管的显示值是否对应 4. 程序示例 #include <msp430g553.h> #include"key&display.h" // 自定义头文件 7

218 void main( void ) WDTCTL = WDTPW + WDTHOLD; // 停止开门狗 Init_4lines_Mode();// 初始化 4 线工作模式 Send_Command(CH45_RESET);//CH45 芯片内部复位 Send_Command(KeyDisplay_ON);// 允许显示驱动并启动键盘扫描 // 开中断,P.0 接 CH45 的 DOUT 引脚, 当有键按下时,DOUT 上产生由高到低的脉冲 PIE =BIT0; PIES =BIT0; PIFG&=~BIT0; _EINT(); while() // 中断处理函数 #pragma vector = PORT_VECTOR// 中断处理程序, 接收到 DOUT 脉冲信号时, 运行之 interrupt void Port(void) unsigned char Keyvalue; Send_Command(CH45_GET_KEY);// 单片机向 CH45 发送读取按键代码命令 Keyvalue=Key_Read(); switch(keyvalue) case 0x40:// 按键 K0 按下 Send_Command( NDis); // 第 位数码管不显示 Send_Command(Dis00);// 第 0 位数码管显示 0 break; case 0x4:// 按键 K 按下 Send_Command( NDis); // 第 位数码管不显示 Send_Command(Dis0);// 第 0 位数码管显示 break; case 0x4:// 按键 K 按下 Send_Command( NDis); // 第 位数码管不显示 Send_Command(Dis0);// 第 0 位数码管显示 break; case 0x43:// 按键 K3 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis03);// 第 0 位数码管显示 3 break; case 0x48:// 按键 K4 按下 Send_Command( NDis);// 第 位数码管不显示 8

219 Send_Command(Dis04);// 第 0 位数码管显示 4 break; case 0x49:// 按键 K5 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis05);// 第 0 位数码管显示 5 break; case 0x4A:// 按键 K6 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis06);// 第 0 位数码管显示 6 break; case 0x4B:// 按键 K7 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis07);// 第 0 位数码管显示 7 break; case 0x50:// 按键 K8 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis08);// 第 0 位数码管显示 8 break; case 0x5:// 按键 K9 按下 Send_Command( NDis);// 第 位数码管不显示 Send_Command(Dis09);// 第 0 位数码管显示 9 break; case 0x5:// 按键 K0 按下 Send_Command(Dis00);// 第 0 个数码管显示字符 "0" Send_Command(Dis);// 第 个数码管显示字符 "" break; case 0x53:// 按键 K 按下 Send_Command(Dis0);// 第 0 个数码管显示字符 "" Send_Command(Dis);// 第 个数码管显示字符 "" break; case 0x58:// 按键 K 按下 Send_Command(Dis0);// 第 0 个数码管显示字符 "" Send_Command(Dis);// 第 个数码管显示字符 "" break; 9

220 case 0x59:// 按键 K3 按下 Send_Command(Dis03);// 第 0 个数码管显示字符 "3" Send_Command(Dis);// 第 个数码管显示字符 "" break; case 0x5A:// 按键 K4 按下 Send_Command(Dis04);// 第 0 个数码管显示字符 "4" Send_Command(Dis);// 第 个数码管显示字符 "" break; case 0x5B:// 按键 K5 按下 Send_Command(Dis05);// 第 0 个数码管显示字符 "5" Send_Command(Dis);// 第 个数码管显示字符 "" break; default:break; PIFG&=~BIT0; 拓展 : 上述实验只需用到 段数码管, 学者可自己拓展, 编写一个简易计算器的程序, 实现简单的 + - 的功能 5..4 点阵 LCD 显示器控制实验. 实验准备 实验系统标准板一块,LaunchPad 一块. 实验目的 了解 LCD 的工作原理和操作方法, 掌握一种单片机 IO 模拟时序控制的外设方法 3. 实验步骤 () 将 LaunchPad 和液晶模块插到标准版上, 用跳线帽将液晶模块下方的 J 和 J 上的下方的 根插针连接,J3 上的靠上方 根插针连接 再它们右边的 XIN 和 XOUT 连接 () 用 miniusb 线将 LaunchPad 和电脑连接起来 (3) 打开 CCS 中新建工程, 将示例程序写入到 main.c 文件中 (4) 在工具栏上如下图所示点击鼠标, 开始硬件仿真 图 5..5 仿真步骤 (5) 点击 View 菜单下的 Expressions, 在出现的 Expression 标签中加入变 量 display, 查看 display 中数组各元素的值 0

221 (6) 在点击下图按钮进入 main 函数中 while() 超循环, 不断的在 LCD 上显示 display 中的内容 图 5..6 运行步骤 4. 程序示例 #include "msp430g553.h" #include "LCD864.h" unsigned char display[]= "==== 欢迎使用 ====" " 西安电子科技大学 " " 实验系统标准板 " "TexasInstruments" ; void main() WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 PSEL &= ~(BIT6+BIT7); // 关闭 P.6 和 P.7 的第二功能 PDIR = BIT6+BIT7; //P.6 和 P.7 设置为输出 lcd_init(); // 初始化 LCD while() chn_disp (display);// 显示数组 display 中的内容 5..5 触摸按键实验. 实验准备 实验系统标准板一块,LaunchPad 一块. 实验目的 掌握一种触摸按键的工作原理, 和 IO 定时扫描的方法 3. 实验步骤 () 将 LaunchPad 插到标准版上, 用 miniusb 线连接到电脑 () 打开 CCS 新建工程, 将示例程序写入到 main.c 文件中 (3) 在工具栏上如下图所示点击鼠标, 开始硬件仿真

222 图 5..7 仿真步骤 (4) 点击 View 菜单下的 Expressions, 在出现的 Expression 标签中依次加入系统全集变量 base_cnt,meas_cnt,delta_cnt,key_pressed (5) 在 main 函数 while() 死循环中的 delta_cnt = base_cnt - meas_cnt; 语句处设置断点 (6) 点击工具栏上如下图所示的 Resume 按钮, 观察 4 中变量的变化 再将手指按在触摸键上 ( 这里是向下的方向键 ), 重复观察 图 5..8 运行步骤 4. 程序示例 #include "msp430g553.h" /* 定义用户配置 ( 根据具体的硬件平台可能要在相应修改 ) */ #define WDT_meas_setting (DIV_SMCLK_5)// 定义看门狗定时器的测量时间间隔 ( 时间较短 ) #define WDT_delay_setting (DIV_ACLK_5)// 定义看门狗定时器的测量间的延时 ( 时间较长 ) #define KEY_LVL 50 // 定义触摸板是否按下的阀值 /* 使用看门狗定时器可以使用的宏定义 */ #define DIV_ACLK_3768 (WDT_ADLY_000) // ACLK/3768 #define DIV_ACLK_89 (WDT_ADLY_50) // ACLK/89 #define DIV_ACLK_5 (WDT_ADLY_6) // ACLK/5 #define DIV_ACLK_64 (WDT_ADLY 9) // ACLK/64 #define DIV_SMCLK_3768 (WDT_MDLY_3) // SMCLK/3768 #define DIV_SMCLK_89 (WDT_MDLY_8) // SMCLK/89 #define DIV_SMCLK_5 (WDT_MDLY_0_5) // SMCLK/5 #define DIV_SMCLK_64 (WDT_MDLY_0_064) // SMCLK/64 /* LED 相关定义 */ #define LED_ (0x0) // P.0 = LED 输出 #define LED_ (0x40) // P.6 = LED 输出 /* 用来测量的全局变量 */ unsigned int base_cnt, meas_cnt; // 电容 ( 实际是频率 ) 测量的基准值和测量值 int delta_cnt; // 电容 ( 实际是频率 ) 测量的基准值和测量值的差值

223 char key_pressed; // 状态量 : 表示有按键按下 ;0 表示没有按键按下 int cycles; /* 系统功能函数 */ void measure_count(void); // Measures each capacitive sensor void pulse_led(void); // LED gradient routine /* 主函数从这里开始 */ void main(void) unsigned int i,j; WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器 BCSCTL = CALBC_MHZ; // 设置 DCO 为 MHz DCOCTL = CALDCO_MHZ; // 设置 DCO 为 MHz BCSCTL3 = LFXTS_; // LFXT 为 VLO IE = WDTIE; // 使能看门狗定时器中断 PSEL = 0x00; // 禁止外部晶振 PDIR = LED_ + LED_; // P.0 和 P.6 设置为输出 POUT = 0x00; bis_sr_register(gie); // 使能全局中断 measure_count(); // 建立测量基准 base_cnt = meas_cnt; for(i=5; i>0; i--) // 重复测量来建立平均的基准值 measure_count(); base_cnt = (meas_cnt+base_cnt)/; /* 主循环从这里开始 */ while () j = KEY_LVL; key_pressed = 0; // 假设现在没有按键按下 measure_count(); // 测量一次电容的大小 delta_cnt = base_cnt - meas_cnt; // 计算差值 : 指示电容的改变 /* 为基本的电容下降处理基准测量值 */ if (delta_cnt < 0) // 如果为负说明结果超出了基准值, 例如, 电容下降 base_cnt = (base_cnt+meas_cnt) >> ; // 快速的得到新的平均值 delta_cnt = 0; // 差值清零 if (delta_cnt > j) // 根据预定的阀值检查是否有键按下 j = delta_cnt; key_pressed = ; // 有按键按下 else 3

224 key_pressed = 0; // 延时到下一次采样, 如果没有按键按下就采的更慢 if (key_pressed) BCSCTL = (BCSCTL & 0xCF) + DIVA_0; // ACLK/(0:,:,:4,3:8) cycles = 0; else cycles--; if (cycles > 0) BCSCTL = (BCSCTL & 0xCF) + DIVA_0; // ACLK/(0:,:,:4,3:8) else BCSCTL = (BCSCTL & 0xCF) + DIVA_3; // ACLK/(0:,:,:4,3:8) cycles = 0; WDTCTL = WDT_delay_setting; // 采样间隔 ( 较 WDT_meas_setting 长 ) /* 为基本的电容上升处理基准测量值 */ if (!key_pressed) // 只当没有键按下时才缓慢的向下校准基准值 base_cnt = base_cnt - ; // 应该缓慢的减少基准来适应真实的电容变化 pulse_led(); // 根据按键是否按下调整 LED ( 有按键按下就点亮 ) bis_sr_register(lpm3_bits); // 主循环结束 /* 测量每一个按键的计数值 ( 电容值 ) */ void measure_count(void) TA0CTL = TASSEL_3 + MC_; // TA 时钟源选择 IO 振荡器, 连续模式 TA0CCTL = CM_3+CCIS_+CAP; // 上升沿和下降沿都捕获, /* 为弛张振荡器设置端口 */ /* PSEL 寄存器允许 TA 从 GPIO 获取时钟 */ PDIR &= ~ BIT; // P. 设置为输入 PSEL &= ~ BIT; // P. 第二功能设置为电容感测 PSEL = BIT; // P. 第二功能设置为电容感测 /*Setup Gate Timer*/ WDTCTL = WDT_meas_setting; // 测量时间 ( 较 WDT_delay_setting 短 ) TA0CTL = TACLR; // 清除 TA 定时器 bis_sr_register(lpm0_bits+gie); // 等待看门狗中断 TA0CCTL ^= CCIS0; // 产生 CCR 通道的软件捕获操作 meas_cnt = TACCR; // 保存结果 4

225 WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器 PSEL &= ~BIT; void pulse_led(void)//led 处理函数 ( 按下则亮灯 ) if(key_pressed) POUT ^= LED_ + LED_; else POUT = 0; /* 看门狗定时中断 */ #pragma vector=wdt_vector interrupt void watchdog_timer(void) TA0CCTL ^= CCIS0; bic_sr_register_on_exit(lpm3_bits); // 产生 CCR 通道的软件捕获操作 // 中断后推出睡眠 5..6 RGBLED 触控实验. 实验准备 实验系统标准板一块,LaunchPad, 触摸 RGB_LED 模块. 实验目的 掌握一种颜色可变的 LED 原理和控制方法, 了解相关的光学知识 3. 实验步骤 () 将 LaunchPad 和触摸 RGB_LED 模块插到标准版上, 将模块上的开关 S,S,S3 都拨到远离触摸键的方向 () 用 miniusb 线连接 LaunchPad 和电脑 用手分别触摸 3 个触摸按键, 观察 LED 灯的颜色 (3) 打开 CCS 新建工程, 将示例程序写入到 main.c 文件中 (4) 在工具栏上如下图所示点击鼠标, 开始硬件仿真 图 5..9 仿真步骤 (5) 点击工具栏上如下图所示的 Resume 按钮, 将开关 S,S,S3 中的某一个拨到反方向, 观察 LED 灯闪烁 ; 接着触摸其他快关对应位置的触摸键, 观察现象 5

226 图 5..0 运行步骤 4. 程序示例 #include "msp430g553.h" void main( void ) WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 PDIR =BIT0+BIT+BIT+BIT3; //GPIO 设置 PDIR =BIT4+BIT5+BIT6; POUT&=~(BIT4+BIT5+BIT6); POUT &=~(BIT0+BIT+BIT+BIT3); POUT =BIT0+BIT+BIT+BIT3; TA0CCR0=65500; // 定时器 A 的设置 TA0CCR=307; TA0CCR=45875; TA0CTL =MC_+TASSEL_+ID_3; TA0CTL =TAIE; TA0CCTL =CCIE; TA0CCTL =CCIE; _EINT(); while() // 定时器 A 中断函数 #pragma vector=timer0_a_vector interrupt void TA_ISR(void) switch(ta0iv) case : POUT&=~(BIT4+BIT5+BIT6); POUT =BIT4; break; case 4:POUT&=~(BIT4+BIT5+BIT6); POUT =BIT5; break; case 0: POUT&=~(BIT4+BIT5+BIT6); POUT =BIT6; break; 6

227 第二节 AD 转换基础实验 5.. 输入电压检测实验. 实验准备 3.3V 直流电源一台,LaunchPad 实验系统一套, 导线若干. 实验目的 了解 AD 的工作原理和操作方法, 熟悉模拟量输入测量的步骤 3. 实验步骤 ( ) 将 LaunchPad 正确插在实验底板上, 并将直流电源的电压输出端接到单片机任一个模拟输入通道 (A0 A7), 本实验就选择 A4; () 理论估算 : 在选择.5V 为参考电压 0 位 ADC 的情况下, 下表显示了模拟电压与 AD 转换后数字量的对照表 ( 只给出 6 个典型值, 用于参照 ); 模拟电压 /V AD 转后对应数字量 (3) 将该系统连接至电脑, 并将下述程序实例通过 CCS 下载到单片机里并全速运行 ; (4) 打开 watch register, 一边调节直流电源输出电压, 一边观察寄存器窗口中 ADC0 转换后的结果 ADCMEM, 并记录在下表, 比较与第 步结果是否相符 模拟电压 /V ADCMEN 4. 程序示例 #include "msp430g553.h" void ADC0_Init(void) ADC0CTL=CONSEQ_;// 单通道多次转换, 这句应当写在最前面 ADC0CTL0 = REFON+SREF_+REF_5V; // 打开.5V 正参考, 地为负参考 ADC0CTL0 = ADC0ON+ADC0SHT_3+ADC0IE;// 打开 ADC0 内核, 设定采样保持时间为 64 个 7

228 硅光电池 SW DPDT P.3 VCC5 P.4 UA LM358 R C 0.uF D LED-red R 3 D LED-green 0 K 0 0 K 0.uF R 5 R 4 C R K C 3 0.uF P.4 VCC3.3 西安电子科技大学 MSP430G 教程 ADC0CLK, 使能 ADC0 中断 ADC0CTL = INCH_4+SHS_0+ADC0SSEL_; ADC0AE0 = 0x0; 拟信号输入使能 void main() WDTCTL = WDTPW + WDTHOLD; // input A4, 采样保持 // P.4 DC option select A4 模 // Stop watchdog timer ADC0_Init(); _BIS_SR(GIE);// 开中断 while(); 5.. 光照度检测实验. 实验准备 LaunchPad 实验系统一套, 光照度检测模块,LCD864. 实验目的 掌握光照度传感器的原理和使用方法 3. 实验步骤 () 将 LaunchPad LCD864 和光照度检测模块正确插在实验底板上, 光照度检测模块 的电路如下图所示 ; 8

229 图 5.. 光超度检测原理图 () 将下述程序通过 CCS 下载到单片机里并全速运行 ; (3) 通过不同程度的遮挡硅光电池, 观察 LCD864 示数的变化, 通过光照度检测模块上自锁按键可以切换所采用的量程 ; (4) 将此模块测得的数据与标准照度计对比 ( 没有条件的可以省略此步 ) 4. 程序示例 //***************************************************************************** * // 程序名称 : 光照度检测模块 // 功能描述 : 光电池将光信号转化成电信号, 然后输入到单片机模拟量输入端 A4( 即 P.4), // 经 AD 转换后, 由单片机处理, 将该信号转化成光照度, 最后显示在 LCD864 上 // MCLK 采用 M 的内部 DCO,SMCLK 采用 5K 的时钟, 参考电压选择内部.5V 正参考, // 地为负参考 // // MSP430G553 // // // XOUT --p.7(en) // // XIN --p.6 (R/W) // // // 模拟输入 -- P.4 // // P.4 -- 小量程 // P.3 -- 大量程 // //***************************************************************************** * #include "msp430g553.h" #include "LCD864.h" unsigned char const tab[]= " " " LaunchPad " " Welcome " " " ; unsigned char const tab[]= "==== 欢迎使用 ====" " 西安电子科技大学 " " 光强检测模块 " 9

230 "TexasInstruments" ; unsigned char const tab3[]= " 您正在使用 : " " 当前光照强度为 :" " 量程 " " Lx " ; unsigned char CHN[]=" 大 ",CHN[]=" 小 "; void IO_init() PDIR&=~(BIT3+BIT4); PREN =BIT3+BIT4; POUT =BIT3+BIT4;// 内部上拉 //PREN =BIT4; //POUT =~BIT4;// 内部下拉 void ADC0_Init(void) ADC0CTL=CONSEQ_;// 单通道多次转换, 这句应当写在最前面 ADC0CTL0 = REFON+SREF_+REF_5V; // 打开.5V 正参考, 地为负参考, 默认.5V ADC0CTL0 = ADC0ON+ADC0SHT_3+ADC0IE;// 打开 ADC0 内核, 设定采样保持时间为 64 个 ADC0CLK, 使能 ADC0 中断 ADC0CTL = INCH_4+SHS_0+ADC0SSEL_; // input A4, 采样保持 ADC0AE0 = 0x0; // P.4 DC option select A4 模拟信号输入使能 int m,ave,n=0; unsigned long AD_Result,Lx; void main() WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer //BCSCTL = CALBC_MHZ; //DCOCTL = CALDCO_MHZ;// 上面两句将内部 DCO 校准至 MHz //BCSCTL = SELM_0;//MCLK 采用 M 的内部 DCO //BCSCTL = DIVS_0;//SMCLK 采用 5K 的时钟 PSEL &= ~(BIT6+BIT7); PDIR = BIT6+BIT7; lcd_init(); ADC0_Init(); IO_init(); _BIS_SR(GIE);// 开中断 30

231 chn_disp (tab); delay_ms(3000); chn_disp (tab); delay_ms(3000); chn_disp (tab3); while() Write_Num(0x98,Lx,0); delay_ms(00); ADC0CTL0 = ENC + ADC0SC; #pragma vector=adc0_vector interrupt void ADC0_ISR (void) ADC0CTL0 &= ~ENC; // Disable ADC conversion m++; // 计数变量加一, 记录进入 AD 中断的次数 AD_Result+=ADC0MEM; // 累加每次采样值 if(m>=8) // 判断采样的次数, 若采样次数等于 8, 作下面处理 m=0; ave=ad_result>>3; // 对累加和求平均 AD_Result=0; if((pin&bit3)==0x00)// 切换量程 Lx=(long)((ave*.5/03*000)/.4);// 大量程, 将电压值换算成光强度 write_onechinese(,,chn); else Lx=(long)((ave*.5/03*00)/);// 小量程 write_onechinese(,,chn); 5..3 Pt00 温度测量实验. 实验准备 LaunchPad 实验系统一套,Pt00, 三种温度传感器模块 LCD864 LM385 一只 90 一只 LM358 一个 ; 电阻 电容 导线若干 3

232 C D LM R 6 0 K 3 C VCC5 UA LM358N B 3 P Header 3 B Pt00 测温电路 E C E C R.4K Q 9 0 C R 3 K 6 5 C 0 4 R 4 3 K 7 UB LM358N R 5 K C P.6 西安电子科技大学 MSP430G 教程. 实验目的 掌握 PT00 温度传感器的原理和使用方法 3. 实验步骤 () 按照下述电路在面包板上搭建电路, 本电路在三种温度传感器模块中有相应电路, 读者也可直接使用该模块, 下面各步骤以该模块为例来说明 ; 8 4 图 5.. PT00 测温电路 () 将 LaunchPad LCD864 和温度传感器综合试验模块正确插在实验底板上 ; (3) 将下述程序通过 CCS 下载到单片机里并全速运行 ; (4) 通过不同程度的加热 Pt00 探头, 观察 LCD864 示数的变化 ; (5) 将此模块测得的数据与标准温度计对比 ( 没有条件的可以省略此步 ) 4. 程序示例 #include "msp430g553.h" #include "LCD864.h" #define ADC_0 0 #define ADC_F 679 #define VCAL //ADC 测电压校准参数,v unsigned char m=0; int ave,r_pt00,t_pt00,n=0; unsigned long AD_Result; unsigned char const tab[]= " " 3

233 " " " Pt00 所测温度 : " " " ; /**************************************************************************** * 名称 :Calculate(int ADC_Result) * 功能 : 将计算采样值对应的电压 * 入口参数 :ADC_Result, 采样值 * 出口参数 : 无 ****************************************************************************/ float Calculate(int ADC_Result) float Vol; Vol=(float)(ADC_Result-ADC_0)*VCAL/(ADC_F-ADC_0); return(vol); void ADC0_Init(void) ADC0CTL=CONSEQ_;// 单通道多次转换, 这句应当写在最前面 ADC0CTL0 = REFON+SREF_+REF_5V; // 打开.5V 正参考, 地为负参考, 默认.5V ADC0CTL0 = ADC0ON+ADC0SHT_3+ADC0IE;// 打开 ADC0 内核, 设定采样保持时间为 64 个 ADC0CLK, 使能 ADC0 中断 ADC0CTL = INCH_6+SHS_0+ADC0SSEL_; // input A6, 采样保持 ADC0AE0 = 0x0; // P.4 DC option select A6 模拟信号输入使能 void main() WDTCTL = WDTPW + WDTHOLD; PSEL &= ~(BIT6+BIT7); PDIR = BIT6+BIT7; lcd_init(); ADC0_Init(); _BIS_SR(GIE);// 开中断 chn_disp(tab); while() Write_Num(0x93,T_PT00,0); delay_ms(00); ADC0CTL0 = ENC + ADC0SC; #pragma vector=adc0_vector // Stop watchdog timer 33

234 M M K K R 6 8.K C 4 4.7uF 5 0 n F R C uF C VCC3.3 R 4 3 K R K R 8 0 k R k 3 C 0.47uF R C k 5 p F VCC3.3 UA LMV358 R C 7 5 n F 3 UA LMV358 VCC3.3 R 9 Res 4K7 D C uF R0 K 6 5 Q UB LMV R Res 4K7 P.3 VCC3.3 R 0 K P.0 西安电子科技大学 MSP430G 教程 interrupt void ADC0_ISR (void) ADC0CTL0 &= ~ENC; // Disable ADC conversion m++; // 计数变量加一, 记录进入 AD 中断的次数 AD_Result+=ADC0MEM; // 累加每次采样值 if(m>=8) // 判断采样的次数, 若采样次数等于 8, 作下面处理 m=0; ave=ad_result>>3; // 对累加和求平均 AD_Result=0; R_PT00=Calculate(ave); R_PT00=R_PT00*000/4.0; T_PT00=(int)((R_PT00/ )/0.0385); // 计算 PT00 所测温度 5..4 声音强度检测实验. 实验准备 LaunchPad 实验系统一套, 声音强度检测模块 LCD864. 实验目的 熟悉和掌握正因强度检测的方法和原理 3. 实验步骤 () 将 LaunchPad LCD864 和声音强度检测模块正确插在实验底板上, 声音强度检 测模块的电路如下图所示 ; 图 5..3 声音强度检测原理图 () 将下述程序通过 CCS 下载到单片机里并全速运行 ; (3) 改变检测环境的声音强度, 观察 LCD864 示数的变化 ; (4) 将此模块测得的数据与标准声音强度测试计对比 ( 没有条件的可以省略此步 ) 4. 程序示例 #include "msp430g553.h" 34

235 #include "math.h" #include "LCD864.h" unsigned char const tab[]= " " " LaunchPad " " Welcome " " " ; unsigned char const tab[]= "==== 欢迎使用 ====" " 西安电子科技大学 " " 声强检测模块 " "TexasInstruments" ; unsigned char const tab3[]= " " " db " " 当前声强为 : " " " ; void IO_init() PDIR =BIT0; void ADC0_Init(void) ADC0CTL=CONSEQ_;// 单通道多次转换, 这句应当写在最前面 ADC0CTL0 = REFON+SREF_+REF_5V; // 打开.5V 正参考, 地为负参考, 默认.5V ADC0CTL0 = ADC0ON+ADC0SHT_3+ADC0IE;// 打开 ADC0 内核, 设定采样保持时间为 64 个 ADC0CLK, 使能 ADC0 中断 ADC0CTL = INCH_3+SHS_0+ADC0SSEL_; // input A3, 采样保持 ADC0AE0 = 0x0; // PA.3 DC option select A3 模拟信号输入使能 unsigned int m,ave; unsigned long AD_Result,sum=0; double db; long db; void main() WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL = CALBC_MHZ; DCOCTL = CALDCO_MHZ;// 上面两句将内部 DCO 校准至 MHz 35

236 BCSCTL = SELM_0;//MCLK 采用 M 的内部 DCO BCSCTL = DIVS_0;//SMCLK 采用 5K 的时钟 PSEL &= ~(BIT6+BIT7); PDIR = BIT6+BIT7; lcd_init(); ADC0_Init(); IO_init(); _BIS_SR(GIE);// 开中断 chn_disp (tab); delay_ms(3000); chn_disp (tab); delay_ms(3000); chn_disp (tab3); while() Write_Num(0x88,dB,0); delay_ms(50); ADC0CTL0 = ENC + ADC0SC; #pragma vector=adc0_vector interrupt void ADC0_ISR (void) POUT&=~BIT0; ADC0CTL0 &= ~ENC; // Disable ADC conversion m++; // 计数变量加一, 记录进入 AD 中断的次数 AD_Result+=ADC0MEM; // 累加每次采样值 if(m>=8) // 判断采样的次数, 若采样次数等于 8, 作下面处理 m=0; ave=ad_result>>3; // 对累加和求平均 AD_Result=0; db=ave*.5/03; db=(long)(70+0*log0(db)); POUT =BIT0; 36

237 第三节 D/A 转换基础实验 5.3. D/A 转换器件实现电压输出实验. 实验准备 LaunchPad 系统板,D/A 模块, 万用表一部. 实验目的 了解 D/A 转换器的工作原理和操作方法 3. 实验步骤 ()USB 线连接 PC 机和 LaunchPad 系统板, 取出与系统配套的 D/A 模块, 将其固定在系统板的模块扩展接口上 ; () 用万用表检测 D/A 供电是否为 5V, 开启液晶并检测其是否正常 ; (3) 打开 CCS 添加 DAC855 的初始化程序, 并编写一段功能程序, 让单片机分别输出 5 个 6 位数据到 DAC855 的一个通道并进行 DA 转换 ; (4) 根据公式 VOUTA,B = VREF D/65536, 计算出 DAC855 的输出端的电压值 U, 用万用表测得的输出端电压值 U, 填入下表 : 设定数据 D 计算电压 U 输出电压 U 相对误差 (5) 添加按键程序和 LCD 显示程序, 设置开机输出为 0V, 最大输出为 5V, 切换到通道 A(B) 输出, 按键 为幅值加 0., 按键 为幅值减 0. 每按键一次记录下 LCD 上的幅度值 U, 以及万用表测得的 DAC855 的输出端的电压值 U, 填入下表 : LCD 上显示电压 U 万用表测得电压 U 相对误差 4.DAC855 程序示例 void dac_init(void) POUT = 0x00; PDIR = BIT5 +BIT7; PDIR = BIT5; SYNC_H; PSEL = BIT5 + BIT7; PSEL = BIT5 + BIT7; UCB0CTL = UCSWRST; //SYNC 置为输出 //P.5 做 SYNC //P.5 7 分别作 SCLK 和 SIMO // 禁止 USCI 状态机 /* ~UCCKPH -- 数据在 UCLK 的第一个边沿变换, 在下一个边沿捕获 * ~UCCKPL -- 空闲状态为低 这两个就决定数据在下降沿写出 * UCMSB -- 最高位先出 * ~UC7BIT -- 8 位数据 37

238 * UCMST -- 主机模式 * UCMODE_ 线制 SPI * UCSYNC -- 同步模式 */ UCB0CTL0 = UCMSB + UCMST + UCMODE_0 + UCSYNC;// UCB0CTL = UCSSEL_ + UCSWRST; UCB0BR0 = ; UCB0CTL &= ~UCSWRST; // 启动 USCI 状态机 5.3. PWM 实现电压输出实验. 实验准备 LaunchPad 系统板,5K 电阻,0uF 电容, 万用表一部, 导线若干. 实验目的 了解 PWM 模拟 DA 的原理和实现方法 3. 实验步骤 () 用万用表电阻档检查电阻电容是否正常 ; () 按照下图搭建低通器滤波电路, 并计算截止频率 f0: 5.3. PWM 调理电路 (3) 将 PWM 输出 P.4 口接到 RC 网络的输入端 ; (4) 打开 CCS 对单片机进行仿真, 先初始化时钟配置和 PWM 输出初始化配置, 使得时钟输出频率为 f,; (5) 将寄存器 TACCR0 写入数据, 由公式 f=f/taccr0, 需要满足 f 大于 6~8 倍的 f0; (6) 将寄存器 TACCR 写入数据, 由公式 V=3.3*(TACCR/TACCR0) 计算输出电压值 U, 万用表测得输出电压 U; (7) 改变 f TACCR0 TACCR 的值, 重复测量, 填写下表 : f TACCR0 TACCR U U 相对误差 38

239 4. 程序示例 void sys_clock_init() // 时钟初始化为 MHz; BCSCTL = CALBC_MHZ; // Set range DCOCTL = CALDCO_MHZ; // Set DCO step + modulation */ void PMW_OUT _Init () //PWM 输出初始化 PDIR = BIT4; PSEL = BIT4; TACTL = TASSEL_+ID_0+MC_; TACCTL = OUTMOD_7; // 选择高电平模式的 PWM 输出 TACCR0=000; // TACCR0 写入 000(MHZ/000) 输出达到了 500HZ 39

240 第四节定时 / 计数器基础实验 5.4. 定时信号产生实验. 实验准备 示波器一台 LaunchPad 开发板一套 ( 焊接 3.768KHz 的外部晶振 ). 实验目的 练习 MSP430G553 单片机定时比较模式以及中断功能 3. 实验步骤 () 用短接帽将 LaunchPad 开发板上的 J5 上的 P.0 短接 ; () 将实验程序编辑在仿真软件上, 编译并下载程序 (3) 观察 LaunchPad 上 LED 的闪烁情况, 并且用示波器观察 LED 闪烁的频率, 观察 LED 的闪烁频率是不是 0.5Hz (4) 用示波器观察 P. 口方波频率, 检查频率是不是 8.9KHz (5) 观察 P. 口的方波频率,P. 口的方波频率应该为.048KHz ( 注意 : 在本程序中如果选用时钟源 SMCLK, 由于内部时钟不稳定, 所以测出来的方波频率可能有误差 ) 4. 程序示例 /* 在本程序中, 使用了定时器的三种中断, 事件 和 3 事件 是在 P. 口产生 8.9KHZ 的方波, 事件 是在 P.0 口产生 5HZ 的方波, 事件 3 是在 P. 口产生.048KHZ 的方波 在本程序中, 采用比较模式 4, 这种模式是当计数器计至 CCRX 时,TAX 管脚取反 特别注意 : 在本程序中千万不能将两种中断混淆 */ #include <MSP430G553.H> int main( void ) WDTCTL = WDTPW + WDTHOLD; PSEL = 0x06; PDIR = 0x07; CCTL0 = OUTMOD_4 + CCIE; CCTL = OUTMOD_4 + CCIE; TACTL = TASSEL_ + MC_ + TAIE; 计数模式, 主计数器计满中断允许 // 停止看门狗 // P. - P. 的功能选择 // P.0 - P. 方向 // CCR0 选择比较模式 4, 使能中断 // CCR 选择比较模式 4, 使能中断 // 时钟源选择 ACLK, 计数模式选择连续 _BIS_SR(LPM3_bits + GIE); // 进入低功耗模式 3, 打开全局中断 // Timer A0 interrupt service routine #pragma vector=timer0_a0_vector 40

241 interrupt void Timer_A0 (void) CCR0 += 4; // 给 CCR0 赋初始值 // Timer_A Interrupt Vector (TA0IV) handler #pragma vector=timer0_a_vector interrupt void Timer_A(void) switch( TA0IV ) case : CCR += 6; // 给 CCR 赋初始值 break; case 0: POUT ^= 0x0; // 主计数器计满溢出 break; 5.4. 信号频率测量实验. 实验准备 信号源 示波器 LaunchPad 开发板一套. 实验目的 () 学习频率测量的两种方法, 了解两种方法的差别以及各自的优点 ; () 加深对单片机定时器的了解及应用 ; (3) 学会使用定时器的中断 3. 实验原理本实验中, 对信号频率的测量我们有两种方法 : 直接测频率和通过测周期计算频率 其中直接测量频率的方法适用于测量较高频率的信号 ; 通过测周期计算频率适用于频率较低的信号 下面分别介绍两种测量频率方法的原理 () 通过测周期计算频率通过测量周期计算频率适用于测量频率较低的信号 具体原理是运用 TA 模块的捕获功能, 在第一个上升沿到来的时候, 开始计数, 到下一次上升沿到来的时候停止计数, 通过计数个数计算出高电平的时间 这个时间就是测量周期, 取测量周期的倒数就是待测频率 通过测量周期进行低频率信号的测量具有得天独厚的优势, 试想如果想要通过计数的方法测量 0.HZ 的方波频率, 那就需要等待至少 0s 才能测量出带测信号的频率, 这种灵敏度是不可容忍的 () 直接测频法直接测频法有硬件测量和软件测量两种方式, 但是无论是软件测量还是硬件测量都需要精准的 S 钟定时中断,S 的定时中断常用 TA 模块产生 思路是 : 将 DCO 校准到 MHZ,DCO 是 MHZ 的实质含义是一个脉冲花费 us, 如果有 00 万个脉冲到来则可认为到了 s 以下是 s 定时的产生方法 : 将 SMCLK(MHZ) 输入 TA 模块, 对输入时钟进行 4 分频, 那么输入的时钟就等效于 50KHZ, 将 TA 设置为增计数模式,TACCR0 设置为 0000, 在 TA 溢出中断 4

242 中进行计数, 计满 5 个意味着从 TA 输入了 00 万个时钟, 等效于计满了 s 当秒定时产生以后, 接下来就是在 s 内对到来的脉冲数进行计数 计数有两种方式, 硬件方式和软件方式 (3) 实验原理图 图 5.4. 实验原理图 4. 实验步骤 () 根据电路图连接电路并减查电路是否正确 ; () 将下列例程编辑到仿真软件, 编译并下载程序 ; (3) 用信号源产生不同频率的方波 ( 正弦波 三角波 ) 输入到电路中, 并用示波器测量信号的频率, 观察测量的结果是否正确 ; (4) 总结实验结果 5. 程序示例 () 主程序 #include <DAC855.h> #include "msp430g553.h" #include "CLK.h" void main(void) WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 sys_clock_init(mclk_mhz); // 设置 DCO 频率可以是 8 6 MHz dac_init(); // 初始化 DAC 使用的 TA_inittoDA(); out_v(,5.0); out_v(,.0); () 时钟程序 #include "clk.h" void sys_clock_init(unsigned char FRQ) BCSCTL = SELM_0 + DIVM_0 + DIVS_0; if (CALBC_6MHZ!= 0xFF) 4

243 DCOCTL = 0x00; switch(frq) case : //Mhz BCSCTL = CALBC_MHZ; // Set range DCOCTL = CALDCO_MHZ; // Set DCO step + modulation */ break; case 8: //8Mhz BCSCTL = CALBC_8MHZ; // Set range DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */ break; case : //Mhz BCSCTL = CALBC_MHZ; // Set range DCOCTL = CALDCO_MHZ; // Set DCO step + modulation*/ break; case 6: //6Mhz BCSCTL = CALBC_6MHZ; // Set range DCOCTL = CALDCO_6MHZ; // Set DCO step + modulation*/ break; default:break; BCSCTL = XTOFF + DIVA_0; BCSCTL3 = XTS_0 + LFXTS_ + XCAP_; void delayus(unsigned int us) unsigned int i; for(i=0;i<us;i++) delay_cycles(6); (3)D/A 程序 #include "DAC855.h" #include "sin_tab.h" #include "CLK.h" 43

244 #include "msp430g553.h" unsigned int frequency; unsigned int time_us; /*DAC855 SPI 初始化 */ void dac_init(void) POUT = 0x00; PDIR = BIT5 +BIT7; SYNC_H; PSEL = BIT5 + BIT7; PSEL = BIT5 + BIT7; PDIR = BIT5; //P.4 做 SYNC //P.5 7 分别作 SCLK 和 SIMO UCB0CTL = UCSWRST; // 禁止 USCI 状态机 /* ~UCCKPH -- 数据在 UCLK 的第一个边沿变换, 在下一个边沿捕获 * ~UCCKPL -- 空闲状态为低 这两个就决定数据在下降沿写出 * UCMSB -- 最高位先出 * ~UC7BIT -- 8 位数据 * UCMST -- 主机模式 * UCMODE_ 线制 SPI * UCSYNC -- 同步模式 */ UCB0CTL0 = UCMSB + UCMST + UCMODE_0 + UCSYNC;// UCB0CTL = UCSSEL_ + UCSWRST; UCB0BR0 = ; /* Enable USCI */ UCB0CTL &= ~UCSWRST; // 启动 USCI 状态机 void out_v(char channl,float voltage) unsigned int buf; char high,low; buf=(voltage/4.95)*65535; low=buf&0xff; high=buf>>8; switch(channl) case : 44

245 SYNC_L; // 选通拉低 UCB0TXBUF = 0X0; // 向 DA 写入命令 通道 A, 立即转换 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = high; // 写入高 8 位 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = low; // 写入低 8 位 while (!(IFG & UCB0TXIFG)); SYNC_H; // 选通拉高 break; case : SYNC_L; // 选通拉低 UCB0TXBUF = 0X4; // 向 DA 写入命令 通道 B, 立即转换 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = high; // 写入高 8 位 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = low; // 写入低 8 位 while (!(IFG & UCB0TXIFG)); SYNC_H; // 选通拉高 break; case 3: TACCR=(voltage/3.54)*000; 模拟滤波器实验. 实验准备 示波器 信号源 LaunchPad 开发板一套, 模拟滤波器模块. 实验目的 () 了解滤波器的原理并学会设计简单的滤波器 ; () 利用滤波器的选频特性, 完成对输入信号的整形和频率的测量 3. 实验原理 : 滤波器是一种选频装置, 可以使信号中特定的频率成分通过, 而极大地衰减其它频率成分 在测试装置中, 利用滤波器的这种选频作用, 可以滤除干扰噪声或进行频谱分析 在本实验装置中有两种滤波器 : 带通滤波器和低通滤波器 其原理分别如下所述 () 带通滤波器在本实验模块中, 带通滤波器的设计采用的是无限增益多路反馈型 (MFB) 其具体的电路如下所示 : 45

246 输 输 入 入 低 带 通 通 R7 0 3 R 0 0 K C4 C R 3.9K 0 3 R n 0 n C C R5 R K 3 K +5.0V V R6 8.K C6 0 4 U5B OPA356 U5A OPA356 7 C R0 R5 Res 0 K 0 K 输 D 4 出 D 3 输 出 西安电子科技大学 MSP430G 教程 8 4 图 5.4. 二阶有源带通滤波器连接电路图 在图中 C=C=C, 其传递函数为 R3 B, 0 ( ) K, p R3C RC 3 R R R ) K Bs Hs () s Bs p 0 ( 其中 表征带通滤波器性质的参数主要有三个, 它们分别是 : 中心频率 : 也叫谐振频率, 带通滤波器在中心频率处转移函数的幅值最大, 计算公式 ; RC 带宽 : 是两个截止频率之差, 截止频率是转移函数的幅值由最大值下降为最大值的 为 0 R / 时的频率, 即 H( j c ) Hmax 带宽的计算公式是 L 0 0L 品质因数 : 中心频率与带宽之比 计算公式为 Q R CR () 低通滤波器在本实验中低通滤波器的设计采用压控电压源型 (VCVS) 所谓压控电源型是指同相输入, 输入阻抗很高, 输出阻抗很低 其中低通滤波器的电路图如图 5.XX 所示 在图中由于 C4 接到集成运放的输出端, 形成正反馈, 使电压放大倍数在一定程度上受输出电压控制, 且输出电压近似为恒压源, 所以称之为二阶压控电压源低通滤波器 其优点是电路性能稳定 增益容易调节 0 在电路中通常取 :C8=C4=C,R7=R8=R 图 二阶有源低通滤波器连接电路图 幅频特性 : V R i ( CS) V R V R SCV V ( CS) R H o o V R H 0 0 o

247 P V 0 S R 5.K 3 C 低 带 +3.3V 8 4 通 通 R4 0 K U4A TLC37 R0 K V00 R R K V C 7 R3 5.K R 9 3.9K C n 6 5 R C n +3.3V C 9 R5 0 K U4B TLC37 7 R 6 C K R 3 K +5.0V 6 5 R K V +5.0V 3 C UB OPA R 8.K V00 P.0 V P. 7 C 0 4 UA OPA356 U 3 74HC R 8 Res 0 K R 5 V 0 0 K D C 0 4 D V C 3 0 u f VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C VCC3.3 P.0 P. P. P.3 P.4 P.5 P.0 P. P. N N C C U C 0 4 TEST RST P.7 P.6 P.5 P.4 P.3 C 5 0 u f V B U S XIN X O U T N N C C +5.0V -5.0V XIN TEST RST P.7 P.6 P.5 P.4 P.3 V B U S X O U T N N C C 西安电子科技大学 MSP430G 教程 传递函数 : V0 ( S) H( S) V ( S) (3 H i o Ho ) RCS ( RCS ) 增益为 : 滤波器的低通截止频率为 : (3) 滤波器实验的整体电路图 H o R5 R R 0 5 RC 图 模拟滤波器模块电路原理图 4. 实验步骤 () 根据实验原理连接电路并检查电路是否正确 () 将下列例程编辑在仿真软件中, 编译并下载程序 (3) 先将实验电路调到低通滤波器的状态, 并用信号源产生高频信号 ( 频率大于低通滤波器的最高频率 ), 观察输出情况, 可以观察到输出信号基本没有, 即使有信号的幅度也很低 (4) 将实验电路调节到带通滤波器的状态, 然后用信号源产生方波输入到电路中, 观察输出情况 (5) 同样是在带通滤波器的状态, 用信号源产生正弦波输入到电路中, 观察输出情况 (6) 总结实验结果 4. 程序示例 #include "msp430g433.h" #include "LCD864.h" 47

248 unsigned int TA_OverflowCntdi; // TA 溢出次数存放变量 ( 低通 ) unsigned int TA_OverflowCntdai; // TA 溢出次数存放变量 ( 带通 ) unsigned long int Perioddi; // 周期测量结果存放变量 ( 低通 ) unsigned long int Perioddai; // 周期测量结果存放变量 ( 带通 ) unsigned int PervCapValdi; // 前一次捕获值存放变量 ( 低通 ) unsigned int PervCapValdai; // 前一次捕获值存放变量 ( 带通 ) unsigned int Pulse_Cntdi=0; // 脉冲个数 ( 低通 ) unsigned int Pulse_Cntdai=0; // 脉冲个数 ( 带通 ) unsigned int Flagdi=0; // 低通标志 unsigned int Flagdai=0; // 带通标志 unsigned int timers; // 液晶显示汉字的频率设置 unsigned char const tab0[]= " 低通滤波器 " // 第一行 " Hz " // 第三行 " 频率值 " // 第二行 " " // 第四行 ; unsigned char const tab[]= " 带通滤波器 " // 第一行 " Hz " // 第三行 " 频率值 " // 第二行 " " // 第四行 ; unsigned char const tab4[]= " 欢迎使用 " // 第一行 " 滤波器模块 " // 第三行 " " // 第二行 " " // 第四行 ; // 函数声明 /************************************************************************** * 名称 :FrequenceSet() * 功能 : 频率校准为 MHZ * 入口参数 : 无 * 出口参数 : 无 ***************************************************************************/ void FrequenceSet(void) if (CALBC_MHZ ==0xFF CALDCO_MHZ == 0xFF) FaultRoutine(); // If calibration data is erased // run FaultRoutine() BCSCTL = CALBC_MHZ; // Set range 48

249 DCOCTL = CALDCO_MHZ; // Set DCO step + modulation BCSCTL3 = LFXTS_; // LFXT = VLO IFG &= ~OFIFG; // Clear OSCFault flag BCSCTL = SELM_0 ;//+ DIVM_3 + DIVS_3; // MCLK = SMCLK = M /************************************************************************** * 名称 :TA_Init() * 功能 :TIMER_A 初始化, 捕获模块 启动, 选择 TA(P.) 引脚作为捕获源, 上升沿捕获, 同步模式, 开启捕获中断捕获模块 0 启动, 选择 TA(P.0) 引脚作为捕获源, 上升沿捕获, 同步模式, 开启捕获中断 * 入口参数 : 无 * 出口参数 : 无 ***************************************************************************/ void TA_Init(void) TACTL = TASSEL_ + MC_ + TAIE + TACLR; // TA 连续计数, 开始计时,SMCLK, 开中断 TACCTL = CAP + CM_ + CCIS_0 + SCS + CCIE;// // 捕获模块 启动, 选择 TA(P.) 引脚作为捕获源, 上升沿捕获, 同步模式, 开启捕获中断 TACCTL0 = CAP + CM_ + CCIS_0 + SCS + CCIE; // 捕获模块 0 启动, 选择 TA(P.0) 引脚作为捕获源, 上升沿捕获, 同步模式, 开启捕获中断 TA0CCTL0 =CCIE; TA0CTL =TASSEL_+MC_;// 时钟源 SMCLK; 连续奇数模式 TA0CCR0=65535; /************************************************************************** * 名称 :IO_Init() * 功能 :IO 口初始化, 选择 P.0,P. 的第二功能 ;P.6,P.7 为输入 * 入口参数 : 无 * 出口参数 : 无 ***************************************************************************/ void IO_Init(void) PDIR&=~(BIT+BIT0); //TA. CCIA P. TA.0 CCI0A P.0 PSEL =BIT+BIT0; PSEL &=~(BIT6+BIT7); PDIR = BIT6+BIT7; PDIR = BIT+BIT; void main( void ) 49

250 WDTCTL = WDTPW + WDTHOLD; FrequenceSet(); TA_Init(); IO_Init(); lcd_init (); chn_disp(tab4); // 开机界面显示 _EINT(); // 总中断允许 while() if(flagdi>=00) TACTL =TACLR; //TA 计数清零 TACCR=0; chn_disp(tab0); Write_Num(0x88, Pulse_Cntdi,); // 显示低通频率值 Flagdi=0; if(flagdai>=00) TACTL =TACLR; TACCR0=0; chn_disp(tab); Write_Num(0x88, Pulse_Cntdai,); Flagdai=0; // 显示带通频率值 /************************************************************************** 功能 :TA 中断, 被测信号的两次相邻上升沿都到达时,TA0 中断一次, 并计算频率值 **************************************************************************/ #pragma vector=timer_a_vector interrupt void TA_ISR(void) switch(taiv) // 带通中断源 算周期 case : Flagdai++; Perioddai=TA_OverflowCntdai* TACCR - PervCapValdai;// 计 PervCapValdai=TACCR; // 保存捕获值, 供下一次使用 50

251 TA_OverflowCntdai=0; // 溢出次数清零 Pulse_Cntdai=000000/Perioddai+4; break; case 0: TA_OverflowCntdai++; //TA 每次溢出, 溢出次数变量 + break; #pragma vector=timer_a0_vector interrupt void TA_ISR(void) // 低通中断源 Flagdi++; Perioddi=TA_OverflowCntdi* TACCR0 - PervCapValdi;// 计算周期 PervCapValdi=TACCR0; // 保存捕获值, 供下一次使用 TA_OverflowCntdi=0; // 溢出次数清零 Pulse_Cntdi=000000/Perioddi+3; //+3 是频率补偿 该实例程序的性能和指标为 ( 假定系统时钟没有误差 = MHz): () 频率测量绝对误差 :±Hz () 被测最高频率值 :.5KHz (3) 测量频度 : 次 / 秒 (4) 使用资源 : 两个定时器, 两个中断 5

252 第五节通信接口基础实验 5.5. SPI 接口基础实验. 实验准备 LaunchPad 实验系统, 导线若干. 实验目的 了解 SPI 通信的含义和基本实现方法 3. 实验步骤 () 使用面包板的导线将两个实验系统的 P. P.4 P.5 GND 相连 即系统左边插 槽的左边圆针插排从上向下数第 的圆孔, 同时将这些 I/O 口的开关打开 图 5.5. 模块接口一览 () 将两个试验系统都连接到电脑 (3) 打开 CCS 编写两个实验系统中 G 单片机的程序 (4) 对单片机仿真, 实现主机发送程序, 从机显示主机发送程序的数据 4. 程序示例主机程序 : #include "msp430g433.h" #include "SPI.h" // 串口通讯程序库头文件 unsigned char TXBuff[5]=0x50,0x40,0x30,0x0,0x0; #define TXBUF_SIZE 3 #define FRAME_SIZE 5 /* 定长帧的长度 */ 5

253 unsigned char TX_BUFF[TXBUF_SIZE]; unsigned char RX_BUFF[FRAME_SIZE]; unsigned char SPI_RcvCnt=0; // 接收计数 void SPI_M_Init(void) UCA0CTL = UCSWRST; // UCA0STAT = UCLISTEN; UCA0CTL = UCSSEL; UCA0CTL0 = UCMST + UCSYNC+UCMSB; MSB 起始 UCA0BR0 = 0x0; UCA0BR = 0x00; UCA0MCTL = 0x00; UCA0CTL0 = UCMODE_0; UCA0CTL0 = UCCKPH; UCA0CTL0 &=~ UCCKPL; UCA0CTL &= ~UCSWRST; //ACLK // 8-bit SPI Master **SWRST** // no modulation // 3-pin mode // 下降沿发送, 上升沿接收 // Initalize USART state machine PSEL = BIT4; PSEL = BIT4; PDIR = BIT4; PSEL = BIT; PSEL = BIT; PDIR = BIT; PSEL = BIT; PSEL = BIT; PDIR &=~ BIT; //UCA0CLK //SIMO //SOMI IE =UCA0RXIE; // 串口发送函数 void SpiWriteDat(unsigned char *Ptr,unsigned int Lenth) int i; for(i=0;i<lenth;i++) UCA0TXBUF=Ptr[i]; while ((IFG&UCA0TXIFG)==0); // 等待上一字节发完 IFG&=~UCA0TXIFG; 53

254 // 串口接收中断函数 #pragma vector=usciab0rx_vector interrupt void UartR0() RX_BUFF[SPI_RcvCnt]=UCA0RXBUF; // 接收该字节数据 SPI_RcvCnt++; // 指向下一单元 if(spi_rcvcnt>=frame_size) SPI_RcvCnt=0; // 接收数组清零 void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset BCSCTL = CALBC_MHZ; // Set range DCOCTL = CALDCO_MHZ; BCSCTL &= ~(DIVS_3); // SMCLK = DCO / 8 = MHz SPI_M_Init(); _EINT(); while() // 串口测试 SpiWriteDat(TXBuff,5); // delay_cycles(000000); 从机程序 : #include "msp430g433.h" #include "SPI.h" // 串口通讯程序库头文件 #define TXBUF_SIZE 3 #define FRAME_SIZE 5 /* 定长帧的长度 */ unsigned char TX_BUFF[TXBUF_SIZE]; unsigned char RX_BUFF[FRAME_SIZE]; unsigned char SPI_RcvCnt=0; // 接收计数 54

255 void SPI_S_Init(void) UCA0CTL = UCSWRST; UCA0CTL0 = UCMSB + UCSYNC; UCA0CTL0 = UCMODE_0; UCA0CTL0 = UCCKPH; UCA0CTL0 &=~ UCCKPL; UCA0CTL &= ~UCSWRST; // 8-bit SPI Slave **SWRST** // 3-pin mode // 下降沿发送, 上升沿接收 // Initalize USART state machine PSEL = BIT4; PSEL = BIT4; PDIR &=~ BIT4; PSEL = BIT; PSEL = BIT; PDIR &=~ BIT; PSEL = BIT; PSEL = BIT; PDIR = BIT; //UCA0CLK //SIMO //SOMI IE =UCA0RXIE; // 串口发送函数 void SpiWriteDat(unsigned char *Ptr,unsigned int Lenth) int i; for(i=0;i<lenth;i++) UCA0TXBUF=Ptr[i]; while ((IFG&UCA0TXIFG)==0); // 等待上一字节发完 IFG&=~UCA0TXIFG; // 串口接收中断函数 #pragma vector=usciab0rx_vector interrupt void UartR0() RX_BUFF[SPI_RcvCnt]=UCA0RXBUF; // 接收该字节数据 SPI_RcvCnt++; // 指向下一单元 55

256 if(spi_rcvcnt>=frame_size) SPI_RcvCnt=0; // 接收数组清零 // delay_cycles(000); unsigned char TXBuff[5]=0xFF,0x0,0x30,0x40,0x50; void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; SPI_S_Init(); _EINT(); while() // 串口测试 SpiWriteDat(TXBuff,5); // delay_cycles(000000); 5.5. 程控放大器实验. 实验准备 LaunchPad 系统板, 程控放大器模块,0M 示波器一台. 实验目的 了解程控放大器的工作原理, 单片机以 SPI 方式控制外设的步骤 端 3. 实验步骤 () 将模块插入试验系统左侧插槽中, 同时打开旁边的 DIP 开关 () 将单片机连接到电脑, 并打开 CCS 对单片机仿真 (3) 用示波器查看信号的放大倍数, 一通道接到信号的输入端, 二通道接到信号的输出 (4) 调节拨码开关实现对放大倍数的调节 拨码开关状态与放大倍数选择的关系表 放大倍数 DIP-4 状态 DIP-3 状态 DIP- 状态 DIP- 状态 ON OFF OFF OFF ON OFF OFF ON 4 ON OFF ON OFF 8 ON OFF ON ON 6 ON ON OFF OFF 3 ON ON OFF ON 64 ON ON ON OFF 8 ON ON ON ON 56

257 (5) 再次用示波器查看原始波形和放大之后的波形 4. 程序示例 #include "msp430g433.h" #include "spi.h" #include "LCD.h" #include "AD.h" #include "key.h" #include "TA.h" //unsigned int ADC0_Result; unsigned long int Voltage0; unsigned long int Voltage; unsigned char flag=0; unsigned char W0Buff[]=0xA,0x0; //, 通道 unsigned char WBuff[]=0xA,0x; //, 通道 unsigned char WBuff[]=0xA,0x; //4, 通道 unsigned char W3Buff[]=0xA,0x3; //8, 通道 unsigned char W4Buff[]=0xA,0x4; //6, 通道 unsigned char W5Buff[]=0xA,0x5; //3, 通道 unsigned char W6Buff[]=0xA,0x6; //64, 通道 unsigned char W7Buff[]=0xA,0x7; //8, 通道 volatile unsigned int num=; volatile unsigned int val0; volatile unsigned int val; #define TXBUF_SIZE 3 #define FRAME_SIZE 5 /* 定长帧的长度 */ unsigned char TX_BUFF[TXBUF_SIZE]; unsigned char RX_BUFF[FRAME_SIZE]; unsigned char SPI_RcvCnt=0; // 接收计数 unsigned char FrameRcvStatus=0; /* 帧接收状态 */ void SPI_M_Init(void) UCA0CTL = UCSWRST; // U0CTL = LISTEN; UCA0CTL = UCSSEL; //ACLK 57

258 UCA0CTL0 = UCMST + UCSYNC+UCMSB; // 8-bit SPI Master **SWRST** MSB 起始 UCA0BR0 = 0x0; UCA0BR = 0x00; UCA0MCTL = 0x00; // no modulation UCA0CTL0 = UCMODE0; // 3-pin mode UCA0CTL0 = UCCKPH; UCA0CTL0 &=~ UCCKPL; // 下降沿发送, 上升沿接收 // ME = USPIE0; // Enable USART0 SPI mode UCA0CTL &= ~UCSWRST; // Initalize USART state machine PSEL = BIT4; PSEL = BIT4; PDIR = BIT4; PSEL = BIT; PSEL = BIT; PDIR = BIT; // PSEL = BIT5; // PSEL = BIT5; // PDIR = BIT5; //UCA0CLK //SIMO // IFG &= ~URXIFG0; IE =UCA0RXIE; // 串口发送函数 void SpiWriteDat(unsigned char *Ptr,unsigned int Lenth) int i; for(i=0;i<lenth;i++) UCA0TXBUF=Ptr[i]; while ((IFG&UCA0TXIFG)==0); // 等待上一字节发完 IFG&=~UCA0TXIFG; // 串口接收中断函数 #pragma vector=usciab0rx_vector interrupt void UartR0() 58

259 RX_BUFF[SPI_RcvCnt]=UCA0RXBUF; // 接收该字节数据 SPI_RcvCnt++; // 指向下一单元 if(spi_rcvcnt>=frame_size) SPI_RcvCnt=0; // 接收数组清零 unsigned int ADC0_Result0; unsigned int ADC0_Result; volatile unsigned long int ADC_Result[]; volatile unsigned long int ADC_Result0; volatile unsigned long int ADC_Result; //unsigned long int Voltage0; unsigned char ADC0_Flag=0; unsigned char i=; unsigned int j=0; void Init_ADC0(void) ADC0CTL0 = ADC0SR+REFON+REF_5V+ADC0ON+MSC; ADC0CTL0 = ADC0SHT_3+SREF_; ADC0CTL = ADC0SSEL_3+ADC0DIV_+INCH_+SHS_0+CONSEQ_3; //OSC, 无分频 ADC0AE0 = BIT0+BIT; void ADC0_Sample(unsigned int AverageNum) unsigned long int ADC0_Sum0=0; unsigned long int ADC0_Sum=0; unsigned int i; ADC0CTL0 = ADC0IE; ADC0CTL0 = ADC0SC+ENC; for(i=0;i<averagenum;i++) while((adc0_flag)==0); ADC0_Flag=0; ADC0_Sum0+=(int)ADC_Result0; ADC0_Sum+=(int)ADC_Result; 59

260 ADC0CTL0 &=~ ENC; ADC0CTL0 &=~ ADC0IE; ADC0_Result0=ADC0_Sum0/AverageNum; ADC0_Result=ADC0_Sum/AverageNum; #pragma vector=adc0_vector interrupt void ADC0ISR(void) ADC_Result[i]=ADC0MEM; i--; if(i>) i=; ADC_Result=ADC_Result[]; ADC_Result0=ADC_Result[0]; ADC0_Flag=; // 延时函数 void Delay(int n)// 延时, 时间为 n int i; for(i=0;i<n;i++);// 循环 n 次 // 初始化 4 线工作模式函数 void Init_4lines_Mode(void)// 初始化 4 线工作模式 // 初始化 P5 端口,P5.5 接 CH45 的 DCLK 引脚,P5.6 接 CH45 的 DIN 引脚,P5.7 接 CH45 的 LOAD 引脚 PDIR =BIT+BIT+BIT3; PDIR&=~BIT0; // 初始化 DCLK DIN 和 LOAD DCLK_; DIN_; LOAD_; // 发送命令 60

261 void Send_Command(unsigned cmd)//msp430 单片机向 CH45 发送命令,Command 为 位数据 unsigned char i; LOAD_0; for(i=0;i!=;i++) // 送入 位数据, 低位在前 if (cmd&) DIN_; else DIN_0; // 输出位数据 DCLK_0 ; cmd>>=; DCLK_ ; // 上升沿有效 LOAD_; Delay(000); // 输入按键代码子程序, 从 CH45 读取 unsigned char Key_Read( void ) unsigned char i; unsigned char keycode; // 定义命令字, 和数据存储器 Send_Command(CH45_GET_KEY); keycode=0; // 清除 keycode for(i=0;i!=7;i++) keycode<<=; // 数据移入 keycode, 高位在前, 低位在后 if (PIN&BIT0) keycode++; // 从高到低读入 45 的数据 DCLK_0; // 产生时钟下升沿通知 CH45 输出下一位 DCLK_; return(keycode); // 返回键值 void main( void ) // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_4lines_Mode(); // 初始化 4 线工作模式 Send_Command(CH45_RESET); Send_Command(KeyDisplay_ON); PIE =BIT0; 按下时,DOUT 上产生由高到低的脉冲 PIES =BIT0; // 开中断,P. 接 CH45 的 DOUT 引脚, 当有键 6

262 PIFG&=~BIT0; LCD_Port_Init(); LCD_Init(); Init_ADC0(); Init_TA(); SPI_M_Init(); PDIR =BIT5; CHN_Disp(Start_Topic_0); delay_cycles(000000); Clr_ram(); _EINT(); while() if(flag_count0==) ADC0_Sample(00); Voltage0=ADC0_Result0*50000/030; Voltage=ADC0_Result*50000/030; val0=voltage0/num; Flag_Count0=0; if(flag_count==) if(flag==0) CHN_Disp(Start_Topic); Set_position_Dis(,3); Write_Num(Voltage0,); Set_position_Dis(3,4); Write_Num(num,0); Set_position_Dis(,3); Write_Num(val0,); else CHN_Disp(Start_Topic_); Set_position_Dis(,3); Write_Num(Voltage,); Set_position_Dis(,3); Write_Num(78,); Flag_Count=0; 6

263 // 中断处理函数 #pragma vector = PORT_VECTOR // 中断处理程序, 接收到 DOUT 脉冲信号时, 运行之 interrupt void Port(void) unsigned char Keyvalue; Send_Command(CH45_GET_KEY); Keyvalue=Key_Read(); switch(keyvalue) case Key0: POUT&=~BIT5; SpiWriteDat(W0Buff,); POUT =BIT5; Send_Command( NDis); Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis0); num=; break; case Key: POUT&=~BIT5; SpiWriteDat(WBuff,); POUT =BIT5; Send_Command( NDis); Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis0); num=; break; case Key: POUT&=~BIT5; SpiWriteDat(WBuff,); 63

264 POUT =BIT5; Send_Command( NDis); Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis04); num=4; break; case Key3: POUT&=~BIT5; SpiWriteDat(W3Buff,); POUT =BIT5; Send_Command( NDis); Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis08); num=8; break; case Key4: POUT&=~BIT5; SpiWriteDat(W4Buff,); POUT =BIT5; Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis06); Send_Command(Dis); num=6; break; case Key5: POUT&=~BIT5; SpiWriteDat(W5Buff,); POUT =BIT5; Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis0); Send_Command(Dis3); 64

265 num=3; break; case Key6: POUT&=~BIT5; SpiWriteDat(W6Buff,); POUT =BIT5; Send_Command( NDis); // Send_Command( NDis3); Send_Command(Dis04); Send_Command(Dis6); num=64; break; case Key7: POUT&=~BIT5; SpiWriteDat(W7Buff,); POUT =BIT5; // Send_Command( NDis3); Send_Command( NDis); Send_Command(Dis08); Send_Command(Dis); Send_Command(Dis); num=8; break; case 0x50: // Send_Command(Dis08); break; case 0x5: // Send_Command(Dis09); break; case 0x5: 65

266 // Send_Command(Dis00); // Send_Command(Dis); break; case 0x53: // Send_Command(Dis0); // Send_Command(Dis); break; case 0x58: // Send_Command(Dis0); // Send_Command(Dis); break; case 0x59: // Send_Command(Dis03); // Send_Command(Dis); break; case 0x5A: Clr_ram(); flag=; break; case 0x5B: Clr_ram(); flag=0; break; default:break; PIFG&=~BIT0; RS-3 接口通信实验 (UART 接口 ). 实验准备 LaunchPad 实验系统标准板, 三种通信接口模块 66

267 . 实验目的 了解 RS-3 通信方式的原理和简单实现方式 3. 实验步骤 () 用 USB 线连接 LaunchPad 和 PC 机, 设置 LaunchPad 的跳线 J3 部分的 TXD RXD 按照 J3 左方的 SW UART 示意图连接跳线帽, 其余三个跳线帽默认 () 打开 CCS, 编写程序 ( 可参考程序示例 ) 并将程序写入单片机 (3) 设置 LaunchPad 的跳线 J3 部分的 TXD RXD 按照 J3 左方的 HW UART 示意图连接跳线帽, 这样才能与 PC 机进行串口通信 (4) 打开 PC 机上的串口调试助手程序 (64 位 Win7 系统下可能会出现程序不兼容的情况, 选择一款支持 64 位 Win7 的软件即可 ), 设置通信格式为 9600bps,8 数据位, 停止位, 无校验位, 如下图所示 注意图中端口号要设置为自己所用端口号, 不一定是 COM3 图 5.5. 初始化串口调试助手 (5) 点击打开串口, 成功后在串口调试助手的发送区写入字符, 点击发送, 观察串口调试助手接收区的显示情况, 如图 所示 67

268 图 PC 机发送字符后由单片机接收并回发 4. 程序示例 程序功能为接收 PC 机发送来的数据后自动回发给 PC 机 #include "msp430g553.h" void main(void) WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 UCA0CTL = UCSWRST; // USCI_A0 进入软件复位状态 UCA0CTL = UCSSEL_; // 时钟源选择 SMCLK BCSCTL = CALBC_MHZ; // 设置 DCO 频率为 MHz DCOCTL = CALDCO_MHZ; PSEL = BIT + BIT ; // P. = RXD, P.=TXD PSEL = BIT + BIT ; // P. = RXD, P.=TXD PDIR = BIT0; UCA0BR0 = 0x68; // 时钟源 MHz 时波特率为 9600 UCA0BR = 0x00; // 时钟源 MHz 时波特率为 9600 UCA0MCTL = UCBRS0; // 小数分频器 UCA0CTL &= ~UCSWRST; // 初始化 USCI_A0 状态机 IE = UCA0RXIE; // 使能 USCI_A0 接收中断 _EINT(); // 开总中断 68

269 while() #pragma vector = USCIAB0RX_VECTOR interrupt void USCI0RX_ISR(void) while (!(IFG&UCA0TXIFG) ); POUT ^= BIT0; UCA0TXBUF = UCA0RXBUF; // 接收中断 // 确保发送缓冲区准备好 // 接收指示灯状态改变 // 发送接收到的数据 RS-485 接口通信实验 (UART 接口 ). 实验准备 LaunchPad 实验系统标准板, 三种接口通信模块,RS3/485 转换器 ( 如图 所示 ),MAX3485 芯片, 面包板线若干 图 某型号的 RS3/485 转换器. 实验目的 了解和掌握 RS-3 的通信原理和基本实现方式 3. 实验步骤 () 按照图 在面包板上搭建电路, 把 RS3/485 转换器的串口端连接至 PC 机串口, RS3/485 转换器的 485 端按图 接线 图 RS-485 接口通信实验电路图 () 设置 LaunchPad 的跳线 J3 部分的 TXD RXD 按照 J3 左方的 SW UART 示意图连接跳线帽, 其余三个跳线帽默认 (3) 打开 CCS, 编写程序 ( 可参考程序示例 ), 并将程序写入单片机 (4) 设置 LaunchPad 的跳线 J3 部分的 TXD RXD 按照 J3 左方的 HW UART 示意图连接跳线帽 69

270 或者直接拔掉, 否则 485 通信可能会受 LaunchPad 板上程序下载电路的影响 (5) 打开 PC 机上的串口调试助手程序 (64 位 Win7 系统下可能会出现程序不兼容的情况, 选择一款支持 64 位 Win7 的软件即可 ), 设置通信格式为 9600bps,8 数据位, 停止位, 无校验位, 如实验三中所示 注意图中端口号要设置为自己所用端口号, 不一定为 COM3 (6) 点击打开串口, 成功后在串口调试助手的发送区写入字符, 点击发送, 观察串口调试助手接收区的显示情况, 如实验二中所示 4. 程序示例本范例由 MSP430 单片机作为 RS485 总线上的从机,PC 机作为主机 功能是由 PC 机发送字符到从机, 从机接收到后再发回主机 此实验的程序部分之比上一小节的 RS3 实验中多了一个 IO 的方向控制, 用来控制 485 芯片的接收与发送 #include "msp430g553.h" void main(void) WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 UCA0CTL = UCSWRST; // USCI_A0 进入软件复位状态 UCA0CTL = UCSSEL_; // 时钟源选择 SMCLK BCSCTL = CALBC_MHZ; // 设置 DCO 频率为 MHz DCOCTL = CALDCO_MHZ; PSEL = BIT + BIT ; // P. = RXD, P.=TXD PSEL = BIT + BIT ; // P. = RXD, P.=TXD PDIR = BIT0+BIT3; //P.0 用于控制接收指示灯,P.3 用于控制 485 收发状态 UCA0BR0 = 0x68; // 时钟源 MHz 时波特率为 9600 UCA0BR = 0x00; // 时钟源 MHz 时波特率为 9600 UCA0MCTL = UCBRS0; // 小数分频器 UCA0CTL &= ~UCSWRST; // 初始化 USCI_A0 状态机 IE = UCA0RXIE; // 使能 USCI_A0 接收中断 _EINT(); // 开总中断 while() #pragma vector = USCIAB0RX_VECTOR interrupt void USCI0RX_ISR(void) while (!(IFG&UCA0TXIFG) ); POUT ^= BIT0; POUT =BIT3; UCA0TXBUF = UCA0RXBUF; delay_ms(0); POUT&=~BIT3; // 接收中断 // 确保发送缓冲区准备好 // 接收指示灯状态改变 // 使 485 为发送状态 // 发送接收到的数据 // 使 485 为接收状态 70

271 5.5.5 :8B0 温度测量 ( 单总线 ). 实验准备 LaunchPad 实验系统标准板,DS8B0, 面包板线若干. 实验目的 了解总线式通信的原理和基本实现方式 3. 实验步骤 () 按照如下电路图在面包板上连接实物, 其中 DS8B0 的 号管脚接 LaunchPad 的 P. 脚 图 DS8B0 测温电路 () 打开 CCS, 参考程序示例编写 DS8B0 测温程序 (3) 用 USB 线连接 LaunchPad 和计算机, 通过 CCS 将程序下载到 MSP430G 单片机里并进入仿真模式 (4) 在仿真界面内设置测得的温度值为观察值, 并在计算温度结束处设置断点, 改变 DS8B0 的温度 ( 如用手捏住 DS8B0), 每次运行至断点时观察温度值的变化 4. 程序示例 #include "msp430g553.h" #define CPU_F ((double)000000) #define delay_us(x) delay_cycles((long)(cpu_f*(double)x/ )) // 延时 x 微秒 #define DQ_H PDIR&=~BIT //P. 设为输入, 上拉电阻把总线拉高, 即电阻上拉 #define DQ_L PDIR =BIT #define DQ_0 POUT&=~BIT //P. 设为输入, 输出低电平, 把总线拉低, 即总线 主器件拉低 unsigned char temp,temp; /************************************************************************** * 名 称 :reset() * 功 能 : 检测 DS8B0 初始化序列 * 入口参数 : 无 * 出口参数 :int t t=,ds8b0 初始化 ;t=0,ds8b0 没有初始化 ***************************************************************************/ int reset() 7

272 int t; DQ_H; delay_us(50); _NOP(); _NOP(); DQ_L; DQ_0; // 主器件拉低 delay_us(500); // 最少 480us DQ_H; // 电阻上拉 delay_us(60); // 等待 5~60us if((pin&bit3)==0) t=; // 判断存在脉冲,DS8B0 是否拉低 else t=0; delay_us(480); // 最小 480us return(t); // 若 DS8B0 复位, 返回值 t= /************************************************************************** * 名称 :writebit() * 功能 : 单片机对 DS8B0 写时隙 * 入口参数 :unsigned char bit bit=, 写 时隙 ;bit=0, 写 0 时隙 * 出口参数 : 无 ***************************************************************************/ void writebit(unsigned char bit) DQ_L; // 主器件拉低开始 DQ_0; delay_us(3); // 最少延时 us if(bit) DQ_H; // 电阻上拉, 写 else DQ_L; // 主器件拉低, 写 0 DQ_0; delay_us(80); // 写时隙必须至少持续 60μs DQ_H; delay_us(60); // 大于 us 延时即可 /************************************************************************** * 名称 :readbit() * 功能 : 单片机对 DS8B0 读时隙 * 入口参数 : 无 * 出口参数 :char bit bit=, 读 时隙 ;bit=0, 读 0 时隙 ***************************************************************************/ unsigned char readbit() 7

273 char bit; DQ_L; // 主器件拉低开始 DQ_0; delay_us(3); // 延时大于 us DQ_H; //IO 口设为输出,DS8B0 拉低, 则读出 0; 电阻上拉拉高, 则读出 delay_us(3); // 延时小于 5us if(pin&bit) bit=; // 判断 IO 输入状态 else bit=0; delay_us(80); // 延时大于 45us DQ_H; delay_us(60); return(bit); /************************************************************************** * 名称 :write_byte() * 功能 : 单片机向 DS8B0 写入一个字节 * 入口参数 :unsigned char byte byte 为单片机写入的数据 * 出口参数 : 无 ***************************************************************************/ void write_byte(unsigned char byte) int i; for(i=0;i<8;i++) writebit(byte&0x0); //byte 最后一位为, 这写 时隙 ; 若为 0, 则写 0 时隙 byte=byte>>; //byte 右移一位,byte 从低位到高位, 逐位写入 _NOP(); /************************************************************************** * 名称 :read_byte() * 功能 : 单片机从 DS8B0 读出一个字节 * 入口参数 : 无 * 出口参数 :unsigned char ans ans 为单片机从 DS8B0 读出的数据 ***************************************************************************/ unsigned char read_byte() int t; unsigned char ans=0; for(t=0;t<8;t++) 73

274 ans>>=; if(readbit()) ans =0x80; _NOP(); return(ans); //ans 右移一位 // 若读出 则,ans 最高位写入, 写满 8 位 // 返回读出的数据 void main() WDTCTL=WDTPW+WDTHOLD; float t; while() while(!reset()) // 访问 DS8B0 以一个初始化序列未开始 write_byte(0xcc); // 总线上只有一个 DS8B0, 因此可直接跳过寻址 write_byte(0x44); // 开始温度转换 delay_us(5000); // 等待转换 while(!reset()) // 等待 DS8B0 复位 write_byte(0xcc); write_byte(0xbe); // 读暂存器 temp=read_byte(); // 读出 LS temp=read_byte(); // 读出 MS reset(); t=(float)temp*0.065+(float)temp*6; // 计算温度值 t=t*0+0.5; // 放大 0 倍, 四舍五入 74

275 频率计和 DA 模块 ~SYNC CLKIN SIMO V5.0 C L K LaunchPad VCC5 P.7 P.5 P.5 P.0 三种温度测量模块 VCC3.3 V C C 5 P. A 5 A LaunchPad V C C 5 VCC3.3 P. P.5 P.6 西安电子科技大学 MSP430G 教程 第六章 MSP430G 系列单片机应用实践 第一节用三种温度传感器实现的温度巡检 / 控制器 6.. 目的与要求本节运用三种温度测量模块和频率计及 D/A 转换模块与实验系统标准板配合, 实现温度 巡检, 并根据温度值发出相应的控制信号, 具体实现功能如下 : 显示三种温度传感器测量的 温度值 设置温度上下限报警 根据一路温度大小输出对应的 0 到 5V 电压 本应用实践可用于恒温装置, 输出的 0 到 5V 信号用于控制加热装置, 结合 PID 算法, 温度传感器将温度值反馈给单片机, 单片机根据测量的温度和设定要达到的恒定温度的差 值, 单片机输出对应的电压控制加热装置的工作状态, 差值越大输出的电压越大 6.. 电路设计和系统连接本应用选择三种温度测量模块和频率计及 D/A 转换模块, 三种温度测量模块将测量的温 度值反馈给单片机, 单片机控制频率计及 D/A 转换模块输出 0 到 5V 的电压信号 其系统组 成框图如下 : 采样 温度 控制 0~5V 电压信号 输出 三种温度测量模块 单片机 频率计及 D/A 模块 图 6.. 用三种温度传感器实现温度巡检 / 控制器系统框图 将两个模块插在实验系统标准版的插槽上, 其电路连接如下图所示 图 6.. LaunchPad 开发板与频率计 DA 模块和三种温度测量模块连接图 6..3 信号与数据处理从本应用的要求可知, 需要设计一种控制算法根据设定温度设定温度与实际温度的差异 来实时调整加热装置控制信号大小 频率计及 D/A 模块输出 0~5V 电压信号用来控制加热装 置的功率大小, 因此只需实时调整 D/A 输出电压信号大小即可调节加热装置的功率 在这里 仅大致介绍最常用的 PID 算法 PID 算法包括 P 比例算法 I 积分算法和 D 微分算法, 针对本应用, 可设计的一种算法 如下 :P 比例算法,D/A 输出电压 VP= 比例系数 P* 温度差 e, 其中 P 为比例系数 ;I 积分算法, 75

276 D/A 输出电压 VI= 积分系数 I* 温度差 e 的累加值,I 是控制积分时间常数 ;D 微分算法,D/A 输出电压 VD= 微分系数 * 温度变化速率 e, 其中 D 是微分系数 把上面三种运算结合起来, 即 D/A 输出电压值 V=VP+VI+VD, 就成为控制中最常用的 PID 算法 在使用 PID 算法是, 无需对被控对象进行建模, 只需用实验的方法不断尝试调节 P I D 三个系数的大小, 即可接近完美的控制效果 下面列出 PID 算法的关键程序 //================================================================ // 调整 PID 的三个系数, 达到最佳的控制效果 #define P_Coefficient 40 #define D_Coefficient 480 #define I_Coefficient 0.08 //================================================================= #define U_MAX 5000 //D/A 能输出的最大电压值 5V unsigned int Integral; // 积分累计 int Prev_Error; // 记录前一次误差 int P,I,D; //PID 分量 float Ek,E; // 误差临时变量 unsigned char FirstFlag=; // 第一次执行表示 /************************************************************************** * 名称 :PID_Caculate() * 功能 :PID 控制算法 * 入口参数 :Error: 实际温度与设定温度的误差,0 代表 * 出口参数 :OutPut: 单片机应控制 D/A 输出的电压值,000=000mV **************************************************************************/ int PID_Caculate(int Error) int i; float OutPut; if(firstflag) // 判断第一次上电 FirstFlag=0; Prev_Error=Error; // 上电第一次时, 没有前一次测量, 赋当前值, 以免微分计算错误 Ek=Error-Prev_Error; // 相邻两侧测量值去差分 Prev_Error=Error; // 保存当前采样值, 下一次使用 E=0.8*E+Ek*0.; // 微分通过 IIR 滤波器, 降噪 P=P_Coefficient*Error; // 计算比例分量 I=I_Coefficient*Integral; // 计算积分分量 D=D_Coefficient*E; // 计算微分分量 OutPut=P+D+I; //PID 合成输出 if((output>0000) (Error>00) (Error<-00)) // 输出饱和或偏差大时不积分 //if((integral>0)&&(error<0)) Integral+=Error; 76

277 //if((integral<0)&&(error>0)) Integral+=Error; Else Integral+=Error; if(integral<0) Integral=0; if(output>000) OutPut=000; else if(output<0) OutPut=0; // 偏差较小时启动积分 OutPut= U_MAX*OutPut/0000; // 计算 D/A 应输出的电压值 return(output); 6..4 软件设计与调试根据本应用的要求, 其程序流程图大致如图 6..3 所示 开始 初始化 读取 DS8B0 测得温度值 T T 大于报警值 Y 报警 ( 将 LaunchPad 板上的红灯点亮 ) N 显示当前温度 PID 算法控制 D/A 输出电压值 6..3 温度巡检 / 控制器程序流程图本应用选用三种温度测量模块上的 DS8B0 测当前温度, 若单片机从 DS8B0 读取的温度值 T 大于设定的报警值, 则单片机发出报警信息 ; 然后显示温度值 T, 并根据 T 值运用 PID 算法, 控制 D/A 模块输出的电压值 DS8B0 测温的原理和程序示例已经在第五章第三节中提到, 这里不做叙述 下面给出单片机通过 SPI 控制 D/A 输出的程序示例 #define DAC_PORT POUT #define SYNC BIT5 77

278 #define SCLK BIT #define DIN BIT #define SYNC_L DAC_PORT &=~ SYNC #define SYNC_H DAC_PORT = SYNC #define SCLK_L DAC_PORT &=~ SCLK #define SCLK_H DAC_PORT =SCLK #define DIN_L DAC_PORT &=~ DIN #define DIN_H DAC_PORT = DIN unsigned int frequency; unsigned int time_us; /*DAC855 SPI 初始化程序 */ void dac_init(void) POUT = 0x00; PDIR = BIT5 +BIT7; //P.4 做 SYNC SYNC_H; PSEL = BIT5 + BIT7; //P.5 7 分别作 SCLK 和 SIMO PSEL = BIT5 + BIT7; PDIR = BIT5; UCB0CTL = UCSWRST; // 禁止 USCI 状态机 UCB0CTL0 = UCMSB + UCMST + UCMODE_0 + UCSYNC;// UCB0CTL = UCSSEL_ + UCSWRST; UCB0BR0 = ; UCB0CTL &= ~UCSWRST; // 启动 USCI 状态机 /************************************************************************** * 名称 :out_v() * 功能 :D/A 电压输出 * 入口参数 :channl:d/a 输出通道选择, 共有三个通道 ;voltage: 要输出的电压值 (mv) * 出口参数 : 无 **************************************************************************/ void out_v(char channl,float voltage) unsigned int buf; char high,low; buf=(voltage/4950)*65535; low=buf&0xff; high=buf>>8; switch(channl) case : SYNC_L; // 选通拉低 UCB0TXBUF = 0X0; // 向 DA 写入命令 通道 A, 立即转换 78

279 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = high; // 写入高 8 位 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = low; // 写入低 8 位 while (!(IFG & UCB0TXIFG)); SYNC_H; // 选通拉高 break; case : SYNC_L; // 选通拉低 UCB0TXBUF = 0X4; // 向 DA 写入命令 通道 B, 立即转换 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = high; // 写入高 8 位 while (!(IFG & UCB0TXIFG)); UCB0TXBUF = low; // 写入低 8 位 while (!(IFG & UCB0TXIFG)); SYNC_H; // 选通拉高 break; case 3: TACCR=(voltage/3540)*000; 根据上面的程序流程图, 结合 DS8B0 测温程序和 D/A 输出程序, 本应用的程序如下 : #define T_Aralm 30 // 报警温度值 3.0 #define T_Set 300 // 设定恒定温度值 30.0 void main() WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 BCSCTL = CALBC_MHZ; // Set range DCOCTL = CALDCO_MHZ; BCSCTL = SELM_0; //MCLK 采用 M 的内部 DCO BCSCTL = DIVS_0; // 配置时钟 int T, Error; float V_OUT; dac_init(); //D/A 模块初始化 lcdreset(); //LCD864 液晶初始化 while() T=ReadTemp(); // 从 DS8B0 中读取温度,0= wr_lcd(comm,0x80); printstring(" 当前温度值 :"); Write_Num(0x9,T,); //LCD864 显示温度值 T 79

280 if(t>t_aralm) else PDIR =BIT0; POUT =BIT0; PDIR =BIT0; POUT&=~BIT0; if(t>t_set) else Error=T-T_Set; Error=T_Set-T; //T 大于报警值 // 点亮红灯 //T 大于设定恒温值 V_OUT=PID_Caculate(Error); //PID 算法 out_v(,v_out); //D/A 输出电压 6..5 总结与扩展本应用通过三种测温模块和频率计及 D/A 模块与实验板配合, 大致给出了一个恒温控制 范例, 通过此应用相信读者会对这两种实验模块有更好的理解 同时本应用也大概介绍了一 种工程控制算法 然而本应用 D/A 只是输出的电压信号, 没有外接用于控制加热装置, 因此无法完成恒温 控制调试 读者可在实验系统标准版的扩展区域搭建加热电路, 去完成恒温控制调试 80

281 程控运算放大模块 AVDD DVDD VOUT SCLK DIO C S V C C 5 VCC3.3 P.0 P. P.4 P.5 LaunchPad VCC3.3 P.0 P. P. P.3 矩阵键盘及数码管模块 V C C D O U T LOAD DIN DCLK 西安电子科技大学 MSP430G 教程 第二节键盘输入控制的程控放大器 6.. 目的与要求本节主要介绍结合按键功能模块及点阵液晶显示器的程控放大器综合应用实验 通过按 键选择程控放大器的放大倍数, 并在液晶上实时显示输入值 实际输出值 理论输出值及放 大倍数, 可以根据显示值计算程控放大器的误差 通过该应用实践课题可以使读者熟练掌握程控运算放大器模块和按键功能模块的原理, 学会应用 SPI 通信 A/D 转换, 点阵液晶显示器控制及 I/O 口中断等技术方法, 将理论与实 践相结合, 从而锻炼了读者的动手能力和独立思考问题及解决问题的能力 在该应用实践课题过程中,A/D 转换的精度可以再提高一些, 这样可以减小程控放大器 的误差, 另外, 按键功能模块也可由底板上的触摸按键代替来控制程控运算放大器的放大倍 数, 读者可根据实际情况, 解决相关问题, 顺利完成该应用实践课题 6.. 电路设计与系统连接该应用实践课题系统电路由矩阵键盘及数码管模块 + 程控放大器模块 + 点阵 LCD 显示器 组成, 可通过按键选择放大倍数, 点阵 LCD 显示器显示相关信息 其设计思想整体可简单概 括为将输入信号接到 PGA 的信号输入引脚,PGA 通过与单片机 MSP430G553 进行的 SPI 通信来改变其增益, 单片机通过 I/O 中断读取按键状态, 向程控放大器 PGA 发送不同的 SPI 命令控制其增益变化, 并将 PGA 输出的信号接到单片机进行 A/D 转换和采样, 最后 在点阵 LCD 显示器上显示输入值 理论输出值 实际输出值及放大倍数 该按键功能模块实 际上代替了程控运算放大模块上的四位拨码开关, 起到了选择放大倍数的作用 下面介绍一下按键功能模块, 由第五章的按键功能模块介绍可知, 当某一个按键按下 时, 会引起 I/O 口中断, 并在中断内根据不同键值执行相应的代码, 其中键值与放大倍数选 择的关系如表 所示 表 键值与放大倍数选择的关系表 键值 Key0 Key Key Key3 Key4 Key5 Key6 Key7 放大倍数 数码管显示 按键功能模块与一体化实验系统的连接如图 6.. 所示 图 6.. 按键功能模块与一体化实验系统的连接图 将矩阵键盘及数码管模块 程控放大器模块及点阵 LCD 显示器安装在一体化实验系统上 8

282 时, 注意模块的放置方向及排针的对齐方式, 以免造成错误, 并将 DIP 开关拨到对应连接位 置上 6..3 软件设计与调试这部分主要介绍该应用实践课题的软件设计与调试, 软件设计主要包括对 SPI 通信 A/D 采样 I/O 中断及液晶显示的设计 下面对关键子程序及中断处理程序进行说明 首先介绍一下 SPI 通信程序设计, 其流程图如图 6.. 所示 系统上电 SPI 初始化 将 P.5 拉低 SPI 发送指令 将 P.5 拉高 Y SPI 发送指令条件 N 结束图 6.. SPI 通信流程图软件实现部分可参考第五章 接下来介绍 A/D 采样程序设计, 该 A/D 采样的软件设计通过多次采样求均值获得采样值, 这样可以减小采样误差, 其流程图如图 6..3 所示 系统上电 ADC 初始化 ADC 开始采 累计采样结果 ADC 中断 读取转换结束 Y 采样次数 <n? N 求均值 8

283 采样结束 图 6..3 A/D 采样流程图其软件实现如下 : void Init_ADC0(void) //ADC0 初始化 ADC0CTL0 = REFON+REF_5V+ADC0ON+ADC0IE+MSC; // 参考电压.5V 多次采样模式打开 ADC0 模块中断 ADC0 允许 ADC0CTL0 = ADC0SHT_3+SREF_; ADC0CTL =ADC0SSEL_3+ADC0DIV_0+INCH_0+SHS_0+CONSEQ_; //SMCLK, 无分频, 通道 0 单通道多次转换 ADC0AE0 = 0x0; void ADC0_Sample(unsigned int AverageNum) //ADC0 采样函数 unsigned long int ADC0_Sum0=0; unsigned int i; ADC0CTL0 = ADC0IE; ADC0CTL0 = ADC0SC+ENC; // 开始采样 for(i=0;i<averagenum;i++) while((adc0_flag)==0); ADC0_Flag=0; ADC0_Sum0+=(int)ADC_Result0; ADC0CTL0 &=~ ENC; // 禁止采样 ADC0CTL0 &=~ ADC0IE; ADC0_Result0=ADC0_Sum0/(AverageNum); // 多次采样求平均 值 #pragma vector=adc0_vector interrupt void ADC0ISR(void) ADC_Result0=ADC0MEM; ADC0_Flag=; // 采样中断内读取采样 最后介绍 I/O 中断程序设计, 其流程图如图 6..4 所示 系统上电 83

284 I/O 初始化 开中断 I/O 中断条件成立 读取按键状态 并执行相应代码 中断返回 图 6..4 I/O 中断流程图结合表, 按键控制程控放大倍数的软件实现如下 #pragma vector = PORT_VECTOR // P 口中断函数 interrupt void Port(void) unsigned char Keyvalue; Send_Command(CH45_GET_KEY); // 向 CH45A 发送获取按键, 返回按键代码命令 Keyvalue=Key_Read(); // 读取按键键值 switch(keyvalue) case Key0: // 按下 K0 键 POUT&=~BIT5; SpiWriteDat(W0Buff,); // 放大 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 Send_Command( NDis); Send_Command(Dis0); num=; // 放大倍数 = val=val0*; // 理论输出值 = 输入值 * 放 大倍数 break; case Key: POUT&=~BIT5; SpiWriteDat(WBuff,); // 按下 K 键 // 放大 倍 84

285 POUT =BIT5; Send_Command( NDis); // 数码管显示 Send_Command( NDis); Send_Command(Dis0); num=; // 放大倍数 = val= val0*; // 理论输出值 break; case Key: // 按下 K 键 POUT&=~BIT5; SpiWriteDat(WBuff,); // 放大 4 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 4 Send_Command( NDis); Send_Command(Dis04); num=4; // 放大倍数 =4 val= val0*4; // 理论输出值 break; case Key3: // 按下 K3 键 POUT&=~BIT5; SpiWriteDat(W3Buff,); // 放大 8 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 8 Send_Command( NDis); Send_Command(Dis08); num=8; // 放大倍数 =8 val= val0*8; // 理论输出值 break; case Key4: // 按下 K4 键 POUT&=~BIT5; SpiWriteDat(W4Buff,); // 放大 6 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 6 Send_Command(Dis06); Send_Command(Dis); num=6; // 放大倍数 =6 val= val0*6; // 理论输出值 break; 85

286 case Key5: // 按下 K5 键 POUT&=~BIT5; SpiWriteDat(W5Buff,); // 放大 3 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 3 Send_Command(Dis0); Send_Command(Dis3); num=3; // 放大倍数 =3 val= val0*3; // 理论输出值 break; case Key6: // 按下 K6 键 POUT&=~BIT5; SpiWriteDat(W6Buff,); // 放大 64 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 64 Send_Command(Dis04); Send_Command(Dis6); num=64; // 放大倍数 =64 val= val0*64; // 理论输出值 break; case Key7: // 按下 K7 键 POUT&=~BIT5; SpiWriteDat(W7Buff,); // 放大 8 倍 POUT =BIT5; Send_Command( NDis); // 数码管显示 8 Send_Command(Dis08); Send_Command(Dis); Send_Command(Dis); num=8; // 放大倍数 =8 val= val0*8; // 理论输出值 break; default:break; PIFG&=~BIT0; 以上完成了按键控制程控放大器的放大倍数选择, 并将放大倍数通过数码管实时显示的功能 对于液晶显示部分, 该应用实践选择 864 液晶, 其驱动程序很常见, 读者可根据数据手册自己动手写一下, 也可参照网上的一些驱动程序, 这里就不在重复了 86

287 关于主程序的结构, 这里简单介绍一下, 该应用实践课题的主程序结构流程图如图 6..5 所示 系统上电 关闭看门狗 配置时钟 设备初始化 开总中断 定时采样 定时刷新液晶 N P.7 拉低? Y 扫描拨码开关 发送相应指令 图 6..5 主程序流程图在主程序软件设计中, 注意定时刷新液晶, 如果一直扫描液晶, 可能由于液晶显示频率太快导致液晶显示界面闪烁的厉害, 同时也会增大功耗 下面简单介绍一下该应用实践课题的软件调试, 软件开发环境选的 CCS, 第三章已经对对开发环境 CCS 进行了详细介绍, 简单概括为首先建一个工程, 选择相应器件类型, 然后编写各部分程序, 并将编写的程序添加到该工程, 如图 6..6 所示 87

288 图 6..6 CCS 工程界面接下来开始对写好的程序进行编译, 可以选择菜单栏中 Project 选项里的 Rebuild All 进行编译, 也可以选中工程点击右键选择 Rebuild Project 进行编译, 编译时的界面如图 6..7 所示 编译完成后的界面如图 6..8 所示 图 6..7 CCS 编译界面 88

289 图 6..8 编译结束界面如果有错误或警告会在界面上显示, 如上图右下角部分所示, 此时必须根据错误提示修改程序, 直到没有错误 接下来将程序下载到硬件上进行调试, 只需点击工具栏中的选项即可进行下载 调试过程中要充分利用 Debug 栏中的运行 单步 运行到光标处 设置断点等查找错误原因, 逐步缩小错误范围, 另外在调试过程中要有耐心, 一步步找出错误, 最终完成整个软件的调试 6..4 总结与扩展通过对该应用实践课题的软硬件设计及调试, 实现了用按键选择程控放大器放大倍数并 将相关值显示在液晶上的功能, 基本达到了预期的功能指标 在这个实践课题中, 可以使读 者对 SPI 通信 A/D 采样 I/O 中断及液晶显示等有更深层次的认识与理解, 希望读者通过 该应用实践可以熟练掌握其原理并学会应用, 从而达到提升自己能力的目的 众所周知, 信号放大是信号调理技术的重要组成部分, 应用十分广泛 在数据采集系统 自动增益控制 动态范围扩展 远程仪表测试等方面尤为适宜 例如在信号采集过程中, 输 入信号通常是微弱信号, 这就要求信号调理电路具有放大功能, 另外在很多情况下, 需要根 据输入信号的变化情况对放大器的增益做相应的改变, 这时就需要采用程控放大器电路来进 行处理 因此, 该应用实践课题在实际应用中有重要意义 该应用实践课题在实现方法仍存在一些不足, 例如 A/D 采样的精度不够高, 针对这一问 题, 可以在程控输出信号与单片机之间加一些外围滤波电路, 这样会大大提高 A/D 采样的精 度, 进而减小程控放大器的误差 读者可根据自身需要, 适当完善该应用实践课题, 使其能 更好的发挥控制放大器增益的功能 89

290 第三节声音强度检测仪 6.3. 声音强度采样方法通过第四章第三节声音强度检测模块的介绍, 对该模块的硬件有了一定的了解 如果在 此基础上, 认为只需将此模块的输出电压经单片机 A/D 转换并作相应处理, 即可得到所需声 音强度, 其实则不然, 因为声音强度是一个变化非常快的物理量, 将声音强度检测模块的输 出连接至示波器, 就可发现它的波形并不是随着声音强度的增大而增大, 减小而减小, 而是 其峰峰值 ( 或是振幅 ) 随着声音强度的增大而增大, 减小而减小 换句话说, 该模块初始输 出的是交流电压信号, 并非直流, 所以直接采样肯定会出现不准的的地方, 因此, 作者在光 照度检测模块和单片机 A/D 模块之间加了一个峰值检波电路, 其作用就是抽取该模块的输出 峰值 ( 即振幅 ) 进行 A/D 转换 6.3. 声音强度数据处理在该模块的软件设计中, 主要分为以下几个模块 : 显示模块 IO 初始化模块 ADC 初始 化模块以及中断处理模块 根据以上模块的划分, 程序总体框图如下图 6.3. 所示 : 开始 关闭看门狗 ADC 中断 IO 初始化 峰值保持 LCD 初始化 停止采样 主界面显示 数据处理 刷新所测得的声音强度的值 峰值释放 继续采样 返回 图 6.3. 光照度检测程序框图 图 6.3. 中, 左边是主函数程序框图, 右边是中断程序框图 显示部分通过每 50ms 刷新一次的频率来实现实时声音强度的显示 为了能够准确 实时的显示光照度的大小, 在数据处理时采取采样 8 次求平均值的方法, 这样可有效避免某些干扰导致的不正确现象 具体实现步骤详见程序设计部分 需要说明的是中断程序中的数据处理部分 经查阅大量资料, 声音强度 (db) 与该模块的输出电压成对数关系, 但具体系数尚不可知, 经过大量对比 matlab 曲线拟合, 最终得到声音强度的换算公式如下 : db=70+lg(ave.5/03) 90

291 上式中 ave 为采样电压的平均值,.5/03 为 A/D 的分辨率 该曲线关系由 matlab 显示如 下图 6.3. 所示 声音强度 (db) 采样电压平均值 (V) 图 6.3. 采样电压与声音强度换算关系曲线 光照度检测模块程序设计 #include "msp430g553.h" #include "math.h" #include "LCD864.h" unsigned char const tab[]= " " " LaunchPad " " Welcome " " " ; unsigned char const tab[]= "==== 欢迎使用 ====" " 西安电子科技大学 " " 声强检测模块 " "TexasInstruments" ; unsigned char const tab3[]= " " " db " " 当前声强为 : " " " ; void IO_init() 9

292 能 PDIR =BIT0; // 初始化 P.0, 用于峰值检波 void ADC0_Init(void) ADC0CTL=CONSEQ_;// 单通道多次转换, 这句应当写在最前面 ADC0CTL0 = REFON+SREF_+REF_5V; // 打开.5V 正参考, 地为负参考 ADC0CTL0 = ADC0ON+ADC0SHT_3+ADC0IE;// 打开 ADC0 内核, 设定采样保 // 持时间为 64 个 ADC0CLK, 使能 ADC0 中断 ADC0CTL = INCH_3+SHS_0+ADC0SSEL_; // input A3, 采样保持 ADC0AE0 = 0x0; // PA.3 DC option select A3 模拟信号输入使 unsigned int m,ave; unsigned long AD_Result,sum=0; double db; long db; void main() WDTCTL = WDTPW + WDTHOLD; // 关看门狗 r BCSCTL = CALBC_MHZ; DCOCTL = CALDCO_MHZ;// 上面两句将内部 DCO 校准至 MHz BCSCTL = SELM_0;//MCLK 采用 M 的内部 DCO BCSCTL = DIVS_0;//SMCLK 采用 5K 的时钟 PSEL &= ~(BIT6+BIT7); PDIR = BIT6+BIT7; lcd_init();// 包含在头文件 "LCD864.h" 中 ADC0_Init(); IO_init(); _BIS_SR(GIE);// 开中断 chn_disp (tab); delay_ms(3000); // 延时 3 秒 chn_disp (tab); delay_ms(3000); chn_disp (tab3); //tab tab tab3 用于主界面显示 while() Write_Num(0x88,dB,0); // 刷新显示的声音强度 delay_ms(50); ADC0CTL0 = ENC + ADC0SC; #pragma vector=adc0_vector interrupt void ADC0_ISR (void) 9

293 POUT&=~BIT0; // 峰值保持 ADC0CTL0 &= ~ENC; // Disable ADC conversion m++; // 计数变量加一, 记录进入 AD 中断的次数 AD_Result+=ADC0MEM; // 累加每次采样值 if(m>=8) // 判断采样的次数, 若采样次数等于 8, 作下面处理 m=0; ave=ad_result>>3; // 对累加和求平均 AD_Result=0; db=ave*.5/03; db=(long)(70+0*log0(db)); // 声音强度换算公式 POUT =BIT0; // 峰值释放 93

294 第四节 RS-3 接口与 PC 机通信 6.4. 目的与要求学习 MSP430G553 单片机内部 UART 和 I/O 中断的使用方法, 掌握用数码管显示数值或者某些字符的基本方法, 熟悉通过 RS-3 接口与 PC 机通信的方法, 掌握不同功能模块组合使用的系统软硬件构建方法 通过矩阵键盘及数码管模块输入按键值, 并在 LED 数码管上显示出来, 同时通过 RS-3 接口传送给 PC 机, 在 PC 机显示器串口通信界面上给予显示 6.4. 电路设计与系统连接由于本实践课题要求通过矩阵键盘输入键值, 并在 LED 数码管上显示出来, 同时通过 RS-3 接口传送给 PC 机, 故系统由三种通信接口模块 + 矩阵键盘及数码管模块 +PC 机组成 信号线连接方式为第四章三种通信接口模块与矩阵键盘及数码管模块连接方式的和, 拨动开关拨到 RS-3 一端, 用串口延长线将模块与 PC 机连接, 连接好的实物图如图 6.4. 所示 图 6.4. 电路连接实物图 软件设计与调试本实验的主要信号和数据处理过程即为矩阵键盘和数码管显示模块异步串行通信过程相关处理方法, 在前面章节已给出, 在此不再赘述, 以下仅给出系统软件设计及调试方法 对软件设计要求进行论述, 对关键子程序或中断服务处理程序进行说明, 给出流程图和例程 对主程序结构进行说明, 给出主程序流程图和例程 对程序设计中的要点和技巧进行介绍, 并注意在所有的例程中给出标注和注释 并注意介绍程序调试过程中应注意的问题和调试方法, 给出最终结果显示画面等相关内容. 系统程序流程图软件设计要求体现出 MSP430 系列单片机的低功耗特性, 且具有良好的实时性 流程图如图 6.4. 所示 94

295 系统初始化, 单片机进入低功耗模式三进行休眠 是否有键按下 是 进入 I/O 中断处理函数, 解析键值 将键值显示在 LED 上, 并通过串口发送到 PC 机进行显示 图 6.4. 系统程序流程图. 例程 软件实现功能功能 : 按下某个按键, 则数码管会显示该按键对应的键值, 即若按下按 键 Ki(i 取值为 0~5), 在数码管上显示其键值 Vi, 如若 K0 按下, 则在数码管上显示数字 0, 若 K5 按下, 则在数码管上显示数字 9999 等 各个按键的具体定义见下表, 键值对应 表见表, 其定义是为了显示范围更广, 用户可根据自己的喜好自行更改, 程序中只需要修 改相应宏定义即可 K0 K K K3 K4 K5 K6 K7 K8 K9 K0 K K K3 K4 K5 图 6.4. 检测程序中 4 4 矩阵键盘盘面 表一键值对照表 K0 K K K3 K4 K5 K6 K7 K8 K9 K0 K K K3 K4 K ) 主函数 主函数中仅实现各功能部件初始化, 然后就进入低功耗模式, 等待事件触发 void main( void ) 95

296 ConfigWDT(); // 配置看门狗 ConfigClocks(); // 配置时钟 UART_init(); // 串口初始化 Init_4lines_Mode();// 初始化 4 线工作模式 Send_Command(CH45_RESET);//CH45 芯片内部复位 Send_Command(KeyDisplay_ON);// 允许显示驱动并启动键盘扫描 // 开中断,P.0 接 CH45 的 DOUT 引脚, 当有键按下时,DOUT 上产生由高到低的脉冲 PIE =BIT0; PIES =BIT0; PIFG&=~BIT0; _EINT(); LPM3; while() ) 按键中断处理函数 #pragma vector = PORT_VECTOR // 中断处理程序, 接收到 DOUT 脉冲信号时, 运行之 interrupt void Port(void) unsigned char Keyvalue; unsigned int U_Tem,TValue; Send_Command(CH45_GET_KEY);// 单片机向 CH45 发送读取按键代码命令 Keyvalue=Key_Read(); switch(keyvalue) case 0x40:// 按键 K0 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis00);// 第 0 位数码管显示 0 U_Tem=0; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x4:// 按键 K 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 96

297 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis0);// 第 0 位数码管显示 U_Tem=; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x4:// 按键 K 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis0);// 第 0 位数码管显示 U_Tem=; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x43:// 按键 K3 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis04);// 第 0 位数码管显示 4 U_Tem=4; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x48:// 按键 K4 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis08);// 第 0 位数码管显示 8 U_Tem=8; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; 97

298 TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x49:// 按键 K5 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis06);// 第 0 位数码管显示 6 U_Tem=6; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x4A:// 按键 K6 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis3);// 第 位数码管显示 3 Send_Command( Dis0);// 第 0 位数码管显示 U_Tem=3; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x4B:// 按键 K7 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( NDis);// 第 位数码管不显示 Send_Command( Dis6);// 第 位数码管显示 6 Send_Command( Dis04);// 第 0 位数码管显示 4 U_Tem=64; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x50:// 按键 K8 按下 98

299 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis08);// 第 0 位数码管显示 8 U_Tem=8; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x5:// 按键 K9 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis5);// 第 位数码管显示 5 Send_Command( Dis06);// 第 0 位数码管显示 6 U_Tem=56; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x5:// 按键 K0 按下 Send_Command( NDis3);// 第 3 位数码管不显示 Send_Command( Dis5);// 第 位数码管显示 5 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis0);// 第 0 位数码管显示 U_Tem=5; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x53:// 按键 K 按下 Send_Command( Dis3);// 第 3 位数码管显示 Send_Command( Dis0);// 第 位数码管显示 0 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis04);// 第 0 位数码管显示 4 99

300 U_Tem=04; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x58:// 按键 K 按下 Send_Command( Dis3);// 第 3 位数码管显示 Send_Command( Dis0);// 第 位数码管显示 0 Send_Command( Dis4);// 第 位数码管显示 4 Send_Command( Dis08);// 第 0 位数码管显示 8 U_Tem=048; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x59:// 按键 K3 按下 Send_Command( Dis34);// 第 3 位数码管显示 4 Send_Command( Dis0);// 第 位数码管显示 0 Send_Command( Dis9);// 第 位数码管显示 9 Send_Command( Dis06);// 第 0 位数码管显示 6 U_Tem=4096; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; case 0x5A:// 按键 K4 按下 Send_Command( Dis38);// 第 3 位数码管显示 8 Send_Command( Dis);// 第 位数码管显示 Send_Command( Dis9);// 第 位数码管显示 9 Send_Command( Dis0);// 第 0 位数码管显示 U_Tem=89; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); 300

301 break; case 0x5B:// 按键 K5 按下 Send_Command( Dis39);// 第 3 位数码管显示 9 Send_Command( Dis9);// 第 位数码管显示 9 Send_Command( Dis9);// 第 位数码管显示 9 Send_Command( Dis09);// 第 0 位数码管显示 9 U_Tem=9999; TValue=U_Tem>>8; TX_BUFF[0]=(unsigned char)tvalue; TX_BUFF[]=(unsigned char)u_tem; UART0_PutFrame(TX_BUFF,); break; default: break; PIFG&=~BIT0; 3. 注意事项及调试方法 () 实验时请注意以下问题 : 在退出下载环境, 对该模块进行操作时, 一定要先按一下复位键 ; 在将功能模块及 msp430launchpad 插到主板上时, 一定要确保主板电源断开 ; 在将模块旁边的拨码开关打开时确保主板电源处于断开状态 ; 三种通信接口模块拨动开关一定要拨到 RS3 端 () 调试方法调试模式下, 分别在按键中断处理函数各按键对应代码处设置断点, 全速执行, 按下相应按键, 观察程序是否会停在断点处, 若可以, 表明按键解析正确 在观察窗口中加入串口发送缓冲数组, 在调用串口发送函数处设置断点, 观察数组中的数据是否为我们要发送的 在调用显示语句处设置断点, 将存放显示值的变量加入观察窗口, 观察变量值是否正确 ; 在观察窗口修改变量值, 全速执行, 观察显示结果是否正确 4. 实验结果数码管显示及 PC 机界面显示效果图如图 和图 所示 30

302 图 实际显示效果 ( 一 ) 图 实际显示效果 ( 二 ) 图 PC 机接收数据显示界面 30

燃烧器电子控制系统 目录 2

燃烧器电子控制系统 目录 2 聚焦 REC27 燃烧器电子控制系统 燃烧器电子控制系统 目录 2 REC27 燃烧器电子控制系统 2 概述 燃烧器电子控制系统 2 2 2 2 2 A B1 B2 C D E 22 2 2 系统图示 2 2 2 2 2 2 主要特征及优点 燃烧器电子控制系统 2 2 集成控制 2 2 节能 安全运行 运行模式 远程锁定复位 可根据需求提供特殊机型 无接合间隙及机械迟滞 简单的试运行及燃烧器设定 2

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示

More information

议程 介绍 Value Line 系列 Code Composer Studio CPU 与基本时钟模块 中断与 GPIO Timer_A 与 WDT+ MSP430 低功耗设计 ADC10 和 Comparator_A+ 串行通信模块 Grace 电容式触摸按键解决方案

议程 介绍 Value Line 系列 Code Composer Studio CPU 与基本时钟模块 中断与 GPIO Timer_A 与 WDT+ MSP430 低功耗设计 ADC10 和 Comparator_A+ 串行通信模块 Grace 电容式触摸按键解决方案 采用 MSP430 LaunchPad 启动开发工作 议程 介绍 Value Line 系列 Code Composer Studio CPU 与基本时钟模块 中断与 GPIO Timer_A 与 WDT+ MSP430 低功耗设计 ADC10 和 Comparator_A+ 串行通信模块 Grace 电容式触摸按键解决方案 MSP430 系列 MCU 产品 MSP430 MCU 介绍 超低功耗 业内功耗最低的

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

????????

???????? 深度学习 项目简介 葛丽丽 译 西蒙菲沙大学 教育学院 富有想像力的教育研究中心 电邮 ierg-ed@sfu.ca 网址: http://www.ierg.net 基本思想 开学的第一个星期 每个学生都会接到一个任意布置的主题 从此将围绕这个主题 进行深度学习 这些主题可能包括 鸟 苹果 马戏团 火车 和 太阳系 等内容 在接下来的小学 初中以及高中阶段 除了基本课程以外 学 生将继续深入地学习指定的题目

More information

孙 蓝等 基于目标导向的研究生英语学习模式创新

孙 蓝等 基于目标导向的研究生英语学习模式创新 第 期 总第 期 年 月 研究生教育研究 以中国科技大学研究生英语学习公共服务平台建设为例 孙 蓝 陈纪梁 邢鸿飞 刘海清 万洪英 中国科学技术大学外语系 安徽合肥 中国科学技术大学研究生院 安徽合肥 研究生英语教学的使命是培养学生在当今多元社会中进行有效沟通的能力 英语语言教育者的任务不是去寻求更好的教学法 而是要探索一套能够满足学生需求且与学生学习体验相一致的教与学的策略 为此 有必要构建研究生英语学习公共服务平台

More information

,,,,,,, ;,, ;, ;, (, / ),, ;,,.,,,,,,,,,,,,,,,,, ;,,,,,,, 1, :,,, ;,,,, (, ),,,,, 1,,, (,, )

,,,,,,, ;,, ;, ;, (, / ),, ;,,.,,,,,,,,,,,,,,,,, ;,,,,,,, 1, :,,, ;,,,, (, ),,,,, 1,,, (,, ) 刘世定 内容提要 : 本文在嵌入性视角的引导下, 进入关系合同理论领域 对关系合同的 分析, 以威廉姆森的合同治理结构理论作为基点 在分析了他的理论脉络和隐含假 设后, 本文提出了三个假定, 即约前关系导入 多元关系属性 对关系属性的有限控 制 在新的假设下, 首先讨论了合同治理结构和嵌入关系结构之间不同的对应关系, 并特别探讨了两者间的结构性摩擦 继而, 在关系合同的研究中引入了委托 - 代理关系,

More information

额定规格 / 性能 单相 标准认证 UL CSA. NO. EN-- 额定规格输入 环境温度 项目电压电平额定电压使用电压范围输入电流型号动作电压复位电压 - B ma 以下 DC~V DC.~V DC.V 以下 DC.V 以上 - BL ma 以下 输出 项目 * 根据环境温度的不同而不同 详情请

额定规格 / 性能 单相 标准认证 UL CSA. NO. EN-- 额定规格输入 环境温度 项目电压电平额定电压使用电压范围输入电流型号动作电压复位电压 - B ma 以下 DC~V DC.~V DC.V 以下 DC.V 以上 - BL ma 以下 输出 项目 * 根据环境温度的不同而不同 详情请 加热器用固态继电器 单相 CSM_-Single-phase_DS_C 带纤细型散热器的一体式小型 SSR 备有无过零触发型号, 用途广泛 符合 RoHS 标准 包含无过零触发型号, 产品线齐全 输出回路的抗浪涌电压性能进一步提高 根据本公司的试验条件 小型 纤细形状 除了 DIN 导轨安装, 还可进行螺钉安装 获取 UL CSA EN 标准 TÜV 认证 请参见 共通注意事项 种类 关于标准认证机型的最新信息,

More information

Conductix-Wampfler Inductive Power Transfer IPT 2

Conductix-Wampfler Inductive Power Transfer IPT 2 IPT 产品简介 非接触式动力和数据传输系统 Conductix-Wampfler Inductive Power Transfer IPT 2 Conductix-Wampfler Inductive Power Transfer IPT 3 9 1 2 3 4 5 6 7 8 4 2 3 4 1 8 5 7 9 6 ² ² ² - 无限的应用可能性... 用于变速箱总装线上的 AGV 小车

More information

研究问题 自主学习中心 研究对象 研究方法 自主学习中心参与度以及学生对其认可度

研究问题 自主学习中心 研究对象 研究方法 自主学习中心参与度以及学生对其认可度 自主学习环境下的学习策略研究 谈言玲 张荣根 严 华 学习策略的使用一般可视作学习者自主学习能力强弱的标志 本研究采用问卷和访谈结合的方式调查了自主学习环境下学习策略的使用情况 结果显示 自主学习中心参与度和认可度不高 大多数学 生能有效运用一定的认知策略 但元认知策略和社交策略运用程度偏低 学习策略 自主学习 本文为江苏省教育科学 十一五 规划 项目课题成果之一 课题号 同时感谢匿名审稿专家提供的宝贵修改意见

More information

1... 4 2... 5 2.1... 5 2.2... 5 2.3... 6 2.4... 6 2.5... 7 2.6... 7 3 2005... 8 3.1... 8 3.2... 9 3.3... 9 3.4 ( RMB100,000)... 9 3.5... 9 4...11 4.1.

1... 4 2... 5 2.1... 5 2.2... 5 2.3... 6 2.4... 6 2.5... 7 2.6... 7 3 2005... 8 3.1... 8 3.2... 9 3.3... 9 3.4 ( RMB100,000)... 9 3.5... 9 4...11 4.1. http://www.unsp.com.cn 1... 4 2... 5 2.1... 5 2.2... 5 2.3... 6 2.4... 6 2.5... 7 2.6... 7 3 2005... 8 3.1... 8 3.2... 9 3.3... 9 3.4 ( RMB100,000)... 9 3.5... 9 4...11 4.1... 11 4.2... 12 5... 13 5.1...

More information

大16开产品画册排版.cdr

大16开产品画册排版.cdr 北京圣莱特商贸有限公司 中国 北京 新型产品 XYZ 20A 颜色 黑色 尺寸 210*180*130mm 功能参数 1 使用高转换效率单晶硅片 太阳能转换效率高达16%以上 2 太阳能电池板规格 10W 3 充电器内置高容量可充电电池 20AH 4 输出电压 220V 5 用交流适配器给充电器内置电池充电时间 5小时 (6) 太阳能给充电器内置电池充电时间 20小时

More information

é ê

é ê 廖光洪 朱小华 杨成浩 徐晓华 基于南海 年夏季调查航次诊断计算的流函数场 选取越南以东偶极子发生海域 进行 不同的声层析观测站位设置实验 模拟计算声线传播时间信息 然后应用基函数重建方法进行了 流函数场的模拟反演研究 讨论了不同随机观测误差对反演结果的影响 研究结果表明该方法是 可行的 在所选取的约 海域内 在观测海域外围配置 个声层析观测站位就能够很好地重构原流函数场 空间分辨率约为 可以分辨模拟海域中尺度涡场结构

More information

01

01 Zebra 技术白皮书 零售业中的可跟踪性 降低 介质成本, 实现最佳价值 概要 简介 我想要的商品在哪里呢? 物品级标签带来了巨大优势 全面的库存管理 100% 2 Zebra (EAS)/ 实际结果 2009 1 27% 21% 53 2 209 提升顾客体验, 提高销售业绩 3 150 100 RF 1. : Bloomingdale 2009 2. 3. ABI Research 2009

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010)

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010) ,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN 7-5635-1099-0...............TP36 CIP (2005)076733 : ( 10 ) :100876 : (010 )62282185 : (010)62283578 : publish@bupt.edu.cn : : : 787 mm960 mm 1/

More information

! %! &!! % &

! %! &!! % & 张海峰 姚先国 张俊森 借鉴 的有效教育概念 本文利用 年间的中国省级面板数据估计了平均教育年限 教育数量 和平均师生比率 教育质量 对地区 劳动生产率的影响 本文的实证分析结果表明 以师生比率衡量的教育质量对劳动生产 率有显著且稳健的正效应 在均值处师生比率每上升一个标准差 有助于提高地区劳动生产率约 教育数量对劳动生产率的影响大小部分取决于教育质量的高低 教育质量越高教育数量对劳动生产率的促进效应越大

More information

PureSCM enhances competitive advantage with an integrated approach to IT service level management

PureSCM enhances competitive advantage with an integrated approach to IT service level management ఱઓ߅ ښ PureSCM 使用集成的 IT 服 务级别管理方法增强竞争 优势 行业 IT 服务 公司 PureSCM 员工 40 收入 400 万美元 ఱઓ ቲጓǖIT 服务 ǖpurescm Ꮛ ǖ40 ၃ ǖ400 万美元 ጓᇗ PureSCM 是一家服务级别 管理专业公司和软件开发 公司 办事处设在加拿 大 美国和哥伦比亚 ᄞᐵ 为了帮助客户解决他们的 业务挑战 PureSCM 需要 提供集成的

More information

untitled

untitled niosii H:\DB2005\project\niosDK\Example\NiosSmall QuartusII4.2 File -> New Project Wizard Diectory,Name,Top-Level Entity Add Files EDA Tools Setting Finish, OK H:\DB2005\project\niosDK\Example\NiosSmall

More information

RX Trial Kit

RX Trial Kit RX Trial Kit 面 向 RX610 群 单 片 机 的 简 易 开 发 套 件 瑞 萨 电 子 ( 中 国 ) 有 限 公 司 R&D Center 2011 Renesas Electronics (China) Co., Ltd. All rights reserved. 目 录 1. RX Trial Kit 套 件 2. 使 用 RX Trial Kit 需 要 安 装 的 软 件

More information

质量体系认证证书 IS O900 0认证证书 国军标体系认证证书 企业文化 企业愿景 创新型 节能 绿色 高可靠性电子产品 品牌服务商 宗 旨 创新改变人生 发展造就个人 企业 社会的共赢 使 命 以开拓思维谋求创新 以创新求发展 以发展提升员工 股东价值 提高顾客 竞争力 履行社会责任 企业精神 以开拓创新谋发展 以持续改进促完善 以价值增值为己任 以共赢互进为目标 创新 改进 发展 思维创新 技术创新

More information

总量开始减少的欧洲人口形势分析

总量开始减少的欧洲人口形势分析 总量开始减少的欧洲人口形势分析 张善余 彭际作 俞 路 自 世纪 年代以来 欧洲人口增长率持续下降 年人口开始负增长 这无疑是其人口发展的一个转折点 在欧洲各个地区中 东欧是 年以前全球第一个也是仅有的一个人口有所减少的地区 在北欧和西欧地区 如果没有国际移民的净流入 人口增长率也将很低 大约在 年间 预计欧洲所有地区的人口都将出现负增长 由于自然增长率在过去一个世纪乃至未来的变动 欧洲人口已不可逆转地老龄化

More information

Microsoft Word - A201210-197_1351057643.doc

Microsoft Word - A201210-197_1351057643.doc 0 0 # 基 于 无 线 传 感 网 络 的 血 压 监 护 系 统 设 计 贺 翠 娟, 张 金 玲, 张 志 臣 ( 北 京 邮 电 大 学 电 子 工 程 学 院, 北 京 00) 摘 要 : 一 般 研 究 性 文 章 : 基 于 硬 件 软 件 化 设 计 理 念, 将 传 统 电 路 的 部 分 功 能 由 单 片 机 完 成, 从 而 实 现 模 块 的 微 型 化 本 设 计 将

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCAB5D1E9CAD2B7BDB0B82E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCAB5D1E9CAD2B7BDB0B82E646F63> 目 录 一 嵌 入 式 系 统 的 应 用 及 前 景... - 1 - 二 目 前 嵌 入 式 系 统 教 学 现 状 和 实 验 体 系 的 建 设... - 1 - 三 嵌 入 式 教 学 在 本 科 生 中 的 教 学 难 点... - 1 - 四 教 学 难 点 解 决 方 法... - 2-1 选 择 S+core7 核 学 习... - 2-2 选 择 ecos 操 作 系 统 进 行

More information

目 录 汉 邦 高 科 介 绍 局 域 网 设 置 广 域 网 设 置 网 络 访 问 常 见 问 题 销 售 服 务 网 络 2

目 录 汉 邦 高 科 介 绍 局 域 网 设 置 广 域 网 设 置 网 络 访 问 常 见 问 题 销 售 服 务 网 络 2 易 家 电 子 整 理 发 布 汉 邦 高 科 技 术 系 列 文 档 嵌 入 式 产 品 网 络 设 置 方 法 编 号 : 2009001-V10 北 京 汉 邦 高 科 数 字 技 术 有 限 公 司 版 权 所 有 2009 年 12 月 1 目 录 汉 邦 高 科 介 绍 局 域 网 设 置 广 域 网 设 置 网 络 访 问 常 见 问 题 销 售 服 务 网 络 2 一 公 司 简 介

More information

英雄主义及其在后新时期中国文艺中的显现方式 英雄主义作为一种精神价值观 始终激励着一个民族不断进取和奋进 英雄主义人物形象塑造在中国的现当代文学中经历了人与神 鬼 兽之间的挣扎过程 世纪开端 中国文艺的后新时期到来了 主导文艺发展的既不是政治也不是艺术作品本身 一双无形的手紧紧抓住了文艺发展的脉搏 中国社会进入市场化的消费型时代 红色经典 的出现 使我们思考在无情的市场中如何显示出英雄主义有情的特色

More information

上海现代设计集团建筑协同设计平台研究与应用

上海现代设计集团建筑协同设计平台研究与应用 邓雪原 苏 昶 孙 朋 王国俭 上海交通大学土木工程系 上海 上海现代建筑设计 集团 有限公司 上海 本文首先分析了建筑 协同设计发展过程中存在的问题 指出建筑 协同设计的发展需要经过二维协同设计向三维协同设计的过渡 接着对适合于大型建筑设计企业的建筑 协同设计平台的关键问题进行了阐述 通过上海现代建筑设计集团一个实际工程项目 详细描述了建筑工程协同设计的方法与过程 然后对建筑协同设计的标准统一 工种协同等特点和高效沟通及超大项目的应用优势进行了讨论

More information

李俊新 崔 敏 刘艳春 姚艳君 周广芬 孙 宝 河北科技大学理学院 河北石家庄 滦南县职业教育中心基础部 河北滦南 在物理化学实验的基础上 对一级反应的 种不同数据处理模型进行比较和分析 通过对 实验数据处理模型进行系统的比较 来改善传统实验数据处理中存在的一些问题 从而简化数据处 理 减小作图工作量与作图误差 提升实验水平 提高数据处理结果的准确性 一级反应 数据处理模型 过氧化氢 图 过氧化氢分解实验装置图

More information

第六章 按摩与保健 205 图 6唱 17 常用穴位示意图 三 选穴原则 穴位按摩是针对穴位进行点 按 揉 推等多种手法的刺激 引起局部出现 酸 麻 胀 痛或温热感觉 一般每天按摩 1 2 次 每次可选用 3 6 个 对 穴 位交替进行按摩 同时 穴位的选择应根据人体的体质和病情 从全身的穴位中 选出一些对某种病症有效的穴位 也称配穴 才能达到应有的治疗效果 一 一般规律 虽然全身的穴位很多 每个穴位的主治功能又有不同

More information

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键 官 方 淘 宝 地 址 :http://metech.taobao.com/ MeTech verilog 典 型 例 程 讲 解 V1.0 笔 者 :MeTech 小 芯 技 术 支 持 QQ : 417765928 1026690567 技 术 支 持 QQ 群 :207186911 China AET 讨 论 组 http://group.chinaaet.com/293 笔 者 博 客 :http://blog.csdn.net/ywhfdl

More information

第 期 黄 元 东 等 水 平 条 件 下 管 内 加 丝 的 脉 冲 热 管 性 能 测 试 及 分 析,+* 引 言 脉 冲 热 管 自 (!#$. 在 '' 年 提 出 来 后 得 到 迅 速 发 展 作 为 一 种 新 型 热 管 技 术 具 有 结 构 简 单 成 本 低 廉 和 性 能

第 期 黄 元 东 等 水 平 条 件 下 管 内 加 丝 的 脉 冲 热 管 性 能 测 试 及 分 析,+* 引 言 脉 冲 热 管 自 (!#$. 在 '' 年 提 出 来 后 得 到 迅 速 发 展 作 为 一 种 新 型 热 管 技 术 具 有 结 构 简 单 成 本 低 廉 和 性 能 第 卷 第 期 化 工 学 报 年 月! "!#$ 研 究 论 文 水 平 条 件 下 管 内 加 丝 的 脉 冲 热 管 性 能 测 试 及 分 析 黄 元 东 徐 进 良 岑 继 文 付 健 刘 培 中 国 科 学 院 广 州 能 源 研 究 所 广 东 广 州 % 中 国 科 学 院 研 究 生 院 北 京 ' 华 北 电 力 大 学 可 再 生 能 源 学 院 北 京 摘 要 传 统 脉 冲

More information

ZhouWei

ZhouWei 华 中 科 技 大 学 电 子 与 信 息 工 程 系 2013 年 TI 杯 电 子 设 计 大 赛 项 目 个 人 报 告 课 题 : 智 能 体 重 测 量 监 控 管 理 系 统 成 员 : 周 围 提 高 1001 班 U201012889 指 导 教 师 : 曾 喻 江 时 间 : 2013/7/3 一 设 计 目 标 1 背 景 知 识 在 如 今 个 人 健 康 意 识 越 来 越

More information

旅游科学

旅游科学 旅 游 科 学 王春雷 会展专业人才培养模式是一个院校对于会展办学的整体设计 因而需要进行系统性的构建 但目前这方面的研究成果不多 更缺乏实证性的研究 本 文基于文献综述的发现和会展专业的特点 从理论上构建了一个项目驱动型会展 专业人才培养模式的基本框架 进而以上海师范大学会展经济与管理专业为例 侧重从教育理念 培养目标 培养过程 培养制度和培养评价等方面进行了实证研究 项目驱动型 会展专业 人才培养模式

More information

片 要求小王等同学对这些文物用两种不同的标准进行分类 说出分类标准和结果 其所考查的目标实则是呼应了一般学习能力中的 整理信息 的要求 即从图片材料 中提取历史信息 对所获材料进行归类 开卷的第三题以 古代少数民族问题 为材料主题 体现交往与融合在文明发展 历程中的地位与作用 以探究性学习为主线 集中考查学生在开展探究性活动中对文 献 实物 口传等不同种类史料 材料 的运用水平 包括对有关史实的再现

More information

宋守信 教授 杨书宏 教授级高工 傅 贵 教授 许开立 教授 高等工程教育专业认证委员会安全工程专业试点工作组 北京交通大学经济管理学院 北京 中国职业安全健康协会培训部 北京 中国矿业大学 北京 资源与安全工程学院 北京 东北大学资源与土木工程学院 沈阳 简要介绍我国高等工程教育专业认证试点的发展状况和主要做法 详细阐述安全工程专业认证以学生为本的指导思想和以质量保证及质量改进为出发点的基本特点

More information

137677_Eta_press Folder-cn用的.indd

137677_Eta_press Folder-cn用的.indd 美卓回收业务线废金属打包机林德曼 EP 系列金属打包机 ( Lindemann Eta Press ) 2 MINAO SAWES Eta Press 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944

More information

MCU Day 2009: MSP430 Ultra-Low Power MCUs

MCU Day 2009: MSP430 Ultra-Low Power MCUs MCU Day 2009 MSP430 超 低 功 耗 单 片 机 MSP430 议 程 表 MSP430 结 构 及 主 要 特 点 外 围 设 备 新 技 术 MSP430 产 品 系 列 综 述 使 用 入 门 : 工 具 和 软 件 您 可 使 用 的 资 源 低 功 耗 与 高 性 能 性 能 CPU 采 用 16 位 精 简 指 令 系 统, 最 高 频 率 可 达 25M Hz 代 码

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63> 嵌 入 式 系 统 设 计 师 考 试 大 纲 一 考 试 说 明 1 考 试 要 求 : (1) 掌 握 科 学 基 础 知 识 ; (2) 掌 握 嵌 入 式 系 统 的 硬 件 软 件 知 识 ; (3) 掌 握 嵌 入 式 系 统 分 析 的 方 法 ; (4) 掌 握 嵌 入 式 系 统 设 计 与 开 发 的 方 法 及 步 骤 ; (5) 掌 握 嵌 入 式 系 统 实 施 的 方 法

More information

# # # # # # # # #

# # # # # # # # # 实现政治问责的三条道路 马 骏 建立一个对人民负责的政府是现代国家治理的核心问题 实现这一目标 需要解决两个最基本的问题 谁来使用权力 如何使用权力 选举制度是解决前一问题相对较好的制度 而预算制度是解决第二个问题最好的制度 通过历史比较分析 可以总结出三条实现政治问责的道路 世纪的欧洲道路 从建国到进步时代改革的美国道路以及雏形初现的中国道路 这意味着 西方经验并不是唯一的实现政治问责的道路 相对于西方经验来说

More information

嵌入式工程师考纲大纲(中级)

嵌入式工程师考纲大纲(中级) ARM9 嵌入式系统设计与开发应用 教学大纲 编写 : 熊茂华 本教材是为中国电子学会嵌入式设计工程师考试指定教材, 根据嵌入式设计工程师考试大纲 ( 中级 ) 要求, 制订了 ARM9 嵌入式系统设计与开发应用 课程的教学大纲 课程能力目标 : 通过本课程的教学, 掌握嵌入式应用系统的基本结构 嵌入式硬件接口和软件系统设计的方法 ; 利用嵌入式开发工具 ADS 1.2 开发基于 μc/os-ii

More information

第 期 丘志力等 从传世及出土翡翠玉器看我国清代翡翠玉料的使用

第 期 丘志力等 从传世及出土翡翠玉器看我国清代翡翠玉料的使用 第 卷 第 期 年 月 宝石和宝石学杂志 丘志力 吴 沫 谷娴子 杨 萍 李榴芬 根据最新发现的广州海关清代同治 光绪年间玉石的进口记录以及其它翡翠资源开发的资料 通 过分析中国主流博物馆清代传世及出土的翡翠玉器 国际著名拍卖公司专场拍卖的清代翡翠玉器以及云南 等九省 市出土的清代翡翠玉器 统计分析了中国清代翡翠玉器的来源与材质特征 指出该时期进入中国市场 的翡翠玉料数量可能相当巨大 广州是翡翠玉料最重要的进关口岸之一

More information

第九章

第九章 2.5 Internet 3G 9.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1 2 4 9 9.2 GSMCDMA3G 1G GSMTDMA 2G 2.5 CDMA 3G GSM GSM900MHz GSM1800MHz GSM1900MHz CDMA Code

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 1 2 1 2 3 4 5 6 7 8 9 10 3 1 150 2 150 1 1 1.1 1.1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.4 1.4.1 CPU 1.4.2 I/O 1.4.3 I/O 1.5 1.5.1 CISC RISC 1.5.2 1.5.3 1.6 1.6.1 1.6.2 N 1.6.3 2 2.1 2.1.1 2.1.2 2.1.3

More information

中国社会科学 年第 期,,. % 1,,,. %,. % 2,, %, ;,,,, 3,,,, 4 ( ) ( ) ( ) (),, %, 5,,,,,,,,, 1 :,, ://.. / / - / /., 2 :,, 3 :, 4,,, 5 ( ),,, ( ),, ( ), ( ), ( );

中国社会科学 年第 期,,. % 1,,,. %,. % 2,, %, ;,,,, 3,,,, 4 ( ) ( ) ( ) (),, %, 5,,,,,,,,, 1 :,, ://.. / / - / /., 2 :,, 3 :, 4,,, 5 ( ),,, ( ),, ( ), ( ), ( ); 近年来农民工的经济状况和社会态度 李培林李炜 : 改革开放 年来, 农民工作为中国产业工人的组成部分, 成为支撑中国经济持续快速增长的重要力量 基于 年和 年 中国社会状况综合调查 的数据, 对近年来 特别是在国际金融危机背景下农民工的经济状况和社会态度进行分析, 结果显示, 年数据反映出农民工在收入水平较低 劳动强度较高的情况下, 却保持着较为积极的社会态度 ; 近两年的新变化是, 农民工的收入水平和社会保障水平都有了显著的提高,

More information

% %

% % 兼论 上海城市人文历史地图的制作和运用 苏智良! 吴俊范 #! 由于地理学与历史学之间存在着学科分野的界限 致使已往的 景观概念缺乏全面性 其结果是 不仅地理学的景观研究缺少历史的底蕴与含量 而且历史学领域内系统的景观史研究也一直处于缺失状态 本文分别从宏观的理论角度和以 上海城市人文历史地图为中心例证 探讨在新的景观概念基础上和现代科学技术条件下 研究区域景观史的必要性 可行性以及具体的研究路径与操作方法

More information

33023A.book(31031A_cn.fm)

33023A.book(31031A_cn.fm) 31 第 31 章器件特性 器件特性 目录 本章包括以下一些主要内容 : 31.1 简介... 31-2 31.2 特性和电气规范... 31-2 31.3 DC 和 AC 特性图表... 31-2 31.4 版本历史... 31-22 24 Microchip Technology Inc. DS3131A_CN 第 31-1 页 PICmicro 中档单片机系列 31.1 简介 Microchip

More information

日本学刊 年第 期!!

日本学刊 年第 期!! 日本对华直接投资与贸易增长变化分析 裴长洪 张青松 年日本丧失中国最大贸易伙伴的地位 这与日本 年以来对华投资增速放缓 占外商对华投资中的比重下降有着密切关系 只要日资企业继续提升投资结构和技术水平 从边际产业转向比较优势产业 从劳动密集型转向资本和技术密集型 就能带动设备和产品对中国的出口 使中国从日本进口增长速度和规模始终保持领先地位 这样 日本仍有可能恢复中国最大贸易伙伴的地位 对华直接投资

More information

USER MANUAL_2.0_CN_V2_溫度修改版本.indd

USER MANUAL_2.0_CN_V2_溫度修改版本.indd P 1 2015 P 2 內 P 3 P 4 User Manual da Vinci 2.0 Duo 第二章 设置和安装 本章将说明如何正确地开箱及使用打印机 在进入本章前请务必阅读第一章 产品安全使用 开箱和确认附件 注意: P5 3D Z USB P 6 P 7 P 8 第 五 章 功 能 操 作 按 键 上 键 下 键 左 键 右 键 OK 键 Home 键 功 能 向 上 选 择 向 下

More information

水权定义 法律规定的用户获得水权的方式 法律规定的几种水相关许可 水利经济 电话 传真

水权定义 法律规定的用户获得水权的方式 法律规定的几种水相关许可 水利经济 电话 传真 美国犹他州水权管理制度及其对我国的启示 贾绍凤 曹 月 犹他州位于美国西部干旱区 水资源紧缺 是美国优先水权制度的发源地 具有完备而具体的水权管理制度 通过文献研究和利用电子邮件询问犹他州水权处官员的方法 分析 介绍美国犹他 州的水权管理制度 尤其是水权申请 登记 交易 水权管理机构设置 实施 信息查询等具体的制 度 以期为我国水权制度建设提供借鉴 水权制度 交易管理 犹他州 水利经济 电话 传真

More information

通过动态路由协议实现链路备份

通过动态路由协议实现链路备份 通过动态路由协议实现链路备份 实验名称 通过动态路由协议实现链路备份 实验目的 掌握通过在不同链路上配置不同的路由协议实现链路备份 背景描述 你是公司高级网络管理员, 公司内部有一个很重要的服务器所在网段为 192.168.12.0/24, 平常访问通过 R1,R3 的 OSPF 路由协议, 为了保证该网段随时能够访问, 不能因为链路故障出问题, 要求你实现一个备份冗余的功能, 请给予支持 实现功能

More information

东南大学学报 自然科学版 第 卷

东南大学学报 自然科学版 第 卷 第 卷第 期 年 月 东南大学学报 自然科学版 徐 进 邵毅明 彭其渊 蒋朝哲 以路线 驾驶者 车辆仿真系统为行车试验手段 根据行驶过程中方向盘角输入和转速的时域变化 分析了多条路线的操纵负荷特性 试验路线的设计车速 为 含长大圆 曲线 卵型 凸型 回头曲线等组合 结果表明 在 的山岭区高速公路上操纵车辆是非常容易的 当曲线半径大到一定程度时 曲线行驶和直线行驶已经不存在差别 但仍需要方向 干预 当行驶速度偏离设计车速不多时

More information

安全救护教学设计 一 教学导入 教学过程设计 二 学情了解 三 学习新课 1. 指压止血法

安全救护教学设计 一 教学导入 教学过程设计 二 学情了解 三 学习新课 1. 指压止血法 创伤救护 教学意义 教学目标 1 2 3 4 教学重点与难点 教学方法 教学时数 4 教师课前准备 1 2 PPT 学生课前准备 1 2 11 安全救护教学设计 一 教学导入 教学过程设计 二 学情了解 三 学习新课 1. 指压止血法 1 2 3 4 1.5 12 3 13 安全救护教学设计 14 2. 加压包扎止血法 1 1/3 2/3 15 安全救护教学设计 2 3cm 3 3. 止血带止血法

More information

数 字 隔 离 器 光 耦 隔 离 器 或 者 电 磁 隔 离 器 用 来 将 系 统 现 场 的 ADC DAC 和 信 号 调 理 电 路 与 数 字 端 的 控 制 器 隔 离 开 来 如 果 模 拟 端 的 系 统 也 必 须 实 现 充 分 隔 离 的 话, 在 输 入 或 者 输 出 的

数 字 隔 离 器 光 耦 隔 离 器 或 者 电 磁 隔 离 器 用 来 将 系 统 现 场 的 ADC DAC 和 信 号 调 理 电 路 与 数 字 端 的 控 制 器 隔 离 开 来 如 果 模 拟 端 的 系 统 也 必 须 实 现 充 分 隔 离 的 话, 在 输 入 或 者 输 出 的 图 1 PLC 系 统 架 构, 示 出 了 各 种 不 同 的 I/O 模 块 功 能 PLC 系 统 包 含 输 入 模 块 输 出 模 块 和 输 入 / 输 出 模 块 因 为 许 多 输 入 和 输 出 都 涉 及 现 实 世 界 中 的 模 拟 变 量 而 控 制 器 是 数 字 式 的 PLC 系 统 硬 件 设 计 任 务 将 主 要 围 绕 如 下 方 面 展 开 : 数 模 转

More information

欧洲研究 年第 期

欧洲研究 年第 期 气候变化与欧盟北极战略 何奇松 气候变暖改变了北极地缘政治环境 年 月 欧盟委员会通过了 欧盟与北极地区 通讯 年 月 欧盟理事会通过 北极问题决议 这两个文件基本上勾勒了欧盟的北极战略 即保障和维护北极地区及其居民的权利 促进北极资源的可持续利用以及北极多边治理 实际上 欧盟希望通过执行北极战略来体现欧盟作为全球气候政策的领先者 北极的经济价值驱使欧盟加入北极的地缘政治博弈 其中一个关键就是保证欧盟油气资源的供应

More information

.------------------------------------------------------------------1. DSP --------------------------------2. ----------------3 3.1 -------------------

.------------------------------------------------------------------1. DSP --------------------------------2. ----------------3 3.1 ------------------- ICETEK-5100PP ICETEK-5100USB1.1/2.0 DSP 118 A 1004 010-82671912/13/14/15 E-mailwelcome@realtimedsp.com.cn 100086 010-82671916 www.realtimedsp.com.cn .------------------------------------------------------------------1.

More information

Microsoft Word - 简本--Only this one for distribution.docx

Microsoft Word - 简本--Only this one for distribution.docx 1... 1 1.1... 1 1.2... 2 1.2.1 使用人群... 2 1.2.2 主要用途... 2 1.2.3 车辆性能... 2 1.2.4 道路设施与条件... 3 1.3... 3 1.4... 3 2... 4 2.1... 4 2.2... 5 2.2.1 国家层面的法规与政策... 5 2.2.2 地方层面的管理规定与办法... 5 2.3... 5 3... 7 3.1...

More information

第 25 期 高 稳 定 性 数 字 钟 的 分 析 与 实 现 121 V/s,E s 是 输 入 信 号 固 有 的, 是 无 法 控 制 的, 而 E i 和 R t 是 在 电 路 设 计 时 可 控 或 部 分 可 控 的 ; 要 降 低 E i, 可 以 在 电 路 设 计 时 对 接

第 25 期 高 稳 定 性 数 字 钟 的 分 析 与 实 现 121 V/s,E s 是 输 入 信 号 固 有 的, 是 无 法 控 制 的, 而 E i 和 R t 是 在 电 路 设 计 时 可 控 或 部 分 可 控 的 ; 要 降 低 E i, 可 以 在 电 路 设 计 时 对 接 中 国 科 学 院 上 海 天 文 台 年 刊 2004 年 第 25 期 ANNALS OF SHANGHAIOBSERVATORY ACADEMIA SINICA No.25, 2004 高 稳 定 性 数 字 钟 的 分 析 与 实 现 黄 佩 诚 ( 中 国 科 学 院 上 海 天 文 台, 上 海 200030) 提 要 介 绍 一 种 高 稳 定 低 功 耗 多 功 能 小 型 化 的

More information

中国与欧洲关系 年

中国与欧洲关系 年 中国与欧洲关系 年 周 弘 本文全面回顾了中国与欧洲共同体 欧洲联盟及其成员国 年至 年间政治和经济关系的发展历程 分析了当前中欧关系取得的进展和存在的问题 作者认为 年来中国与欧洲关系的发展变化见证并体现了世界格局的演变以及中国和欧洲这两大很不相同的世界力量自身的发展变化 中欧之间不断深入和拓展的交往使双方都从中获益 而这种交往所创造出来的体制机制和方式方法也堪为人先 中欧关系能否在第二个 年中顺利发展

More information

方正集团品牌传播日常监测

方正集团品牌传播日常监测 1986-2009 1 1986-2009 2 1986-2009 3 1986-2009 4 1986-2009 5 1986-2009 6 1986-2009 1 2 7 1986-2009 8 1986-2009 PC 15 8 7 5-7 9 1986-2009 10 1986-2009 11 1986-2009 IT AFC IT 5 AFC 12 1986-2009 13 1986-2009

More information

1

1 2010 全 国 研 究 生 电 子 设 计 竞 赛 论 文 ( 华 东 赛 区 ) 题 目 : 基 于 FPGA 的 超 声 血 流 分 析 平 台 设 计 与 实 现 论 文 编 号 : 参 赛 学 校 : 中 国 科 学 技 术 大 学 参 赛 学 生 : 贺 承 浩 赵 占 祥 项 天 指 导 教 师 : 金 西 二 一 年 八 月 第 123 页 共 478 页 目 录 1 引 言 125

More information

EDK_MicroBlaze_tutorial.doc

EDK_MicroBlaze_tutorial.doc EDK 6.3 MicroBlaze Tutorial Page 1 of 22 EDK 6.3 MicroBlaze Tutorial 声 明 : 本 人 初 次 接 触 Xilinx EDK, 摸 索 了 一 段 时 间, 在 网 上 搜 索 了 一 些 资 料 终 于 试 验 成 功 闲 来 无 事, 想 到 当 初 寻 找 文 档 的 种 种 艰 辛, 并 且 为 了 纪 念 这 一 历 史

More information

Microsoft Word - 120-D122-C2.doc

Microsoft Word - 120-D122-C2.doc 第 0 卷 增 刊 电 网 技 术 Vol.0 Supplement 2006 年 0 月 Power System Technology Oct. 2006 文 章 编 号 :000-67(2006)S2-044-05 中 图 分 类 号 :TM76 文 献 标 识 码 :A 学 科 代 码 :470 40 基 于 MSP40 单 片 机 的 具 有 无 功 补 偿 控 制 功 能 的 配 变 终

More information

关于罗斯福时代新政 宪法革命 的几点浅见 韩 铁 美国宪法的若干重要法理原则及其运用在富兰克林 罗斯福总统任内 发生了巨大变化 史称新政 宪法革命 不过 这种变化并不是在所谓 年最高法院的 及时转向 中一锤定音的 最高法院在正当程序 商业权 公众福利条款上的态度及其变化充分说明 新政宪法革命无论是从当时还是其后的发展来看都有它的连续性 局限性和复杂性 只有认识到了这一点 我们对新政宪法革命乃至于整个新政的历史评价才会比较准确

More information

国际政治科学 ¹ º ¹ º

国际政治科学 ¹ º ¹ º 印度学者对中国的安全认知 司乐如 一轨 外交和 二轨 外交都是国际关系研究中值得重视的内容 前者有助于说明两国在政府外交层面的表现 对后者的研究则有助于了解在外交现象背后起作用的观念因素 本文的研究试图把社会心理学中的一些核心概念融入国际关系的研究之中 并在此基础上探讨印度学者对中国的安全认知 本文通过提供关于 认知 的更为精确的概念和理论框架 并通过术语统计和定性的案例分析 深入印度专家的视角 深化人们对中印安全互动的了解

More information

社 心 版 中 出 版 学 科 术出 k.cn 技 boo 教.a 职 ww w 科 学 出 版 社 职 教 技 术 出 版 中 心 www.aboo 科 学 出 版 社 职 教 技 术 出 版 中 心 www.aboo 社 心 版 中 出 版 学 n 出 c 科 术 k. o 技 o b 教 a 职 ww. w 科 学 出 版 社 职 教 技 术 出 版 中 心 www.aboo 科 学

More information

陈鹭真 王文卿 林 鹏 模拟正规半日潮淹水的条件下 不同淹水时间对秋茄 幼苗生长的影响 应用沙和土两种培养基质 制备盐度为 的人工海水栽培幼苗培养时间为 不淹水 和长时间淹水 对秋茄幼苗的生长有一定的抑制作用 而短时间淹水 淹水 对 幼苗生长有所促进 较长时间的淹水可促进贮气根的数量增加和长度的增长 在当前培养条件下 秋茄幼苗生长的最佳淹水时间是每个潮水循环淹水 处理的沙培秋茄幼苗总生物量和成熟叶面积最大

More information

航天电器 SAM 系列射频同轴连接器 机械和电气基准面 a b c 头部配合尺寸 m n l k 机械和电气基准面 d e f p q r g s t i h j u w 尺寸代号最小值最大值尺寸代号最小值最大值尺寸代号最小值最大值 a 3.30 h p 1/4-36UNS-2A b

航天电器 SAM 系列射频同轴连接器 机械和电气基准面 a b c 头部配合尺寸 m n l k 机械和电气基准面 d e f p q r g s t i h j u w 尺寸代号最小值最大值尺寸代号最小值最大值尺寸代号最小值最大值 a 3.30 h p 1/4-36UNS-2A b SAM 系列射频同轴连接器 航天电器 特点简介 SMA 射频同轴连接器具有体积小 频带宽 机械电气性能优越 可靠性高等优点, 是应用最广泛的射频电连接器 广泛用于微波通讯 航天航海 武器系统及微波测量设备等领域 技术特性 温度范围 -65 ~ +165 绝缘电阻 5000MΩ 特性阻抗 50Ω 介质耐压 1000V 频率范围 配软电缆 0 ~ 12.4GHz 中心导体 0.003Ω 接触电阻配半刚

More information

课外创新研学项目 构想、设计与实现

课外创新研学项目                   构想、设计与实现 实 验 教 学 改 革 与 学 科 竞 赛 相 互 促 进 东 南 大 学 电 工 电 子 实 验 中 心 胡 仁 杰 hurenjie@seu.edu.cn 主 要 内 容 全 国 大 学 生 电 子 设 计 竞 赛 发 展 概 况 竞 赛 设 计 概 要 创 新 实 验 教 学 实 践 环 境 建 设 全 国 大 学 生 电 子 设 计 竞 赛 宗 旨 结 合 教 学, 着 重 基 础 注 重

More information

500 Daniel Danalyzer 500 Rosemount Analytical 500 P/N 3-9000-537 K 2010 7 A.1 A.2 A.2.1 A.2.2 A.2.3 A.2.4 A.3 A.3.1 A.3.2 A.4 A.5 A.6 B.1 B.2 B.3 C.1 C.2 C.3 F.1 F.2 F.3 G.1 G.2 G.3 G.4 G.4.1

More information

三国时期墓葬特征述论 韩国河 朱 津 三国时期墓葬制度是从 汉制向 晋制的转变过渡时期 这一时期墓葬形制同东汉时期相比有较大的改变 突出表现在曹魏和东吴地区 随葬器物组合方面基本沿用东汉晚期 但又 出现了一些新器型 此外各区域间的墓葬文化表现出频繁交流的特点 综合以上诸要素可知 晋制 的形成主要源自于中原地区的曹魏墓葬 种类亦被中原地区所接纳 成为西晋墓中典型的器物组合 三国 汉制 薄葬 晋制 突出表现在墓葬形制和葬俗方面

More information

<4D6963726F736F667420576F7264202D20B5E7D7D3D0C5CFA2C0E0D7A8D2B5C5E0D1F8B7BDB0B8D0DEB6C1D6B8C4CF2E646F63>

<4D6963726F736F667420576F7264202D20B5E7D7D3D0C5CFA2C0E0D7A8D2B5C5E0D1F8B7BDB0B8D0DEB6C1D6B8C4CF2E646F63> 福 州 大 学 校 训 博 学 远 志 明 德 至 诚 序 言 亲 爱 的 电 子 信 息 类 的 学 子 : 朝 气 蓬 勃 的 你 们 带 着 对 大 学 生 活 的 美 好 憧 憬 走 进 校 园, 开 始 谱 写 人 生 历 程 崭 新 辉 煌 的 一 页 你 们 将 在 这 风 景 如 画 的 福 州 大 学 新 校 区 里, 与 周 围 的 同 学 们 一 起 汲 取 知 识 培 养 能

More information

穆迎春 王 芳 董双林 董少帅 朱长波 研究了盐度波动幅度对中国明对虾稚虾 蜕皮和生长的影响 实验 在水族箱内进行 实验对虾的初始体重为 投喂人工配合饲料 实验结果表 明 不同盐度波动幅度对中国明对虾稚虾的蜕皮周期有显著的影响 其中 能明 显抑制对虾的蜕皮 则能促进对虾的蜕皮 前者较后者蜕皮周期延长 不同盐度波动幅度对中国明对虾的特定生长率有显著影响 其中 和 两组对虾的特定生长率最 大 分别大于

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1 科 技 部 自 由 軟 體 專 案 原 始 程 式 碼 使 用 手 冊 Source Code Manual of NSC Open Source Project 可 信 賴 的 App 安 全 應 用 框 架 -App 應 用 服 務 可 移 轉 性 驗 證 Trusted App Framework -Transferability Verification on App MOST 102-2218-E-011-012

More information

避孕方法的医控模式和自控模式有变化吗 郑晓瑛 任 强 避孕节育是生殖健康极为重要的内容 文章利用国家人口和计划生育委员会 年至 年全国生育节育抽样调查和全国计划生育 生殖健康调查数据 分析了已婚育龄人口在避孕模式上的 时空变化特征 在此基础上进一步研究了在已婚育龄人口的年龄 子女数和生活的不同区域环境等方 面避孕模式的时空变化 结果表明 在我国人口转变的过程中 低生育水平下的避孕模式以及推行避 孕节育知情选择后已婚育龄人口的避孕模式

More information

¹ º» ¼ ½ ¹ º» ¼ ½

¹ º» ¼ ½ ¹ º» ¼ ½ 战争制胜的秘密 评 军事力量 解释现代战争中的 胜利与失败 李 卓 近年来 美国国际安全研究中关于军事行动制胜因素的研究非常活跃 本文评述了此类研究的代表人物比德尔的 军事力量 解释现代战争中的胜利与失败 一书 对书中提出的 军事力量部署差异制胜论 的研究问题 分析框架 经验论证等主要研究环节进行了归纳和梳理 本文从理论 方法论等角度总结了此书的成就 认为该书通过构建以 军事力量部署 这一非物质变量为核心的安全理论

More information

Microsoft Word - 九月月刊.docx

Microsoft Word - 九月月刊.docx 梅 Aug 2014 Vol. 1 Issue 7 + 1 常 的 糖尿病篇 Page 1 Ø Ø 我不需要自己, 那是 生的事情? Ø Ø Ø Ø 么 时 药 + more on 2 Lorem 梅 Aug 2014 Vol. 1 Issue 7 Ipsum 于血糖 : 我不需要自己, 那是 生的事情 2 梅 Aug 2014 Vol. 1 Issue 7 Lorem Ipsum 1) 2) 晚

More information

外国文学研究 年第 期

外国文学研究 年第 期 柳向阳 论奥古斯丁时间观与罗伯特 潘 沃伦的诗歌创作 柳向阳 在 世纪美国作家中 罗伯特 潘 沃伦以博学多才的文艺复兴式人物著称 但沃伦文学生涯的核心成就是在诗歌领域 在六十余年的诗歌生涯中 沃伦有意识地将 奥古斯丁时间观引入诗歌创作 一方面借鉴奥古斯丁时间的结构特征 通过探索时间向度的变化 展示生命的历程和自我的发现 另一方面挖掘奥古斯丁时间的生命和诗学内涵 通过 对时间的体验 将时间的心灵和生命的属性赋予诗歌中的人和物

More information

!!

!! 涂正革 肖 耿 本文根据中国 个省市地区 年规模以上工业企业投入 产出和污染排放数据 构建环境生产前沿函数模型 解析中国工业增长的源泉 特别是环境管制和产业环境结构变化对工业增长模式转变的影响 研究发现 现阶段中国工业快速增长的同时 污染排放总体上增长缓慢 环境全要素生产率已成为中国工业高速增长 污染减少的核心动力 环境管制对中国工业增长尚未起到实质性抑制作用 产业环境结构优化对经济增长 污染减少的贡献日益增大

More information

SM2965

SM2965 产品清单 SM2965C40, 主频 40MHz, 内带 64KB 闪存的 MCU 总体描述 SM2965 系列产品是一种内嵌 64KB 闪存和 1K 字节 RAM 的 8 位单片微控制器它是 80C52 微控制器家族的派生产品具有在系统可编程 (ISP) 功能其 PDIP 封装具有 32 个 I/O 口而 PLCC/QFP 封装则具有多达 36 个 I/O 口 64K 字节的闪存既可以当作程序空间又可以当作数据空间或者数据和程序混合空间其硬件特征和强大的指令系统使它成为一种性能价格比高的控制器片上闪存的编程可以使用商用编程器进行并行编程也可以根据其

More information

《计算机应用基础》学习材料(讲义)

《计算机应用基础》学习材料(讲义) 计 算 机 应 用 基 础 学 习 材 料 ( 讲 义 ) Fundamentals of Computer Application 2014-3-22 JIANGSU OPEN UNIVERSITY 第 二 学 习 周 计 算 机 基 础 知 识 ( 一 ) 导 学 在 本 学 习 周, 我 们 主 要 的 任 务 是 认 识 计 算 机 你 将 知 道 计 算 机 是 什 么 时 候 产 生 的,

More information

网上对外发布资料适用版本

网上对外发布资料适用版本 HDLC-LCM 嵌 入 式 低 功 耗 通 信 模 块 Rev.2016.0602 用 户 手 册 电 话 :400-025-5057 网 址 :www.yacer.cn 目 录 1 概 述... 1 1.1 简 介... 1 1.2 特 点... 1 1.3 应 用... 1 1.4 订 购 信 息... 1 1.5 技 术 规 格... 2 1.6 机 械 尺 寸 图... 3 2 硬 件 结

More information

201406002+大学计算机基础B.doc

201406002+大学计算机基础B.doc 目 录. 大 学 计 算 机 基 础 B( 非 独 立 设 课 ).... 计 算 机 操 作 基 础 ( 独 立 设 课 )...3 3. 程 序 设 计 基 础 ( 非 独 立 设 课 )...5 4. 面 向 对 象 程 序 设 计 ( 非 独 立 设 课 )...8 5. 数 据 库 原 理 ( 非 独 立 设 课 )...0 6. 算 法 设 计 与 分 析 ( 非 独 立 设 课 )...

More information

»

» 世纪 年代以来 中国社会的城市化日新月异 全球化的消费社会也开始进入 我们的生活 中国的城市文学趋向活跃 年轻一代的作家表达了对城市的感受和反思 积极地探寻着新的审美表现力 但总体看来 城市文学依然很不充分 作家的视野中并没有深刻和开放的城市精神 文学作品没有找到表现更具有活力的城市生活状况的方式 城市文学依然是一种无法解放和现身的 他者 并且被无限期延搁于主体的历史之侧 城市 现代性 乡土 幽灵化

More information

Ñ Ö Ö

Ñ Ö Ö Ö Ö Ö Ñ Ö Ö Ö Ö Ö Ö Ñ Ö Ö Ù Ñ Ö Ö Ñ Ö Ö Ö Ö Ö Ö 中国药典 年版药用辅料标准起草工作交流会 月 日于西宁召开 国家药典委员会于 年 月 日组织承担药用辅料标准起草任务的 个药品检验所在青海省西宁市召开辅料 标准起草工作交流会 国家局药品注册司派员参加了会议 青海省食品药品监督管理局魏富财副局长到会致欢迎词 中国药 品生物制品检定所和上海市食品药品检验所就药用辅料标准起草工作进行了大会经验交流

More information

CH01.indd

CH01.indd 3D ios Android Windows 10 App Apple icloud Google Wi-Fi 4G 1 ( 3D ) 2 3 4 5 CPU / / 2 6 App UNIX OS X Windows Linux (ios Android Windows 8/8.1/10 BlackBerry OS) 7 ( ZigBee UWB) (IEEE 802.11/a/b/g/n/ad/ac

More information

从制度视角看马来西亚华人的参政空间 朱陆民 华人参政是华人维护自身政治 经济利益的必经之路 基于马来西亚历史 文化传统的主要制度结构从根本上影响和制约着华人参政的广度和深度 本文从新制度主义政治学的视角对马来西亚影响 制约华人参政的主要制度进行了剖析 由此揭示了华人在马来西亚的参政空间 作者认为 华人的政治参与是一个非常复杂的问题 制度的视角或许并不能解释该问题的全部 但制度的性质从根本上决定着华人参政的前景和命运

More information

赵世嘏 高乃云 楚文海 微曝气工艺是在常规 基础上发展起来的 试验表明在紫外光强 投加量为 三氯乙酸 初始浓度约为 的情况下 后该工艺对 的去除达到 以上 工艺效果受 光强 投加量 初 始浓度和 的影响 其他条件一定时 随着 光强和 投加量的增大 去除率增加 然而 投加量超过 后 去除效果增加缓慢 对不同初始浓度 时去除率最 高 而后浓度增加 去除率下降 中性或弱酸性 条件下更有利于降解 消毒副产物

More information

考试研究 % 第 卷第 期 # # # # #

考试研究 % 第 卷第 期 # # # # # 张亚群! 北京大学 清华大学自主招生是在高考基础上进行自主选拔 综合评价 降分录取的招生模式 它适应了建设一流大学和培养创新人才的要求 为全面发展或具有特长的考生提供了更多的入学选择机会 两校自主选拔竞争激烈 招生范围逐年扩大 取得了一定的成效 但也存在操作复杂 成本高 忽视弱势阶层考生 特长生优势不显著等不足 需要进一步改革与完善其选拔机制! 北京大学清华大学自主招生考试!!! 张亚群 教授 博士生导师

More information

典型自编教材

典型自编教材 河 南 科 技 大 学 计 算 机 实 验 教 学 中 心 1. 计 算 机 文 化 基 础 实 验 指 导 书 2. 数 据 结 构 实 验 指 导 书 3. 操 作 系 统 实 验 指 导 书 4. 面 向 对 象 程 序 设 计 实 验 指 导 书 5. 数 据 库 原 理 实 验 指 导 书 6. 编 译 原 理 实 验 指 导 书 7. JAVA 程 序 设 计 实 验 指 导 书 8.

More information

致 学 员

致  学  员 致 学 员 感 谢 您 使 用 育 龙! 该 教 材 是 为 了 配 合 学 校 用 户 进 行 软 件 培 训 及 使 用 而 编 制 的, 本 教 材 涵 盖 了 学 校 管 理 员 应 用 平 台 教 师 应 用 平 台 学 校 教 务 管 理 平 台 等 内 容, 并 增 加 了 实 例 讲 解 及 课 后 练 习 等 章 节, 请 根 据 实 际 需 求 选 择 学 习 同 时 为 了 达

More information

http://www.tenda.com.cn Tenda 无线网卡说明书 第一章产品简介...1 1.1...1 1.2...1 1.3...1 1.4...2 1.5...2 1.6...2 1.7...4 第二章安装指南...5 第三章使用系统自带的无线配置程序...10 3.1...10 第四章客户端应用程序使用...18 4.1...19 4.1.1...20 4.1.2...21 4.1.3...23

More information

欧洲研究 年第 期

欧洲研究 年第 期 论中欧伙伴关系中的不对称性与对称性 周 弘 在自然界和人类社会中都充满了不对称性和对称性的复杂关系 其中潜藏着挑战 也蕴涵着动力和机遇 这种现象同样存在于中欧关系之中 中欧关系中的不对称性表现在经济社会 政治制度和历史文化等三个主要方面 在这些不对称性中同时又包含着对称性 并孕育着发展中欧伙伴关系的机遇 中欧双方需要相互理解对方的 方式 寻求对称性与互补性 创造共赢局面 推动合作伙伴关系的继续发展

More information

A5katalog_fina CNl.indd

A5katalog_fina CNl.indd System DIO 2000 工 业 测 量 系 统 的 完 整 解 决 方 案 STARMANS DIO 2000 软 件 DIO 2000 一 般 功 能 该 系 统 的 超 声 通 道 设 计 为 独 立 的 超 声 插 入 单 元 ( 模 块 ), 每 个 模 块 都 有 独 立 的 微 处 理 器 控 制 和 信 号 处 理 功 能 插 入 单 元 ( 尺 寸 为 100 x 160 毫

More information

<4D6963726F736F667420576F7264202D2031303130315FB971BEF7BB50B971A46CB8735FB773A55FA5ABA5DFB7E7AADAB0AAAFC5A475B77EC2BEB77EBEC7AED55FA97EAE61C0F4B9D2B4BCBC7AB1B1A8EEA874B2CE2E646F63>

<4D6963726F736F667420576F7264202D2031303130315FB971BEF7BB50B971A46CB8735FB773A55FA5ABA5DFB7E7AADAB0AAAFC5A475B77EC2BEB77EBEC7AED55FA97EAE61C0F4B9D2B4BCBC7AB1B1A8EEA874B2CE2E646F63> 全 國 高 職 學 生 102 年 度 專 題 製 作 競 賽 報 告 書 居 家 環 境 智 慧 控 制 系 統 群 別 : 電 機 與 電 子 群 參 賽 作 品 名 稱 : 居 家 環 境 智 慧 控 制 系 統 關 鍵 詞 : 環 境 監 控 ZigBee 感 測 元 件 目 錄 壹 摘 要... 2 貳 研 究 動 機...2 參 研 究 方 法...3 一 研 究 器 材...3 二 研

More information