267
教育部高职高专规划教材 高职高专计算机系列教材 单片机原理与应用教程 傅扬烈!主编 俞光昀!主审 !"#$%&’%()*+"&,+-.$,/01+(%/&2(3"&014 北京!5.26278

单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

  • Upload
    others

  • View
    42

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

书书书

教育部高职高专规划教材

高职高专计算机系列教材

单片机原理与应用教程

傅扬烈!主编

俞光昀!主审

!"#$%&’%()*+"&,+-.$,/01+(%/&2(3"&014北京!5.26278

Page 2: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

内 容 简 介

"单片机原理与应用教程#是计算机科学$自动控制等电类专业的一门专业必修课%随着单片机控制领域

的不断拓展%部分机械$机电类专业也开设此课程&本教材是依据中国计算机学会高职高专教育学会"##$年

审定的编写大纲编写的&教材主要针对%&’()公司的*+,-.$系列单片机%介绍其内部资源$程序设计$系统扩展$人机界面$过程通

道等应用开发中涉及到的问题%最后简单介绍了其他常用的单片机&本教材从单片机应用开发的角度出发%对单片机教材的内容进行了整合%结构合理%面向设计’实例取材

于工程实际%具有很高的参考价值’内容覆盖面广%条理清晰&不仅对学习掌握单片机%而且对实际开发也具

有较好的帮助作用&本书既可作为计算机及相关专业的教材%也可供工程技术人员阅读和参考&

未经许可%不得以任何方式复制或抄袭本书之部分或全部内容&版权所有%侵权必究&

图书在版编目!92!"数据

单片机原理与应用教程/傅扬烈主编0(北京)电子工业出版社%"##"0"高职高专计算机系列教材

%,123-.#.4-556.-6

!0单000"0傅000#0单片微型计算机7高等学校)技术学校7教材!$0894560$

中国版本图书馆+%9数据核字*"##"+第##4.#:号

责任编辑)张孟玮!洪国芬

印 刷)出版发行)电子工业出版社!;’’<)//===><;(?>@AB>@&

北京市海淀区万寿路$34信箱!邮编$###45经 销)各地新华书店

开 本)363C$#:"!$/$5!印张)$5>3.!字数)D4"千字

版 次)"##"年"月第$版!"##"年"月第$次印刷

印 数)$#$##册!定价)"$>##元

凡购买电子工业出版社的图书%如有缺损问题%请向购买书店调换&若书店售缺%请与本社发行部联系&联系电话)*#$#+56"3:#33

Page 3: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

前!!言

单片微型计算机*,?&E)(+;?<*?@FA@AB<G’(F%简称单片机+是"#世纪3#年代中期发展起

来的一种新型微机&因其具有硬件结构简单%指令系统完备%使用方便可靠%系统便于扩展%性能价格比高等显著特点%越来越广泛地被计算机$电气工程技术人员采用%广泛应用于诸如计

算机控制$数据采集系统$智能仪器仪表$家用电器及商业服务业等不同的领域&尤其%&’()公

司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

各具特色的单片机不断涌现就可见其重要性&学习$掌握单片机技术成为计算机$自动化%甚至部分机械$机电类工程技术人员设计开发的重要技术手段&

单片机原理及应用是一门实践性较强的课程&学生不仅需要通过教学$实验等教学环节

巩固所学知识%而且需要具备综合运用所学知识%针对不同的用户需求进行设计开发的能力&因此%实践是非常重要的教学环节&鉴于*+,-.$系列单片机及其外围扩展技术已经很成熟%便于设计者借鉴使用%且多数的应用开发采用*+,-.$也是足够的%所以教材主要针对%&’()公司的*+,-.$系列单片机%介绍其内部资源$程序设计$系统扩展$人机界面$过程通道等应用

开发中涉及到的问题&要求学生不仅掌握单片机的基本结构$原理%更重要的是如何将所学知

识应用于实际工程设计中去%因而教材从计算机控制的角度来组织内容%不是孤立地学习%而是将单片机放在服务于项目开发中去讲%对内容进行必要的整合&在选材上%注意内容的连贯

性%尽量做到层次结构分明$难点分散’注重内容的实用性%精选实例%无论软硬件均选自工程

实践’保障内容的正确性%绝大多数应用取自编者多年来的科研开发’突出软硬件设计的技巧

性和方法’介绍新技术$新方法’图$文规范化&此外%教材力图使学生学会如何进行设计&通

过对本课程的学习%使学生对单片机系统及其应用设计有较深刻的理解%为今后应用开发打下

较为坚实的基础&本书由傅扬烈老师主编%共分6章%其中第$$4章由范巍老师编写%第"$D章由姜宏岸老

师编写%第.H6章由傅扬烈老师编写&全书由傅扬烈老师统稿&本书得到了中国计算机学会高职高专教育学会的大力支持%南京师范大学俞光昀教授担

任主审%并对本书提供了大量宝贵意见&本教材还得到了多位教师和科研人员的帮助%其中丁

辉$陈书谦$张丽虹$王霞等老师协助编者完成收集资料$校稿$整理图片等工作%投入了很大的

精力%做了大量的工作&中国船舶工业总公司第3$5研究所的刘彤从工程角度出发%给本书的

编写也提供了大量建议&在此一并表示感谢,希望得到广大单片机专家及爱好者的大力支持&由于编者水平有限%本版中可能还会有

错误或不当之处%恳请诸位不吝赐教%以利修正&

编 者!!"##$年:月于连云港

Page 4: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

目!!录

第:章;<9=>?:单片机应用系统 *$+---------------------------!!$>$!概述 *$+-------------------------------------!!!!$>$>$!单片机的产生$发展及应用 *$+-------------------------!!!!$>$>"!单片机的主要厂商及产品 *4+-------------------------!!!!$>$>4!*+,-.$系列单片机的分类 *.+-------------------------!!$>"!*+,-.$系列单片机内部结构 *5+---------------------------!!!!$>">$!基本组成与结构 *5+-----------------------------!!!!$>">"!外部引脚 *6+--------------------------------!!$>4!中央处理器 *:+----------------------------------!!!!$>4>$!运算器 *:+---------------------------------!!!!$>4>"!控制器 *$#+---------------------------------!!$>D!*+,-.$存储器与存储空间 *$"+---------------------------!!!!$>D>$!程序存储器 *$4+-------------------------------!!!!$>D>"!内部IJ*数据存储器 *$4+--------------------------!!!!$>D>4!片外数据存储器 *$6+-----------------------------!!$>.!并行接口 *$6+-----------------------------------!!!!$>.>$!9$口 *$6+----------------------------------!!!!$>.>"!94口 *$:+----------------------------------!!!!$>.>4!9"口 *$:+----------------------------------!!!!$>.>D!9#口 *"#+----------------------------------!!!!$>.>.!应用特性 *"#+--------------------------------!!$>5!最小应用系统 *"$+---------------------------------!!!!$>5>$!时钟电路 *"$+--------------------------------!!!!$>5>"!+9K时序 *"4+--------------------------------!!!!$>5>4!复位与复位电路 *"4+-----------------------------!!!!$>5>D!+L*M,型单片机低功耗工作方式 *"5+---------------------!!!!$>5>.!典型最小应用系统的结构 *"3+-------------------------!!习题$ *"6+--------------------------------------

第@章;<9=>?:指令系统及程序设计 *4#+------------------------!!">$!指令格式 *4#+-----------------------------------!!!!">$>$!汇编指令 *4#+--------------------------------!!!!">$>"!指令代码格式 *4#+------------------------------!!!!">$>4!指令中的常用符号 *4#+----------------------------!!">"!寻址方式 *4$+-----------------------------------!!!!">">$!立即寻址 *4$+--------------------------------!!!!">">"!直接寻址 *4"+--------------------------------!!!!">">4!寄存器寻址 *4"+-------------------------------

!!!

Page 5: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!!!">">D!寄存器间接寻址 *44+-----------------------------!!!!">">.!基址寄存器加变址寄存器间接寻址 *44+---------------------!!!!">">5!相对寻址 *44+--------------------------------!!!!">">3!位寻址 *4D+---------------------------------!!">4!*+,-.$单片机指令系统 *4D+----------------------------!!!!">4>$!数据传送指令 *4D+------------------------------!!!!">4>"!算术运算指令 *43+------------------------------!!!!">4>4!逻辑运算指令 *4:+------------------------------!!!!">4>D!位操作指令 *D$+-------------------------------!!!!">4>.!控制转移指令 *D$+------------------------------!!">D!汇编语言及程序设计 *DD+------------------------------!!!!">D>$!汇编语言语句结构及伪指令 *DD+------------------------!!!!">D>"!程序的基本结构 *D.+-----------------------------!!!!">D>4!顺序程序设计 *D5+------------------------------!!!!">D>D!分支程序设计 *D5+------------------------------!!!!">D>.!循环程序设计 *D:+------------------------------!!!!">D>5!子程序设计 *.$+-------------------------------!!">.!程序设计举例 *.D+---------------------------------!!!!">.>$!多字节数算术运算程序 *.D+--------------------------!!!!">.>"!数制转换程序 *.3+------------------------------!!!!">.>4!查表程序 *.3+--------------------------------!!!!">.>D!散转程序 *.:+--------------------------------!!!!">.>.!软件陷阱 *5$+--------------------------------!!!!">.>5!数字滤波程序 *5"+------------------------------!!!!">.>3!信号产生程序 *54+------------------------------!!习题" *5D+--------------------------------------

第A章;单片机系统及其扩展技术 *53+--------------------------!!4>$!*+,-.$系统扩展原理 *53+-----------------------------!!4>"!存储器扩展 *56+----------------------------------!!!!4>">$!程序存储器扩展 *56+-----------------------------!!!!4>">"!数据存储器扩展 *3D+-----------------------------!!4>4!扩展并行接口 *35+---------------------------------!!!!4>4>$!扩展概述 *35+--------------------------------!!!!4>4>"!88N芯片扩展的%/M接口 *33+-------------------------!!!!4>4>4!可编程%/M接口芯片扩展 *3:+-------------------------!!!!4>4>D!扩展可编程门阵列 *63+----------------------------!!4>D!串行通信 *6:+-----------------------------------!!!!4>D>$!*+,-.$的串行口 *6:+----------------------------!!!!4>D>"!串行口的工作方式 *:$+----------------------------!!!!4>D>4!多机通信 *:D+--------------------------------!!!!4>D>D!*+,-.$KJI8的串行口扩展 *:.+------------------------!!!!4>D>.!串行口的虚拟扩展技术 *:6+--------------------------!!4>.!定时器/计数器 *::+--------------------------------!!!!4>.>$!定时器/计数器8#和8$ *::+-------------------------

!"!

Page 6: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!!!4>.>"!定时器/计数器的编程和使用 *$#4+-----------------------!!!!4>.>4!外部扩展定时器/计数器 *$#D+-------------------------!!4>5!中断系统 *$#.+----------------------------------!!!!4>5>$!中断的基本概念 *$#.+----------------------------!!!!4>5>"!中断系统 *$#.+-------------------------------!!!!4>5>4!中断应用举例 *$$#+-----------------------------!!习题4 *$$"+--------------------------------------

第B章;人>机界面 *$$4+---------------------------------!!D>$!键盘接口 *$$4+----------------------------------!!!!D>$>$!1+O拨码盘 *$$4+------------------------------!!!!D>$>"!按键与去抖 *$$3+------------------------------!!!!D>$>4!键盘接口 *$$6+-------------------------------!!!!D>$>D!薄膜开关 *$"5+-------------------------------!!D>"!显示接口 *$"3+----------------------------------!!!!D>">$!NPO显示与驱动 *$"3+----------------------------!!!!D>">"!NPO数码管的显示与驱动 *$":+------------------------!!!!D>">4!N+O液晶显示与驱动 *$4"+--------------------------!!D>4!微型打印机接口 *$45+-------------------------------!!!!D>4>$!89%9打印机的主要技术性能 *$45+-----------------------!!!!D>4>"!89%9-D#J打印机的接口信号和时序 *$45+--------------------!!!!D>4>4!89%9-D#J打印机的打印代码和打印命令 *$46+------------------!!!!D>4>D!*+,-.$单片机与89%9-D#J打印机的接口及打印实例 *$4:+------------!!习题D *$D$+--------------------------------------

第?章;过程2CD通道 *$D"+-------------------------------!!.>$!开关量输入 *$D"+---------------------------------!!!!.>$>$!开关量%/M及常见问题分析 *$D4+-----------------------!!!!.>$>"!光耦及其应用 *$D4+-----------------------------!!!!.>$>4!开关量输入通道的设计方法 *$D.+-----------------------!!.>"!开关量输出 *$D5+---------------------------------!!!!.>">$!开关量输出常见的受控对象 *$D5+-----------------------!!!!.>">"!开关量输出的电气隔离 *$D5+-------------------------!!!!.>">4!开关量输出的驱动 *$D3+---------------------------!!!!.>">D!开关量输出的常用设计方法 *$D3+-----------------------!!.>4!模拟量输入通道 *$D3+-------------------------------!!!!.>4>$!J/O转换器的分类与技术指标 *$D6+----------------------!!!!.>4>"!双积分型J/O转换器 *$D:+--------------------------!!!!.>4>4!逐次逼近型J/O转换器*,JI+ *$..+----------------------!!!!.>4>D!串行J/O转换器 *$5$+----------------------------!!!!.>4>.!其他J/O转换方式 *$5.+---------------------------!!!!.>4>5!数据采集系统 *$55+-----------------------------!!.>D!模拟量输出 *$56+---------------------------------!!!!.>D>$!O/J转换器指标与分类 *$56+-------------------------!!!!.>D>"!并行O/J转换器 *$5:+----------------------------!!!!.>D>4!串行O/J转换器 *$3D+----------------------------

!#!

Page 7: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!!!.>D>D!其他O/J转换器 *$35+----------------------------!!.>.!过程通道设计及干扰抑制 *$33+---------------------------!!!!.>.>$!过程通道设计 *$33+-----------------------------!!!!.>.>"!干扰与抑制 *$36+------------------------------!!习题. *$3:+--------------------------------------

第E章;传感与驱动 *$6#+--------------------------------!!5>$!常见传感器简介 *$6#+-------------------------------!!!!5>$>$!常见的开关量传感器 *$6#+--------------------------!!!!5>$>"!常用的模拟量传感器 *$6D+--------------------------!!5>"!信号变送 *$6.+----------------------------------!!!!5>">$!电桥 *$6.+---------------------------------!!!!5>">"!信号放大 *$65+-------------------------------!!!!5>">4!信号处理 *$66+-------------------------------!!!!5>">D!信号转换 *$:#+-------------------------------!!!!5>">.!过程%/M通道设计中的其他问题 *$:"+---------------------!!5>4!输出驱动 *$:4+----------------------------------!!!!5>4>$!常用的驱动集成电路 *$:4+--------------------------!!!!5>4>"!可控硅 *$:.+--------------------------------!!!!5>4>4!继电器 *$:3+--------------------------------!!!!5>4>D!晶体管 *$:6+--------------------------------!!5>D!常用的执行机构 *$::+-------------------------------!!习题5 *"#$+--------------------------------------

第F章;单片机应用系统设计 *"#"+----------------------------!!3>$!总体设计 *"#"+----------------------------------!!3>"!硬件设计 *"#4+----------------------------------!!!!3>">$!硬件原理设计 *"#4+-----------------------------!!!!3>">"!资源分配 *"#D+-------------------------------!!!!3>">4!线路板图绘制 *"#D+-----------------------------!!!!3>">D!可靠性设计 *"#3+------------------------------!!!!3>">.!保密性设计 *"$#+------------------------------!!!!3>">5!硬件线路板的焊接与测试 *"$$+------------------------!!3>4!软件设计 *"$$+----------------------------------!!!!3>4>$!系统监控程序设计 *"$"+---------------------------!!!!3>4>"!中断与子程序调用 *"$"+---------------------------!!!!3>4>4!软件抗干扰措施 *"$.+----------------------------!!!!3>4>D!程序测试 *"$.+-------------------------------!!3>D!单片机开发装置的使用与系统调试 *"$5+-----------------------!!!!3>D>$!单片机开发装置 *"$5+----------------------------!!!!3>D>"!系统联调 *"$5+-------------------------------!!3>.!程序固化与编程器的使用 *"$3+---------------------------!!3>5!产品验收与交付使用 *"$6+-----------------------------!!3>3!应用举例 *"$6+----------------------------------!!!!3>3>$!用户需求分析 *"$6+-----------------------------!!!!3>3>"!系统总体结构 *""#+-----------------------------

!$!

Page 8: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!!!3>3>4!硬件设计 *"".+-------------------------------!!!!3>3>D!软件设计 *"".+-------------------------------!!习题3 *"4#+--------------------------------------

第G章;常用单片机简介 *"4"+------------------------------!!6>$!%&’()*+,-:5/:6系列单片机 *"4"+--------------------------!!!!6>$>$!*+,-:5系列单片机的总体结构 *"4"+----------------------!!!!6>$>"!*+,-:5系列单片机的基本组成部分 *"44+--------------------!!!!6>$>4!*+,-:5系列单片机的指令系统 *"4D+----------------------!!!!6>$>D!*+,-:5系列单片机的片内接口 *"4.+----------------------!!!!6>$>.!*+,-:5系列单片机的主要产品 *"45+----------------------!!6>"!9%+系列单片机 *"43+--------------------------------!!!!6>">$!9%+系列单片机产品及特点 *"43+------------------------!!!!6>">"!典型9%+$5系列单片机内部结构 *"D"+---------------------!!6>4!*A’AFA)Q系列单片机 *"D4+------------------------------!!!!6>4>$!概述 *"D4+---------------------------------!!!!6>4>"!*56#./*$D56#.系列单片机 *"DD+-----------------------!!!!6>4>4!*56L+#.系列单片机 *"D.+--------------------------!!!!6>4>D!*56L+$$系列单片机 *"D.+--------------------------!!!!6>4>.!*+56L+$$的片内存储器 *"D6+-------------------------!!6>D!其他单片机 *".#+---------------------------------!!习题6 *".$+--------------------------------------!!附录J!*+,-.$指令表 *"."+-------------------------------!!附录1!本书芯片索引 *".3+-------------------------------

!&!

Page 9: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第$章!"#$%.$单片机应用系统

$>$!概述

$>$>$!单片机的产生#发展及应用

$>什么是单片机

什么是单片机%目前还没有一个确切的定义&普遍认为单片机是将 +9K%IJ*%IM*$定时器/计数器以及输入/输出*%/M+接口电路等计算机主要部件集成在一块芯片上%这样所组

成的芯片级微型计算机称为单片微型计算机*,?&E)(+;?<*?@FA@AB<G’(F+%简称为单片微机或

单片机&由于单片机的硬件结构与指令系统都是按工业控制要求设计的%常用于工业的检测$控制装置中%因而也称为微控制器**?@FA-+A&’FA))(F+或嵌入式控制器*PBR(SS(S-+A&’FA))(F+&

单片机按用途可分为通用型和专用型两大类&通常所说的和本书所介绍的单片机是指通

用型单片机&按内部数据通道的宽度%又可分为D位$6位$$5位及4"位单片机&

">单片机的发展历史

单片机的发展历史可划分为三个阶段)第一阶段*$:3D年 H$:35年+)单片机初级阶段&因工艺限制%单片机采用双片形式%而

且功能比较简单&例如仙童公司生产的T6单片机&第二阶段*$:35年H$:36年+)低性能单片机阶段&以 %&’()公司的 *+,-D6系列单片机

为代表&这种单片机片内集成有6位 +9K$并行 %/M口$6位定时器/计数器$IJ*及 IM*等&不足之处是无串行口%中断简单&

第三阶段*$:36年至今+)高性能单片机阶段&单片机以其优异的性能%低廉的价格%不断

渗透到社会生活的每个角落&单片机生产厂商如雨后春笋不断涌现%多系列$多型号$各种性

能组合的单片机层出不穷%不断满足不同应用场合的新要求&随着芯片制作工艺$技术水平的

不断提高和单片机需求量的不断加大%单片机的性能价格比不断攀升%呈现出一派欣欣向荣的

景象&单片机技术的开放性$生产商的竞争激烈性和广泛的市场需求等因素%无疑为单片机的

飞速发展提供了强大动力&因此%单片机应用开发成为当今电子工程技术人员急需掌握的技

术&

4>单片机的发展趋势

*$+微型化

芯片集成度的提高为微型化提供可能&早期单片机大量使用双列直插式封装%现在的封

装水平已大大提高&随着贴片工艺的出现%单片机也大量采用了各种符合贴片工艺的封装%大大减小芯片的体积%为嵌入式系统提供了可能&

!$!

Page 10: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*"+低功耗

现在新的单片机的功耗越来越小%特别是很多单片机都设置了多种工作方式%包括等待$暂停$睡眠$空闲$节电等工作方式&扩大电源电压范围以及在较低电压下仍然能工作是当今

单片机发展的目标之一&目前%一般单片机都可在4>4H.>.U的条件下工作%一些厂家甚至

生产出可以在">"H5U条件下工作的单片机&*4+高速化

早期*+,-.$典型时钟为$"*LV%目前西门子公司的+.##系列*与*+,-.$兼容+时钟频

率为45*LV’P*+公司的 P*36系列单片机时钟频率高达D#*LV’现在已有更快的4"位

$##*LV的单片机产品出现&*D+集成资源更多

单片机在内部已集成了越来越多的部件%这些部件包括一些常用的电路%例如%定时器$比较器$J/O转换器$O/J转换器$串行通信接口$WQ’@;SAE电路$N+O控制器等&有的单片机为

了构成控制网络或形成局部网%内部含有局部网络控制模块%甚至将网络协议固化在其内部&*.+性能更加优异

现在有的单片机已采用所谓的三核*8F-+AF(+结构%这是一种建立在系统级芯片*,XY’(BA&Q+;?<+概念上的结构&三个核为)微控制器和 O,9*O?E?’Q),?E&Q)9FA@(YY?&E+核$数据和程

序存储器核$外围专用集成电路 J,%+*J<<)?@Q’?A&,<(@?Z?@%&’(EFQ’(S+?F@G?’+&采用该结构的

单片机的最大特点在于把O,9和微控制器同时做在一个片上&虽然从结构上讲%O,9是单片

机的一种类型%其作用主要反映在高速计算和特殊处理上%如快速傅里叶变换等%这些单片机

的*+K**?@FA<FA@(YYAF+A&’FA)K&?’+都是4"位的%而O,9采用$5或4"位结构%工作频率一般

在5#*LV以上&*5+通信及网络功能加强

单片机的另外一个名称就是嵌入式微控制器%原因在于它可以嵌入到任何微型或小型仪

器或设备中&在某些单片机内部还含有局部网络控制模块%因此这类单片机十分容易构成网

络&特别是在控制系统较为复杂时%构成一个控制网络十分有用&目前%将单片机嵌入式系统

和%&’(F&(’连接起来已是一种趋势&*3+专用型单片机发展加快

专用型单片机具有最大程度简化的系统结构%资源利用率最高%大批量使用有可观的经济

效益&

D>单片机的应用领域

单片机是为了实现控制功能而设计的一种微型计算机&它的应用首先是控制功能%即在

于实现计算机控制&其实现手段采用嵌入方式%即嵌入到对象环境中作为一个智能化控制单

元&由于被控对象种类繁多%其应用也非常广泛%下面只介绍一些典型的应用领域和应用特

点&*$+工业控制领域

在过程控制$机电一体化等工业控制系统中%除使用了小型工控机之外%很多是以单片机

为核心的单机系统或多机网络系统&*"+智能仪表与智能传感器

这是单片机应用最广泛$形态最多的领域%各种类型的仪表及传感器引入单片机以替代传

!"!

Page 11: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

统的测量系统%不仅提高了自动化程度和精度%而且具有各种智能化的功能%如存储$数据处

理$查找$判断$联网等&*4+家用电器领域

目前国内外各种家用电器已普遍采用单片机取代传统的电路控制%如洗衣机$电冰箱$空调$微波炉$电视机$录像机$电风扇及视频音像等设备%甚至很多高级玩具中也使用了单片机&

*D+办公自动化领域

在现代办公室中%办公自动化设备多数采用了单片机%如计算机中的键盘$磁盘驱动器$打印机$绘图仪$复印机$传真机$电话机$考勤机等&

*.+其他方面的应用

单片机除了上述应用领域之外%还广泛地应用于商业流通领域$汽车电子及航空航天电子

等等&综上所述%单片机的应用领域非常广泛&同时%它的应用也从根本上改变了传统控制系统

设计思想和设计方法%取代以微控制技术来实现%这是一个全新的概念&随着单片机应用技术

的推广普及%微控制技术必将不断发展$完善&

$>$>"!单片机的主要厂商及产品

$>单片机主要厂商

$:35年单片机诞生以来%其产品在"#多年里得到了迅猛的发展%形成了多公司$多系列$多型号的局面&在国际上影响较大的公司及其产品如表$>$所示&

表$>$!主要单片机的厂商及其产品

公!!司 典型产品系列

%&’() *+,-D6$*+,-.$$*+,-:5系列

9;?)?<Y 与*+,系列兼容的.$系列

*A’AFA)Q *+56系列

J8*PN 与*+,系列兼容的.$系列

*?@FA@;?< 9%+$5+.[系列

\?)AE \6系列

!!除上述公司及其产品外%还有一些其他公司也生产各种类型的单片机%如),?(B(&Y$M]%$TQ?F@;?)S$*AY’(公司等等&

">单片机主要产品

*$+%&’()公司系列单片机

%&’()公司的系列单片机可分为 *+,-D6$*+,-.$$*+,-:5三个系列&%&’()的单片机每一

类芯片的IM*根据型号一般有片内掩膜 IM*$片内 P9IM*和外接 P9IM*三种方式%这是

%&’()公司的首创%现已成为单片机的统一规范&最近%&’()公司又推出了片内带P"9IM*型单

片机&片内掩膜IM*型单片机适合于已定型的产品%可以大批量生产’片内带P9IM*型$外接P9IM*型及片内带P"9IM*型单片机适合于研制新产品和生产产品样机&

*+,-D6系列单片机是$:35年推出的6位单片机%其典型产品为6#D6&*+,-.$系列单片

机是%&’()公司$:6#年推出的一个高性能的6位单片机&与D6系列相比%*+,-.$系列单片机

无论是在片内IJ*/IM*容量$%/M功能$种类和数量%还是在系统扩展能力方面均有很大加

!4!

Page 12: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

强%其主要产品性能如表$>"所示&*+,-.$的典型产品为6#.$&*+,-:5系列单片机是 %&’()公司$:64年推出的$5位单片机%其功能更加强大%主要产品性能如表$>4所示&

表$>"!"#$%.$系列单片机性能

型 号 程序存储器 IJ**1+ %/M口线 定时器*个C位+ 中断源 晶振**LV+

6#.$

6#.$JL/1L D]1IM* $"6 4" "C$5 . "H$"

63.$JL/1L D]1P9IM* $"6 4" "C$5 . "H$"

6#4$JL 无 $"6 4" "C$5 . "H$"

6#."

6#."JL 6]1IM* ".5 4" 4C$5 5 "H$"

63."JL 6]1P9IM* ".5 4" 4C$5 5 "H$"

6#4"JL 无 ".5 4" 4C$5 5 "H$"

6#+.$

6#+.$1L D]1IM* $"6 4" "C$5 . "H$"

63+.$1L D]1P9IM* $"6 4" "C$5 . "H$"

6#+4$1L 无 $"6 4" "C$5 . "H$"

6#+."6#+." 6]1IM* ".5 4" 4C$5 5 "H$"

6#+4" 无 ".5 4" 4C$5 5 "H$"

6#+.D63+.D $5]1IM* ".5 4" 4C$5 5 "H"#

6#+.D $5]1IM* ".5 4" 4C$5 5 "H"#

6#+.6 63+.6 4"]1IM* ".5 4" 4C$5 5 "H"#

表$>4!"#$%:5系列单片机性能表

型号 程序存储器 IJ**1+ %/M口线 定时器*个C位+ 中断源 晶振**LV+

6#:6 无 "4" 4" DC$5 6 $"

6#:D 无 "4" 4" DC$5 6 $"

6#:. 无 "4" 4" DC$5 6 $"

6#:5 无 "4" D6 DC$5 6 $"

6#:3 无 "4" D6 DC$5 6 $"

64:D 6]1IM* "4" 4" DC$5 6 $"

64:5 6]1IM* "4" 4" DC$5 6 $"

63:6 6]1P9IM* "4" 4" DC$5 6 $"

*"+9;?)?<Y公司单片机

9;?)?<Y公司生产与 *+,-.$兼容的6#+.$系列单片机%片内具有 %"+总线$J/O转换器$定时监视器$+I8控制器*M,O+等丰富的外围部件&其主要产品有 6#+.$$6#+."$6#+4$$6#+4"$6#+."6$6#+.."$6#+.5"$6#+3.$等%其中64+.."功能最强%64+3.$体积最小&

9;?)?<Y单片机独特的创造是具有%"+总线%这是一种集成电路和集成电路之间的串行通

信总线&可以通过总线对系统进行扩展%使单片机系统结构更简单%体积更小&%"+总线也可

以用于多机通信&*4+*A’AFA)Q公司单片机

*A’AFA)Q公司的单片机从应用角度可以分成两类)高性能的通用型单片机和面向家用消

费领域的专用型单片机&!D!

Page 13: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

通用 型 单 片 机 具 有 代 表 性 的 是 *+56L+$$系 列%有 几 十 种 型 号&其 典 型 产 品 为

*+56L+$$J6%具有准$5位的+9K$6]1IM*$".51IJ*$.$"1P"9IM*$$5位:功能定时

器$46位%/M口线$"个串行口$6位脉冲累加器$6路6位J/O转换器$WQ’@;SAE$$3个中断向

量等功能%可单片工作%也可以扩展方式工作&除上述系列之外%还有 *+56L+$5系列%典型

产品为*+56L+$5\$%具有高速$5位 +9K$"#根外部地址总线$$5位数据总线$$]1IJ*$:功能$5位定时器$"路9W*$串行通信口$高速6路$#位J/O转换器%D5根%/M口线$"##多

个中断矢量$WQ’@;SAE等功能&*56L+$5系列单片机采用模块化设计%由$5位 +9K模块$内部总线模块$系统集成模块$各种 %/M模块$各种存储器模块等组成&改变存储器模块或 %/M模块可形成不同的*+56L+$5系列单片机&

专用型单片机性能价格比高%应用时一般采用"单片#形式%原则上一块单片机就是整个

控制系统&这类单片机无法外接存储器%如*+56L+#./*+56L+#D系列&*D+J8*PN.$系列单片机

J8*PN公司生产的+*M,型.$系列单片机%具有*+,-.$内核%用T)QY;IM*代替IM*作为程序存储器%具有价格低$编程方便等优点&例如6:+.$就是拥有D]1T)QY;IM*的单

片机&J8*PN公司生产的单片机主要有6:+.$$6:T.$$6:+."$6:NU."$6:+..等&*.+*?@FA@;?<公司的单片机

*?@FA@;?<公司推出了9%+$5+.[系列的单片机&它的典型产品9%+$5+.3具有6位+9K$"]1C$"位 P"9IM*程序存储器$6#1C6IJ*$$个6位定时器/计数器$"$根%/M口线等硬

件资源&指令系统采用I%,+指令%拥有44条基本指令%指令长度为$"位%工作速度较高&主

要产品有9%+$5+.D$9%+$5+..$9%+$5+.5等&*5+\?)AE公司的单片机

\?)AE公司推出的\6系列单片机是一种中档6位单片机&它的典型产品为\65#$%具有6位+9K$"]1IM*$$"D1IJ*$"个6位定时器/计数器$4"位 %/M口线$$个异步串行通信

口$5个中断向量等&主要产品型号有 \65##/$#$\65#$/$$$\65+#5$\65+"$$\65+D#$\65+:4等&

$>$>4!"#$%.$系列单片机的分类

*+,-.$系列单片机是%&’()公司开发的非常成功的产品%具有性能价格比高$稳定$可靠$高效等特点&自从开放技术以来%不断有其他公司生产各种与*+,-.$兼容或者具有 *+,-.$内核的单片机&*+,-.$已成为当今6位单片机中具有事实上的"标准#意味的单片机%应用

很广泛&本书以6#.$为核心%讲述*+,-.$系列单片机&*+,-.$系列单片机采用模块化设计%各种型号的单片机都是在6#.$*基本型+的基础上

通过增$减部件的方式获得的&6#.$是片内 IM*型单片机%内部具有D]1掩膜 IM*&在此

基础上将掩膜IM*模块换成 P9IM*模块衍生出了63.$*P9IM*型+%去除掩膜 IM*模块

衍生出了 6#4$*无 IM*型+&上面三种类型称为 *+,-.$系列中的 .$子系列&在 6#.$$63.$$6#4$的基础上%增加 $"61IJ*和一个定时器/计数器及其引出的中断源衍生出的

6#."$63."$6#4"%称为."子系列&*+,-.$系列单片机有以下两种类型)

$>基本型

基本 型 主 要 有 6#.$$6#4$$6#4$JL$6#.$JL$63.$JL$63.$1L$6#+4$1L$6#+.$1L$!.!

Page 14: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

63+.$1L*二级程序存储器保密位%可防止非法拷贝程序+等&后缀有 JL或 1L型单片机采

用L*M,工艺制造%中间有一个"+#字母的单片机是采用+*M,工艺制造的%具有低功耗的特

点%支持节能模式&

">增强型

*$+增大内部存储器型

该型产品将内部的程序存储器IM*和数据存储器IJ*增加一倍&如6#4"JL$6#."JL$63."1L等%内部拥有6]1IM*和".51IJ*%属于."子系列&

*"+可编程计数阵列*9+J+型

型号中含有字母"T#的系列产品%如6#+.$TJ$64+.$TJ$63+.$TJ$64+.$T1$63+.$T1$64+.$T+$63+.$T+等%均是采用 +L*M,工艺制造%具有比较/捕捉模块及增强的多机通信接

口&*4+J/O型

该型产品如6#+.$_1$64+.$_1$63+.$_1等具有下列新功能)6路6位 J/O转换模块%".51内部IJ*$"个9+J监视定时器%增加了J/O和串行口中断%中断源达3个%具有振荡器

失效检测功能&

$>"!"#$%.$系列单片机内部结构

自"#世纪6#年代初%&’()公司推出*+,-.$系列单片机以来%该系列的产品已经发展到

了几十种型号%6#.$是最早$最典型的产品&%&’()公司对该系列单片机采用技术开放的策略%使很多公司相继推出了以6#.$为基核的$具有优异性能的$各具特色的单片机&

$>">$!基本组成与结构

*+,-.$系列单片机泛指以6#.$为内核的*+,-.$单片机%主要产品有6#.$$63.$$6#4$&6#.$是IM*型单片机%内部有D]1工厂掩膜编程的 IM*程序存储器’63.$是P9IM*型单

片机%内部有D]1用户可编程的程序存储器’6#4$是无IM*程序存储器的单片机%它必须外

接P9IM*程序存储器&除此之外%6#.$$63.$和6#4$的内部结构是完全相同的%其基本组成

结构如图$>$所示&它们都具有以下硬件资源)! 面向控制的6位+9K’! $"61内部IJ*数据存储器’! 4"位双向输入/输出线’! $个全双工的异步串行口’! "个$5位定时器/计数器’! .个中断源%"个中断优先级’! 时钟发生器’! 可寻址5D]1程序存储器和5D]1外部数据存储器&*+,-.$系统结构框图如图$>"所示&

$>">"!外部引脚

6#.$采用双列直插式D#引脚封装%图$>4*Q+为引脚图%图$>4*R+为逻辑符号图%各引脚

!5!

Page 15: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图$>$!6#.$系列单片机的基本组成结构

图$>"!*+,-.$系统结构框图

功能如下&

!3!

Page 16: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$>电源和晶振

!++)工作电源输入%运行和程序检验时接‘.U’!,,)地’[8JN$)输入到振荡器的反相放大器’[8JN")反相放大器的输出%输入到内部时钟发生器&

">%/M口D个!共DC6a4"根"

9#)6位漏极开路的双向%/M口’9$$9"$94)6位准双向的%/M口&

4>控制线!共D根"

*$+输入

I,8)复位输入*I(Y(’+%高电平有效&在振荡器起振后%I,8引脚上维持两个机器周期以

上的高电平%使单片机可靠复位%I,8引脚上电平变低%复位结束&PJ/!99*Pb’(F&Q)J@@(YYP&QR)(+)片外程序存储器访问允许输入信号%低电平有效&第二

功能为在编程时%其上施加编程电压*仅对P9IM*型单片机有效+&*"+输入/输出

JNP/9IM_*JSSF(YYNQ’@;P&QR)(+)地址锁存允许输出信号&第二功能为在编程时输入

编程脉冲&*4+输出

9,P2*9FAEFQB,’AF(P&QR)(+)片外程序存储器选通信号输出%低电平有效&

图$>4!*+,-.$引脚及逻辑符号图

$>4!中央处理器

*+,-.$内部有一个6位的面向控制$功能强大的微处理器%其主要功能是运算和控制整

!6!

Page 17: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

个系统协调工作&它由运算器和控制器两部分组成&

$>4>$!运算器

运算器主要实现对操作数的算术运算$逻辑运算和位操作&主要包括算术逻辑运算部件

*JNK+$累加器J$1寄存器$暂存器$程序状态字9,W$十进制调整电路以及布尔处理器等&

$>算术与逻辑部件JNK!JF?’;B(’?@Q)NAE?@K&?’"

算术逻辑单元JNK是计算机中必不可少的数据处理单元之一%主要对数据进行算术逻辑

运算&从结构上看%该单元实质是一个全加器%它的运算结果将对程序状态字9,W产生影响&该单元主要完成以下操作)

! 加$减$乘$除运算’! 增量*加$+减量*减$+运算’! 十进制数调整’! 位操作中的置位$复位和取反操作’! 与$或$异或等运算操作’! 数据传送操作&

">累加器J

累加器J是+9K中最繁忙$使用频度最高的一个特殊功能寄存器%简称为J++或J寄存

器%其作用为)! 累加器J作为JNK的输入数据源之一%也是JNK的输出’! +9K中的数据传送大多数都通过累加器%累加器J是一个非常重要的数据中转站&

4>1寄存器

1寄存器在乘法和除法指令中作为JNK输入之一&在乘法中%JNK的两个输入分别是J寄存器和1寄存器%乘积在J1寄存器对中%J存低

6位%1存高6位’在除法中%被除数取自J%除数取自1%商在J中%余数在1中&其他情况下%1寄存器可以作为一个普通的寄存器使用&

D>程序状态字

程序状态字9,W*9FAEFQB,’Q’GYWAFSY+是一个6位的专用寄存器%用于存储程序运行中

的各种状态信息&它被逐位定义%可以位寻址%其格式如下)O3 O5 O. OD O4 O" O$ O#

9,W +c J+ T# I,$ I,# MU ( 9

*$+9*9QF?’XZ)QE+)奇偶标志位

每个机器周期都由硬件来复位&该位用以表示累加器中为$的位数是奇数还是偶数&若

累加器J中为$的位数是奇数%则9标志位置$%否则9标志位清#&在串行通信中%此标志位具有重要定义&用来传送奇偶校验位%以检验传输数据的可靠

性%应用时将9置入串行帧中的奇偶校验位即可&

!:!

Page 18: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*"+MU*Md(FZ)A=Z)QE+)溢出标志

进行算术运算时%如果产生溢出%则由硬件将MU置$%可以理解为溢出为真%表示运算结

果超出了目的寄存器J所能表示的有符号数范围*7$"6H‘$"3+%否则MU清#%可以理解为

溢出为假&进行加减运算时%常采用双进位的状态标志来判断%双进位标志是指 +<和 +Y&以6位数

为例%带符号数的最高数值位15向符号位Z*13+的进位用+<表示%符号位Z向进位 +的进位

用+Y表示&

进位+!

3 5 . D 4 " $ #Z

!!若+<"+Ya#*"表示逻辑异或操作+%表示无溢出%MUa#*表示+<$+Y同时有进位或同时

无进位+’若+<"+Ya$%表示有溢出%MUa$*表示+<%+Y只有一个有进位+&进行乘法运算时%当 J$1寄存器中存放的两个乘数的积超过"..时%MU置$%否则置#&

因此%若MUa#%只需要从J寄存器中取积’若MUa$%则需要从1$J寄存器对中取积&进行除法运算时%若除数为#%MU置$%否则MU清#&*4+I,$$I,#*WAF?&EI(E?Y’(F1Q& Q&SJSSF(YY+)工作寄存器区选择

通过对I,$$I,#置位$复位%选择当前工作寄存器区&*D+T#*T)QE#%JdQ?)QR)(’A’;(GY(FZAFE(&(FQ)<GF<AY(Y+)用户标志位

由用户置位或复位%可以作为一个用户自定义的状态标志&*.+J+*JGb?)?QFX+QFFXZ)QE%TAF1+OM<(FQ’?A&Y+)辅助进位标志

进行加法或减法运算时%若低D位向高D位有进位或借位时%J+将被硬件置$%否则置#&J+位常用于十进制调整指令和压缩1+O运算等&

*5++c*+QFFXZ)QE+)进位标志

进行算术运算时%由硬件置位或复位%表示运算过程中%最高位是否有进位或借位的状态&进行位操作时%+c被认为是位累加器%它的作用相当于+9K中的累加器J&

$注意%!9,W中的D个标志位9$MU$J+和+c是由硬件根据指令的执行情况自动置位或复位的%

一般用户不要轻易修改&

$>4>"!控制器

控制器是控制计算机系统各种操作的部件%它包括时钟发生器$定时控制逻辑$复位电路$指令寄存器 %I$指令译码器 %O$程序计数器 9+$程序地址寄存器$数据指针 O98I$堆栈指针

,9等&其功能是控制指令的读取$译码和执行%对指令的执行过程进行定时控制%并根据执行

结果决定其后的操作&

$>程序计数器9+

程序计数器9+*9FAEFQB+AG&’(F+是一个独立的计数寄存器%存放下一条将要从程序存储

器中取出指令的地址&其基本工作过程如下)在读取指令时%程序计数器9+将其保存的内容

作为所取指令的地址输出给程序存储器%然后程序存储器按此地址将$字节指令送出%同时程

序计数器9+自身自动加$%指向下一条将要取出的指令或指令后续字节的地址&程序计数器 9+的位数决定了 +9K对程序存储器的直接寻址范围&*+,-.$系列单片机

!#$!

Page 19: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的程序计数器9+为$5位%可直接寻址5D]1*"$5+&程序计数器9+的工作不完全是顺序的%因为在指令中%存在转移$子程序调用$中断调用返回等工作%程序计数器9+就不再是自动加

"$#了&程序计数器9+的变化将在讲解指令系统时予以介绍&当使用外接程序存储器时%需要 +9K提供访问程序存储器地址%该地址仍由程序计数器

9+提供%通过9#$9"端口输出%程序计数器9+的输出与9#$9"之间的关系如图$>D所示&

图$>D!程序计数器9+输出与9#$9"口之间的关系

">数据指针O98I

数据指针是一个$5位专用寄存器%主要作用是在执行片外数据存储器或 %/M端口访问

时%确定访问地址%所以称为数据存储器地址指针%简称数据指针&访问片外数据存储器或%/M端口时%指令为)!!*MU[!J%eO98I!!!!’存储器或%/M数据# J!!*MU[!eO98I%J ’J数据 # 存储器或%/M

此时%O98I的内容即为片外数据存储器或 %/M端口的地址%地址通过 9#$9"端口输出%O98I的输出与9#$9"之间的关系如图$>.所示&

图$>.!O98I的输出与9#$9"之间关系

除上述功能之外%O98I寄存器也可用做访问程序存储器时的基址寄存器*查表$转移+%还可作为一个通用的$5位寄存器或两个6位寄存器使用&

$注意%!程序计数器9+与数据指针O98I之间既有相似之处又有区别)*$+两者均与地址有关%都是$5位寄存器&其中%9+与程序存储器的地址有关’O98I与

数据存储器的地址有关&*"+作地址寄存器使用时%9+与O98I都是通过9#和9"口输出的%但是相关联的控制型

号不同%9+的输出与JNP及9,P2有关%O98I的输出则与JNP$IO$WI有关&!$$!

Page 20: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*4+9+只能作为$5位寄存器对待%能自动加"$#%故又称为计数器&9+是不可访问的%它的变化决定了程序的流向&O98I是用户惟一可直接访问的$5位寄存器%可作为一个$5位

或者两个单独的6位寄存器使用*O9L和O9N+&

4>指令寄存器%I#指令译码器%O及控制逻辑

指令寄存器%I是用来存放操作码的专用寄存器&指令译码器 %O译码识别 %I中指令的

操作类型&控制逻辑从取指令开始%直至指令执行控制各部件协调工作&指令的执行分为三个阶段)取指令$分析指令和执行指令%具体步骤为)首先%进行程序存

图$>5!指令寄存$译码控制逻辑图

储器读操作%也就是根据程序计数器 9+给出

的地址从程序存储器中取出指令%送指令寄存

器%I%%I输出到指令译码器 %O’然后%由指令

译码器对该指令进行译码&控制逻辑产生一

系列控制信号%送到单片机的各部件中%控制

执行这一指令%如图$>5所示&整个程序执行过程就是在控制器控制下

将指令从程序存储器中逐条取出%进行译码%然后由定时控制逻辑电路发送相应的定时控

制信号%控制指令的执行%执行的结果影响程

序状态标志寄存器9,W的内容&

$>D!"#$%.$存储器与存储空间

*+,-.$系列单片机的存储器组织采用的是哈佛*LQFdQFS+结构%即将程序存储器和数据

存储器截然分开%程序存储器和数据存储器具有各自独立的寻址方式$寻址空间和控制系统&这种结构对于单片机"面向控制#的实际应用极为方便&*+,-.$的存储器结构如图$>3所示

*带$者为."子系列单片机拥有%.$系列无+&

图$>3!*+,-.$的存储器结构在物理结构上%*+,-.$系列单片机有D个存储器空间)! 程序存储器)片内程序存储器和片外程序存储器’! 数据存储器)片内数据存储器和片外数据存储器及%/M地址&

!"$!

Page 21: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

在逻辑上%*+,-.$系列单片机有4个存储器地址空间)! 片内$片外统一的5D]1程序存储器空间’! 片内".51*或46D1+数据存储器空间’! 片外5D]1的数据存储器及%/M地址空间&$注意%!在访问这4个不同的逻辑存储空间时%应使用不同形式的指令&

$>D>$!程序存储器

*+,-.$的程序存储器*9FAEFQB*(BAFX+是用来存放经过调试正确的应用程序和表格之

类的固定数据的&空间为5D]1*"$5+%其地址指针为$5位的程序计数器 9+%$5位的地址总

线由9#和9"口提供%构成存储体时%要求程序存储器的地址空间是连续$统一的&

$>程序存储器空间访问控制

整个程序存储器可以分为片内和片外两部分&+9K访问片内还是访问片外程序存储器

由PJ引脚输入的电平来确定)*$+若PJ引脚接高电平%则整个系统上电复位后%程序从片内程序存储地址为####L单

元开始取指令’当9+值超出片内 IM*容量时%会自动转向片外程序存储器空间取指令&例

如%63.$含有D]1P9IM*程序存储器%当9+值在####LH#TTTL之间时%+9K从内部的程

序存储器取指令’当9+值大于#TTTL时%则从外部程序存储器取指令&*"+若PJ引脚接低电平时%则系统在上电复位后%不论片内是否拥有程序存储器IM*%都

从片外程序存储器IM*的####L单元开始取指令&对于6#4$这种片内无程序存储器 IM*的单片机%PJ只能接低电平%强制从片外程序存储器中取指令执行&

">片内程序存储器类型

片内程序存储器为只读存储器 IM*%类型有)掩膜 IM*$一次性编程 IM*和多次编程

IM**包括P9IM*$P"9IM*及T)QY;IM*等+&6#.$为掩膜IM*型%63.$为 P9IM*型%6:.$为 T)QY;IM*型%而6#4$是无 IM*型的

单片机%使用时必须由片外扩展程序存储器&

$>D>"!内部&’"数据存储器

数据存储器*OQ’Q*(BAFX+由随机存取存储器IJ*构成%用来存放运算中的数据$中间结

!!!表$>D!"#$%.$内部&’"结构

数据缓冲器区*4#LH3TL+位寻址区*"#LH"TL+

工作寄存器区4*I#HI3+*$6LH$TL+工作寄存器区"*I#HI3+*$#LH$3L+工作寄存器区$*I#HI3+*#6LH#TL+工作寄存器区#*I#HI3+*##LH#3L+

果及最终结果&*+,-.$单片机内部IJ*的空间为".51%但

实际提供给用户使用的 IJ*容量随型号不同而

不同%有的为$"61*.$系列+%有的为".51*."系列+&内部 IJ*中不同的地址区域从功能和

用途来分可以分为如表$>D所示的三个区域)工

作寄存器区$位寻址区$数据缓冲器和堆栈区&!

$>工作寄存器区

!4$!

Page 22: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*+,-.$内部IJ*中地址从##LH$TL的4"个字节为四个工作寄存器区%每个区有6个

工作寄存器I#HI3&寄存器和IJ*单元地址对应关系如表$>.所示&表$>.!寄存器和&’"地址映射表

#区 $区 "区 4区

地址 寄存器 地址 寄存器 地址 寄存器 地址 寄存器

##L I# #6L I# $#L I# $6L I#

#$L I$ #:L I$ $$L I$ $:L I$

#"L I" #JL I" $"L I" $JL I"

#4L I4 #1L I4 $4L I4 $1L I4

#DL ID #+L ID $DL ID $+L ID

#.L I. #OL I. $.L I. $OL P.

#5L I5 #PL I5 $5L I5 $PL I5

#3L I3 #TL I3 $3L I3 $TL I3

!!任一时刻只有一个区的6个工作寄存器工作%该区称为当前工作区&修改 I#HI3寄存

器时%当前工作区对应单元中的内容也同时被修改*即 I#HI3同时也是符号地址+&但应注

意I#对应的内部IJ*地址单元可以是##L$#6L$$#L或$6L中的一个%具体是哪一个地址

单元%由程序状态字中的两个状态标志位指定&+9K当前使用的工作寄存器区是由程序状态字9,W的第三位和第四位确定&9,W中这

两位状态和当前工作区对应关系如表$>5所示&+9K通过修改 9,W中的 I,$$I,#的状态%就能够选择一个工作寄存器区&如表中%当 I,$和 I,#都为#时%选择第#区%I#的地址为

!!!表$>5!工作寄存器区选择

9,W>D

*I,$+

9,W>4

*I,#+当前使用的工作

寄存器区*I#HI3+

# # #区*##LH#3L+

# $ $区*#6LH#TL+

$ # "区*$#LH$3L+

$ $ 4区*$6LH$TL+

##L’当 I,$和 I,#分别为 #和 $时%选择第 $区%I#的地址为#6L&由此可见%只要修改 I,$$I,#就可选择不同的工作区%可以使 I#HI3所

对应的内部IJ*单元地址发生变化%从而保护一

些比较重要的数据%提高了 +9K的工作效率和响

应中断的速度&在实际应用系统中%如果不需要

使用全部的四个工作寄存器%那么多余的工作区

可以作为一般的数据缓冲器使用&

">位寻址区

内部IJ*中地址为"#LH"TL的单元为位寻址区域%这$5个字节单元中的每一位*$5C6位+都另有一个位地址&它们占用的位地址空间为##LH3TL%每一位都可以视为一个软件

触发器%用于存放各种程序标志和位控制变量&与工作寄存器区类似%位寻址区的这$5个字

节单元也可以视做一般的数据缓冲器使用&由此可见%这$5个字节既可以进行字节寻址%也可以采用位寻址&字节地址与位地址之间的关系如表$>3所示&$5个字节的可位寻址的单元加上可位寻址的特殊功能寄存器构成了单片机的布尔*位+

处理器的数据存储空间&在这一存储空间中所有位都可以直接位寻址&表$>3!&’"位寻址区地址映像

!D$!

Page 23: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

字节

地址

位!地!址

O3 O5 O. OD O4 O" O$ O#

"TL 3TL 3PL 3OL 3+L 31L 3JL 3:L 36L

"PL 33L 35L 3.L 3DL 34L 3"L 3$L 3#L

"OL 5TL 5PL 5OL 5+L 51L 5JL 5:L 56L

"+L 53L 55L 5.L 5DL 54L 5"L 5$L 5#L

"1L .TL .PL .OL .+L .1L .JL .:L .6L

"JL .3L .5L ..L .DL .4L ."L .$L .#L

":L DTL DPL DOL D+L D1L DJL D:L D6L

"6L D3L D5L D.L DDL D4L D"L D$L D#L

"3L 4TL 4PL 4OL 4+L 41L 4JL 4:L 46L

"5L 43L 45L 4.L 4DL 44L 4"L 4$L 4#L

".L "TL "PL "OL "+L "1L "JL ":L "6L

"DL "3L "5L ".L "DL "4L ""L "$L "#L

"4L $TL $PL $OL $+L $1L $JL $:L $6L

""L $3L $5L $.L $DL $4L $"L $$L $#L

"$L #TL #PL #OL #+L #1L #JL #:L #6L

"#L #3L #5L #.L #DL #4L #"L #$L ##L

4>数据缓冲器区

片内数据区地址从4#LH3TL%共有6#个字节单元%是单片机内部的数据缓冲器%用于存

放用户数据和各种字节标志%可以采用直接或间接寻址方式访问&数据缓冲区中的6#个字节

中有一部分给堆栈使用&对于."子系列的单片机%还有高$"61的数据 IJ*区%地址为6#LH#TTL%这一区域只

能采用间接寻址的方式访问&寻址方式的有关内容将在下一章介绍&

D>堆栈及堆栈指针

堆栈是一种后进先出*N%TM+的线性表%使用单片机内部 IJ*单元存储一些需要回避的

数值数据或地址数据&堆栈好似堆放货物的仓库一样%存取数据时采用"后进先出#*即"先进

后出#+的原则&堆栈指针,9*,’Q@ 9A?&’(F+是用来存放当前堆栈栈顶指向的存储单元地址的

一个6位特殊功能寄存器&堆栈只有两种操作)入栈和出栈&不论数据是入栈还是出栈%都是对栈顶单元*,9指向的

单元+进行操作的&堆栈是向上生成的%入栈时 ,9内容是增加的%出栈时 ,9的内容是减少

的&堆栈区域的大小可用软件对,9重新定义初值来改变%但堆栈深度以不超过片内IJ*空

!.$!

Page 24: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

间为限&系统复位后%,9的值为#3L%若不重新定义%则以#3L单元为栈底%入栈的内容从地

址为#6L单元开始存放&堆栈主要是为子程序调用和中断操作而设立的%常用的功能有两个)保护断点和保护现

场&在单片机系统中%既有与子程序调用和中断调用相伴随的自动入栈和出栈%又有对堆栈的

入栈和出栈指令*9K,L和9M9+&此外%堆栈还具有传递参数等功能&

.>特殊功能寄存器,TI区

*+,-.$内部的%/M口寄存器及定时器$串行口$中断等各种控制寄存器和状态寄存器都

称为特殊功能寄存器,TI*,<(@?Q)TG&@’?A&I(E?Y’(F+%它们离散地分布在6#LH#TTL的特殊

功能寄存器地址空间内&这是*+,-.$系列单片机内部最具特色的部分%不同型号的单片机

功能不同%实际存在的特殊功能寄存器数量差别较大&现在所有的 *+,-.$系列单片机功能

的增加和扩展几乎都是通过增加特殊功能寄存器来实现的&.$子系列单片机中共定义了"$个特殊功能寄存器%其名称和字节地址如表$>6所示&

在."子系列中除了上述定义的"$个特殊功能寄存器之外%还增加了.个特殊功能寄存器*表

$>6中加$的部分+%共计"5个%除此之外%对其他地址访问无效&表$>6!特殊功能寄存器!$(&"名称和地址

序号 标识符 名!!称 字节地址 位地址

$ 9# 9#口 6#L 6#LH63L

" ,9 堆栈指针 6$L (

4 O9N 数据指针低6位 6"L (

D O9L 数据指针高6位 64L (

. 9+M2 电源控制 63L (

5 8+M2 定时器/计数器控制 66L 66LH6TL

3 8*MO 定时器/计数器方式控制 6:L (

6 8N# 定时器/计数器#低6位 6JL (

: 8N$ 定时器/计数器$低6位 61L (

$# 8L# 定时器/计数器#高6位 6+L (

$$ 8L$ 定时器/计数器$高6位 6OL (

$" 9$ 9$口 :#L :#LH:3L

$4 ,+M2 串行口控制 :6L :6LH:TL

$D ,1KT 串行口数据缓冲器 ::L (

$. 9" 9"口 #J#L #J#LH#J3L

$5 %P 中断允许控制 #J6L #J6LH#JTL

!5$!

Page 25: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

序号 标识符 名!!称 字节地址 位地址

$3 94 94口 #1#L #1#LH#13L

$6 %9 中断优先级控制 #16L #16LH#1TL

$: 9,W 程序状态字 #O#L #O#LH#OTL

"# J++ 累加器 #P#L #P#LH#PTL

"$ 1 1寄存器 #T#L #T#LH#TTL

"" 8"+M2$ 定时器/计数器"控制 #+6L #+6LH#+TL

"4 I+J9"N$ 定时器/计数器"自动装载低6位 #+JL (

"D I+J9"L$ 定时器/计数器"自动装载高6位 #+1L (

". 8N"$ 定时器/计数器"低6位 #++L (

"5 8L"$ 定时器/计数器"高6位 #+OL (

!!注)高位对应高地址&

从表$>6中可以看出特殊功能寄存器地址空间中有很多单元是空的%在$"61空间中只

用到"5个%其他单元是为*+,-.$的新型单片机预留的%一些新型单片机因内部功能部件的

增加需要而增加了不少特殊功能寄存器&为了使软$硬件与新型单片机兼容%用户程序不要对

空着的单元进行操作&在表$>6中%字节地址的低位为#L或6L的单元%也即地址为6的倍数的单元是可以位

寻址的%它和前述的内部IJ*中字节地址为"#LH"TL的$5个单元%共同构成了 *+,-.$的

位存储器&表$>:中列出了特殊功能寄存器中可位寻址单元的位地址映像&这些位可以采用

位直接寻址方式访问&有些位还有自己的特殊名称%这些位可以采用名称来访问%即采用符号

地址的方式访问%但应注意9+M2$8*MO中的各位虽然有名称%由于字节地址为63L$6:L%故不能位寻址&

*+,-.$内的布尔处理器%能够对位地址空间中的位存储器直接寻址&对它们执行置$$清#$取反$测试等操作&布尔处理器的这种功能提供了把逻辑表达式*组合逻辑+直接变为程

序的简单明了的方法%不需要过多的数据传送$字节屏蔽和测试分支%就能实现复杂的组合逻

辑功能&表$>:!特殊功能寄存器位地址映像

,TI 位!地!址

名称 字节地址 O3 O5 O. OD O4 O" O$ O#

1 #T#L #T3L #T5L #T.L #TDL #T4L #T"L #T$L #T#L

J++ #P#L #P3L #P5L #P.L #PDL #P4L #P"L #P$L #P#L

9,W #O#L+c J+ T# I,$ I,# MU ( 9

#O3L #O5L #O.L #ODL #O4L #O"L #O$L #O#L

8"+M2 #+6L8T" P[T" I+N] 8+N] P[P2" 8I" +/8" +9/IN"

#+TL #+PL #+OL #++L #+1L #+JL #+:L #+6L

%9 #16L( ( 98" 9, 98$ 9[$ 98# 9[#

#1TL #1PL #1OL #1+L #11L #1JL #1:L #16L

94 #1#L #13L #15L #1.L #1DL #14L #1"L #1$L #1#L

!3$!

Page 26: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

,TI 位!地!址

名称 字节地址 O3 O5 O. OD O4 O" O$ O#

%P #J6LPJ ( P8" P, P8$ P[$ P8# P[#

#JTL #JPL #JOL #J+L #J1L #JJL #J:L #J6

9" #J#L #J3L #J5L #J.L #JDL #J4L #J"L #J$L #J#L

,+M2 :6L,*# ,*$ ,*" IP2 816 I16 8% I%

:TL :PL :OL :+L :1L :JL ::L :6L

9$ :#L :3L :5L :.L :DL :4L :"L :$L :#L

8+M2 66L8T$ 8I$ 8T# 8I# %P$ %8$ %P# %8#

6TL 6PL 6OL 6+L 61L 6JL 6:L 66L

9# 6#L 63L 65L 6.L 6DL 64L 6"L 6$L 6#L

$>D>4!片外数据存储器

片外数据存储器是指在+9K外部用来存放数据的区域%由于位于+9K片外%所以使用前

必须通过扩展电路将存储器与+9K相连&访问这一存储区域时%由 9#$9"口提供$5位的地

址%所以最大的直接寻址范围为5D]1&在访问该存储器空间时%只能采用寄存器间接寻址的

方式%间址寄存器使用寄存器I$$I#或数据指针寄存器O98I&当I$或I#作为间址寄存器使用时%9"端口数据锁存器内容不变%9#口将 I$或 I#的

内容作为地址输出%因此最大的寻址范围为".5]1&当使用 O98I作为间址寄存器时%由于

O98I是$5位的寄存器%所以最大寻址范围为5D]1&

$>.!并行接口

*+,-.$单片机有$个6位双向并行%/M口9#和4个6位准双向并行%/M口9$H94&每

个端口既可作为6位并行口使用%又可独立地作为$位双向 %/M口线使用&每一位端口都由

口锁存器$输出锁存器和输入缓冲器组成&图$>6给出了9#$9$$9"和94口6位中的$位的

内部结构图&

$>.>$!)$口

9$口为准双向 %/M口%它的每一位可以分别定义为输入线或输出线&用户可以把 9$口

的一些位作为输出线使用%另外一些位作为输入线使用&输出时%将"$#写入9$口的某一位锁存器%则对应连接在f上的场效应管截止%该位的输

出由内部的上拉电阻将引脚拉成高电平%输出"$#&将"##写入锁存器%则对应连接在 f上的

场效应管导通%该位的引脚输出低电平%即输出"##&输入时%口锁存器必须置"$#%使输出场效应管截止%这时该位引脚由内部上拉电阻拉成

高电平%也可以由外部电路拉成低电平&此时%引脚的状态由外接的输出设备的输出状态决

定&+9K读9$引脚的状态时%实际就是读外部输出设备的输出信息&9$口作为输入线时%可以被任何88N电路或*M,电路驱动&由于内部有上拉电阻%也可以被集电极开路或漏极开路

!6$!

Page 27: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的电路驱动&

图$>6!%/M口结构示意图

$>.>"!)4口

94口为准双向多功能%/M口%可以分别定义为第一功能输入/输出线或第二功能输入/输出线&94口锁存器f端接与非门后驱动输出场效应管%与非门另一个控制线为第二功能输出

线&94口的引脚状态通过输入缓冲器送入内部总线或者第二功能输入线上&!!!表$>$#!)4口的第二功能定义

引 脚 第二功能

94># I[O串行口输入线

94>$ 8[O串行口输出线

94>" %28#外部中断#输入线

94>4 %28$外部中断$输入线

94>D 8#定时器/计数器#外部输入线

94>. 8$定时器/计数器$外部输入线

94>5 WI外部数据存储器写脉冲输出线

94>3 IO外部数据存储器读脉冲输出线

当94口定义为第一功能输入/输出线时%第

二功能输出线总是高电平&此引脚输出电平取决

于口锁存器的状态%当输出"$#时%写入口锁存器

的数据从 f端输出%使输出场效应管截止%引脚

由上拉电路拉成高电平’当输出"##时%写入口锁

存器的数据从 f端输出%使输入场效应管导通%引脚输出低电平&同样%94口的某一位作为输入

线时%该位口锁存器应保持"$#%使输出场效应管

截止%引脚状态由外部输入电平所确定&当94口定义为第二功能输入/输出线时%该

位的口锁存器必须保持"$#%输出场效应管的状

态由第二功能输出确定&94口的第二功能定义如表$>$#所示&

$>.>4!)"口

9"口为准双向%/M口%有两种功能%对于内部拥有程序存储器%无须扩展外部 IM*且无

外部IJ*的应用场合*无高6位地址需求+%9"口可作为输入/输出口使用%直接与外部设备

!:$!

Page 28: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

相连&9"口也可用于系统扩展的地址总线口%输出地址总线的高6位J6HJ$.&对于内部没

有程序存储器的单片机*如6#4$+%一般情况下只能作为系统扩展的高6位地址总线输出口%而不能作为与外部设备相连接的输入/输出口&

9"口的输出驱动器有一个多路电子开关**K[+%当*K[开关接至输出锁存器f输出端

时%9"口作为第一功能输出线%与9$口的功能相似’当*K[开关接至地址端时%9"口的状态

由+9K送出的地址确定)访问程序存储器时%地址来源于程序计数器 9+的高6位%输出地址

J6HJ$.’访问数据存储器或 %/M设备时%地址来源于数据指针O98I的高6位 O9L%特殊的

采用间址寄存器I$或I#时%则9"口保持原有的地址信息不变&

$>.>D!)#口

9#口为三态$双向 %/M口&对外部无地址需求的应用场合%9#口可作为输入/输出口使

用%直接与外部设备相连&绝大多数应用场合9#口只能作为地址/数据使用&从图$>6可以看出%9#口的输出驱动器中有两个场效应管&上面的管子导通%下面的管

子截止%输出为高电平’上面的管截止%下面的管导通%输出为低电平’上$下管均截止时%输出

浮空&9#口的输出驱动器中含有一个多路电子开关%当其接至口锁存器f端时%作为双向%/M口使用&将"$#写至口锁存器时%上$下管均为截止%输出浮空&一般这时应外接上拉电阻%将口线拉至高电平%否则%9#口输出的信号不确定&将"##写至锁存器时%下管导通%输出低电

平&作输入时%口锁存器应置"$#%保证从引脚读入的数据正确&当多路开关接至地址/数据端时%9#口作为地址/数据端口使用%分时输出外部存储器的

低6位地址*J#HJ3+和传送数据*O#HO3+&由于存储器在被访问期间要求地址信号一直有

效%而9#口是分时传输地址$数据信号%地址信号只在某个时间段出现%并非一直有效%所以需

要由地址锁存允许信号JNP将低6位的地址锁存到外部地址锁存器中%接着9#口便输入/输出数据&9#口输出的低6位地址来源于程序计数器9+低6位$数据指针O98I低6位$I$或

I#&9#$9"口作为地址/数据总线口使用时%*+,-.$系统扩展总线如图$>:所示&图中的控

制总线包括外部程序存储器选通信号9,P2$外部IJ*/%M电路的读信号IO和写信号WI&

图$>:!*+,-.$系统扩展总线

$>.>.!应用特性

在使用*+,-.$单片机%/M口时%要注意以下的应用特性&

!#"!

Page 29: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$>准双向口的使用

9#$9$$9"$94作普通%/M口时%都是准双向口&由图$>6*R+准双向口的典型结构可以看

出%其输入和输出有本质不同%输入操作是读引脚状态%输出操作是对口锁存器的写入操作&当口锁存器内容为"##时%f端为"$#%使输出场效应管导通%%/M引脚将钳位在低电平&无论

%/M引脚输入"##电平还是"$#电平%读引脚操作的结果都是"##状态&因此%准双向%/M作输

入口时%应先使锁存器置$%称为置输入状态%然后再读引脚&*单片机复位后的 9#H94口均

为#TTL%为输入状态&+

">端口复用的识别

端口在使用时%无论是9#$9"的总线复用%还是 94口的功能复用均由系统自动选择%不须人工干预&

4>9#口作普通%/M

9#口作普通%/M使用时%由于9#是开漏结构%作输出时必须外加上拉电阻%否则无法输

出高电平%上拉电阻阻值一般在.H$# ’之间均可&

D>%/M口的驱动特性

9#口每一个%/M口可以驱动6个 N,88N负载%9$$9"$94口可以驱动D个 N,88N负载&当负载过多超过限定时%必须驱动%否则造成端口工作不稳定&

$>5!最小应用系统

单片机最小应用系统是指仅使用单片机内部资源辅以必须的外围电路所构建的"简单#的

应用系统&它包括两方面的内容)单片机的选择和单片机最小应用系统的设计&通过单片机的

选择%最大限度满足应用系统对硬件资源的要求&最小应用系统设计则是指单片机最基本的$最通常的外围电路设计%如时钟电路$复位电路等&本节主要介绍单片机最小应用系统的构成&

任何一个复杂的应用系统都是以最小应用系统为基础%通过"搭接#外部功能模块的方法

实现的&因此%只有熟悉最小应用系统%才能在此基础上进一步学好单片机&

$>5>$!时钟电路

时钟电路是计算机的心脏%它控制着计算机的工作节奏&*+,-.$的时钟信号可以由两种

方式产生)一种是内部方式%利用芯片内部的振荡电路%产生时钟信号’另一种为外部方式%时钟信号由外部引入&*+,-.$单片机有 L*M,型和 +L*M,型%它们的时钟电路有一定区别%在实际使用时应注意&

$>内部时钟方式

*+,-.$内部有一个用于构成振荡器的高增益反相放大器%引脚[8JN$和[8JN"分别为

放大器的输入端和输出端&该放大器与作为反馈元件的片外晶体或陶瓷谐振器*简称晶振+一起构成自激振荡器&

!$"!

Page 30: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图$>$#是*+,-.$片内振荡器电路&*+,-.$单片机虽然有内部振荡电路%但要形成时

钟%必须外接元件%如图$>$$所示&外接晶振以及电容+#$和+#"构成并联谐振电路%这种方式

称为内部时钟方式&如果振荡器已起振%则在[8JN"引脚上输出4U左右的正弦波&振荡频

率"AY@取决于晶振的频率&不同型号的产品%可选择的频率范围有所不同%一般在#>.H$"*LV之间&常用的晶振有5*LV$$"*LV和$$>#.:"*LV&电容 +#$和 +#"主要作用是帮助起振

*谐振+%称其为谐振电容%其值的大小对振荡频率也有影响&因此常用调节 +#$或 +#"的容量

大小对频率进行微调%电容容量通常在"#H$##<T之间选择%当时钟频率为$"*LV时典型值

为4#<T&

图$>$#!*+,-.$片内振荡器电路 图$>$$!内部时钟方式的电路

$注意%!在设计印刷电路板时%晶体和电容应尽可能安装得与单片机芯片靠近%以减少寄生电容%

更好地保证振荡器稳定和可靠地工作&此外%由于晶振高频振荡相当于一个内部干扰源%所以

晶振外壳*金属+一般要良好地接地&

">外部时钟方式

*+,-.$的内部工作时钟也可以由外部振荡器提供%外部时钟引入方式如图$>$"所示&对外部振荡器的信号没有特殊的要求%一般为#>.H$"*LV的方波%方波的波形应尽量规范

*亦上升沿$下降沿尽可能垂直+&

图$>$"!外部时钟引入方式

4>时钟信号输出

当使用内部时钟方式时%单片机可为外设或其他设备提供时钟信号%尽管很多资料介绍了

不少方法%但在实际工程中%最简单易行且效果良好的方法是从 [8JN"引脚取出信号&由于

晶振起振后%[8JN"引脚上已经可以输出#H4U的正弦波%该波形直接取用显然是不合理

!""!

Page 31: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图$>$4!时钟信号的输出

的&其一%驱动能力不强%其二%波形不是方波&但是可以将该信号经3DN,$D*施密特触发器+整

形后使用&经过3DN,$D整形后%不仅波形变成方

波%而且驱动能力提高了&88N电路输入低电平

要求为 #H#>6U%"U以上为高电平输入%所以

[8JN"引脚#H4U的正弦波对3DN,$D来说是完

全可行的&如果使用+*M,工艺的3DL+$D%由于

+*M,输入低电平为#H$>.U%高电平为4>.U以上%则要在 [8JN"端增加一个上拉电阻&时钟信号的输出如图$>$4所示&

$>5>"!#)*时序

+9K的工作是不断地取指令和执行指令%以完成数据的运算$传送和输入/输出等操作&+9K从取指令开始至该指令执行完所需的时间称为一个指令周期&不同指令的指令周期也

是不相同的&指令周期以机器周期为单位%而机器周期是完成一个规定操作所需的时间&一

般情况下%一个机器周期由若干个时钟周期构成&*+,-.$的一个机器周期由5个状态*,$%,"%-%,5+组成%每一个状态有"个时钟周期

*时相9$$9"+&一个机器周期包含有$"个时钟周期*,$9$%,$9"%-%,59"+%若系统的振荡

频率选择$"*LV%则一个机器周期为$%Y&图$>$D用内部状态和相位表明+9K取指令和执

行指令的时序%这些内部时钟信号从外部观察不到%所以用[8JN"的振荡器输出信号作参考&引脚JNP输出信号为扩展系统低6位地址锁存信号&在访问程序存储器时%JNP信号

有效两次*,$9"至,"9$和,D9"至,.9$期间输出两个正脉冲+%表示在一个机器周期内%+9K能够完成两次对程序存储器的读操作%即一个机器周期可以读取两个字节的指令代码’在访问

外部数据存储器期间%JNP信号将少产生一次&由此可见%JNP信号输出的频率并不是恒定

的%是受用户编制的程序影响的&由于用户访问外部 IJ*/%M的频度不高%所以 JNP信号基

本上可以认为是$/5"AY@&对于单机器周期指令%指令码读入指令寄存器后%从 ,$9"开始执行指令&如果它为双字

指令%则在同一个机器周期的,D读入第二字节&如果它为单字节指令%则在,D仍旧进行读操

作%但读入的字节*它应是下一个指令的指令码+被忽略%且程序计数器不加$&在任何情况

下%,59"都将结束指令操作&图$>$D的*Q+和*R+分别对应单字节单周期和双字节单周期指

令的时序&*+,-.$单片机的指令大多数为单机器周期指令&*KN*乘法+和O%U*除法+是仅

有的需要"个以上机器周期的指令%它们需要D个周期&一般情况下%双字节指令在一个机器周期内从程序存储器取出%仅有 *MU[指令是例外

的%*MU[是访问外部数据存储器的单字节双机器周期指令&在 *MU[指令执行期间%少执

行两次取指令操作%而进行寻址和选通外部数据存储器&图$>$D*@+和*S+分别为一般的单

字节双机器周期指令和*MU[指令的时序&

$>5>4!复位与复位电路

计算机在启动运行前需要复位%使中央处理器和系统中的其他部件都处于一个确定的初

始状态%单片机从这个状态开始工作&*+,-.$的复位输入引脚I,8*I(Y(’+提供了初始化的手段%使程序从指定位置开始执行%

!4"!

Page 32: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图$>$D!*+,-.$时序状态

即程序从程序存储器的####L单元处开始执行&在 *+,-.$单片机时钟电路工作之后%只要

在I,8引脚上出现"个机器周期以上的高电平%就能确保单片机可靠复位&若I,8保持高电

平%*+,-.$维持复位状态%只有当 I,8由高电平变为低电平以后%*+,-.$才会退出复位状

态%程序从####L地址单元开始执行&

$>复位后各寄存器的初态

当*+,-.$的I,8引脚变为低电平%退出复位状态后%+9K从初态开始工作&复位后各寄

存器的初始状态如表$>$$所示&表$>$$!复位后片内$(&的初始状态

寄存器 内 容 寄存器 内 容

9+ ####L 8*MO ##L

J++ ##L 8+M2 ##L

1 ##L 8L# ##L

9,W ##L 8N# ##L

续表

!D"!

Page 33: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

寄存器 内 容 寄存器 内 容

,9 #3L 8L$ ##LO98I ####L 8N# ##L9#H94 #TTL ,+M2 ##L%9 CCC#####1 ,1KT 不确定

%P #CC#####1 9+M2 #CCCCCCC1

!!注)C位表示未定义&

!!下面对表$>$$中各寄存器的复位后初态作进一步说明&*$+9+a####L)复位后+9K执行的第一条指令存放于程序存储器####L地址单元起始

的地方’*"+9,Wa##L)使片内数据存储器选择#区工作寄存器%用户标志寄存器 T#为#%其他

标志均为#’*4+,9a#3L)设定堆栈栈底为#3L’*D+8L#$8L$$8N#$8N$都为##L)说明定时器/计数器复位后计数初值为#’*.+8*MOa##L)使8#$8$处于方式#工作状态和内部定时方式%不受外部引脚控制’*5+8+M2a##L)禁止8#$8$计数%无溢出中断请求%禁止外部中断源请求%外部中断源

的触发方式为电平触发方式’*3+,+M2a##L)串行口工作方式#%移位寄存器方式%并设定不允许串行移位接收’*6+%Pa##L)中断系统全部被禁止%每个中断源也分别被禁止’*:+%9a##L)中断系统所有中断源均设置为低优先级中断’*$#+9#H94a#TTL)所有%/M口锁存器均为$状态%使这些准双向口均处于输入状态’*$$+复位期间%内部IJ*不受影响&$注意%!复位后一般特殊功能寄存器的初始值为#%但是有两类D个寄存器的值不为#%分别是,9

和9#H94&

">复位电路

*+,-.$系统刚通电*上电+后%必须复位&此外%在系统工作异常等特殊情况下%也可以

人为地使系统复位&复位是由外部复位电路来实现的%按功能可以分为以下两种方式&*$+上电自动复位方式

对于*+,-.$单片机%只要在I,8复位端接一个电容至 !++和一个电阻至 !,,即可&上电

复位电路如图$>$.所示&在加电瞬间%I,8端出现一定时间的高电平%只要高电平保持时间

足够长%就可以使*+,-.$有效地复位&I,8端在加电时应保持的高电平时间包括!++的上升

时间和振荡器起振的时间&!++上升时间约为 $#%Y%振荡器起振时间和频率有关%频率为

$#*LV时约为$%Y%频率为$*LV时约为$#%Y%所以一般为了可靠地复位%I,8在上电时保持

"#%Y以上高电平即可&在图$>$.中%时间常数#$越大%上电时I,8端保持高电平的时间越

长%当振荡频率"AY@a$"*LV时%典型值$a$#%T%#a6>" ’’当时钟频率选用5*LV时%$取

""%T%#取$ ’%上述参数比实际要求的值大很多%但通常设计人员并不关心多出的复位时

间&若上电复位失效%用户加电后 +9K从一个随机状态开始工作%系统则不能正常运行&上

!."!

Page 34: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

电复位后%IJ*单元数据是随机的&*"+人工复位

除了上电复位外%有时还需要人工复位&将一个按钮开关并联于上电自动复位电路*如

图$>$5所示+%按一下开关就会在 I,8端出现一段时间的高电平%使单片机复位&当时钟频

率选用5*LV时%$取""%T%#$约为"##’%#"约为$ ’&要注意的是$$#"的选取由上电

复位参数决定%然后确定#$%为了保证在I,8引脚上得到高电平%应使#$取#"的$/.H$/$#&

图$>$.!上电复位电路 图$>$5!上电与按钮复位电路

4>系统复位

在实际的单片机应用系统设计中%若有外部扩展的 %/M接口电路与 +9K一样需要复位%这时%需要一个系统的同步复位信号&在单片机开始工作前%外部电路一定要完成复位%以保

证+9K有效地对外部电路进行初始化编程&系统复位的方式有多种%可以采用如图$>$3所

示的两种较为简单易行的系统复位方式&图$>$3*Q+是采用施密特触发器整形后加在单片机

和%/M电路复位端的复位方式’图$>$3*R+采用独立的各自的复位电路%分别调整 #$参数%保证+9K与外部电路的同步复位&

图$>$3!系统复位电路

$>5>D!#+",$型单片机低功耗工作方式

+L*M,型的*+,-.$单片机具有低功耗的特点%为进一步降低功耗%适用于电源功耗要

求低的应用场合%该型单片机还提供了两种节电工作方式)待机方式和掉电保护方式&这两种

工作方式特别适合以电池为工作电源和停电时使用备用电源供电的应用场合&待机方式和掉电方式都是由电源控制寄存器9+M2的有关位来控制的&电源控制寄存器

是一个逐位定义的6位寄存器%地址为63L%不可位寻址%其格式如下)O3 O5 O. OD O4 O" O$ O#

9+M2 ,*MO ( ( ( _T$ _T# 9O %ON

其中!,*MO(((串行口波特率系数控制位’

!5"!

Page 35: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

_T$(((通用标志$’_T#(((通用标志#’9O(((掉电方式控制位%9Oa$%系统进入掉电方式’%ON(((待机方式控制位%%ONa$%系统进入待机方式&

如果想要单片机进入待机方式或者掉电方式%只需执行一条能够使 %ON或 9O位置$的

指令即可&

$>待机方式

待机方式的进入方法非常简单%只需使用指令将 9+M2寄存器的 %ON位置$即可&单片

机进入待机方式时振荡器仍然运行%而且时钟被送往中断逻辑$串行口和定时器/计数器%但不

向+9K提供时钟%因此+9K是不工作的&+9K的现场*堆栈指针 ,9$程序计数器 9+$9,W$J+++以及除与上述三部件有关寄存器外%其余通用寄存器都保持原有状态不变%各引脚保持

进入待机方式时的状态%JNP和9,P2保持高电平%中断的功能还继续存在&退出待机方式的方法有两种)中断和硬件复位&在待机方式下%任何一个中断请求信号%

在单片机响应中断的同时%9+M2>#位*即%ON位+被硬件自动清#%单片机退出待机方式进入

到正常的工作状态&另一种退出待机方式的方法是硬件复位%在 I,8引脚引入两个机器周期

的高电平即可%复位后的状态如前述&

">掉电保护方式

掉电保护方式的进入类似于待机方式的进入%只需使用指令将9+M2寄存器的9O位置$即可&进入掉电保护方式%单片机的一切工作全部停止%只有内部的 IJ*单元的内容被保

存&%/M引脚状态和相关的特殊功能寄存器的内容相对应%JNP和9,P2为逻辑低电平&退出掉电保护方式的方法只有一个)硬件复位&复位后特殊功能寄存器的内容被初始化%

但IJ*的内容仍然保持不变&

$>5>.!典型最小应用系统的结构

最小应用系统设计是单片机应用系统设计的基础%主要包括最小系统结构的选择%时钟电

路系统和复位系统的选择%以上电路就能构成一个最小的应用系统&最小应用系统的结构与

单片机处理器类型选择有关%这里仅以常用的类型为例做简单的介绍&

$>总线方式的最小应用系统结构

*+,-.$单片机引脚提供了外围并行扩展的三总线结构%9"$9#口构成了$5位的地址总

线%9#口构成了6位的数据总线%9,P2$IO$WI$JNP$PJ构成控制总线&在必须通过总线进

行外围扩展或使用无IM*型单片机*例如6#4$+时%才使用到这种结构&图$>$6是总线方式

的最小应用系统结构%它由单片机$复位电路$时钟电路$%/M及并行扩展总线组成&这种系统

是早期典型的最小应用系统%采用这种方式扩展外围器件或接口%具有数据传输速度高%实时

性好等优点%常用来扩展传输速度较高的存储器$%/M口$中断源$J/O及 O/J等&但由于使

用了并行总线%且必须采用地址译码和锁存%占用系统的引脚数量多%扩展电路复杂%可用的

%/M资源较少&为避免上述状况可采用 KJI8的串行移位寄存器方式进行外围扩展%以减少

对%/M端口的占用&!3"!

Page 36: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图$>$6!总线方式的最小应用系统结构

">非总线方式的最小应用系统结构

在此方式下%单片机内必须拥有足够用的程序存储器%且外部无扩展IJ*%亦系统无地址

总线需求&该系统中只有单片机$时钟电路$复位电路构成简单电路%并行总线不用于外围扩

展%可作为系统的%/M口使用&系统结构如图$>$:所示&

图$>$:!非总线方式的最小应用系统

非总线方式下的最小应用系统%/M口线基本不占用%为用户提供丰富的%/M口资源%系统

的整体结构简单&若需要扩展外围器件%只能通过 KJI8口的串行移位方式进行扩展%例如%当需要外部扩展IJ*时%可以选用,9%接口或%"+接口的串行IJ*%目前该应用场合更加广

泛&应用时注意)9#口为开漏结构%作%/M口时应加上拉电阻&

习!题!$

$>$!%&’()公司的*+,-.$系列单片机中%哪些型号为无IM*型%哪些型号为IM*型$P9IM*型.兼容

!6"!

Page 37: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

厂商的单片机中%哪种型号会有T)QY;IM*.$>"!%"+总线标准由哪个公司提出%其内容是什么.$>4!*+,-.$系列单片机中%典型产品6#.$拥有哪些资源.$>D!指出单片机内部9,W寄存器的作用是什么.$>.!PJ引脚的状态对单片机运行有何影响.$>5!什么是堆栈.6#4$堆栈可设在什么区域.栈的最大容量为多少.$>3!字节地址.#L和位地址.#L有何区别.位地址.#L在IJ*中的哪一个字节单元.$>6!特殊功能寄存器中%哪些单元可位寻址.$>:!指出9#$9$$9"$94在扩展系统中各自的用途是什么.$>$#!JNP引脚的功能有哪些.其输出的信号频率是否恒定.$>$$!复位电路有何作用.常用的复位方式有几种.$>$"!指出总线方式和非总线方式最小应用系统的区别&$>$4!单片机复位后%由哪个寄存器决定程序从何单元开始执行.$>$D!单片机复位后%哪些寄存器的初值不为零.$>$.!堆栈指针,9当前值为4#L%将数据"4L$D.L$53L顺序压入堆栈%请画出数据在堆栈中的存储示

意图&$>$5!单片机内部时钟方式电路中%电容+#$与+#"的作用是什么.

!:"!

Page 38: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第"章!"#$%.$指令系统及程序设计

指令是指挥计算机进行某种操作的命令&指令系统是一台计算机所有指令的集合%不同

型号计算机的指令系统是不同的&完成某项特定任务的指令的集合称为程序&计算机的工作是按照程序的要求一条条执行

指令&用户通过各种程序指挥计算机完成相应的工作%程序的编制过程称为程序设计&程序

设计需要有程序设计语言的支持%程序设计语言可分为机器语言$汇编语言和高级语言&机器语言是一种面向机器的语言%不同种类的计算机具有各自的机器语言&机器语言具

有可直接执行%速度快%占用内存空间小%可充分利用计算机硬件特性等优点&但由于机器语

言由二进制数的序列组成%所以机器语言编程和维护的难度很大%不适合实际应用&高级语言是面向问题的程序设计语言%类似于人类的自然语言%通用于各种计算机&但高

级语言具有执行速度慢%占用内存空间大%不能直接利用计算机硬件特性的缺点&汇编语言是一种符号化的机器语言%汇编语言具有机器语言速度快%占用内存空间小的优

点%同时%又比机器语言易于理解和掌握&对于要求反应灵敏和控制及时的控制$检测等实时

控制系统以及要求体积小$系统简单的应用场合%采用汇编语言编程的优越性比较明显&因为

单片机是面向控制的微机系统%所以单片机系统多采用汇编语言作为程序设计语言&

">$!指令格式

">$>$!汇编指令

*+,-.$汇编指令由操作码助记符字段和操作数助记符字段组成&指令格式如下)操作码!/操作数$/%操作数"/%操作数4000

第一部分为操作码助记符%表示要执行的操作命令%由二至五个英文字母组成%例如 g+$JOO$+g2P$N+JNN等&

第二部分为操作数%指明参与操作的数据&操作码与操作数之间用一个或几个空格分隔

开&根据指令功能的不同%操作数可以有一个$两个$三个或者没有%操作数之间用逗号"%#分

隔开&对于多数只有两个操作数的指令%通常称操作数$为目的操作数%操作数"为源操作

数&

">$>"!指令代码格式

指令代码是指令的二进制数表示方法%是指令在存储器中存放的形式&根据指令代码的

长度%*+,-.$的指令可分为单字节指令$双字节指令和三字节指令&无论是哪种指令%其第一

个字节均为操作码%它确定了指令的功能%其他的字节为操作数%指出了被操作的对象&

">$>4!指令中的常用符号

在描述*+,-.$指令系统时%经常使用各种缩写符号%其含义如表">$所示&!#4!

Page 39: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表">$!指令中的常用符号及含义

符号 含!!义

J 累加器J++

1 寄存器1

+ 进*借+位标志位%在位操作指令中作为位累加器使用

S?F(@’ 直接地址

R?’ 位地址%内部IJ*中的可寻址位和,TI中的可寻址位

hSQ’Q 6位常数*6位立即数+

hSQ’Q$5 $5位常数*$5位立即数+

e 间接寻址

F()!6位带符号偏移量%其值为7$"6H‘$"3&在实际指令中通常使用标号%偏移量的计算由汇编程序自

动计算得出%不需要人工计算

I% 当前工作区*#H4区+的6个工作寄存器I#HI3

I& 可作地址寄存器的工作寄存器I#和I$*&a#%$+

*[+ [寄存器内容

**[++ 由[寄存器寻址的存储单元的内容

# 表示数据的传送方向

/ 表示位操作数取反

% 表示逻辑与操作

& 表示逻辑或操作

" 表示逻辑异或操作

">"!寻址方式

寻址方式是指计算机寻找操作数或下一条要执行指令地址的方法&*+,-.$共有七种寻

址方式)立即寻址$直接寻址$寄存器寻址$寄存器间接寻址$基址寄存器加变址寄存器间接寻

址$相对寻址$位寻址&表">"给出了与寻址方式相对应的存储器空间&表">"!寻址方式相对应的存储器空间

寻 址 方 式 相 应 存 储 器 空 间

立即寻址 程序存储器

直接寻址 内部IJ*低$"6个字节和特殊功能寄存器

寄存器寻址 I#HI3$J$1$O98I

寄存器间接寻址 内部IJ**eI?+外部数据存储器*eI?$eO98I+

!基址寄存器加变址 寄

存器间接寻址程序存储器*eJ‘9+$eJ‘O98I+

相对寻址!以9+的当前值为基地址‘偏移量a有效转移地址%

转移范围)9+当前值的$"31和后$"61之间!

位寻址 内部IJ*或特殊功能寄存器的可寻址位

">">$!立即寻址

立即寻址是指本指令中直接给出操作数的寻址方式%指令中的操作数即为立即数&其特

!$4!

Page 40: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

征为数前加符号"h#&指令中的立即数有6位立即数hSQ’Q和$5位立即数hSQ’Q$5&由于立即

数是一个常数%不是物理空间%所以立即数只能作为源操作数%不能作为目的操作数使用&例

图">$!立即寻址方式执行过程

如指令

!!*MU!J%h4#L

该指令是数据传送指令%此指令功能为将立即数

4#L送入累加器 J中%4#L为立即数&指令执行

过程如图">$所示&

">">"!直接寻址

直接寻址是指在指令中直接给出操作数所在地址的寻址方式&直接寻址方式可访问的地

址空间有)! 内部数据存储器’! 特殊功能寄存器&例如指令

!!*MU!J%4#L

该指令的功能为将内部数据存储器4#L单元中的内容传送到累加器 J中&指令的执行过程

如图">"所示&

图">"!直接寻址方式执行过程

需要指出的是%特殊功能寄存器只能用直接寻址方式访问&

">">4!寄存器寻址

寄存器寻址是指由指令选定寄存器中的内容作为操作数的寻址方式&指令所选定的寄存

器可以是工作寄存器I#HI3$累加器J$寄存器1$地址寄存器O98I等&例如指令

!!*MU!J%I#

该指令的功能为将工作寄存器I#的内容送入累加器 J中%其中的操作数 J$I#都是寄存器

寻址&其执行过程如图">4所示&

图">4!寄存器寻址方式执行过程

!"4!

Page 41: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

">">D!寄存器间接寻址

寄存器间接寻址是指将指令指定的寄存器内容作为操作数所在的地址%对该地址单元中

的内容进行操作的寻址方式&*+,-.$规定%使用 I#和 I$作为间接寻址寄存器%对于6#.$系列单片机%可寻址内部IJ*中地址从##LH3TL的$"6个单元内容&对于6#."系列单片

机%则为".5个单元的内容%而且%6#."系列单片机的高$"6个字节%IJ*只能使用寄存器间

接寻址方式访问&另外%数据指针 O98I也可作为间接寻址寄存器%寻址外部数据存储器的

5D]1空间&例如指令

!!*MU!J%eI$

该指令的功能是将当前工作区内以I$中的内容作为地址的存储单元中的数据送到累加器J中%其源操作数采用寄存器间接寻址方式%以I$作为地址指针&假设I$中的内容为4#L%则该指令是将地址为4#L的存储单元中的内容送到累加器J中&其执行过程如图">D所示&

图">D!寄存器间接寻址方式执行过程

">">.!基址寄存器加变址寄存器间接寻址

基址寄存器加变址寄存器间接寻址是将指令中指定的基址寄存器的内容与变址寄存器的

内容相加%构成操作数所在存储单元地址的寻址方式&其中%程序计数器 9+或地址指针

O98I作为基址寄存器%累加器J作为变址寄存器&例如指令

!!*MU+!J%eJ‘O98I

该指令的功能是从程序存储器某地址单元中取一个字节数据送入累加器J中&假设累加器J的内容为4#L%O98I的内容为"$##L%执行该指令时%把程序存储器中地址为"$##L‘4#La"$4#L的单元中的数据送入累加器J中&该指令的执行过程如图">.所示&

图">.!基址寄存器加变址寄存器间接寻址方式执行过程

">">5!相对寻址

相对寻址是指以当前9+的内容加上指令中给出的相对偏移量形成程序转移到目的地址

的寻址方式&相对偏移量为有符号数%其范围在7$"6H‘$"3之间&例如指令

!!g+!3#L

若此指令所在地址为"###L且+ca$%由于指令本身占用"个单元%所以%取出此指令后 9+

!44!

Page 42: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

内容为"###L‘"a"##"L%程序将转移到"##"L‘3#La"#3"L的单元去执行&其执行过程

如图">5所示&

图">5!相对寻址方式执行过程

">">3!位寻址

位寻址是对内部IJ*和特殊功能寄存器的可寻址位的内容进行操作的寻址方式&这种

寻址方式与直接寻址方式的形式和过程基本相同%但参与操作的数据是$位而不是6位&例

如指令

!!*MU!+%#5L

该指令的功能是将位地址为#5L的位单元的内容送入位累加器+中&

">4!"#$%.$单片机指令系统

*+,-.$单片机的汇编语言有D"种操作码来描述各种操作%操作码助记符与寻址方式结

合可得到$$$条指令&如果按存放指令占用存储器字节数来分类%有D:条单字节指令%D.条

双字节指令和$3条4字节指令&如果按执行指令所需时间分类%有5D条单周期指令%D.条

双周期指令%"条*乘$除+D周期指令&如果这些指令按照功能划分%可分为以下五类)! 数据传送类’! 算术运算类’! 逻辑运算类’! 位操作类’! 控制转移类’下面分别介绍各类指令&

">4>$!数据传送指令

数据传送指令是应用最多的一类指令%其功能是进行数据的传送&数据传送操作可在累

加器J$工作寄存器I#HI3$内部数据存储器$外部数据存储器以及程序存储器等部分之间进

行&数据传送指令可进一步划分为以下六类&

$>内部6位数据传送指令

内部6位数据传送指令共有$.条%用于单片机内部的数据存储器与寄存器之间的数据传

送&允许的数据传送形式如图">3所示&!D4!

Page 43: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

从图中可知%在*+,-.$单片机内部%累加器J可以和工作寄存器*I&+$片内 IJ**直接

地址S?F(@’$间接地址eI?+$立即数*hSQ’Q+进行数据传送%工作寄存器$直接地址单元$间接地

址单元之间也可进行数据传送&因此%从图中可以得到$.种合法的指令形式)

图">3!内部6位数据传送指令

允许的数据传送形式

!!*MU!!J%I&!! !!’*I&+#J*MU J%S?F(@’ ’*S?F(@’+#J*MU J%eI? ’**I?++#J*MU J%hSQ’Q ’SQ’Q#J*MU I&%J ’J# I&*MU I&%S?F(@’ ’*S?F(@’+#I&*MU S?F(@’%hSQ’Q ’SQ’Q#S?F(@’*MU eI?%S?F(@’ ’*S?F(@’+#eI?

!!!!11

$注意%!*$+直接地址S?F(@’的范围是##LH#TTL%对于6#.$系列单片机%其中的##LH3TL为片

内IJ*%6#LHTTL为,TI%,TI只能直接寻址%指令中,TI可写成直接地址也可写成寄存器

名’对于6#."系列单片机%6#LHTTL区域为片内IJ*和,TI地址重叠的区域%访问,TI时

要使用直接寻址方式%访问6#LHTTL区域的片内IJ*时%要使用间接寻址方式’*"+指令*MU!S?F(@’$%S?F(@’"可实现直接地址S?F(@’的自传送%将源操作数S?F(@’"的内

容送到目的操作数S?F(@’$中’*4+立即数hSQ’Q不能作为目的操作数’*D+eI?与I&都不能自传送’*.+eI?与I&之间也不能相互传送&

">$5位数据传送指令

*+,-.$单片机系统中$5位数据传送指令只有$条%其形式为)!! *MU!O98I%hSQ’Q$5

该指令的功能为将$5位立即数送入地址寄存器 O98I中&其中%$5位立即数的高6位送入

O9L中%低6位送入O9N中&

4>外部数据传送指令

外部数据传送指令的功能是实现+9K与外部数据存储器之间的数据传送&这类指令共D条%指令形式及所实现的功能如下)

!!*MU[!!J%eI?!!!’**I?++#J

*MU[ J%eO98I ’**O98I++#J

*MU[ eI?%J ’*J+#*I?+

*MU[ eO98I%J ’*J+#*O98I+

前"条指令是读外部数据存储器指令%后"条为写外部存储器指令&这D条指令都要使

用累加器J&访问外部数据存储器只能采用间接寻址方式&如果使用 I#$I$作为间接寻址

寄存器%寻址范围为".5个字节’如果使用O98I作为间接寻址寄存器%寻址范围为5D]1地址

空间&!.4!

Page 44: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$例">$%!将外部数据存储器.#L单元的内容传送到外部数据存储器的#T##L单元中&程序清单如下)

!!*MU!!I#%h.#L!!!!!!’地址.#L送间接寻址寄存器I#*MU O98I%h#T##L ’地址#T##L送间接寻址寄存器O98I*MU[ J%eI# ’外部数据存储器.#L单元的内容送累加器J*MU[ eO98I%J ’累加器J内容送外部数据存储器#T##L单元

D>查表指令

*+,-.$单片机的程序存储器中可以存放一些常数或表格%*+,-.$单片机提供了访问程

序存储器的指令%又称查表指令&这类指令共"条%指令形式及实现的功能如下)*MU+ J%eJ‘O98I ’**J+‘*O98I++#J*MU+ J%eJ‘9+ ’*9++‘$#9+

’**J+‘*9+++#J

查表指令的源操作数都采用基址寄存器加变址寄存器间接寻址方式&如果使用O98I作

为基址寄存器%其查表范围为整个程序存储器的5D]1空间’如果使用9+作为基址寄存器%其查表范围为查表指令后".5个字节的地址空间&这两条指令执行后%O98I和9+的内容都不

会改变&

.>交换指令

*+,-.$单片机指令系统中%实现数据交换的指令有以下三种)

图">6!交换类指令的使用情况

*$+累加器半字节交换的指令%用于实现累加器

的高D位与低D位互换&*"+字节交换指令%用于实现两操作数内容的互

换&*4+半字节交换指令%用于实现两操作数低D位

内容的互换%高D位不变&交换类指令共有.条%其使用情况如图">6所示&

由图可知交换类指令有下列五种形式)!!,WJ9!!J!!!!!’将累加器J的高D位与低D位互换&

[+L J%I& ’源操作数与累加器J的内容互换

[+L J%S?F(@’[+L J%eI?[+LO J%eI? ’累加器J的低D位与源操作数的低D位互换&

$注意%!*$+指令均以累加器J为目的操作数’*"+[+L指令在很多场合用于1+O码的数据处理&

5>堆栈操作指令

*+,-.$单片机指令系统中%堆栈操作指令有以下两种)*$+入栈指令&指令形式及所实现的功能如下)9K,L!S?F(@’ ’*,9+‘$#,9

!54!

Page 45: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

’*S?F(@’+#*,9+

该指令的功能是将指定直接寻址单元的内容压入堆栈&具体执行时%首先将堆栈指针,9的内

容加$%然后将指定直接寻址单元的内容传送到堆栈指针,9所指向的单元中&*"+出栈指令&指令形式及所实现的功能如下)9M9!S?F(@’ ’**,9++#*S?F(@’+

’*,9+7$#,9

该指令的功能是将当前堆栈指针,9所指向的单元的内容传送到指定直接寻址单元中%然后将

,9的内容减$&$注意%!*$+堆栈操作压栈与出栈相反%压栈时先进行指针操作%后进行数据操作%出栈时先进行

数据操作%后进行指针操作’*"+上电复位后,9a#3L%由于入栈操作是先指针上移%后压入数据%所以堆栈空间并未

占用#区的I3寄存器’*4+一般来说%如果应用系统要使用$H4区%在主程序开始执行初期%应将 ,9移至内部

数据存储器的高端&*D+一般情况下%除上电初始化外%不易轻易修改,9&$例">"%!编程实现将内部数据存储器中地址为4#L和4$L两单元的内容互换&方法一%使用交换指令实现)[+L J%4$L ’累加器J与4$L单元内容互换

[+L J%4#L ’累加器J与4#L单元内容互换

[+L J%4$L ’累加器J与4$L单元内容互换

方法二%使用堆栈指令实现)9K,L 4#L ’4#L单元内容入栈

9K,L 4$L ’4$L单元内容入栈

9M9 4#L ’从堆栈中取数据送入4#L单元

9M9 4$L ’从堆栈中取数据送入4$L单元

">4>"!算术运算指令

*+,-.$单片机指令系统中实现算术运算的指令共"D条%这类指令大多会影响标志位&算术运算指令包括加法*JOO+$带进位加法*JOO++$带借位减法*,K11+$乘法**KN+$

除法*O%U+$加$*%2++$减$*OP++和十进制调整*OJ+等几种操作%其允许的指令形式如图

">:所示&从图中可以得出算术运算类指令的"D种合法形式)!!JOO!!!J%I&!!!’*J+‘*I&+#J

JOO J%S?F(@’ ’*J+‘*S?F(@’+#JJOO+ J%eI? ’*J+‘**I?++‘*++#JJOO+ J%hSQ’Q ’*J+‘SQ’Q‘*++#J%2+ J ’*J+‘$#J%2+ O98I ’*O98I+‘$#O98I,K11 J%S?F(@’ ’*J+7*S?F(@’+7*++#JOP+ I& ’*I&+7$#I&

!11

!34!

Page 46: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图">:!算术运算指令的指令形式

$注意%!*$+加法*JOO+与带进位加法*JOO++的差别在于)带进位加法*JOO++是将源操作数的

内容与累加器J的内容相加后%还要再加上进位标志位 +的内容%而加法指令*JOO+不进行

加进位标志位+的操作&*"+减法指令中只有带借位减法*,K11+&*4+加$*%2++和减$*OP++指令都是单操作数指令%其功能为将指令中指定操作数的内

容加*减+$%并把结果存回原来的操作数中%这类指令不影响标志位&*D+十进制加法调整指令的形式为)!!OJ!J

该指令的功能是对累加器中由两个压缩1+O数的相加所获得的6位结果进行调整%使其调整

为"位压缩1+O数’*.+对于加减法运算指令来说%当加法运算结果的最高位有进位%或减法运算的最低位有

借位时%进位标志位+置$%否则进位标志位+清#’当加法运算低D位向高D位有进位时%或减法运算低D位向高D位有借位时%辅助进位标志位 J+置$%否则 J+清#’第5位和第3位

产生且不同时产生进位或借位时%溢出标志位MU置$%否则MU清#&*5+乘法指令的形式为)!!*KN!J1

该指令的功能是把累加器J和寄存器1中的6位无符号数相乘%积为$5位%其低6位存放在

累加器J中%高6位存放在寄存器1中&如果结果大于"..%即 1中内容不为#%则溢出标志

位MU置$%否则MU清#&即如果MUa#%只需从累加器 J中取积’如果 MUa$%需要从1$J寄存器对中取积&进位标志位+始终为#&

*3+除法指令的形式为)!!O%U!J1

该指令的功能是把累加器J中的6位无符号数除以寄存器1中的6位无符号数%结果分为两

部分%其商的整数部分存放在累加器 J中%余数部分存放在寄存器 1中&如果指令执行前 1中内容*除数+为#时%结果中累加器J中内容为#TTL%1中内容为被除数%溢出标志位MU将

被置$%进位标志位+始终为#&!64!

Page 47: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$例">4%! 设*J+a:+L%依次执行下列指令)!!JOO!!!J%h#J6L!!JOO+ J%h#P#L!!,K11 J%h$.L

分析每条指令的执行结果&指令 JOO!!J%h#J6L执行情况如下)

$ # # $ $ $ # # *J+a:+L‘ $ # $ # $ # # # h#J6L$ # $ # # # $ # #

该指令执行结束后*J+aDDL%+a$%J+a$%MUa$’指令JOO+!!J%h#P#L执行情况如下)

# $ # # # $ # # *J+aDDL‘ $ $ $ # # # # # h#P#L‘ $ +a$$ # # $ # # $ # $

该指令执行结束后*J+a".L%+a$%J+a#%MUa#’指令,K11!!J%h$.L执行情况如下)

# # $ # # $ # $ *J+a".L

7 # # # $ # $ # $ h$.L

7 $ +a$

# # # # $ $ $ $

该指令执行结束后*J+a#TL%+a#%J+a$%#Ua#&

">4>4!逻辑运算指令

*+,-.$单片机指令系统中实现逻辑运算的指令包括与*J2N+$或*MIN+$异或*[IN+的

逻辑操作%累加器J自身内容的清零*+NI+$取反*+9N+$右移*II+$带进位右移*II++$左移*IN+$带进位左移*IN++等指令&这类指令共"D条%并且都不会影响标志位&其指令形式

如图">$#所示&

图">$#!逻辑运算指令的指令形式

!:4!

Page 48: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

从图中可以得到逻辑运算指令的"D种合法指令形式)!!J2N!!J%I&!!!! !!!!!’*J+%*I&+#J

J2N S?F(@’%hSQ’Q ’*S?F(@’+%SQ’Q#S?F(@’MIN J%hSQ’Q ’*J+&SQ’Q#JMIN S?F(@’%J ’*S?F(@’+&*J+#S?F(@’[IN J%S?F(@’ ’*J+"*S?F(@’+#J[IN S?F(@’%hSQ’Q ’*S?F(@’+"SQ’Q#S?F(@’IN JII+ J+NI J

!11

$注意%!*$+与*J2N+$或*MIN+$异或*[IN+都是双操作数指令%不影响标志位&*"+左移*IN+指令的功能是将累加器J的内容向左移$位%第3位移入第#位’带进位左

移*IN++指令的功能是将累加器J的内容向左移$位%第3位移入进位标志位+%原来进位标

志位+的内容移入累加器J的第#位’右移*II+指令的功能是将累加器 J的内容向右移$位%第#位移入第3位’带进位右移*II++指令的功能是将累加器 J的内容向右移$位%第#位移入进位标志位+%原来进位标志位+的内容移入累加器 J的第3位&这D条指令不影响

其他标志位&图">$$为移位指令的执行情况&

图">$$!移位指令的执行情况

*4+清零指令+NI!J的功能是将累加器 J的内容清#%与指令 *MU!J%h#的功能相

同%但指令+NI!J的执行速度更快%占用资源更少&取反指令 +9N的功能是将累加器 J的

内容按位取反%即原来是$的位变为#%原来是#的位变为$&*D+从图">$#中可知%与算术运算类指令不同%逻辑运算类指令中%直接地址 S?F(@’也可

以在某些指令中作为目的操作数&$例">D%!使用逻辑运算指令实现将累加器J的高D位清#%低D位置$&从逻辑运算的性质可知)与#相与可以使原数清#%与$相或可以使原数置$%与#相或和

与$相与可以使原数保持不变&因此程序清单如下)!!J2N!J%h####$$$$1!!’高D位置#%低D位不变

MIN!J%h####$$$$1 ’高D位不变%低D位置$

从上面的指令可见)使用J2N指令%可用于屏蔽某些位*清零+’使用MIN指令%可用于在不改

变其他位的前提下%将某些位置$&

!#D!

Page 49: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

">4>D!位操作指令

*+,-.$单片机指令系统提供了位操作指令%这类指令包括位传送**MU+$位逻辑与

*J2N+$位逻辑或*MIN+$位清#*+NI+$位置$*,P81+$位取反*+9N+几种指令%位指令中的

操作数是$位的%这类指令共有$"条%具体的指令形式如图">$"所示&

图">$"!位操作指令的指令形式

从图中可以得到位操作指令的$"种合法形式)!!*MU!+%R?’!!!!’*R?’+#+

*MU R?’%+ ’*++#R?’J2N +%R?’MIN +%/R?’+NI + ’##+,P81 R?’ ’$#R?’+9N R?’

!1!1

$例">.%! 使用位操作指令实现选择当前工作区为"区&+NI I,# ’##I,#,P81 I,$ ’$#I,$

使用这种方法可达到灵活地切换工作区的目的&$注意%!*$+指令中的R?’是指内部IJ*中的可寻址位或,TI中的可寻址位’*"+/R?’与R?’的差别在于/R?’是先把R?’中的内容取反%然后再参与操作&由于/R?’只出

现在源操作数中%所以R?’的内容并未改变&

">4>.!控制转移指令

*+,-.$单片机指令系统提供了通过修改程序计数器 9+的内容来控制程序执行过程的

控制转移指令&这类指令包括无条件转移指令%条件转移指令%比较转移指令%循环转移指令

和调用与返回指令&

$>无条件转移指令

*+,-.$单片机指令系统提供了无条件转移指令&执行到这类指令时%不需要对条件进行

判断%直接转移到指令中标号所指的语句处去执行&无条件转移指令有以下四种)*$+短跳转指令%指令形式如下)!!Jg*9!!标号

该指令可以实现程序在"]1范围内的无条件跳转&!$D!

Page 50: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*"+相对转移指令%指令形式如下)!! ,g*9!标号

该指令跳转的目标地址范围为下一条指令的前$"61到后$"31之间&*4+长跳转指令%指令形式如下)!! Ng*9!标号

该指令在执行时%转移的目标地址可以在5D]1程序存储器的任何地方&*D+基址寄存器加变址寄存器间接转移指令%指令形式如下)!! g*9!eJ‘O98I

该指令在执行时%把累加器J中的6位无符号数与数据指针 O98I中的$5位无符号数相加%其结果作为下一条指令的地址送入9+%不改变累加器J和数据指针O98I的内容&利用这条

指令能实现程序的散转%因此%这条指令又称为散转指令&

">条件转移指令

*+,-.$单片机指令系统提供了条件转移指令&执行这类指令时%首先对某种条件进行判

断%条件满足则转移%否则顺序执行下面的指令&转移的目的地址在以下一条指令的起始地址

为中心的7$"6H$"3个字节范围内&当条件满足时%程序转向标号所指的语句处执行&条件转移指令有以下3种)*$+g\!标号

累加器J的内容为#%则转移至标号处%否则顺序执行&*"+g2\!标号

累加器J的内容不为#%则执行转移至标号处%否则顺序执行&*4+g+!标号

进位标志位+的内容为$%则执行转移至标号处%否则顺序执行&*D+g2+!标号

进位标志位+的内容为#%则执行转移至标号处%否则顺序执行&*.+g1!R?’%标号

直接寻址位R?’的内容为$%则执行转移至标号处%否则顺序执行&*5+g21!R?’%标号

直接寻址位R?’的内容为#%则执行转移至标号处%否则顺序执行&*3+g1+!R?’%标号

直接寻址位R?’的内容为$%则执行转移至标号处%且将直接寻址位R?’的内容清#%否则顺

序执行&$注意%!由于条件转移指令只能转移到以下一条指令的起始地址为中心的 7$"6H$"3个字节范

围内%如果标号与上述起始地址的偏移量超过该范围%则可以采用条件转移指令后增加 Ng*9指令的方法实现转移&

4>比较不相等转移指令

*+,-.$单片机指令系统只提供的比较不相等转移指令%而未提供其他形式的比较转移指

令&比较不相等转移指令有以下D种形式)!"D!

Page 51: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!+g2P!!J%S?F(@’%!! F()

+g2P!!J%hSQ’Q% F()

+g2P!!I&%hSQ’Q% F()

+g2P!!eI?%hSQ’Q% F()

这组指令的功能是比较操作数$与操作数"的大小*两操作数均为无符号数+%如果它们的值

不相等则转移%相等则顺序执行&另外%此类指令还可以影响9,W中的+c等标志&

D>循环转移指令

*+,-.$单片机指令系统提供的循环指令有以下"种形式)!!Og2\!!I&%F()

!!Og2\!!S?F(@’%F()

这组指令的功能是将源操作数减$%如果它的值不为#则转移%常用于计数型循环结构&

.>调用与返回指令

*+,-.$单片机指令系统提供了调用与返回指令%这类指令用于子程序的调用与返回&这

类指令有以下.种)*$+短调用指令%指令形式如下)!! J+JNN!!子程序名

该指令执行时%先把9+加"以获得下条指令的地址%把这$5位地址压入堆栈%堆栈指针,9加

"&然后将子程序的起始地址送入9+%从而转向执行子程序&这条指令不影响标志位&*"+长调用指令%指令形式如下)!! N+JNN!!子程序名

该指令执行时%先把9+加4以获得下条指令的地址%把这$5位地址压入堆栈%堆栈指针,9加

"&然后将子程序的起始地址送入9+%从而转向执行子程序&这条指令不影响标志位&$注意%!指令J+JNN与N+JNN的区别在于)J+JNN只能调用程序存储器中"]1范围内的子程

序’N+JNN可以调用程序存储器中5D]1范围内的子程序&*4+子程序返回指令%指令形式如下)!! IP8

该指令的功能是从堆栈中取出"1的内容送入9+%把堆栈指针,9减"%并从产生的9+值开始

执行程序%从而实现子程序的返回&这条指令不影响标志位&*D+中断返回指令%指令形式如下)!! IP8%

该指令的操作与IP8指令相似%不同的是通常 IP8%指令只能用于中断服务子程序的末尾&此指令的功能包括两部分)

! 恢复中断时保存入栈的9+值%使被打断的程序可从断点处恢复执行’! 恢复中断逻辑%使+9K能够响应与刚处理过的中断同级别的和更低级别的中断请求&*.+空操作指令%指令形式如下)!! 2M9

该指令除了使9+加$外%不进行任何操作%常用于产生一个机器周期的等待延时&!4D!

Page 52: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

">D!汇编语言及程序设计

单片机系统由硬件和软件两部分组成%软件部分就是使用单片机可以识别的语言编制的

用于控制单片机工作的程序&本章结合*+,-.$指令系统的特点介绍单片机汇编语言及程序

设计&

">D>$!汇编语言语句结构及伪指令

$>汇编语言语句结构

计算机能够直接识别的是二进制表示的指令称为机器码&机器码不便于书写$阅读和记

忆%因此%引入了用英文字母构成的助记符来表示机器码的方法&而汇编语言就是用助记符来

表示指令的一种语言&汇编语言与机器码相比具有易于书写$阅读$记忆等优点&汇编语言由汇编语句组成%汇编语句在书写的时候%应符合下列结构)

/标号)0操作码 /操作数0/’注释0具体说明如下)*$+汇编语言语句由标号$操作码$操作数$注释四部分组成&其中的标号$操作数和注释

部分可以没有%甚至某些指令的操作数也可没有*如2M9$IP8等语句+’*"+标号位于语句的开始%由以字母开头的字母和数字组成%它代表该语句的地址&标号

与指令间要用冒号")#分开%标号与")#间不能有空格%")#与操作码之间可以有空格’*4+操作码是指令的助记符%操作数在操作码之后%二者用空格分开&操作数可以是数

据%也可以是地址&有多个操作数时%操作数间用逗号"%#分开&指令中的数据可以是十进制$十六进制$二进制$八进制数和字符串&具体格式如下)! 十进制数以O结尾*可以省略+%如4DO或4D’! 十六进制数以L结尾%如.3L%如果数据以JHT开头%其前必须加数字#%如h#J4L’! 二进制数以1结尾%如$##$##$$1’! 八进制数以M或f结尾%如 53M或53f’! 字符串用 ii或jj表示%如 i1i表示字符1的J,+%%码&*D+注释在语句的最后%以"’#开始%是说明性的文字%与语句的具体功能无关&例如语

句)!!J_J%2)*MU!J%hDDL!!’DDL#J

在这条指令中%J_J%2为标号%表示该指令的地址’*MU为操作码%表示指令的功能为数据传

送’J和hDDL为操作数’DDL#J为注释%用于说明这条语句的功能&注释内容不参与程序的

汇编&

">伪指令

伪指令不产生相对应的操作码%但在汇编程序将汇编语言源程序汇编成目标程序时%伪指

令起协助汇编的作用&伪指令用于规定程序地址%建立数据表格等操作&常用的伪指令有以

下六种)*$+定位伪指令%格式如下)!DD!

Page 53: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!MI_!&

其中%为十进制或十六进制常数&该伪指令用于规定其后面指令在程序存储器中存放的地

址&例如)!!MI_!#"##L

!!%2+ J

则指令%2+!J将存放在#"##L程序地址单元&*"+字节定义伪指令%格式如下)/标号0O1![$%["%-%[&

其中’$%’"%-%’%为6位数据或J,+%%码%也可以是一个表达式&该伪指令通常用于定义常

数表%其作用是在程序存储器中从标号*或本条指令+开始的地址单元中依次存入字节数据

’$%’"%-%’%&*4+字定义伪指令%格式如下)!!OW!c$%c"%-%c&

其中($%("%-%(%为$5位数据%也可以是一个表达式&该伪指令通常用于定义地址表%其作

用是在程序存储器中从标号*或本条指令+开始的地址单元中依次存入双字节数据($%("%-%(%&需要注意*+,-.$汇编语言中OW伪指令定义双字节数据时%其高6位存放在程序存储

器中地址较低的单元%低6位存放在程序存储器中地址较高的单元&*D+汇编结束伪指令%格式如下)!!P2O

该伪指令用于指出汇编结束%其后的指令将不参与汇编&*.+指令当前地址%格式如下)!!(

该伪指令多用于程序的控制转移中&*5+常量定义伪指令%格式如下)!!PfK

该伪指令用于定义常量&例如%如果使用了伪指令MK8$!PfK!9$%则在程序中%MK8$将代

表9$口&指令*MU!J%9$就可以写成*MU!J%MK8$&$注意%!*+,-.$汇编语言有多种汇编程序%不同的汇编程序支持的伪指令也不尽相同&

">D>"!程序的基本结构

$>汇编语言程序设计的基本步骤

使用程序设计语言编写程序的过程称为程序设计&在程序设计过程中%应在完成规定功

能的前提下%使程序占用空间小%执行时间短&同时%在程序设计时要按照规定的步骤进行&程序设计步骤如下)*$+分析问题%确定算法和解题思路&*"+根据算法和解题思路画出程序流程图&*4+根据流程图编写程序&*D+程序调试%找出错误并更正%再调试%直至通过&

!.D!

Page 54: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*.+编写相关说明&

">程序的基本结构

由于所处理的问题不同%不同程序的结构也就不尽相同&但是%结构化程序的基本结构只

有三种)顺序结构$分支结构$循环结构&任何复杂的程序都可以用上述三种结构来表示&三

种基本结构的流程图如图">$4所示&

图">$4!三种基本的程序结构

">D>4!顺序程序设计

顺序结构的程序多用来处理比较简单的问题%如简单的算术运算类问题&这类程序的特

图">$D!例">5程序流程图

点是)程序中的语句由前向后顺序执行%最后一条指令执行完毕%整个程序也随之结束&

$例">5%!将4#L中存放的压缩 1+O数转换成二进制数存

放在累加器J中&转换方法为1+O数的高D位乘以$#再加上低D位&流程图如图">$D所示%程序清单如下)!!,8JI8)*MU!!J%4#L!!!’取数*4#L+#J

J2N J%h#T#L ’屏蔽低D位

,WJ9 J ’高$低D位互换

*MU 1%h$# ’$##1*KN J1 ’1+O数的高D位乘以$#*MU 1%J ’结果暂存1*MU J%4#L ’取数

J2N J%h#TL ’屏蔽高D位

JOO J%1 ’得到结果

P2O

">D>D!分支程序设计

在解决很多问题的过程中%需要根据不同的条件转向不同的处理程序%这种程序结构叫做

分支结构&*+,-.$单片机指令系统中的控制转移类指令可以实现程序的分支&

$>两路分支结构

$例">3%!编程实现)如果累加器J中数据为负数%则将4DL单元的数据存入寄存器 1’否则%将4.L单元的数据存入寄存器1&

!5D!

Page 55: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

方法一%两路分支程序&当累加器 J的最高位为$时%此数据为负数%否则%此数据为正

数或零&程序流程图如图">$.所示%程序清单如下)!!,8JI8)g1!!! J++>3%N$!!!!’如果负数%转N$

*MU!!1%4.L ’将4.L单元的数据

’存入寄存器1Jg*9!!N" ’转N"

!!N$) *MU!!1%4DL ’将4DL单元的数据存入寄存器1!!N") P2O

上面的程序通过g1指令实现两路分支&指令 Jg*9!N"的目的避免数据经过一次处理

后又滑入下一个分支中&方法二%采用预测法&首先假设累加器J中数据为负%然后进行判断&程序清单如下)!!,8JI8)*MU!!1%4DL!!!!’假设累加器J中数据为负

g1!! J++>3%2P[8 ’假设成立%继续

*MU!!1%4.L ’假设不成立%进行修改

!!2P[8)P2O

采用这种预测法可以减少程序的复杂性%避免出错&但并不是所有的两路分支程序都可

以这样处理&

">三路分支结构

$例">6%!假设累加器J中存放一有符号数’%求解函数)

(a!$!当’)#*#!当’+#,$!当’-

{ #结果存入寄存器I#中&

此程序应为三路分支%程序流程图如图">$5所示)

图">$.!例">3程序流程图 图">$5!例">6程序流程图

程序清单如下)!!,8JI8)+g2P!J%h##L%2PPIM!!’累加器J中内容与#比较

*MU I#%h##L ’*J+a#%则##I#Ng*9 P[%8

2PPIM)g1 J++>3%NPPIM

!3D!

Page 56: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU I#%h#$L ’*J+k#%则$#I#Ng*9 P[%8

NPPIM)*MU I#%h#TTL ’*J+l#%则7$#I#P[%8)P2O

本程序中使用+g2P和g1指令实现三路分支%同时还两次使用Ng*9指令%其目的是避免

数据经过一次处理后又滑入下一个分支中&

4>多路分支结构

利用基址寄存器加变址寄存器间接转移指令g*9!eJ‘O98I%可以根据累加器 J的内

容实现多路分支&这类程序又称为散转程序&$例">:%! 假设累加器 J中内容为#H3%编程实现根据累加器 J的内容实现不同的处

理&程序流程图如图">$3所示&

图">$3!例">:程序流程图

程序清单如下)!!,8JI8)*MU!!I$%J!!!!!!!

IN JJOO J%I$ ’*J+C4#J*MU O98I%h8J1NP ’转移表首地址#O98Ig*9 eJ‘O98I ’散转

!!8J1NP)Ng*9 99# ’转向编号#的处理入口

Ng*9 99$ ’转向编号$的处理入口

Ng*9 99" ’转向编号"的处理入口

Ng*9 994 ’转向编号4的处理入口

Ng*9 99D ’转向编号D的处理入口

Ng*9 99. ’转向编号.的处理入口

Ng*9 995 ’转向编号5的处理入口

Ng*9 993 ’转向编号3的处理入口

$注意%!由于每条长跳转指令Ng*9占用4个程序存储器单元%所以在此程序中%首先将累加器J

中的内容置为原来的4倍%然后通过g*9!eJ‘O98I指令实现散转%程序中的99#H993为

与#H3对应的各处理程序的入口地址&使用散转指令%根据’的内容*’a#%$%-+进行程序

!6D!

Page 57: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

散转的地址表达式为)地址a表首地址‘表中每元素字节数C’&

">D>.!循环程序设计

在许多问题中%一段程序需要被多次执行%只是每次参加运算的操作数不同%这时%适合采

取循环结构程序来完成&循环结构的程序可以缩短源代码%减小程序所占的内存空间&通常

情况下%循环程序包括以下四部分)*$+循环准备部分%即循环初始化%这部分的功能是为循环做好必要的准备工作&这部分

只执行一次%但对于程序的组织十分重要%是完成循环的第一步&*"+循环体部分%这部分是循环操作的实质部分%是需要多次执行的程序的主体&*4+循环控制与修改部分%这部分的功能有两个)一是通过修改某些内容%为下一轮工作

做好必要的准备’二是通过判断$控制循环的继续或终止&*D+循环的结果处理部分%结束循环后%对所得的结果进行处理&根据循环层次的不同可以把循环程序分为单重循环程序和多重循环程序&

$>单重循环程序

$例">$#%!内部数据寄存器从D#L开始连续存放有"#个单字节数%编程求它们的和

*双字节+%并存入IDI4中&用I"作为计数器%用I#作为数据指针%采用寄存器间接寻址方式读取各数&流程图如

图">$6!例">$#程序的流程图

图">$6所示%程序清单如下)!!,8JI8)*MU!!I4%h#!!’设置初值

*MU ID%h#*MU I"%h"# ’计数初值

*MU I#%D#L ’初始地址

!!NMM9)*MU J%I4 ’计算和

JOO J%eI#*MU I4%J+NI J ’处理进位

JOO+ J%ID*MU ID%J%2+ I# ’修改控制变量

Og2\ I"%NMM9’判断程序是否结束

P2O

以上程序使用I"作计数器%使用Og2\指令来判

断程序是否结束&这种方法适用于循环次数已知的循环程序%这类循环程序称为计数控制的

循环程序&$例">$$%!内部数据存储器中存放有一个字符串%此字符串以4#L为起始地址%以字符

内容为#结尾%编程将此字符串传送到外部数据存储器以$###L开始的连续单元中&由于字符串的长度不确定%所以%不能用计数器来控制循环的结束%应该以内部数据存储

器中内容是否为#来判断循环是否结束&考虑到程序的容错性%对于.$子系列单片机%内部

IJ*只有$"61%地址从##LH3TL&如果从4#L单元到3TL单元一直没有数据#%再继续传

送将没有意义&所以%在循环的结束部分需要判断数据指针是否越界&!:D!

Page 58: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

程序流程图如图">$:所示&程序清单如下)!!,8JI8)*MU!!I#%h4#L!!!!!!’源存储单元首地址

*MU O98I%h$###L ’目的存储单元首地址

!!NMM9)*MU J%eI# ’取数据

g\ NN ’为#%传送结束

*MU[ eO98I%J ’传送数据

%2+ I# ’指向下一个数据

%2+ O98I+g2P I#%h6#L%NMM9 ’循环传送%并判断

’数据指针是否越界

!!NN) P2O

图">$:!例">$$程序的流程图

此程序中指令 g\!NN的功能是判断

数据是否为#%如果为#则传送结束&指令

+g2P!I#%h6#L%NMM9用于判断数据指针

是否越界&这类循环程序根据某些条件来

判断循环是否结束%称为条件控制的循环

程序&

">多重循环程序

如果一个循环中包含了其他的循环程

序%则称该循环程序清单为多重循环程序&$例">$"%!编程实现$##BY的延时程

序&编制延时程序时%需要了解 *+,-.$指

令的执行时间&在使用$"*LV晶振时%一

个机器周期为$%Y%执行一条Og2\指令时

间为"%Y&要求时间不长的延时子程序可

以使用双重循环结构&通用的延时子程序

清单如下)!!’子程序!!!!!!!!!!指令机器周期!!指令执行次数

!!OPN) *MU I3%h[ ’$ $

!!OPN$) *MU I5%hc ’$ [

Og2\ I5%( ’" [Cc

Og2\ I3%OPN$ ’" [

IP8 ’$ $

全部指令执行时间为)$‘’."C’/(.(."C’.$a"‘4C’."C’/(个机器周期&

对于延时时间为$##BY的延时程序%可以选择 ’a"##%(a".#&这样%这个子程序的全

部执行时间为*"‘4C"##‘"C"##C".#+a$##>5#"BY&如果需要获取更长的延时时间%可采用更多重的循环%例如要实现秒延时%可以使用三重

!#.!

Page 59: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

循环&

">D>5!子程序设计

在程序设计中%往往需要在不同位置执行同样的操作%为了避免重复%节省存储空间%可以

把实现相同操作的程序段从原来的程序中独立出来%编制成子程序&原来的程序需要使用这

段程序时%采用一条调用指令即可%子程序执行完毕后%又返回到原来的程序继续执行&通常%把调用子程序的程序称为主程序&子程序的引入简化了主程序的结构%增加了程序的可读性%避免了重复性工作%缩短了整个程序&另外%子程序还增加了程序的可移植性%一些常用的处

理写成子程序形式%可以被随时引用%为编程提供了方便&

$>子程序的调用与返回

*+,-.$单片机指令系统提供了两条子程序调用指令)J+JNN!QSSF$$和 N+JNN!QS-SF$5&指令中的地址为子程序的入口地址%在实际的程序中通常用标号来代表&在主程序调

用子程序时%只需执行调用指令%单片机即可先将当前的9+值压入堆栈%然后将9+值修改为

指令中标号所代表的地址%从而%实现了子程序的调用&子程序中应该有返回指令 IP8或

IP8%%以确保子程序能够正确返回&执行 IP8指令时单片机将原来存在堆栈中的断点送回

9+%保证了子程序返回主程序中调用的地方继续执行&由此可见%子程序从子程序标号开始%到IP8或IP8%指令结束&

$注意%!*$+能否从一个子程序内部直接跳转到另一个子程序执行.*"+能否使用转移指令从主程序跳到子程序.*4+能否使用转移指令从子程序跳到主程序.上述问题%如果从堆栈角度思考%将不难得到正确的结论&

">子程序的现场保护与恢复

在子程序运行时%不可避免地要改变一些寄存器或数据存储器的内容%有时这些内容是主

程序所不可缺少的%因此%在子程序调用时%应该先将有关寄存器或存储器的内容保护起来%子程序返回前再恢复原来的内容%这一过程称为现场的保护与恢复&现场保护通常由堆栈来完

成%在子程序的开始部分使用压栈指令%将需要保护的内容压入堆栈’在子程序返回前设置出

栈指令%将原有的内容弹出堆栈%送到原来的寄存器或存储器单元中&这样%实现了现场的保

护与恢复&$例">$4%!在*+,-.$系列单片机中%某中断服务程序和被打断的背景程序%均采用J$1

和O98I等专用寄存器以及I#HI3等通用寄存器*背景程序用#区+%写出中断服务程序有

关现场保护和恢复部分的语句*中断程序用$区+&程序清单如下)!!,PIUPI)9K,L!9,W!!!’保护程序状态字

9K,L J++ ’保护累加器

9K,L 1 ’保护1寄存器

9K,L O9N ’保护数据指针

9K,L O9L

!$.!

Page 60: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

,P81 I,# ’选用寄存器$区

+NI I,$

!119M9 O9L ’恢复现场

9M9 O9N9M9 19M9 J++9M9 9,W ’恢复9,W及原寄存器组

IP8% ’中断子程序返回

4>子程序的参数传递

调用子程序时%主程序应把子程序中使用的有关参数送入约定的位置%子程序运行时%可以从约定的位置得到有关的参数%这类由主程序提供给子程序的参数叫做入口参数&同样%在子程序结束前%也应把运算结果送到指定的位置%返回主程序后%主程序可以从指定的位置得

到需要的结果%这类由子程序返回主程序的参数叫做出口参数&实现参数传递时%可以采用多

种方法%常用的方法有以下三种)*$+用工作寄存器或累加器传递参数

这种方法是把入口参数或出口参数放入工作寄存器或累加器中&其优点是程序简单%运算速度快&缺点是寄存器数量有限%传递参数的数量较少&

$例">$D%!内部数据存储器中.#L$.$L两单元和5#L$5$L两单元分别存放两个D位

压缩1+O数%用子程序方法实现将这两个D位1+O数相加且存放在.#L$.$L单元中&使用寄存器I"$I4来存放入口参数&对于出口参数%使用累加器 J存放和%使用 +c存

放进位&程序清单如下)!!’主程序

!!,8JI8)*MU!I"%.#L!!’送入口参数

*MU I4%5#L+NI + ’清除进位标志

J+JNNJOO$ ’调用子程序

*MU .#L%J*MU I"%.$L ’送入口参数

*MU I4%5$LJ+JNNJOO$ ’调用子程序

*MU .$L%J ’结果存回4"L单元

!11!!’子程序

!!JOO$)*MU J%I" ’取入口参数并相加$调整

JOO+ J%I4OJ JIP8

*"+用指针寄存器传递参数

由于数据通常存放在存储器中%因此可以通过使用指针寄存器指示数据的位置来实现参

!".!

Page 61: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

数传递&这样做的优点是可以传送较多的数据&如果参数在内部存储器中%可以使用 I#或

I$作为指针寄存器’如果参数在外部存储器中%可以使用O98I作为指针寄存器&$例">$.%!用指针寄存器传递参数的方法实现例">$D的问题&数据在内部数据寄存器中存放%使用I#和I$作为指针寄存器进行入口参数传递&程序

清单如下)!! ’主程序

!!,8JI8)*MU!I$%h.#L!!’I$%I#分别指向两个入口参数

*MU I#%h5#L+NI +J+JNNJOO" ’调用子程序

*MU .#L%J ’存低位结果

%2+ I# ’修改I#$I$%使其指向高位数据

%2+ I$J+JNNJOO" ’调用子程序

*MU .$L%J ’存高位结果

!11!!’子程序

!!JOO")*MU J%eI# ’取得入口参数

JOO+ J%eI$ ’相加

OJ J ’调整

IP8

上面的程序中%使用指针寄存器传递入口参数%使用累加器传递出口参数&由于是D位

1+O数相加%所以需要两次调用子程序&*4+用堆栈传递参数

堆栈可以作为传递参数的工具&使用堆栈进行参数传递时%主程序使用 9K,L指令把参

数压入堆栈中%子程序可以通过堆栈指针来间接访问堆栈中的参数%并且可以把出口参数送回

堆栈中&返回主程序后%可以使用 9M9指令得到这些参数&这种方法的优点是简单易行%并可传递较多的参数&

$例">$5%!用堆栈传递参数的方法实现例">$D的问题&程序清单如下)’主程序

,8JI8)9K,L! .#L!!!!!’两入口参数的低位入栈

9K,L 5#L+NI +J+JNN JOO4 ’调用子程序

9M9 .#L ’存放低位结果

9M9 J ’取出数据至J%保证堆栈平衡

9K,L .$L ’两入口参数的高位入栈

9K,L 5$LJ+JNN JOO4 ’调用子程序

9M9 .$L ’存放高位结果

9M9 J ’取出数据至J%保证堆栈平衡

!4.!

Page 62: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!11’子程序

JOO4)*MU I#%,9 ’I#为参数指针

OP+ I#OP+ I#*MU J%eI# ’取第一个参数

OP+ I#JOO+ J%eI# ’两参数相加

OJ J ’调整

%2+ I#[+L J%eI# ’结果送回堆栈

IP8

上面的程序中%使用堆栈作为参数传递的工具&主程序中使用9K,L指令传送入口参数’子程序中%使用I#作为参数指针以取得参数%使用[+L指令将出口参数送回堆栈’主程序中

使用9M9指令取得出口参数&

">.!程序设计举例

学习*+,-.$汇编语言的目的是根据给定的指令系统%结合程序设计方法%编制程序%解决实际的问题&下面给出一些较为常见问题的程序设计举例&以下程序部分以子程序形式给

出%如果以主程序形式给出%稍加变动即可改为子程序&

">.>$!多字节数算术运算程序

$>双字节无符号数加减程序

$例">$3%! 将*I5I.+和*IDI4+中的两个双字节无符号数相加%结果送I5I.中&由于是双字节数加法%所以需要进行两次相加&程序清单如下)!!OJOO)*MU!J%I.!!!!

JOO J%I4 ’第一次相加

*MU I.%J*MU J%I5JOO+J%ID ’第二次相加

*MU I5%JIP8

从本例可以看到累加器J的桥梁作用%即程序中经常出现的取数*暂存入J+#操作#回

存的模式&$例">$6%! 将*I5I.+和*IDI4+中的两个双字节无符号数相减%结果送I5I.中&由于是双字节数减法%所以需要进行两次相减&程序清单如下)!!O,K1)*MU!J%I.!!!!

+NI + ’清除进位标志位

,K11 J%I4 ’第一次相减

!D.!

Page 63: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU I.%J*MU J%I5,K11 J%ID ’第二次相减

*MU I5%JIP8

由于加法指令有两种)不带进位加法指令JOO和带进位加法指令JOO+%而减法指令只有

带进位减法指令,K11一种%所以%第一次减法操作之前%要用+NI!+指令将进位标志位清零&

">双字节无符号数乘法程序

两个双字节无符号数相乘%所得的积为四字节数&这一运算过程可以用重复加法来完成%其运算过程如下)

*$+将用于存放积的寄存器清零’*"+从最低位开始检查各乘数位’*4+如果乘数位为$%加被乘数%存入存放积的寄存器%否则%不进行相加’

图">"#!例">$:程序的流程图

*D+右移一位所得的积’*.+重复*"+H*D+各步%直到各乘数位都检查完毕&$例">$:%! 将*I"I4+和*I5I3+两个双字节无符号数相乘%结果存放在IDI.I5I3中&根据给定的算法%程序流程如图">"#所示&程序清单如下)!!,8JI8)*MU!ID%h#!!’将用于存放积

’的寄存器清#*MU I.%h#

*MU I#%h$5 ’设置位计数器

+NI + ’清进位标志位

!!2*N9)*MU J%IDII+ J ’右移一位

*MU ID%J*MU J%I.II+ J*MU I.%J*MU J%I5 ’所得积整体右移一位

II+ J*MU I5%J*MU I3%JII+*MU I3%Jg2+ 2*%2 ’+a#%不加被乘数

*MU J%I. ’+a$%加被乘数

JOO J%I4*MU I.%J*MU J%IDJOO+J%I"

!..!

Page 64: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU ID%J!!2*%2)Og2\ I#%2*N9’循环$5次

*MU J%ID ’最后将所得积整体右移一位

II+ J*MU ID%J*MU J%I.II+ J*MU I.%J*MU J%I5II+ J*MU I5%J*MU J%I3II+ J*MU I3%JIP8

上面程序中%使用I#作为移位计数器来控制移位次数%其数值等于被乘数和乘数的位

数%即$5&

4>双字节无符号数除法程序

图">"$!例">"#程序的流程图

两个无符号二进制数相除%可以采用减法和

移位法来完成&首先判断被除数或余数是否大于

或等于除数%如果是*即够减+%则商为$%然后做

减法’反之商为#%不做减法%然后进行下一位商

的运算&这一算法的具体步骤如下)*$+将存放商的寄存器置为#’*"+被除数与商左移一位’*4+判断是否够减%如果够减%则商为$%否则

商为#’*D+判断移位次数是否等于除数的位数%如

果不等%重复*"+*4+%否则结束&以上算法在具体实现时%通常设定一个移位

计数器%其初值等于除数的位数&$例">"#%! 编制双字节无符号数除以单字

节无 符 号 数 的 子 程 序&假 设 被 除 数 存 放 在

*I5I.+中%除数存放在 I"中%运算结束时%余数

存放在I5中%商存放在I.中&根据给出的算法%程序流程图如图 ">"$所

示&程序清单如下)!!OO%U)*MU!I3%h#6L!!’移位计数器I3初值为6

OU$)+NI + ’清进位标志位

*MU J%I.

!5.!

Page 65: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

IN+ J*MU I.%J*MU J%I5IN+ J ’将*I5I.+左移一位

*MU #3L%+ ’将移出的一位送#3L’位保存

+NI +,K11 J%I" ’余数*高位+减除数

g1 #3L%_MK ’若标志位为$%则够减

g2+ _MK ’无借位%也够减

JOO J%I" ’否则%恢复余数

Jg*9 OU"_MK)%2+ I. ’商加$OU")*MU I5%J ’保存余数*高位+

Og2\ I3%OU$ ’计数器减$IP8

此程序使用I3作为移位计数器%其初值与除数的位数相等%即为6&程序执行结束后%商和余数都为6位%分别存放在I.和I5中&此程序执行时%为保证用一个字节能够存放商%要使除数大于被除数的高位%即设定初值时%确保*I"+k*I5+&

">.>"!数制转换程序

$例">"$%!假设累加器J中存放有一个十六进制数%将其转换为1+O码%转换结果的百

位$十位和个位分别存放在寄存器ID$I4$I"中&累加器J中的十六进制数在#H"..之间%将其除以$##后%商为 1+O码的百位数%余数

除以$#后%所得商为1+O码的十位数%余数为个位数&程序清单如下)!!,8JI8)*MU!1%h$##!!!’分离出百位数

O%U J1*MU ID%J ’百位数#ID*MU J%h$# ’分离出十位和个位数

[+L J%1O%U J1*MU I4%J ’十位数#I4*MU I"%1 ’个位数#I"IP8

">.>4!查表程序

程序设计中%有时会遇到比较复杂的运算或转换过程%直接编程的困难较大%采用查表的

方法是解决这种问题的有效途径&这类程序以O98I或9+作为基址寄存器%通过指令*MU+!J%eJ‘O98I或*MU+!J%eJ‘9+实现查表操作&

表的查找过程为)*$+将表首地址送入基址寄存器O98I或9+中’

!3.!

Page 66: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*"+将地址偏移量送入累加器J中’*4+使用*MU+指令进行查表操作&使用O98I时%地址偏移量为表中要查找数据地址与表头地址之差’使用9+时%地址偏移

量为表中要查找地址与当前地址之差&

$>一维表的查找

一维表中的数据在存储器中线性连续存放%因此%表中要查找数据地址与表首地址的差值

主要取决于表中每项数据所占单元数&$例">""%!利用查表法求I$中数0的立方值%结果存放在*I4I"+中&假设#’0’D#%

建立一个存放#HD#各数的立方值表%使用*MU+指令进行查表&程序清单如下)!!,8JI8)*MU! J%I$!!!!!!!!!!!!’2送入累加器J中

*MU O98Ih8J1NP ’表首地址送O98IIN J ’2C"*MU I#%J ’将2C"暂存于I#%2+ J ’2C"‘$*MU+ J%eJ‘O98I ’得到立方值的低6位

*MU I"%J ’存立方值的低6位

*MU J%I#*MU+ J%eJ‘O98I ’得到立方值的高6位

*MU I4%J ’存立方值的高6位

IP8!!8J1NP)OW #%$%6%"3%5D%-%.:4$:%5D###!!’立方值表

上面程序中%由于0的立方值为双字节数%所以%需要查表两次&需要注意)*+,-.$汇编

语言中OW伪指令定义双字节数据时%其高6位存放在程序存储器中地址较低的单元%低6位

存放在程序存储器中地址较高的单元&

">二维表的查找

二维表是指表中的数据为1行%列的矩阵形式%二维表中的数据在存储器中也以线性连

续的形式存放&因此%对于1行%列的二维表%如果表中每个数据占用2个单元%所查数据位

于矩阵的第3行第4列*#’3’1,$%#’4’%,$+%则表中要查找数据地址与表首地址的差值

为2/*%/3.4+&$例">"4%!编程实现将程序存储器中$#行$#列的表格1J,P中的第3行4列元素读入

累加器J中&假设此表中每个元素占用一个字节%且3$4分别存放在I"$I4中&程序清单如下)!!,8JI8)*MU!J%I"!!!!!’取行值

*MU 1%h$# ’每行$#个元素

*KN J1 ’&C%JOO J%I4 ’&C%‘g送J%2+ J ’补偿差距

*MU+ J%eJ‘9+ ’查表

IP8 ’$字节指令

!6.!

Page 67: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!1J,P)O1 $%"%- ’元素*#%#+H*#%:+O1 "%4%- ’元素*$%#+H*$%:+

!11’元素*:%#+H*:%:+

程序中的指令%2+!J用于补偿查表指令*MU+!J%eJ‘9+与表1J,P间的IP8指令

所造成的一个字节的差距&由于3的最大值为:%%a$#%所以%/3小于".5%指令*KNJ1执

行后结果位于累加器J中%1中内容为全#&$注意%!*$+编制查表程序时%要避免表格数据被当做指令执行&例如上两例中%如果IP8指令移

至表格数据后%就会发生表格数据被执行的错误’*"+查表程序中%如果使用O98I%数据表可以放在程序的任何位置’*4+使用9+的查表程序%其地址偏移量为其后#H".5个字节&编制程序时%一方面要求

表格不能太大*最多不能超过".51+%另一方面表格不能离查表指令太远&此外%还需要编程

者根据指令字节数计算地址偏移量%所以并不常用’*D+单片机面向控制的特征决定了其程序执行速度必须要快%而查表程序比运算程序执

行速度快%所以%在实际应用中%应尽可能用查表来代替运算%以加快程序的运行速度&例如例

">""可以通过运算的方法来实现%但使用查表的方法速度更快&

">.>D!散转程序

散转程序用于实现多路分支%这种程序结构可以根据系统的某种输入或运算结果%转向不

同的处理程序&散转程序有不同的实现方法%下面分别进行介绍&

$>使用转移指令表实现散转程序

$例">"D%!假设累加器J中的数据有#$$$"三种不同的取值%编程实现根据累加器J中

数据的不同取值对内部数据存储器中D#L$D$L两单元中的数据进行不同的逻辑运算%并将结

果存入寄存器ID中&具体对应情况为)#对应与运算%$对应或运算%"对应异或运算&使用直接转移指令Jg*9或Ng*9组成一个转移表%表首地址送入 O98I中%然后使用指

令 g*9!eJ‘O98I实现散转&程序清单如下)!!,8JI8)*MU!!I"%D#L!!!’两操作数分别存入I"$I4中

*MU I4%D$L*MU O98I%h8J1 ’表首地址送O98IIN J ’累加器J中内容乘以"g*9 eJ‘O98I ’散转

!!8J1) Jg*9 9I_# ’转到与操作的处理程序

Jg*9 9I_$ ’转到或操作的处理程序

Jg*9 9I_" ’转到异或操作的处理程序

!!9I_#)*MU J%I" ’与操作的处理程序

J2N J%I4*MU ID%JIP8

!:.!

Page 68: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!9I_$)*MU J%I" ’或操作的处理程序

MIN J%I4*MU ID%JIP8

!!9I_")*MU J%I" ’异或操作的处理程序

[IN J%I4*MU ID%JIP8

上面的程序中使用Jg*9指令构成转移指令表%所以各处理程序和散转表8J1都必须在

同一个"]1范围内&如果使用Ng*9指令构成转移指令表%则可以对5D]1范围内的程序实

现散转&由于Jg*9指令占用"个单元%所以使用IN!J指令使累加器J的内容变为原来的

"倍%这样才能实现正确的散转&

">使用地址偏移量表实现散转程序

$例">".%! 使用地址偏移量表的方法实现例">"D的散转程序&利用字节定义伪指令O1可以定义处理程序的地址偏移量表%然后根据此表的内容实现

散转&程序清单如下)!!,8JI8)*MU!I"%D#L!!!!’两操作数分别存入I"$I4中

*MU I4%D$L*MU O98I%h8J1 ’表首地址送O98I*MU+ J%eJ‘O98I ’地址偏移量送累加器Jg*9 eJ‘O98I ’散转

!!8J1) O1 9I_#-8J1 ’地址偏移量表

O1 9I_$-8J1O1 9I_"-8J1

!!9I_#)*MU J%I" ’与操作的处理程序

J2N J%I4*MU ID%JIP8

!!9I_$)*MU J%I" ’或操作的处理程序

MIN J%I4*MU ID%JIP8

!!9I_")*MU J%I" ’异或操作的处理程序

[IN J%I4*MU ID%JIP8

上面的程序中%O1伪指令的功能是定义不同处理程序入口地址与表 8J1首地址的6位

地址偏移量%指令*MU+!J%eJ‘O98I的功能是将不同的地址偏移量送入累加器J中%由于O98I中已经存放了表8J1的首地址%所以使用指令g*9!eJ‘O98I即可实现散转&使

用这种方法时%地址偏移量表和各处理程序必须设在".5个字节中%所以此方法适合比较简单

!#5!

Page 69: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的程序&

4>使用转向地址表实现散转程序

使用地址偏移量表的方法程序必须限制在".5个字节内%不适合转移范围较大的程序&对于转移范围较大的程序%可以直接使用转向地址表%此表的各项为各个转向程序的入口&

$例">"5%! 使用转向地址表的方法实现例">"D的散转程序&使用OW指令构成转向地址表%然后根据此表的内容实现散转&程序清单如下)!!,8JI8)*MU!I"%D#L!!!!’两操作数分别存入I"$I4中

*MU I4%D$L*MU O98I%h8J1 ’表首地址送O98I*MU I.%JJOO J%I. ’累加器J的内容乘"*MU I5%J ’暂存累加器J的内容

*MU+ J%eJ‘O98I ’找到转移地址的高6位

[+L J%I5 ’转移地址的高6位送入I5%2+ J*MU+ J%eJ‘O98I ’找到转移地址的低6位

*MU O9N%J ’转移地址的低6位送O9N*MU O9L%I5 ’转移地址的高6位送O9L+NI J ’累加器J清#g*9 eJ‘O98I ’散转

!!8J1) OW 9I_# ’转向地址表

OW 9I_$OW 9I_"

!!9I_#)*MU J%I" ’与操作的处理程序

J2N J%I4*MU ID%JIP8

!!9I_$)*MU J%I" ’或操作的处理程序

MIN J%I4*MU ID%JIP8

!!9I_")*MU J%I" ’异或操作的处理程序

[IN J%I4*MU ID%JIP8

上面的程序中%由于转向地址表中的每一项都占用"个单元%所以应首先将累加器 J的

内容置为原来的"倍%找到转向地址表中的相应项’然后两次使用 *MU+!J%eJ‘O98I指

令读取转移地址的高低6位%送入 O98I中%并且将累加器 J清零’最后%使用 g*9!eJ‘O98I指令实现散转&

">.>.!软件陷阱

单片机系统的程序在运行时%有可能由于各种原因而进入非程序区&这时%需要有相应的方法

!$5!

Page 70: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

使系统复位&编制能够使系统复位的程序就是一种可供选择的方法&这类程序叫做软件陷阱&软件陷阱的功能是强行将捕获的程序引向一个指定的地址%在那里有一段专门对程序出

错进行处理的程序&软件陷阱可安排在下列地方)*$+未使用的中断向量区’*"+未使用的大片IM*空间’*4+数据表格和散转表格’*D+程序区内的某些位置&为使系统能够正确地复位%软件陷阱程序应包括关闭中断%重新设置堆栈%为主程序重新

指定#区工作寄存器等内容&在这些内容中%对中断激活标志的清除由于没有明确的地址可

供编程而容易被遗忘&在所有指令中%只有 IP8%可清除中断激活标志%因而%应当在软件陷

阱程序中%正确使用IP8%指令&另外%对于单片机系统而言%由于系统已经进行了初始化操

作%所以%系统复位后%应通过适当的方法避免系统再次复位&$例">"3%!编程实现软件陷阱&假设系统的已初始化标志为内部IJ*的55L$53L两

单元%其内容分别为h#JJL和h..L&程序清单如下)!!IP,)+NI!!PJ!!!!!!’关中断

*MU O98I%hPII ’准备返回地址

9K,L O9N9K,L O9LIP8% ’清除高级中断激活标志

!!PII)*MU 55L%h#JJL ’建立上电标志

*MU 53L%h..L+NI J ’准备复位地址

9K,L J++ ’复位地址入栈

9K,L J++IP8% ’清除低级中断激活标志

此程序中%先关闭中断以保证程序顺利进行&通过两条 *MU指令建立上电标志%以表示

系统已经进行过初始化操作&使用两条 IP8%指令清除所有中断激活标志并使系统返回至

####L处执行&

">.>5!数字滤波程序

在单片机系统的信号中%常含有各种噪声和干扰%影响了信号的真实性&因此%应采取适

当的方法消除噪声和干扰%数字滤波就是一种有效的方法&常用的数字滤波方法有算术平均

值法$滑动平均值法等&下面以算术平均值法为例讲述数字滤波的问题&算术平均值法就是通过求%个数据信号的算术平均值的方法进行滤波&$例">"6%!片外IJ*中从OJ8J处开始存放$5个字节数据信号%编程实现用算术平均

值法进行滤波&结果存放在累加器J中&程序清单如下)!!TJU_)!*MU!!!I3%h$5!!!!!’设置计数器

*MU O98I%hOJ8J ’指向数据区

*MU I.%h# ’*I5I.+用于存放累加结果

!"5!

Page 71: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU I5%h#!!NMM9) *MU[ J%eO98I ’取数

JOO J%I. ’加部分和低位

*MU I.%J*MU J%I5 ’取高位

JOO+ J%h# ’处理进位

*MU I5%J%2+ O98IOg2\ I3%NMM9 ’共加$5个数

*MU I3%hD ’右移D次计数

!!NMM9$)+NI + ’清进位

*MU J%I5 ’先移高D位

II+ J*MU I5%J*MU J%I. ’后移低D位

II+ J*MU I.%JOg2\ I3%NMM9$ ’共移D次

IP8

在算术平均值滤波程序中%数据个数%的取值一般为"&%这样便于计算%顺序将累加和右

移&次即可&为确保精度%本程序采用双字节数加法%采取右移D次的方法达到求平均数的目

的&

">.>3!信号产生程序

通过位操作指令%可以实现用软件编程的方法使单片机的某些引脚产生特定的信号&$例">":%!编程实现在$#Y的时间内%单片机的9$>#$9$>$引脚分别产生周期为"##BY

和D##BY的方波信号&单片机的晶振频率为$"*LV&根据题目要求%9$>#引脚上高$低电平维持时间为$##BY%9$>$引脚上高$低电平维持时

间为"##BY%所以%定时基本时间为$##BY&程序清单如下)!!,%_)!*MU!! !I4%h.#!!!!!’设定循环初值)$#Y/"##BYa.#

+NI 9$># ’9$>#$9$>$置低电平

+NI 9$>$!!NMM9)N+JNN OPN ’调用延时$##BY的子程序

+9N 9$># ’每$##BY%9$>#取反一次

N+JNN OPN ’调用延时$##BY的子程序

+9N 9$>$ ’每"##BY%9$>$取反一次

+9N 9$># ’每$##BY%9$>#取反一次

Og2\ I4%NMM9 ’未到$#Y%继续

P2O

此程序中使用了例">$"的延时$##BY子程序%通过循环实现在$#Y的时间内输出不同周

期的方波&在第4章学习定时中断以后%本例的问题可以采用定时中断的方法解决&

!45!

Page 72: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

习!题!"

">$!*+,-.$汇编语言指令由哪两部分组成.各有何功能.">"!指出下列指令源操作数的寻址方式&*$+*MU!I#%h"#L*"+*MU J%eI$*4+*MU 4#L%I.*D+%2+ O98I*.+*MU+ J%eJ‘O98I*5+*MU J%4#L*3+*MU J%1*6+*MU +%D#L*:+*MU[ J%eO98I*$#+*MU O98I%h$"4DL">4!判断下列指令是否正确%如有错误%说明原因&*$+*MU J%I3*"+*MU 4DL%4.L*4+[+LO J%I4*D+OP+ O98I*.+MIN +%/"#L*5+IN 1*3+,P81 "#L>3*6++g2P J%I$%OM2P*:+*MU eI$%I3*$#+JOO+1%I#*$$+9K,LO98I*$"+,K11J%eID*$4+J2N D.L%h.#L*$D++NI I#*$.+[IN +%J++>#*$5+*MU[J%eJ‘9+*$3+Og2\eI$%NJ1PN*$6+g*9 NMM9">D!已知内部IJ*中D#L单元的内容为3#L%分析下列程序段中每条指令的执行结果&*MU I#%h.#L*MU .#L%hD#L*MU J%eI#*MU I$%J*MU 4#L%eI#*MU .#L%4#L">.!下列程序段执行结束后%按要求回答问题&

!D5!

Page 73: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*$+*MU!! J%h##L*MU 1%h#$L*MU ,9%h$#L9K,L J++9K,L 1IP8

结果)*,9+a %*9++a &*"+运行前)+ca#%J+a#%MUa#%9a#&*MU J%h33L*MU 1%h4DLJOO J%1OJ J

结果)*J+a %+ca &*4+运行前)+ca#%J+a#%MUa#%9a#&*MU J%h#3L*MU 1%h#"L*KN J1

结果)*J+a %*1+a %MUa %9a &*D+*MU! I#%h$#L*MU $#L%h"#L*MU eI#%h4#L*MU J%I#

结果)*J+a %*I#+a %*$#L+a &">5!根据要求完成程序&*$+使用查表法求J中数的平方%如果 J中存放的是 #H:之间的数%结果存放在 J%否则 J中存放

#TTL&!!!+g2PJ%h$#L%2$!!!’判定是否越界

!2$) 2" ’越界%转2"’非越界处理

Ng*924 ’跳过越界处理

!2")*MUJ%h#TTL!24)2M9!81)O1!#%$%D%:%$5%".%45%D:%5D%6$*"+根据I4中的数$HD%分别转向2$$2"$24$2D标号执行&

*MUJ%I4 ’I4的值无须越界判定

!g*9eJ‘O98I!!81)Ng*9!2$

Ng*9 2"

!.5!

Page 74: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

Ng*9 24Ng*9 2D

*4+"AY@a$"*LV%编写$Y延时程序*不要求精确+&*MU ID%h.#

!N$) *MU I.%!N") *MU I5%

Og2\ I5%(Og2\ I.%N"Og2\ ID%N$

">3!已知内部IJ*的D#L$D$L两单元存放双字节数’%D"L$D4L两单元存放双字节数(%DDL$D.L两

单元存放双字节数5%编程计算’.(,5%并将结果存放在D#L$D$L两单元中&">6!编程实现将累加器J的高"位置#%低"位置$%其他位取反&">:!*+,-.$汇编语言常用伪指令有哪几种.各有何功能.">$#!编程实现将I4I"中的双字节数右移一位&">$$!编程实现将内部IJ*中以4#L开始的"#个字节的数据传送到外部 IJ*中以$###L开始的单

元中去&">$"!编程实现下列无符号数乘法运算)I"I4CI3#IDI.I5&">$4!编程实现求解D$L$D#L单元中双字节数据的绝对值&">$D!编程实现将内部IJ*中以.#L开始的$#个字节的压缩 1+O数转换成十六进制数%存放在以

5#L开始的单元中&">$.!用子程序方法实现">$D问题&">$5!编制查表程序%实现求寄存器I"中数据的平方值*#’*I"+’"..+&">$3!编制散转程序%实现根据累加器J中数据#$$$"$4的不同取值%将寄存器 I"$I4中的数据相加$

相减$相乘$相除%结果存放在3#L单元*结果为单字节+或3$L$3#L单元*结果为双字节+&">$6!编程实现在单片机的9$>#引脚输出每周期中高电平为D#BY$低电平为$#BY的分频信号&

!55!

Page 75: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第4章!单片机系统及其扩展技术

单片机的芯片内集成了计算机的基本功能部件%包括运算器$控制器$IM*$IJ*$时钟电

路$复位电路$中断$定时器等%在实际应用中经常出现内部资源不够用的情况%所以大多数单

片机还具有系统扩展能力%允许扩展各种外围电路以补充片内资源的不足%满足特定应用的需

要&本章在第$章介绍的单片机内部基本构造基础上%主要介绍单片机中断$定时/计数$串行

通信的使用方法以及*+,-.$系列单片机的系统扩展技术%还介绍常用的一些外围电路接口

和编程&有关器件的工作原理及软$硬件的设计方法对其他系列的单片机处理器也适用%读者

可以举一反三&

4>$!"#$%.$系统扩展原理

系统扩展是指在最小应用系统基础上%增加一些外围功能部件%为加强单片机某方面功能

而进行的扩充&*+,-.$单片机是一个高性能$多产品规格$资源丰富的单片机系列%除了片内

所具有的丰富资源外%还提供了总线的系统扩展方法%可扩展5D]1程序存储器和5D]1数据

存储器或%/M口&*+,-.$提供的三总线如下)9"$9#作为系统$5位地址总线使用%9#分时复用作为6位数

据总线%9,P2$IO$WI$JNP等作为系统扩展的控制总线%其基本系统扩展方法如图4>$所

示&

图4>$!*+,-.$系统扩展示意图

9"口输出地址总线的高6位*J6HJ$.+&9#口是一个多路复用的输入/输出口%作为外

部存储器或%/M设备的低6位地址*J#HJ3+和数据总线*O3HO#+%实现+9K访问外部存储

器或%/M设备&*+,-.$系列单片机采用哈佛结构%程序存储器和数据存储器使用两个独立的空间&如果

!35!

Page 76: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

用户所选择的单片机内部没有程序存储器%那么并行总线上同时扩展程序存储器和数据存储

器时%必须解决在同一寻址空间$同一数据总线上两个不同地址空间的独立操作控制问题&在

这同一寻址空间$同一数据总线中9#口要同时提供低6位地址总线和6位数据总线%因此设

置了一个地址锁存控制信号JNP%由它来控制锁存器锁存9#送出的地址信号%9#口便有时间

来用于寻址后的数据传送&两个空间是指在片外可以分别扩展两个5D]1空间%即片外程序存储器地址空间和数据

存储器地址空间%以满足哈佛结构的要求&为实现上述目标%单片机采用了两套控制信号来确

保两个空间的独立性&IO$WI用于数据存储器及外部设备的数据传输控制%9,P2用于程序

存储器的取指令控制%PJ引脚用来选择片内程序存储器或片外程序存储器&对于无 IM*型

单片机%PJ引脚必须接地&当 *+,-.$访问外部程序存储器时%9,P2有效*输出负脉冲+%而

IO或WI无效*保持高电平+’当 *+,-.$访问外部数据存储器时%IO或WI有效*输出负脉

冲+%而9,P2无效*保持高电平+&这样%两个存储器空间就不会同时被访问&

4>"!存储器扩展

4>">$!程序存储器扩展

程序存储器是用来存储程序代码和程序常数*表格+的%在单片机应用系统研制结束之

后%其软件也就定型了%在使用时无须更改%所以单片机的程序存储器一般由半导体IM*构成&对于无IM*型单片机或单片机内部程序存储器容量不够用时%就需要在外部扩展程序存储器&

$>常用程序存储器

半导体存储器P9IM*$P"9IM*和T)QY;IM*等在原理上都可以用做单片机的外部程序

存储器&但由于P9IM*价格低廉%性能可靠%所以单片机外部程序存储器大多使用P9IM*器

件&用做单片机外部存储器的 P9IM*主要是 "3系列%即 "3$5$"34"$"35D$"3$"6$"3".5$"3.$"等芯片%容量分别是"]1$D]1$6]1$$5]1$4"]1和5D]1&由于"3$5$"34"为"D脚%且容量较小%性价比低%处于停产状态%故现使用较少%而"35D$"3$"6$"3".5$"3.$"均为"6脚%其引脚排列基本向下兼容%程序容量升级较为方便%所以使用较多&"35D$"3$"6$"3".5$"3.$"芯片的引脚图如图4>"所示&图4>"中涉及的引脚符号的含义和功能如下)

! O#HO3)三态数据总线%读或编程校验时%为数据输出线’编程固化时%为数据输入线’维持或编程禁止时%O#HO3呈高阻态’

! J#HJ&)地址输入线%&a$"H$.’! +P)片选信号输入端%该引脚输入#时%芯片被选中%处于工作状态’输入为$时%芯片

处于数据高阻态’! MP)输出允许输入信号线%低电平有效%该引脚为低$+P$地址线有效时数据从O3HO#

输出到数据总线上’! !99)编程电源输入线%输入电压值因制造厂商和芯片型号而异’

! 9_*)编程脉冲输入线’! !++)电源’! _2O)接地&!65!

Page 77: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

引脚"3.$""3".5"3$"6$ J$. !99 !99" J$" J$" J$"4 J3 J3 J3D J5 J5 J5. J. J. J.5 JD JD JD3 J4 J4 J46 J" J" J": J$ J$ J$$# J# J# J#$$ O# O# O#$" O$ O$ O$$4 O" O" O"$D _2O _2O _2O

!

"35D$"4D.536:$#$$$"$4$D

!99J$"J3J5J.JDJ4J"J$J#O#O$O"_2O

!++9_*2+J6J:J$$MPJ$#+PO3O5O.ODO4

"6"3"5"."D"4"""$"#$:$6$3$5$.

!

"3$"6"3".5 "3.$" 引脚!++ !++ !++ "69_* J$D J$D "3J$4 J$4 J$4 "5J6 J6 J6 ".J: J: J: "DJ$$ J$$ J$$ "4MP MP MP/!99 ""J$# J$# J$# "$+P +P +P "#O3 O3 O3 $:O5 O5 O5 $6O. O. O. $3OD OD OD $5O4 O4 O4 $.

图4>"!常用P9IM*芯片引脚图

P9IM*芯片在使用时%主要有以下五种方式)! 编程方式)把已编好的程序代码固化到P9IM*中’! 编程校验方式)读出P9IM*中的内容%检验编程操作的正确性’! 读出方式)+9K从P9IM*读取指令或指令常数’! 维持方式)数据端呈高阻%在单片机应用中%主要工作在读和维持两种方式下’! 编程禁止方式)适用于多片P9IM*并行编程不同的数据&由于现在编程器使用较多%大多数的编程与编程校验均在编程器上自动完成%故对上述三

种与编程有关的方式不做过多叙述%表4>$中列出了"35D$"3$"6$"3".5$"3.$"芯片的读$维持操作方式各引脚的状态&

表4>$!常用-)&,"芯片的操作方式

芯 片 方 式

引 脚 状 态

+P MP 9_* !99 !++ O#HO3

"35D读 N N L !++ ‘.U 数据输出

维持 L [ [ !++ ‘.U 高阻!!

"3$"6读 N N L !++ ‘.U 数据输出

维持 L [ [ !++ ‘.U 高阻!!

"3".5读 N N ( !++ ‘.U 数据输出

维持 L [ ( !++ ‘.U 高阻!!

"3.$"读 N N ( ( ‘.U 数据输出

维持 L [ ( ( ‘.U 高阻!!

!!注)N(低电平’L(高电平’[(任意&

">地址锁存器

程序存储器扩展时%除了要选择 P9IM*芯片外%还必须选择地址锁存器%地址锁存器可

使用带三态缓 冲 输 出 的 O锁 存 器 3DN,434或 6"6"%也 可 以 选 择 带 有 清 除 端 的 3DN,"34&!:5!

Page 78: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

3DN,434与6"6"功能上完全一致%仅在引脚的排列顺序上有所不同%引脚如图4>4所示%在使

用3DN,434与3DN,"34时应注意两者的区别&3DN,434是透明的带有三态门的6O锁存器%内部功能可以简化如图4>D所示&当三态门

的使能信号线MP为低电平时%三态门处于导通状态%允许f端输出’当MP端为高电平时%输出

三态门断开%输出端对外电路呈高阻状态&因此%3DN,434用做地址锁存器时%应使三态门的

使能信号端MP为低电平%这时%当 NP输入端为高电平时%锁存器处于透明状态%f端等于 O端%当NP端从高电平下降到低电平时*下降沿+%输入端 O的数据锁入锁存器中%在 NP端为

低电平期间%不论输入端O如何变化%在f端保持原输出不变&

图4>4!锁存器的引脚

3DN,"34是带有清除端的6O触发器%只有在清除端保持高电平时%才具有锁存功能&锁

存控制端为$$脚+N]&应注意的是3DN,"34采用上升沿锁存%而3DN,434采用下降沿锁存%

图4>D!3DN,434的原理结构

所以二者在作地址锁存时与+9K的连接方式

有所不同%如图4>.所示&对于使用3DN,434锁存控制端%可以直接与 +9K的地址锁存控

制信号 JNP相连%在其下降沿锁存低6位地

址%3DN,"34的 +N]是在上升沿锁存%为了满

足单片机的时序要求%JNP输出的信号必须

经过反相器反相之后%才能与 +N]端相连&由于使用3DN,"34作锁存器比3DN,434多使

用一个非门%因此实际应用中%地址锁存器使

用3DN,434较多&

图4>.!单片机与锁存器的连接方法

!#3!

Page 79: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

40典型扩展电路

随着P9IM*容量越来越大%在使用P9IM*扩展外部程序存储器时%通常只需一片或两

片P9IM*芯片%这样大大简化了扩展电路&P9IM*程序存储器扩展的基本方法如图4>5所

示&在程序存储器扩展时%容量通常大于".51%因此%P9IM*片内地址除9#提供外%还需 9"提供若干根&例如扩展"35D芯片所需地址线为$4根*"$4a6]1+%由9#口提供低6位%9">#H9">D提供高.地址位’当使用"3$"6时%地址线为$D根%高5地址位由 9">#H9">.提供&

当系统只扩展一片P9IM*时%无需片选控制%因此%+P接地即可’若扩展多片%则需考虑片选

和各片对应的地址空间问题&在实际扩展时%还应注意下列问题)! 根据系统容量要求选择P9IM*芯片时%应使电路尽量简化%在满足容量条件下%尽可

能选择单个芯片%简化片选’! 尽量选择管脚兼容的芯片%在电路设计时%充分考虑兼容的特点&如 "35D$"3$"6$

"3".5和"3.$"均为O%9"6封装的芯片%其芯片引脚仅在"5$"3及$脚有差异*因地址线的数

目是增加的+%将"5$"3及$脚的印制板设计成易改接的形式%例如选用跳线或地址开关的方

式%以便更换不同型号的P9IM*%避免因所选P9IM*容量不够重新制作印刷电路板’! 地址锁存器管脚排列不同%电路连接也不同%相互不兼容%扩展时应注意&

图4>5!程序存储器扩展的基本方法

*$+片内无IM*型单片机的扩展

当选择的单片机为6#4$/6#4"时%或者选择其他型号单片机而又不想使用其内部程序存

储器时%需要外接程序存储器&图4>3给出了6#4$扩展一片4"]C6位的程序存储器"3".5的扩展电路*与程序存储器扩展无关的电路未画出+&

由于程序在片外####L单元开始执行%故PJ接地%单片机系统中只有一片程序存储器%故"3".5的+P引脚接地&"3".5程序存储器的地址范围为####LH3TTTL&熟悉其他 P9IM*芯片后%该电路很容易改用其他容量的芯片&如使用"3.$"*5D]C6位+芯片%增加J$.引脚

接至9">3引脚即可’使用"3$"6*$5]C6位+芯片%去掉9">5引脚连线%并将"3$"6的"3脚

接至!++即可’改用"35D*6]C6位+芯片%去掉 9">.$9">5引脚连线%将"35D的"3脚接至

!++即可&若电路中9"口还有未用口线%只能作地址线用%不能简单用做%/M口线&前面提到在设计印刷电路时应考虑兼容性%用户根据需要可以使用跳线或地址开关来选

用不同的P9IM*芯片%图4>6适用于"35D/$"6/".5/.$"四种不同芯片的扩展程序存储器电

!$3!

Page 80: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>3!*+,-.$扩展一片"3".5电路

路原理&当,$悬置%,"$,4接‘.U时%使用"35D芯片’当,$接9">.%,"$,4接 ‘.U时%使用

"3$"6芯片’当 ,$接 9">.%,"接 9">5%,4接 ‘.U时%使用"3".5芯片’当 ,$接 9">.%,"接

9">5%,4接9">3时%使用"3.$"芯片&这样%就实现了一个电路可使用多个规格P9IM*芯片

的方法&由于设计硬件时%不能预知程序所需的容量%所以上述设计思路在实际应用中还是很

实用的&

图4>6!不同容量P9IM*共用扩展电路

*"+片内有IM*型单片机的扩展方法

使用6#.$$63.$或6:.$+9K芯片时%其内部已拥有D]1的程序存储器供用户使用&若容

量不够%还需外接程序存储器&图4>:为扩展6]1P9IM*的6#.$/63.$/6:.$系统扩展电

路&电路中%PJ接‘.U&这是一种既使用单片机片内D]1程序存储器%又使用片外6]1程

!"3!

Page 81: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

序存储器的扩展方法&当9+不大于#TTTL时%访问片内程序存储器%此时9,P2信号无效%单片机不会使用片外程序存储器’当 9+大于 #TTTL时%访问片外 "35D%"35D的地址范围为

$###LH"TTTL%9"口剩余口线也不能简单作为%/M口线使用&

图4>:!6#.$/63.$/6:.$扩展6]1P9IM*电路

*4+多片程序存储器扩展方法

系统中若使用多片程序存储器%每个芯片的片选信号不能直接接地%否则会导致地址和存

储单元失去一一对应关系%出现一个地址对应多个单元的情况&为避免冲突的发生%在多片程

序存储器扩展时%地址信号输出就分成了两部分)一部分为程序存储器片内地址信号%地址线

数目的多少取决于所选的芯片型号’另一部分为程序存储器片外地址%数目为系统地址总线数

减去片内地址剩余部分&"35D片内地址为$4根%"3$"6为$D根%9"口剩余的口线为片外地

址信号&片内地址线对应接至所有存储芯片的地址线引脚%采用并联方式与单个芯片扩展相

同’片外地址用于选片%控制存储芯片的片选信号&选片的方法有两种)一种为线选方法%一根片外地址线控制一个芯片的片选+P端%优点是

电路简单%缺点是占用地址资源较多%有空余地址空间无法使用%可能会导致程序存储地址不

连续’另一种为译码方法%片外地址先送译码器%由译码器输出端控制片选+P端%优点是地址

连续%缺点是电路复杂&

图4>$#!"C5D]1扩展示意图

事实上%由于集成电路技术的发展%多片存储器扩展可采

用一片容量大的存储器%既廉价又简化了设计%能够达到同样

目的&*D+大容量程序存储器的扩展

由前述可知%单片机由9"$9#口提供$5位地址线%直接访

问程序存储器的空间为5D]1%是不是最大空间只能为5D]1呢.若系统的程序和程序数据总容量需求超过5D]1%可以采

用区选法来实现&单片机系统的程序存储器每个区为5D]1%由系统直接访问%区之间的转换通过控制线的方式来实现&图

4>$#为系统扩展$"6]1程序存储空间*"C5D]1+示意图%当系统复位后%9$>#为高电平%选中J芯片’若 9$>#输出低电平%则访问1芯片&存储器分区后跨区操作%尤其是在跨区的子

!43!

Page 82: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

程序$中断调用程序设计中%会带来一系列问题%非常复杂%因此%通常 J芯片用来存放程序代

码%1芯片用来存放程序数据*数据表+%以简化程序设计&读者可以思考%1芯片中的表格数据如何读取&

4>">"!数据存储器扩展

*+,-.$系列单片机内部已具有$"61或".51的 IJ*数据存储器%这些存储器主要用

于工作寄存器$堆栈$数据缓冲器和存放各种标志%对于大多数应用场合已能够满足系统对数

据存储器的要求&对于有大量的数据缓冲保存需求的应用场合*如数据采集系统+%就需要对

单片机的数据存储器进行扩展&

$0外部数据存储器访问方法

在第"章中%介绍了访问外部数据存储器或%/M端口的指令共有D条%这D条指令全部都

是单字节双周期指令%采用间接寻址方式)!!*MU[!J%eI?!!!’**9"+*I&++#J!!读存储器 !!*&a#%$+

*MU[ eI?%J ’J#**9"+*I&++ 写存储器 *&a#%$+*MU[ J%eO98I ’**O98I++#J 读存储器

*MU[ eO98I%J ’J#**O98I++ 写存储器

前"条指令以I#或I$作为地址指针访问外部数据存储器%I#或I$只能提供6位的指

针%仅能访问".5个字节范围内的外部数据存储器%9"口输出上次+9K写入9"口锁存器的内

容%9#口输出I#或I$的内容&由于9#口为地址/数据分时复用总线%同样存在地址锁存的

问题%故也需要地址锁存器在JNP下降沿将地址信号锁存%保持至本机器周期结束&后"条指令以$5位的数据指针O98I作为地址指针访问外部数据存储器%故可对5D]1

范围的外部数据存储器进行访问&执行指令时 9"口输出 O9L的内容%9#口输出 O9N的内

容&

">常用静态IJ*存储

数据存储器在单片机系统中常用来存放程序运行需要保存的结果$现场采集的原始数据

等&为简化电路设计%数据存储器通常选用静态随机存取存储器IJ*%其缺点是一旦掉电%内部所有的数据信息便会丢失&常用的静态存储器 IJ*芯片有5$$5*"]1+$5"5D*6]1+和

5"".5*4"]1+等%其引脚排列如图4>$$所示&图4>$$中涉及的引脚符号的含义和功能如下)! %M3H%M#)双向三态数据总线%有时用O3HO#表示’! J#HJ&)地址输入线 %对于5$$5&a$#%对于5"5D&a$"%对于5"".5&a$D’! +,*+,$+)片选信号输入端%低电平有效’! +,")片选信号输入端%高电平有效*仅5"5D有+’! MP)读选通信号输入线%低电平有效’! WP)写选通信号输入线%低电平有效’! !++)电源 ‘.U’! _2O)地&

!D3!

Page 83: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

引脚 5"".5 5"5D$ J$D 2+" J$" J$"4 J3 J3D J5 J5. J. J.5 JD JD3 J4 J46 J" J": J$ J$$# J# J#$$ %/M# %/M#$" %/M$ %/M$$4 %/M" %/M"$D _2O _2O

!

5$$5$"4D.536:$#$$$"

J3J5J.JDJ4J"J$J#O#O$O"_2O

!++J6J:W_

J$#PO3O5O.ODO4

"D"4

((

(

"""$"#$:$6$3$5$.$D$4

!

5"5D 5"".5 引脚!++ !++ "6/WP /WP "3+," J$4 "5J6 J6 ".J: J: "DJ$$ J$$ "4/MP /MP ""J$# J$# "$/+,$ /+, "#%/M3 %/M3 $:%/M5 %/M5 $6%/M. %/M. $3%/MD %/MD $5%/M4 %/M4 $.

图4>$$!5$55$5"5D$5"".5引脚排列

静态IJ*存储器在使用时%主要有三种工作方式)数据的读出$写入和维持%这些工作方

式的操作控制如表4>"所示&表4>"!5$$5#5"5D#5"".5操作控制

信号方式

+,*+,$+ MP WP %M#H%M3

读 N N L 数据输出

写 N L N 数据输入

维持 L [ [ 高阻态

!!注)N(低电平’L(高电平’[(无关&

5"5D中还有+,"片选%读写时为高电平%维持为低电平&

4>典型扩展电路

数据存储器扩展电路与程序存储器扩展电路相似%所用的地址线$数据线完全相同%与程

序存储器扩展不同的是读$写控制线用IO$WI分别控制存储器芯片的MP和WP&数据存储器

扩展时还应注意%由于单片机系统采用统一编址的方式%%/M扩展的地址空间与数据存储器扩

展的空间是共用的%所以涉及到的问题远比程序存储器扩展要多&*$+单片数据存储器扩展

扩展单片程序存储器时%片选端直接接地即可%因为系统一般只用一片程序存储器芯片&但是扩展单片数据存储器时%即便仅扩展一片 IJ*芯片%其片选端能否直接接地%则需考虑

应用系统中有无%/M接口及外围设备扩展&若无%可以接地*如图4>$"所示%5"5D芯片地址

范围为####LH$TTTL+’若有%则要统一进行片选&片选方式与程序存储器片选方式类似%也可以采用线选方式或地址译码方式&具体采用哪一种更合适%应根据系统扩展数据存储器容

量$芯片数量以及%/M接口和外部设备的数量来设计&*"+扩展程序及数据存储器

在存储器扩展中%程序存储器扩展和数据存储器扩展很多情况下是同时存在的%这时就不

能孤立地看待这两部分扩展电路了%要将这两部分电路有机地结合起来&图 4>$4所示的

*+,-.$扩展系统中%扩展了4"]1程序存储器*使用一片"3".5芯片+和4"]1数据存储器

*使用一片5"".5芯片+&图中%"3".5芯片+P接地%地址范围为####LH3TTTL&数据存储器

5"".5的+,接9">3%地址范围为####LH3TTTL&!.3!

Page 84: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>$"!扩展6]1数据存储器电路

图4>$4!扩展4"]1IJ*$4"]1P9IM*的*+,-.$系统

4>4!扩展并行接口

*+,-.$单片机共有四个6位并行%/M口%但是这些 %/M口并不能完全提供给用户使用%只有对于片内有程序存储器而又不再需外部扩展的单片机%才允许这四个 %/M口作为用户的

%/M口使用&然而对于大多数使用6#4$以及使用6#.$/63.$/6:.$需要外部扩展时%*+,-.$单片机可提供给用户使用的%/M口只有 9$口和部分 94口线以及作为数据总线用的 9#口&因此%在大多数*+,-.$单片机应用系统设计中都不可避免地要进行并行%/M口的扩展&

4>4>$!扩展概述

$>单片机%/M口扩展方法

单片机应用系统中%扩展并行%/M的方法主要有以下两种)*$+总线扩展方法

采用总线扩展的方法是将扩展的并行 %/M口芯片连接到 *+,-.$单片机的总线上%也即

!53!

Page 85: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

数据总线使用9#口%地址总线使用9"和9#口%控制总线使用部分94口&这种扩展方法不影

响总线上其他扩展芯片的连接%在*+,-.$单片机应用系统的%/M扩展中被广泛采用&*"+串行口扩展方法

*+,-.$单片机串行口工作在方式#时%提供一种%/M扩展方法&串行口方式#是移位寄

存器工作方式%可借助外接串入并出的移位寄存器扩展并行输出口%也可通过外接并入串出的

移位寄存器扩展并行输入口&这种扩展方法不占用并行总线且可以通过扩展多个并行%/M&由于采用串行输入/输出的方法%所以数据传输速度较慢&

">%/M扩展常用芯片

*+,-.$单片机应用系统中%/M扩展芯片主要有88N/+*M,锁存器/缓冲器芯片$通用可

编程%/M接口芯片和可编程门阵列等&*$+88N/+*M,锁存器/缓冲器芯片)如3DN,433$3DN,43D$3DN,"DD$3DN,"D.等’*"+通用可编程%/M接口芯片)如6"..$6$..等’*4+可编程阵列)如_JN$5U6$_JN"#U6等&

4>%/M扩展中应注意的几点问题

*$+访问扩展%/M的方法与访问数据存储器完全相同%使用相同的指令&所有扩展的%/M与片外数据存储器统一编址%分配给%/M端口的地址不能再分配给片外数据存储单元%且与程

序存储器无关’*"+扩展多片%/M芯片或多个%/M设备时%注意总线的驱动器能力问题’*4+扩展%/M口的目的是为了单片机与外部进行信息交换而设置的一个输入/输出通道%

%/M口最终与外设相连%%/M扩展时必须考虑与之相连的外设硬件特性%如驱动器功率$电平$干扰抑制及隔离等’

*D+在软件设计时%%/M口对应初始状态设置$工作方式选择要与外接设备相匹配&

4>4>"!../芯片扩展的01,接口

采用88N或+*M,电路的锁存器$缓冲器$三态门通过 9#口可构成各种类型的输入/输出口&这类%/M接口具有电路简单%成本低%配置灵活方便等特点%在单片机应用系统中被广

泛地应用&

$>扩展并行输出口

通过9#口扩展输出口时%锁存器的端口地址被视做外部 IJ*的地址单元%输出控制信

号为WI%使用 *MU[!eO98I%J指令输出数据&为防止单片机在对外部IJ*及其他外围

设备输出数据时对它的影响%应选择带有使能控制的锁存器&*$+用3DN,433扩展并行输出口

3DN,433是带有输出允许端的6O锁存器%有6个输入端口$6个输出端口$$个时钟输入

端+N]*上升沿有效+和$个允许控制端P&其功能如表4>4所示%在Pa#时%通过+N]端上

升沿信号将数据从输入端O打入锁存器%f端保持 O端的6位数据&所以在与单片机相连

时%O端与9#相连%WI与+N]相连%允许端作为片选控制与单片机地址相连&如图4>$D所

示%P与9">3相连%3DN,433的地址为3TTTL%若与9">#相连%则地址相应为#PTTL&!33!

Page 86: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!表4>4!3D/$433功能表

输入 输出

P +N] O fL [ [ f#N ) L LN ) N N[ N [ f#

注)L(高电平’N(低电平’)(低电平到高电平跳变’[(任意’f#(保持前一状态&

图4>$D!*+,-.$扩展并行输出口3DN,433电路

$例4>$%! 若以图4>$D为接口电路%将片内IJ*地址为.#L单元的数据通过该电路输

出%程序清单如下)!!*MU!!O98I%h3TTTL!!!’数据指针指向3DN,433

*MU J%.#L ’输出的.#L单元数据送累加器J*MU[ eO98I%J ’9#口将数据通过3DN,433输出

*"+用3DN,43D扩展并行输出口

3DN,43D是具有三态输出的6O边沿触发器%其功能与3DN,433相似%如表4>D所示&应

注意3DN,43D具有三态输出%当控制端MP为高电平时%输出为高阻态%将失去锁存器中缓存的

数据%故在应用时与3DN,433有差异&3DN,43D与单片机接口电路如图4>$.所示%3DN,43D的

地址为3TTTL&

表4>D!3D/$43D功能表

输入 输出

MP +N] O f

N ) L L

N ) N N

N N [ f#

L [ [ \

注)\(高阻状态&

图4>$.!*+,-.$扩展并行输出口3DN,43D

3DN,43D具有较强的驱动能力%输出低电平电流 3MN最大可达"DBJ%是3DN,433的4倍&在有较强驱动能力要求的场合%可选用3DN,43D作为并行口扩展器件&!表4>.!3D/$"DD功能表

输入 输出

_ J c

N N N

N L L

L [ \

"0扩展并行输入口

并行输入口扩展比较简单%只需采用6位缓冲器即可&常

用的缓冲器有3DN,"DD%其功能如表4>.所示&3DN,"DD为单

向总线缓冲器%只能一个方向传输数据&并行输入接口与单片

机连 接 如 图 4>$5所 示&图 中 9">3引 脚 与IO共 同 控 制

!63!

Page 87: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

3DN,"DD的_端%两者均为低电平时%数据输入到单片机中%3DN,"DD的地址为3TTTL&

图4>$5!扩展3DN,"DD并行输入口

$例4>"%!如图4>$5所示%扩展并行输入口%将输入口中的6位数据送片内.$L单元%程序清单如下)

!!*MU!O98I%h3TTTL!!’数据指针指向3DN,"DD*MU[ J%eO98I ’外部数据经过3DN,"DD送入累加器J*MU .$L%J ’数据送.$L单元保存

4>4>4!可编程01,接口芯片扩展

可编程%/M接口芯片具有使用灵活%可扩展多个并行%/M口等特点%任何一个口都可以编

程设定为输入或输出口%应用非常广泛&下面以最常用的6"..J$6$..为例%介绍通过可编程

%/M接口芯片扩展并行%/M口的方法&

$>可编程并行口6"..J

*$+6"..J的结构及引脚功能

6"..J是%&’()公司生产的通用可编程并行接口电路%广泛应用于单片机扩展并行 %/M口&它具有4个6位并行口9J$91和9+&6"..J的引脚及逻辑框图如图4>$3所示&6"..J的引脚功能如下)! O3HO#)双向三态数据总线%通常与+9K数据总线相连’! 9J)6位%/M口’! 91)6位%/M口’! 9+)6位%/M口’! +,)片选信号输入端%低电平有效’! IO)读选通输入端%低电平有效’! WI)写选通输入线%低电平有效’! IP,P8)复位输入引脚%高电平有效%复位后9J$91$9+口均为输入’! !++)电源‘.U’! _2O)接地’! J$$J#)端口地址输入线%通过地址组合选择6"..J内部寄存器)

J$!J#!被选中寄存器

# # 9J口寄存器

!:3!

Page 88: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

# $ 91口寄存器

$ # 9+口寄存器

$ $ 控制寄存器

图4>$3!6"..J引脚及逻辑框图

从图4>$3*Q+中可以看出%6"..J的三个并行口被分成两组)J组和1组%9+口的6位被

分为上+口*9+3H9+D+和下+口*9+4H9+#+%分别属于J组和1组&*"+6"..J的操作方式

6"..J的全部工作状态是通过读/写控制逻辑和设定的工作方式来实现的&$+读/写控制逻辑操作选择&主要通过单片机输出的地址线J$$J#选择端口%+,选中芯

片%WI与IO选择数据流向&6"..口的操作状态如表4>5所示&表4>5!6"..口的操作状态

J$ J# IO WI +, 输 入 操 作 !读"# # # $ # J口#数据总线

# $ # $ # 1口#数据总线

$ # # $ # +口#数据总线

输 出 操 作 !写"# # $ # # 数据总线#J口

# $ $ # # 数据总线#1口

$ # $ # # 数据总线#+口

$ $ $ # # 数据总线#控制寄存器

禁 止 操 作

[ [ [ [ $ 数据总线三态

$ $ # $ # 非法条件*读控制寄存器+[ [ $ $ # 数据总线三态

!!"+工作方式选择&6"..J有三种工作方式)方式#$方式$和方式"&! 方式#*基本输入/输出方式+&这种方式不需要任何选通信号%适合于无条件传输数

!#6!

Page 89: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

据的设备%如读一组开关状态%控制一组指示灯&J组 *两个端口+和1组 *两个端口+中任

意一个端口都可以被设定为输入或输出&数据输出有锁存功能%数据输入有缓冲 *无锁存+功能&!

! 方式$*选通输入/输出方式+&这种工作方式下%J组包括J口和上+口%J口可由程

序设定为输入口或输出口%上+口则用来作为输入/输出操作的控制和同步信号&1组包括1口和下+口%功能和J组相同&

! 方式"*双向%/M口方式+&仅J口有这种工作方式%1口无此工作方式&此方式下%J口为6位双向%/M口%+口的9+3H9+4用来作为输入/输出的控制和同步信号&此时1口可

以工作在方式#或方式$&6"..J在不同的工作方式下%各口线的功能如表4>3所示&

表4>3!6"..’不同方式下口线的功能

端口方式# 方式$ 方式"

输入 输出 输入 输出 输入/输出

J口 %2 MK8 %2 MK8 双向

1口 %2 MK8 %2 MK8 无

9+# %2 MK8 %28I1 %28I1 无

9+$ %2 MK8 %1T1 M1T1 无

9+" %2 MK8 ,811 J+]1 无

9+4 %2 MK8 %28IJ %28IJ %28IJ

9+D %2 MK8 ,81J %/M ,81J

9+. %2 MK8 %1TJ %/M %1TJ

9+5 %2 MK8 %/M J+]J J+]J

9+3 %2 MK8 %/M M1TJ M1TJ

!!各种工作方式下9+口引脚符号含义如下)! ,81*,’FAR(%&<G’+)设备选通信号输入线%低电平有效&外部设备将数据送入6"..J

的输入口时%发一个,81脉冲%在,81脉冲的下降沿将端口数据线上的信息打入6"..J端口缓

存器&! %1T*%&<G’1GZZ(FTG))+)端口锁存器满标志输出线%与设备相连&%1T为高电平%表示

设备已将数据打入端口缓存器%但+9K尚未读取&当+9K读取端口数据后%%1T变成低电平%表示端口缓存器已为空&

! %28I*%&’(FFG<’I(mG(Y’+)中断请求信号线%高电平有效%送 +9K申请中断%对*+,-.$来说%应使该信号反相后接+9K的外部中断源输入端&

! M1T*MG’<G’1GZZ(FTG))+)输出缓存器满状态标志输出线%M1T为低电平表示+9K已将

数据写入端口&设备从端口取走数据后发送过来的回答信号J+]使M1T升为高电平&! J+]*J@&A=)(SE(+)设备响应信号输入线%设备通过此引脚通知端口数据已取走&以上信号中%,81$J+]为握手信号%%1T$M1T为缓冲器满状态&在输入时%外设通过,81

将数据送入端口缓存器%同时%1T变为高电平%表示端口缓存器已接收到外设送来的数据%且%28I变为高电平%向+9K申请中断%等待 +9K将数据取走%+9K取走数据后%%1T自动变低%%28I随%1T自动无效&输出与输入类似&

!$6!

Page 90: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

4+6"..J的控制字&6"..J的初始化编程是通过对控制口写入控制字的方式实现的%控制字有两个%一是方式控制字%另一个是9+口置位/复位控制字&

! 方式控制字&控制6"..J三个端口的工作方式%特征是最高位为$&例如%将#1$L写

入6"..J控制寄存器后%6"..J被编程设定为 J口为方式$输入%1口为方式#输出%9+3H9+D为输出%9+4H9+#为输入&6"..J方式控制字格式如下所示)

J组 1组

O3 O5 O. OD O4 O" O$ O#$

#)9+4H9+#输出’$)9+4H9+#输入

#)1口输出’$)1口输入

1口方式&#)方式#’$)方式$

#)9+3H9+D输出’$)9+3H9+D输入

#)J口输出’$)J口输入

J口方式&##)方式#’#$)方式$’$[)方式"

6"..J9+口置位/复位字格式如下所示)

O3 O5 O. OD O4 O" O$ O## [ [ [

!!!!!!!!!!!!!!!!置位/复位&#)复位’$)置位

!!!!!!!!!!!!!!!!指定9+位&###)9+#’##$)9+$’#$#)9+"’#$$)9+4

$##)9+D’$#$)9+.’$$#)9+5’$$$)9+3

!!! +口置位/复位控制字&+口具有位操作能力%把一个置位/复位控制字写入6"..J的

控制寄存器%就能把+口的某一位置$或清#%而不影响其他位的状态%它的特征是最高位为

#&若将控制字#OL写入6"..J控制寄存器%则将9+5置$&*4+接口与编程方法

$+硬件连接&由于6"..J内部已有数据总线驱动器%可以直接与 *+,-.$单片机总线相

连接&图4>$6是6"..J与*+,-.$单片机的一种连接方法&6"..J的IO$WI分别与*+,-.$单片机IO$WI相连%+,接 9">3%单片机地址线最低两位分别接6"..J的 J$$J#%O3HO#接

9#口%故6"..J的9J%91%9+及控制寄存器的地址分别是3TT+L$3TTOL$3TTPL和3TTTL%通常6"..J应与*+,-.$系统同步复位&"+程序设计&如图4>$6所示%假设6"..J的9J接一组6只状态指示灯%91接一组6个

开关%现需将开关闭合的状态通过指示灯显示出来%编写相应程序&通过分析可知)6"..J的9J$91均为基本输入/输出方式%即J口方式#输出%1口方式

#输入%+口未用*方式字可以取#%输出+%则6"..J的方式字为6"L%初始化及输入/输出如

下&程序清单)!!O,96"..)*MU!!O98I%h3TTTL!!!!’数据指针指向6"..J控制口

*MU J%h6"L ’控制字送累加器J*MU[ eO98I%J ’控制字送6"..J控制口

*MU O98I%h3TTOL ’数据指针指向6"..J1口

*MU[ J%eO98I ’将1口开关状态读入累加器J

!"6!

Page 91: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU O98I%h3TT+L ’数据指针指向6"..JJ口

*MU[ eO98I%J ’开关状态送J口指示灯显示

IP8

图4>$6!6"..J与*+,-.$单片机连接图

">IJ*/%M扩展芯片6$..

6$..芯片除具有"个6位可编程并行 %/M口 9J$91%$个5位可编程并行 %/M口 9+之

外%片内还有".5个字节的静态 IJ*%$个$D位计数器&6$..具有与 *+,-.$单片机接口简

单%内部资源丰富等优点%是单片机应用系统中广泛使用的芯片&*$+6$..的结构及引脚功能

6$..的引脚如图4>$:*Q+所示%逻辑框图如图4>$:*R+所示&

图4>$:!6$..引脚及逻辑框图

图4>$:中涉及的引脚符号的含义和功能如下)!46!

Page 92: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! JO#HJO3)地址/数据线’! %M/*)%M/IJ*选择信号线%输入高电平选择%/M操作%低电平选择访问片内IJ*’! +P)片选信号输入线%低电平有效’! IO)读选通输入线%低电平有效’! WI)选通输入线%低电平有效’! 8%)计数器计数脉冲输入线’! 8M)计数器的输出信号线%输出波形由内部定时工作方式决定’! 9J#H9J3)6位并行%/M口’! 91#H913)6位并行%/M口’! 9+#H9+.)5位并行%/M口’! JNP)地址锁存信号输入线%其下降沿时%锁存 JO#HJO3上的地址&当 %M/*a$时%

该地址为端口地址’当%M/*a#时%该地址为片内IJ*地址’! IP,P8)复位输入引脚%高电平复位&复位结束后%9J$91$9+口的初始状态均为输入

口’! !++)电源‘.U’! !,,)接地&*"+6$..的IJ*和%/M地址编码

6$..的%/M端口及IJ*地址在单片机应用系统中与外部数据存储器是统一编址的%其控制操作如表4>6所示%对应%/M口寄存器的地址编码如表4>:所示&!!!!!!!表4>6!6$..控制操作

控制信号

+P %M/* IO WI操!作

# # # $ 读IJ*单元*地址为CC##LHCCTTL+

# # $ # 写IJ*单元*地址为CC##LHCCTTL+

# $ # $ 读内部寄存器

# $ $ # 写内部寄存器

$ [ [ [ 无操作

!

!!表4>:!6$..内部寄存器编址

地!址 寄 存 器

CCCCC### 命令字$状态字

CCCCC##$ 9J口寄存器

CCCCC#$# 91口寄存器

CCCCC#$$ 9+口寄存器

CCCCC$##定时器/计数器低6位寄存器

CCCCC$#$定时器/计数器高6位寄存器

*4+命令/状态寄存器

6$..的命令/状态寄存器物理上只有一个端口地址*如表4>:所示+&对该口写操作%命令字被写入命令寄存器’对该口读操作%则从状态寄存器读出状态字&6$..所提供的每个%/M口和定时器都是可编程的&%/M的工作方式选择%定时器/计数器

的工作控制都是通过对6$..内部命令寄存器设定命令控制字的方式来实现的%通过对状态字

的读取来判别它们的工作状态&命令/状态寄存器共用一个口地址%通过读/写信号加以区分%命令字寄存器只能写不能读%状态寄存器只能读不能写&6$..命令字格式如下所示)

!D6!

Page 93: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

O3 O5 O. OD O4 O" O$ O#

8*"8*$%P1%PJ9+"9+$91 9J

#)9J为输入’$)9J为输出#)91为输入’$)91为输出

!!##)9J$91为基本%/M%9+为输入口’$$)9J$91为基本%/M%9+为输出口#$)9J为选通%/M%91为基本%/M%9+.H9+4为输出线%9+#为%28IJ%9+$为1TJ%

! ! !9+"为,81J!!$#)9J$91为选通%/M%9+#为%28IJ%9+$为1TJ%9+"为,81J%9+4为%28I1%9+D!! !为1T1%9+.为,811#)禁止9J中断’$)允许9J中断

#)禁止91中断’$)允许91中断!!##)空操作%不影响定时器/计数器工作

#$)立即停止定时器/计数器计数

!!$#)待定时器/计数器计数溢出后停止计数!!$$)启动定时器/计数器计数

!!6$..状态字格式如下所示)

O3 O5 O. OD O4 O" O$ O#

[ 8%*PI %28P1 1T1 %28I1 %28PJ 1TJ %28IJ

9J中断请求标志

9J缓冲器满标志

9J中断允许标志

91中断请求标志

91缓冲器满标志

91中断允许标志

定时器/计数器中断请求标志&硬件置位/复位)定时器/计数器计数溢出时置$%+9K读!!!6$..状态字后清#

!!*D+定时器/计数器的扩展

6$..片内有一个$D位的减法计数器%可对输入脉冲进行减法计数%它可以在###"LH4TTTL之间选择计数器初值&外部有两个定时器/计数器引脚端8%$8M%8%为定时器时钟输

入%由外部输入时钟脉冲%时钟脉冲频率最高可达D*LV&8M为定时器输出%输出各种信号脉

冲波形&定时器的高5位$低6位计数单元和定时输出方式由6$..内部两个寄存器确定&这两个

寄存器格式如下)高字节寄存器 低字节寄存器

O3 O5 O. OD O4 O" O$ O# O3 O5 O. OD O4 O" O$ O#*" *$8$48$"8$$8$#8: 86 83 85 8. 8D 84 8" 8$ 8#

方式!!!!!!!!!!$D位计数初值*###"LH4TTTL+

!!高字节寄存器的最高两位*"$*$所对应的定时器/计数器的工作方式如表4>$#所示&对定时器进行编程时%首先将计数初值及定时方式送入定时器的高$低字节寄存器%计数

初值不要超过范围%计数器的启停由命令字的最高两位控制%任何时刻都可以置定时器的初值

和工作方式%然后必须将启动命令写入命令寄存器%即使计数器已经计数%在写入启动命令后

仍可改变定时器的工作方式%6$..复位后不预置定时器方式和计数初值&应注意6$..定时

器在计数过程中%计数值并非直接表示从8%引脚输入的脉冲个数&

!.6!

Page 94: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表4>$#!6$..定时器操作方式

*"*$ 方 式 8M输出波形 说 !!明

#!# 单负方波低电平宽为%6"个*%为偶数+或*%,$+6"个*%为奇数+8%时

钟周期

#!$ 连续方波

低电平宽为%6"个*%为偶数+或*%,$+6"个*%为奇数+8%时

钟周期%高电平宽为%6"个*%为偶数+或*%.$+6"*%为奇数+

个8%时钟周期%自动恢复初值

$!# 单负脉冲 溢出时输出一个宽为8%时钟周期的负脉冲

$!$ 连续脉冲每次计数溢出时输出一个宽为8%时钟周期的负脉冲%自动恢复

初值

!!*.+接口与编程

$+硬件连接&6$..可以直接与 *+,-.$单片机连接%不需要任何外加逻辑&扩展一片

6$..系统将增加".51片外IJ*%""位%/M口线及$个$D位减法计数器%*+,-.$与6$..的

连接方法如图4>"#所示&

图4>"#!*+,-.$与6$..的一种接口逻辑

9#口不需要加锁存器%可以直接与6$..的JO#HJO3相连%它既是低6位地址线也是6位数据线&6$..的锁存信号 JNP直接引自单片机 JNP输出%用以在内部锁存地址&+P及

%M/*与*+,-.$的连接方法决定了6$..的地址范围*按图4>"#中的连接方法+)!!!!IJ*字节地址范围)!3P##LH3PTTL!!!! 命令/状态寄存器) 3T##L!!!! 9J口) 3T#$L

!56!

Page 95: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!!! 91口) 3T#"L!!!! 9+口) 3T#4L!!!! 定时器低6位寄存器)3T#DL!!!! 定时器高6位寄存器)3T#.L

"+程序设计&在图4>"#接口电路中%将单片机片内IJ*.#LH.TL单元的内容送6$..片内的.#LH.TL单元%并设定6$..的工作方式为)J口基本输入方式%1口基本输出方式%+口输入方式%定时器作方波发生器%对输入脉冲.#分频&

程序清单如下)!!O6$..)*MU!!I#%.#L!!!!!’+9K片内IJ*.#L单元地址指针送I#

*MU O98I%h3P.#L ’数据指针指向6$..内部IJ*单元

!!N9) *MU J%eI# ’数据送累加器J*MU[ eO98I%J ’数据从累加器J送6$..内部IJ*单元

%2+ O98I ’指向下一个6$..内部IJ*单元

%2+ I# ’指向下一个+9K内部IJ*单元

+g2P I#%h5#L%N9 ’数据未传送完返回

*MU O98I%h3T#DL ’指向定时器低6位

*MU J%h4"L ’分频系数4"L*即.#+*MU[ eO98I%J ’低6位初值装入

%2+ O98I ’指向定时器高6位

*MU J%hD#L ’设定时器方式为连续方波*D#La#$######1+*MU[ eO98I%J ’定时器/计数器方式及高5位初值装入

*MU O98I%h3T##L ’数据指针指向控制字寄存器

*MU J%h#+"L ’设定J$1口方式%并启动定时器*#+"La$$####$#1+*MU[ eO98I%JIP8 ’程序返回

4>4>D!扩展可编程门阵列

$>可编程门阵列的发展

当今社会是数字化的社会%是数字集成电路广泛应用的社会&数字集成电路由早期的电

子管$晶体管$中小规模集成电路$发展到超大规模集成电路*UN,%+%几万门以上+&但是随着

微电子技术与应用的发展%设计与制造集成电路的任务已不完全由半导体厂商来独立承担&系统设计师们更愿意自己设计专用集成电路*J,%+%J<<)?@Q’?A&,<(@?Z?@%++芯片%而且希望最

好能在实验室里设计出合适的J,%+芯片%周期尽可能短地投入实际应用中%因而出现了现场

可编程逻辑器件*T9NO+%其中应用最广泛的当属现场可编程门阵列*T9_J+和复杂可编程逻

辑器件*+9NO+&早期的可编程逻辑器件只有可编程只读存储器*9IM*+$紫外线可擦除只读存储器

*P9IM*+和电可擦除只读存储器*P"9IM*+以及随后出现的T)QY;IM**闪速存储器+四种&由于结构的限制%它们只能用于存储固定的数据和程序&

过渡期内%出现了一类结构上稍复杂的可编程芯片%即可编程逻辑器件*9NO+%它能够通

过编程完成各种数字逻辑功能&典型的 9NO由一个"与#门和一个"或#门阵列组成%而任意

一个组合逻辑都可以用"与一或#表达式来描述%所以 9NO能以乘积和的形式完成大量的组合

!36!

Page 96: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

逻辑功能&这一阶段的产品主要有 9JN*可编程阵列逻辑+和 _JN*通用阵列逻辑+&9JN*9FAEFQBBQR)(JFFQXNAE?@+由一个可编程的"与#平面和一个固定的"或#平面构成%通过编程

确定输出与输入的逻辑组合关系&9JN器件是现场可编程的%它的实现工艺有反熔丝技术$P9IM*技术和P"9IM*技术&在9JN的基础上%又发展出了一种通用阵列逻辑_JN*_(&(F-?@JFFQXNAE?@+%如_JN$5U6%_JN"#U6等&它采用了P"9IM*工艺%实现了电可擦除$电可改

写%其输出结构是可编程的逻辑宏单元%因而它的设计具有更强的灵活性%至今仍大量使用&这些早期的9NO器件的一个共同特点是可以实现速度特性较好的逻辑功能%使逻辑组合电路

设计简单%便于修改%取代了使用88N门电路固定搭接复杂逻辑组合的应用场合%但其过于简

单的结构也使它们只能实现规模较小的电路&为了弥补这一缺陷%"#世纪6#年代中期%J)’(FQ公司和[?)?&b公司分别推出了类似于 9JN结构的扩展型 +9NO*+AB<)(b9FAEFQBBQR)(NAE?@Od?@(+和与标准门阵列类似的T9_J*T?()S9FAEFQBBQR)(_Q’(JFFQX+%它们都具有体系结构和

逻辑单元灵活$集成度高以及适用范围宽等特点&这两种器件兼容了9NO和通用门阵列的优

点%可实现较大规模的电路%编程也很灵活%与门阵列等其他J,%+相比%它们又具有设计开发

周期短%设计制造成本低%开发工具先进%标准产品无需测试%质量稳定以及可实时在线检验等

优点%因此被广泛应用于产品的原型设计和产品生产*一般在$####件以下+之中&几乎所有

应用门阵列$9NO*9FAEFQBBQR)(NAE?@O(d?@(+和中小规模通用数字集成电路的场合均可应用

T9_J和+9NO器件&%,9*在系统可编程器件+是美国 NQ’’?@(半导体公司生产的可编程逻辑器件的专用商标%

也是一种9NO器件&所谓在系统可编程%是指在用户自己设计的目标系统中或线路板上为重

构逻辑器件进行编程或反复编程的能力&常规9NO通常是先编程后装配%而采用 %,9技术的

9NO则是先装配后编程%成为产品之后还可反复编程&系统可编程器件的出现使得当今数字

电子系统设计的面貌焕然一新&采用%,9技术之后%硬件设计可变得像软件那样灵活而易于

修改&这不仅扩展了器件的用途%缩短了系统调试周期%而且还省略了对器件单独编程的环节

和器件编程设备%简化了目标设备的现场升级和维护工作&+9NO$T9_J也与%,9类似%可以通过下载电缆%将设计下载到芯片中&综上所述%%,9$+9NO$T9_J等都是 9NO器件%由于公司$产品性能$工艺技术等的差异%

具体名称不同而已&

">T9_J/+9NO厂商

随着可编程逻辑器件应用的日益广泛%许多%+制造厂商涉足9NO/T9_J领域&目前世界

上有十几家生产 +9NO/T9_J的公司%最大的三家是)JN8PIJ$[%N%2[和 NQ’’?@(-UQ&’?Y%其中

JN8PIJ和[%N%2[占有了5#n以上的市场份额&*$+JN8PIJ)"#世纪:#年代以后发展很快%是最大可编程逻辑器件供应商之一&主要产

品有 *J[4###/3###$TPN[5]/$#]$J9P["#]和 J+P[$]&普遍认为其开发工具(((*Qb-<)GY"是较成功的9NO开发平台&但*Qb<)GY"的 ULON综合能力不够强%一般建议使用 J)-’(FQ公司绑定的第三方ULON综合工具%如T9_J(b<F(YY$N(A&QFS,<(@’FGB等&

*"+[%N%[2)T9_J的发明者%老牌 9NO公司%是最大可编程逻辑器件供应商之一&产品

种类较全%主要有 [+:.##/D###$+AA)FG&&(F$,<QF’Q&和 U(F’(b&开发软件为 TAG&S?’?A&4>$&通常来说%在欧洲用[?)?&b的较多%在亚洲使用 JN8PIJ的较多%在美国则是平分秋色&全球

9NO/T9_J产品5#n以上是由JN8PIJ和[%N%2[提供的&可以说 JN8PIJ和 [%N%2[共同

!66!

Page 97: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

决定了9NO技术的发展方向&*4+NQ’’?@(-UQ&’?Y)NQ’’?@(是%,9技术的发明者&%,9技术极大地促进了9NO产品的发展%

与JN8PIJ和[%N%2[相比%其开发工具比 JN8PIJ和 [%N%2[略逊一筹&中小规模 9NO比

较有特色%而且参考书较多%不过其大规模 9NO的竞争力还不够强&$:::年收购 UQ&’?Y*原

J*O子公司+%成为第三大可编程逻辑器件供应商&"##$年推出可编程模拟器件&主要产品

有?Y<N,%$###/"###%*J+LD/.&*D+J@’())反熔丝*一次性烧写+9NO的领导者%由于反熔丝 9NO抗辐射%耐高低温%功耗

低%速度快%所以在军品和宇航级上有较大优势&JN8PIJ和 [%N%2[则一般不涉足军品和宇

航级市场&*.+W,%)生产 9,O*单片机可编程外围芯片+产品&这是一种特殊的 9NO%如最新的

9,O6bb$9,O:bb集成了9NO$P9IM*$T)QY;%并支持 %,9*在线编程+%价格偏贵%但集成度高%主要用于配合单片机工作&"###年6月%W,%被,8收购&

4>D!串行通信

*+,-.$单片机与外部设备之间的信息交换*即通信+有两种方式)一种是4>4节所介绍

的数据各位同时传送的方法%称为并行通信’另一种是本节将介绍的数据逐位串行地顺序传送

的方法%称为串行通信&并行通信中%信息传输线的根数和传送的数据位数相等%通信速度快%适合于近距离的通

信&串行通信仅需一对传输线即可实现通信%适合于远距离通信&串行通信有两种基本方式)异步通信和同步通信&异步通信是以字符为单位传送的%字符前面有一个起始位*#+%后面有一个停止位*$+%是

一种起止式通信方式%字符间没有固定的间隔长度%这种方式的优点是数据传送可靠性高%能及时发现错误%缺点是通信效率比较低&典型的异步通信数据格式如下所示)

起始位 O# O$ O" O4 OD O. O5 O3 停止位

!!同步通信是以数据块方式传送的%将多个字符组成一个数据块%字符间无间隔%在数据块

块首加上控制信息后一起发送出去&这种方式通信效率较高%但要求收发双方设备有较高的

同步性能&

4>D>$!"#$%.$的串行口

*+,-.$有一个全双工串行通信口%既可作为串行异步通信KJI8*K&?d(FYQ)JYX&@;FA&AGYI(@(?d(F/8FQ&YB?’’(F+接口%也可工作在同步移位寄存器方式下&作为KJI8时%具有多机通信

能力&

$0串行口的基本组成

串行口由发送控制$接收控制$波特率输入管理和发送/接收缓冲器,1KT组成%如图4>"$所示&数据接收缓冲器,1KT只能读出不能写入%数据发送缓冲器,1KT只能写入不能读出%这两个缓冲器都用符号 ,1KT表示%地址都是::L&+9K对特殊功能寄存器 ,1KT执行写操

作%就是将数据写入发送缓冲器%对,1KT读操作%就是读出接收缓冲器的内容&!:6!

Page 98: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>"$!*+,-.$串行口内部结构示意图

串行口的通信操作体现为累加器J与发送/接收缓冲器 ,1KT间的数据传送操作&对串

行口完成初始化操作后%要发送数据时%待发送的数据由 J送入 ,1KT%在发送控制器控制下

组成帧结构%并自动以串行方式从8[O端发送出去%在发送结束后置位 8%%如果要继续发送%在指令中将8%清#&接收数据时%置位接收允许位才开始串行接收操作%在接收控制器控制

下%通过移位寄存器将接收到的串行数据送入,1KT%接收结束后置位I%&

"0串行口控制寄存器,+M2

特殊功能寄存器,+M2用于存放串行口的控制和状态信息%其地址为:6L%具有位寻址功

能&,+M2的格式如下)

,+M2O3 O5 O. OD O4 O" O$ O#,*# ,*$ ,*" IP2 816 I16 8% I%

各位的含义及功能如下)! ,*#%,*$)串行口工作方式选择位&各位的状态对应的方式功能如表4>$$所示&! ,*")多机通信控制位&在方式"$方式4中用于多机通信控制&在方式"$方式4的接

收状态中%若,*"a$%接收到的第:位*I16+为#时%舍弃接收到的数据%I%清#’I16为$时

将接收到的数据送接收,1KT中%并将I%置$’对于方式$%接收到有效的停止位时%激活 I%’对于方式#%,*"应置#&

! IP2)允许接收位&IP2a$时允许接收%IP2由指令置位或复位&! 816)第:位发送的数据&多机通信时*方式"$方式4+816标明主机发送的是地址还

是数据%816a#为数据%816a$为地址&816由指令置位或复位&! I16)第:位接收的数据%用来存放接收到的第:位数据%用于表明所接收数据的特征

或用于校验&对于方式#%不使用I1&! 8%)发送中断标志%由硬件置位&方式#串行发送完6位数据后置位%其他方式串行发

送停止位置位&! I%)接收中断标志%由硬件置位&方式#接收完6位数据后置位%其他方式接收到停止

位时置位&$注意%!8%和I%均无法由硬件清除%必须由软件清#&!#:!

Page 99: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表4>$$!串行口工作方式

,*# ,*$ 方式 功能说明

# # # 移位寄存器方式*用于%/M口扩展+

# $ $ 6位KJI8%波特率可变*8$溢出率/&+

$ # " :位KJI8%波特率为"AY@/5D或"AY@/4"

$ $ 4 :位KJI8%波特率可变*8$溢出率/&+

40电源控制寄存器9+M2

串行口借用了电源控制寄存器9+M2的O3位作为串行波特率系数,*MO控制位%9+M2不可位寻址%直接地址为63L&当,*MO为$时%波特率加倍%9+M2的其他位为通用标志位

和掉电方式控制位*+L*M,型单片机有效+&9+M2的格式如下)

9+M2O3 O5 O#,*MO

4>D>"!串行口的工作方式

串行口由,+M2中,*#$,*$选择四种工作方式%如表4>$$所示&

$>方式#

*$+特点

$+移位寄存器工作方式%常用做串行%/M扩展%具有固定的波特率)"AY@/$"’"+同步发送/接收%由8[O提供移位脉冲%I[O用做数据输入/输出通道’4+发送/接收6位数据%先低位%后高位&*"+发送

执行*MU!,1KT%J指令时%启动发送操作&8[O输出移位脉冲%I[O同步串行发送

,1KT中的数据&每个机器周期 8[O发送一个移位脉冲%每个移位脉冲 I[O发送一位数据&发送完6位数据后自动置位8%%请求中断&

*4+接收

在I%a#的条件下%置IP2a$后%启动一帧数据的接收%由 8[O输出移位脉冲%由 I[O接收串行数据到,1KT中&每个机器周期8[O发送一个移位脉冲%每个移位脉冲期间I[O接

收一位数据%接收一帧数据结束后自动置位 I%a$%请求中断&在继续接收下一帧之前%要用

*MU!J%,1KT指令将上一帧数据取走&

">方式$

*$+特点

$+6位的KJI8接口’"+帧结构为$#位%$位起始位#%6位数据位%$位停止位$’4+可变波特率%由8$的溢出率决定&*"+发送

执行一条*MU!,1KT%J指令后%J中的数据送往发送缓冲器 ,1KT%,1KT中的数据从

8[O端向外发送%在发送数据前先发一位起始位%然后紧跟6位数据位%再发一位停止位%发!$:!

Page 100: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

送完一帧数据后置位8%a$%请求中断&*4+接收

当置位IP2时%串行口采样I[O引脚&当采样到$至#的跳变时%确认串行数据帧的起

始位%开始接收一帧数据%直到停止位到来时%把停止位送入I16中%置位I%a$%请求中断%通知+9K从,1KT中取走接收到的数据&

4>方式"和方式4

方式"和方式4具有多机通信功能%两种方式除了波特率设置不同外%其余完全相同&*$+特点

$+:位KJI8接口’"+帧结构为$$位%包括$位起始位#%6位数据位%$位校验位816/I16和$位停止位$’4+在方式"中%波特率固定为 "AY@/4"或 "AY@/5D%由 ,*MO位选择&,*MOa$时%波特率

为"AY@/4"’,*MOa#时%波特率为"AY@/5D&在方式4中%波特率取决于8$的溢出率&*"+发送

发送数据前%由指令设置816*例如作为奇偶校验位或地址/数据标志位+%将要发送的数

据由J写入,1KT后启动发送操作&内部逻辑会把816装入发送移位寄存器的第:位位置%随6位的数据之后发送出去%发送结束后置位8%&多机通信中%发送时用816作地址/数据标

识%816a$时为地址帧%816a#时为数据帧&*4+接收

当置位IP2位时%启动接收操作&数据送入移位寄存器%收到的第:位数据为I16%对所

接收的数据视,*"和I16的状态决定是否使I%置$%请求中断&当,*"a#时%不论I16为

何状态%均置位I%%接收数据&当,*"a$时%为多机通信方式%接收到的I16为地址/数据标

识位&当I16a$时%接收到数据为地址帧%置位 I%%接收数据’当 I16a#时%收到数据为数

据帧&若,*"a$%I%不置位%丢弃此帧’若,*"a#%则,1KT接收发送来的数据&$注意%!*$+需要特别注意的是接收&对于方式#%启动接收的条件是IP2a$且 I%a#&对于方

式$H4%启动接收的条件仅IP2a$即可%但是接收到的数据仅当I%a#且,*"a#或接收到

接收/校验位a$时%才能送到,1KT和 I16位中&两个条件任一个不成立%接收到的数据都

将被废弃’*"+对于发送来说%8%a#或$与发送过程的关系没有接收复杂%只要写入 ,1KT一次%就

启动一次发送流程&但是%如果上一个数据未发送完%下一个数据又写入,1KT%则上一个数据

丢失&为保证发送的正确性%需要软件清8%’*4+接收与发送是设定的%是按波特率*R/Y+的时限逐位操作的%波特率是指每秒收/发数

据的位数%可以简单的理解为数到每个设定波特率的时间就收/发一位&

D>波特率

对于方式#和方式"波特率是固定的%方式$和方式4的波特率是变化的%是由 8$的溢

出率决定的&8$是可编程的%可选的范围比较大%因此方式$和方式4是最常用的工作方式&*有关8$的定时/计数及相关内容将在4>.节详细介绍%本节只作简要的说明&+

当8$作为串行口的波特率发生器时%串行口方式$或方式4的波特率由下式确定)!":!

Page 101: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

方式$*或方式4+的波特率a",*MOC*8$溢出率+/4"定时器8$作波特率发生器时%应禁止 8$中断%通常 8$工作于定时方式*+/8a#%+为

+AG&’%8为8?B(+%计数脉冲为 "AY@/$"%也可选用外部 8$*94>.+上的输入脉冲作为8$的计数

信号*+/8a$+&8$的溢出率与工作方式有关%由于方式"具有自动装载的功能%一般 8$选

择方式"%此时波特率的计算公式为)波特率a",*MOC"AY@//4"C$"*"

67*8L$++0表4>$"列出了最常用的波特率及相应的 "AY@$8$工作方式及初值&从表中可以看出%当

振荡频率"AY@a$$>#.:"*LV时%对于常用的标准波特率能准确计算出8$的计数初值%所以这

个频率在需要使用串行口的应用系统中极为普遍&表4>$"!常用波特率及相应的!234$.$工作方式及初值

波特率*R/Y+ "AY@/*LV ,*MO定时器

+/8 方式 重装入值

方式#最大)$* $" [ [ [ [

方式"最大)43. $" $ [ [ [

方式$$方式4)5">. $" $ # " #TTL

$:>" $$>#.:" $ # " #TOL

:>5 $$>#.:" # # " #TOL

D>6 $$>#.:" # # " #TJL

">D $$>#.:" # # " #TDL

$>" $$>#.:" # # " #P6L

$$# 5 # # " 3"L

$$# $" # # $ #TPP1L

!!$例4>4%!利用串行口 KJI8实现一个数据块的发送&假设待发送的数据存放在片内

5#L开始的单元%共$5个字节数据%串行口设为方式$%无校验位%6位发送方式%选定波特率

为$"##R/Y%"AY@时钟频率为$$>#.:"*LV&解题思路)*+,-.$KJI8方式$工作状态下波特率需编程设定%"AY@a$$>#.:"*LV%波特

率为$"##R/Y%可通过上述公式计算%也可通过查表4>$"得到 ,*MOa#%8$方式"重装入初

值为P6L&程序清单如下)!!8ON$)*MU!8*MO%h"#L!!’定时/计数器$%工作于方式"

*MU 8N$%h#P6L*MU 8L$%h#P6L ’装入初值

+NI P8$ ’禁止8$中断

,P81 8I$ ’启动8$计数

*MU ,+M2%hD#L ’串行口设置方式$发送

J2N 9+M2%h3TL ’,*MOa#*MU I$%h5#L ’待传数据首地址

*MU I3%h$5 ’待传数据长度

!4:!

Page 102: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!8O,)*MU J%eI# ’取发送数据

*MU ,1KT%J ’发一帧数据

!!8OW)g1+ 8%%8ON" ’发送完%转8ON"判断

,g*9 8OW ’未发送完一帧%重新判断

!!8ON")%2+ I# ’指向下一个将发送数据单元

Og2\ I3%8O, ’数据未发送完%继续发送下一数据

IP8 ’数据发送完%结束

$注意%!若将程序中语句g1+!8%%8ON"换做g1!8%%8ON"是否可行%读者自行分析&

4>D>4!多机通信

单片机所拥有的串行口具有与多台单片机或计算机之间进行通信的能力&

$>多台单片机之间的通信连接方式

*+,-.$串行口的方式"和方式4具有多机通信的功能%即可实现一台主单片机与若干台

从单片机构成主从总线式多机系统%其连接方式如图4>""所示&

图4>""!*+,-.$多机通信连接方式

">多机通信原理

多机通信时%充分利用了单片机内的多机通信控制位,*"&当从机,*"a$时%从机只接

收主机发出的地址帧*第:位为$+%对数据帧*第:位为#+不予理睬’而当,*"a#时%可接收

主机发送过来的所有信息&多机通信的过程如下)! 所有从机,*"均置$%处于只接收地址帧状态下’! 主机先发送一个地址帧%其中前6位数据表示地址%第:位为$表示该帧为地址帧’! 所有从机接收到地址帧后%进行中断处理%把接收到的地址与自身地址相比较&地址

相符时置,*"a#%脱离多机状态%不相符不作任何处理%保持,*"a$’! 由于地址相符从机,*"a#%可以接收到主机随后发来的信息%且主机发送的所有信息

816a#%表示是数据帧%而地址不符的从机,*"a$%收到信息 816a#%不予理睬%实现主机与

地址相符的从机之间的双机通信’! 被寻址的从机通信结束后置,*"a$%恢复多机系统原有的状态&

4>通信协议控制

多机通信是一个复杂的通信过程%必须有通信协议来保证多机通信的可操作性和操作秩

!D:!

Page 103: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

序%这些通信协议至少应包含从机地址分配$主机的控制命令$从机的状态字格式和数据通信

格式等的约定&

D>单片机与9+之间的通信

在实际的分布式系统中%为加强数据处理能力%上位机常采用 9+机替代单片机%这时 9+机与单片机之间必须能够进行通信&

9+机中有标准的I,-"4"+总线接口留给用户使用%I,-"4"+是电子工业协会 P%J*P)(@-’FA&?@%&SGY’F?(YJYYA@?Q’?A&+从国际电话与电报顾问委员会 ++%88*%&’(F&Q’?A&Q)8()(<;A&(Q&S8()(EFQ<;+A&YG)’Q’?d(+ABB?’’((+远程通信控制标准中导出的一个标准&I,-"4"+以位串行方

式传输数据%采用串行异步通信方式%数据格式与单片机 KJI8兼容%但是二者之间逻辑电平

不同&单片机KJI8是标准的88N逻辑电平%I,-"4"+采用的是负逻辑%逻辑$电平是7$.H7.U%逻辑#电平是‘.H‘$.U%所以二者之间进行通信必须进行电平转换&I,-"4"+串行

口通信标准限制通信电缆的最大长度不能超过$.B%传输的波特率必须低于"# R/Y&若需要

有更长的距离或更高的数据传输速率%则应选择其他通信标准%如I,-D""或I,-D44标准&图

4>"4*Q+是9+机与单片机采用I,-"4"+标准通信的连接框图%其中电平转换方法很多%可以

采用分离元件实现%也可以采用*+$D66/*+$D6:实现电平转换%还可以采用*["4"实现电平

转换&图4>"4*R+就是采用*["4"实现电平转换的9+机与单片机通信的逻辑图&9+机与单片机进行通信时%同样要考虑通信协议的问题%双方应共同约定通信的波特率$

数据通信的格式$控制命令字和状态字格式等等&

4>D>D!"#$%.$*’&.的串行口扩展

*+,-.$的KJI8有四种工作方式%其中方式#为移位寄存器工作方式&采用移位寄存器

的工作方式%能够方便地扩展串行数据传送接口%目前市场上有很多外围器件选择了移位寄存

器的串行扩展接口&在移位寄存器方式下%I[O为数据串行输入/输出端%8[O为同步脉冲输

出%扩展外围器件时%8[O端与外围器件串行口时钟端相连%I[O则与数据端相连&

$>工作过程

*$+发送

执行任何一条*MU!,1KT%hSQ’Q指令时%启动内部串行发送允许%随后在同步移位时钟

*"AY@/$"+作用下%每一个机器周期由8[O发送一个移位脉冲%同时将数据SQ’Q从I[O端移出

一位*从最低位开始+%一帧数据发送完毕时%置位8%a$&*"+接收

在串行控制寄存器,+M2中IP2a$和 I%a#时%启动一次接收过程&接收时仍由 8[O发送移位脉冲%串行数据由I[O输入%接收完一帧后%置位 I%%再次接收一帧时%必须由软件

清I%&

">串行口扩展并行输出口

图4>"D为用串入并出移位寄存器3DN,$5D扩展"个6位并行输出口电路&3DN,$5D为6位的串入并出移位寄存器%可以级连使用%图中涉及的引脚符号功能如下)

! J$1)串行数据输入端’!.:!

Page 104: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>"4!9+机与单片机通信连接图

! f#Hf3)并行数据输出端*f3位高位+’! +N])移位脉冲同步输入端’! *I)数据清除端&图4>"D中应注意数据和数位输出的顺序%输出的数据OJ8J$$OJ8J"中%OJ8J$在最远

端的3DN,$5D*"+中%低位在f3%高位在f#&输出一帧后%第$4脚 f3为 O#%同时 O#可为下

一个移位寄存器的级连提供数据输出端&根据图4>"D的扩展原理%可以很方便地将其扩展成

0个6位的并行输出口&使用串行口扩展并行 %/M最大的不足就是速度慢%一个字节的并行

数据从开始发出要6个时钟周期后才能在3DN,$5D稳定输出&$例4>D%!在图 4>"D所示串入并出移位寄存器的扩展电路中%将单片机内部存储器

5#L$5$L单元的数据通过串行口转换成并行输出&程序清单如下)!!KJI8M)*MU!I#%h5#L!!!!’待传送的数据区首地址

*MU I3%h#"L ’传送的数据个数

*MU ,+M2%h##L ’KJI8方式#设定

!! ,MK8)*MU J%eI# ’取得发送数据

+NI 8% ’清发送中断标志

*MU ,1KT%J ’启动发送

!5:!

Page 105: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

g21 8%%( ’本次发送未完等待

%2+ I# ’指向下一个要发送的数据单元

Og2\ I3%,MK8 ’所有字节是否发送完%未完继续

IP8 ’完成%返回

图4>"D!用3DN,$5D扩展并行输出口

以上程序是针对仅扩展"个6位并行口的电路而设计的%若扩展移位寄存器的个数或发

送的数据发生变化%读者可以很方便将程序改为与之相适应的子程序&

4>串行口扩展并行输入口

用并入串出的移位寄存器3DN,$5.扩展的 "个 6位并行输入口电路如图 4>".所示&3DN,$5.为6位并入串出的移位寄存器%可级连使用%图中涉及符号及功能如下)

图4>".!用3DN,$5.扩展并行输入口

! f3)串行数据输出端’! f3)串行数据反向输出端’! ,PI)级连串行数据输入端’! 9#H93)并行数据输入端%9#为最高位O3%93为最低位O#’! +N]$$+N]")时钟输入端’! 9N)预置控制端&9Na#置入数据%9Na$串行移位&图4>".中9N引脚在实际使用时%用单片机的任意一个%/M口来控制数据的置入或移位

*例图中用9$>#来控制+&图中仅扩展了"个3DN,$5.作为并入串出 %/M口%实际应用时可

!3:!

Page 106: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

根据需要将其扩展到0个6位并行输入口&$例4>.%! 在图4>".扩展的并入串出的移位寄存器电路中%将并行数据读入单片机片

内.#L$.$L单元中&程序清单如下)!!!!!9N! PfK! 9$>#!!KJI8%)+NI!9N!!!!!!!’并行数据置入3DN,$5.

,P81 9N ’3DN,$5.数据可串行移位

*MU I#%h.#L ’读入的数据存放在内部存储器中的首地址

*MU I3%h#"L ’读入数据的个数

*MU ,+M2%h##L ’置串行口方式#,P81 IP2 ’启动串行移位接收

!! ,%2) +NI I% ’清接收中断请求%启动接收

g21 I%%( ’本帧数据未接收完%等待

*MU J%,1KT ’读接收缓冲器数据送J*MU eI#%J ’存数据

%2+ I# ’修改存储单元指针%指向下一个存储单元

Og2\ I3%,%2 ’数据是否接收完%未完回,%2继续

IP8 ’结束%子程序返回

本程序是针对串行口扩展了"个移位寄存器而设计的%若串行口扩展了0个并入串出移

位寄存器%读者也能很方便将本程序改成与之相适应的子程序&

4>D>.!串行口的虚拟扩展技术

无论是扩展串行总线%还是扩展串行接口%除了要求所扩展的外围器件或外设接口应具有

相应的串行接口外%还要求单片机有相应的总线接口&虽然目前已有大量串行接口外围器件

可供单片机系统选用%但用户选用的单片机不一定具备相应的接口%从而限制了串行外围接口

技术的推广&如果采用虚拟技术%用通用%/M来模拟串行接口%构成虚拟的串行扩展接口%就能使用所有具有串行接口的外围器件%用于任何型号的单片机应用系统中&串行口扩展虚拟

技术有如下特点)*$+目前所有串行扩展总线与扩展接口都采用同步数据传送&同步传送中%由串行时钟

控制数据传送的时序&时序模拟时%只要严格控制串行时钟并满足串行同步数据传输时序要

求%就可满足数据传输的可靠性要求’*"+采用虚拟串行接口时%只占用单片机的通用%/M资源%而且可根据系统%/M资源占用

情况选用具体的%/M口线’*4+由于采用通用%/M的虚拟方法%所形成的虚拟串行扩展总线或串行接口%只能用指令

系统和%/M口实现时序和运行状态模拟%无法获得真实接口的片内相关资源&串行扩展总线类型主要有以下几种)*$+%"+总线

%"+总线*%&’(F%&’(EFQ’(S+?F@G?’1GY+是9;?)?<Y公司推出的串行扩展总线*为二线制+&总

线上扩展的外围器件及外设接口通过总线寻址&%"+总线由数据线 ,OJ和时钟线 ,+N构成&,OJ/,+N总线上挂接单片机**+K+$外围器件*如%/M口$日历时钟$JO+$OJ+$存储器等+和

外设接口*如键盘$显示器$打印机等+%所有挂接在 %"+总线上的器件和接口电路都应具有

!6:!

Page 107: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

%"+总线接口%且所有的,OJ/,+N同名端相连&%"+总线接口电路均为漏极开路%故总线必须有上拉电阻&所有挂接到总线上的器件及

接口都通过总线寻址%%"+总线是最简单的电路扩展方法&*"+单总线

单总线*$-W?F(+是 OQ))QY公司推出的外围串行扩展总线%单总线只有一根数据输出线

Of%总线上所有器件都挂在Of上&OQ))QY为单总线寻址及数据传送提供了严格的时序规范&*4+串行外设接口

,9%*,(F?Q)9(F?<;(FQ)%&’(FZQ@(+是*A’AFA)Q公司推出的串行扩展接口&由时钟线 ,+]$数据线*M,%*主发从收+和*%,M*主收从发+组成&单片机与外围扩展器件在时钟线,+]$数据

线*M,$%*%,M上都是同名端相连&由于外围扩展多个器件时无法通过数据线译码选择%故带,9%接口的外围器件都有片选端+,&

,9%有较高的数据传送速度%主机最高可达$>#.*R/Y&,9%硬件扩展较为简单%软件实现

方便%目前不少器件带有,9%接口&

4>.!定时器1计数器

定时器/计数器*8?B(F/+AG&’(F+是单片机的重要部件%其工作灵活%编程简单%使用它对

减轻+9K的负担和简化外围电路有很大的好处%在大多数应用系统中都会使用到&*+,-.$系列单片机典型产品6#.$有两个$5位定时器/计数器8#和8$%6#."等单片机还有第三个定

时器8"%它们都可以编程设定为内部定时器或外部事件计数器&

4>.>$!定时器1计数器.#和.$

定时器8#$8$由以下五部分组成)*$+计数器8L#$8N#和8L$$8N$’*"+特殊功能寄存器8*MO$8+M2’*4+时钟分频器’*D+输入引脚8#$8$$%28#$%28$’*.+控制逻辑电路等&通过对8L#$8N#和8L$$8N$的初始化编程来设置 8#$8$的计数初值%通过对 8+M2和

8*MO的编程来选择8#$8$的工作方式和控制8#$8$的运行&

$0方式寄存器8*MO

特殊功能寄存器8*MO为8#$8$的工作方式寄存器&其格式如下)O3 O5 O. OD O4 O" O$ O#

8*MO _J8P +/8 *$ *# _J8P +/8 *$ *#

*++++!!! !

8$方式字段 #++++ *++++!! !! !!! !

8#方式字段 #++++!! !!

!!8*MO低D位为8#方式字段%高D位为8$方式字段%它们的含义是完全相同的&复位时

8*MO所有位均清#%各位的具体含义及功能如下)*$+工作方式选择位*$$*#定时器/计数器的四种工作方式由*$$*#状态确定%对应关系如表4>$4所示&

!::!

Page 108: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表4>$4!定时器工作方式

*$ *# 功 能 表 述

# # !方式#%$4位定时器/计数器

# $ !方式$%$5位定时器/计数器

$ # !方式"%常数自动重装入的6位定时器/计数器

$ $ !方式4%仅适用于8#%分为两个6位定时器/计数器%8#在方式4时%8$停止计数

!!*"+方式选择位+/8+/8a#为定时方式%以"AY@输出时钟脉冲的$"分频作为计数信号%也即每个机器周期定

时器加$&定时器从初值开始加$%计数直至定时器溢出%计数加$时间是固定的%所以称为定

时方式&+/8a$为外部事件计数方式%以外部引脚*8#为94>D%8$为94>.+上输入的脉冲为计数

信号&在一个机器周期采样引脚为高电平%下一个机器周期采样引脚为低电平时%计数器加

$%即外部发生负跳变时加$&外部事件计数最高频率为"AY@的$/"D%对外部输入脉冲计数的目

的通常是为了测量脉冲的周期$频率或个数&由此可见%定时器/计数器核心是计数器%即每来一个脉冲%计数器加$*加至溢出时定时

结束+%定时只不过是一种特殊的计数方式%因为它的计数脉冲是恒定的%为 "AY@/$"%而计数方

式下的计数脉冲来自于外接引脚8#和8$%他们是随机的而已&*4+门控位_J8P_J8Pa$时%由外部中断引脚%28#$%28$和内部8I#$8I$位来启动定时器&当%28#为高

电平且8I#置位时%启动定时器8#%也就是说仅靠置位8I#或8I$还不够%要启动8#%还要看

外部%28#引脚上的电平%只有为高电平*无中断请求+时%才能启动&8$与8#类似&_J8Pa#时%仅由8I#和8I$置位来启动定时器8#和8$的计数&

"0控制寄存器8+M2

特殊功能寄存器8+M2的高D位存放定时器的运行控制及溢出标志%低D位存放外部中

断的触发方式控制位和锁存外部中断请求源*详见4>5节+%8+M2格式如下)O3 O5 O. OD O4 O" O$ O#

8+M2 8T$ 8I$ 8T# 8I# %P$ %8$ %P# %8#

!!*$+定时器8#运行控制位8I#8I#由软件置位或清#&当门控位_J8Pa#时%8#计数器仅由8I#控制%8I#a$启动计

数%8I#a#时停止&当门控位 _J8Pa$时%8#计数器由%28#和 8I#共同控制%%28#a$且

8I#a$时启动8#计数&*"+定时器8#溢出标志位8T#当8#溢出时%8T#被置$%向+9K申请中断&+9K响应中断后%由硬件清#%也可由软件

查询方式清#&*4+定时器8$运行控制位8I$其功能与8I#完全相同&*D+定时器8$溢出标志位8T$其功能与8T#完全相同&40定时器工作方式

!##$!

Page 109: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*+,-.$单片机中的8#$8$位根据对*$$*#的设定%可以选择四种不同的工作方式中的

一种&定时器/计数器8#$8$对于前三种工作方式是相同的&仅8#有方式4%使用时应注意&*$+方式#当*$*#为##时%选定方式#&以定时器 8$为例*8#与之完全相同+%工作在方式#下

的结构如图4>"5所示&

图4>"5!工作于方式#的 8$结构简图

计数时%8N$的低.位溢出后向8L$进位%8L$溢出后将 8T$置位%并向 +9K申请中断&控制技术的逻辑表达式为)*_J8P‘%28$+! 8I$&

当_J8Pa#时%J点为高电平%定时器/计数器的启动/停止由8I$决定&8I$a$启动计

数%8I$a#停止计数&当_J8Pa$时%J点电位由%28$决定%因而1点电位就是由8I$和%28$决定%即定时器/

计数器的启动/停止由8I$和%28$两个条件决定%这样便于测量引入%28$引脚的脉冲宽度&$注意%!在方式#下%8N$仅用了低.位%可以理解为首先进行".a4"预分频&8N$的高4位内容

不定且不使用%控制逻辑计数允许/禁止并不改变计数值*8L$%8N$+%所以这里的停止实际上

是暂停的意思&*"+方式$当8*MO的*$*#为#$时%选定方式$工作%工作于方式$的 8$结构如图4>"3所示&

方式$下%计数器由$5位组成%其他与方式#完全相同&*4+方式"当*$*#为$#时%选定方式"工作&方式"为自动恢复初值的6位计数器%定时器8$工

作于方式"的结构如图4>"6所示&方式"中%8N$作为6位计数寄存器%8L$作为6位计数常数寄存器*8L$中的数据恒定

不变+&当8N$计数溢出时%一方面将8T$置位%并向+9K请求中断’另一方面将预置的 8L$的内容重新装入8N$中%继续计数&重新装入不影响8L$中的内容%所以 8L$可以多次连续

再装入和连续计数&工作在方式"下%如果欲改变计数次数%只需对8L$操作即可&方式"对定时控制特别有用%可以实现每隔预定时间发出控制信号%而且特别适合于串行

口波特率发生器的使用&以上三种工作方式以8$为例介绍%8#在这三种方式下的功能与8$完全相同&*D+方式4

!$#$!

Page 110: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>"3!工作于方式$的8$结构简图

图4>"6!工作于方式"的 8$结构简图

方式4只适用于8#%若8#设置为方式4%因为与 8$相关的标志位借给了 8#%所以 8$停

止计数&工作于方式4的8#结构如图4>":所示&

图4>":!工作于方式4的 8#结构简图

方式4将$5位定时器/计数器分做两个6位定时器/计数器使用%此时工作与方式#相

同%只是计数器分为两个6位计数器 8N#和 8L#%8N#计数器占用了 8#的 _J8P$%28#$8I#$8#引脚及8T#标志%8L#所构成的定时器/计数器%只能作为定时器使用%因为此时的外部引

脚8#已被定时器/计数器8N#占用%不过它却占用了定时器/计数器 8$的启动/停止控制位

8I$$计数溢出标志位8T$&事实上%只有在8$用做波特率发生器时%8#才工作于方式4%以增加一个定时器使用%通

!"#$!

Page 111: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

过控制8#进入或退出方式4%切换8$的运行和停止&

4>.>"!定时器1计数器的编程和使用

$0定时器/计数器的溢出率计算

定时器/计数器在工作前%应预先置入计数的初值7Q%然后才能工作&初值计算的公式如

下)

8+7@/*"%,7Q++$"6"AY@/*"

%,7Q+

式中*8(((定时时间’7@(((机器周期’"AY@(((振荡器频率’%(((计数器的长度’7Q(((初值&

对于8#$8$有)方式#)%+$4%"$4 +6$:"’方式$)%+$5%"$5 +5..45’方式")%+6%"6 +".5’给定定时时间8后%根据下面的公式)

7Q+"%,8/"AY@6$"

计算出初值7Q%转换成二进制%再将初值送入对应寄存器中%完成对定时器初值的设定工作&对定时器/计数器的编程可分为以下四个步骤)*$+写8*MO%设定各定时器/计数器的工作方式$外部计数还是内部定时等工作状态’*"+将计数初值写入对应寄存器中’*4+定时器中断开放或禁止*采用中断应开放%反之禁止+’*D+启动定时%即写8+M2*可位寻址+&

">定时器/计数器的应用举例

$例4>5%!使用定时器/计数器8#的方式#%设定"BY定时%在9$>#引脚上产生周期为

DBY的方波输出%设"AY@a5*LV&解)*$+8*MO的设定

方式#)*$*#为##’定时方式)+/8a#’门控内部启动)_J8Pa#’仅使用8#%不使用8$%8$各位均取#’故8*MOa##L&

*"+计算定时器的初值7Q定时"BY%即"BY低电平%"BY高电平&根据公式有)

7Q a"%78/"AY@/$"a"

$47"C$#74C5C$#5/$"a6$:"7$###a3$:"

7Q转换成二进制为)$$$#####$$###1所以计数初值7Qa#P#L%79Qa’’’$$###1*’表示任意%可以是#或$+&假设’为#%

!4#$!

Page 112: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

79Qa$6L%其中低.位是给8N的*不足部分补#+%剩余的位给8L*不足部分补#+&$注意%!不能直接将数据的十六进制形式*$+$6L+简单地送入8L$8N%这是方式#极易出错的地

方&*4+程序清单如下)!!!!!*MU! 8*MO%h##L!!!!’设定8#工作方式

*MU 8L#%h#P#L*MU 8N#%h$6L ’写定时器8#定时初值

,P81 9$># ’9$>#先输出"BY高电平

,P81 8I# ’启动8#定时

!!N9) g21 8T#%N9 ’定时时间未到%等待

+9N 9$># ’9$>#反相输出"BY*MU 8L#%h#P#L*MU 8N#%h$6L ’重新装入定时器8#定时初值

+NI 8T# ’清定时标志

Jg*9 N9

4>.>4!外部扩展定时器1计数器

*+,-.$内部只有"个$5位定时器/计数器%在需要更多的计数器时%可扩展6".4芯片&6".4芯片具有4个功能完全相同的$5位减法计数器%每个计数器的工作方式及计数常

数可通过分别软件编程选择%能够进行二进制或二-十进制计数或定时%具有接口简单%最高计

数频率可达">5*LV等优点&6".4有六种工作方式%这六种工作方式的功能如下)! 方式#)计数结束中断方式&在计数器减为#时%使输出端MK8变高电平%向+9K发出

中断申请&! 方式$)可编程单稳态&该方式输出单拍负脉冲信号%脉冲宽度可编程设定&! 方式")频率发生器&能产生连续负脉冲信号%负脉冲由MK8端输出%其宽度等于一个

时钟周期%脉冲周期可由软件编程设定&! 方式4)方波发生器&当计数值为偶数时%输出对称方波’计数值为奇数时%高电平比低

电平多一个输入脉冲&! 方式D)软件触发选通&写入控制字后 MK8输出高电平%写入初值后开始计数&计数

期间写入新的计数常数值%将影响下一个计数周期&! 方式.)硬件触发选通&写入控制字及计数常数后%MK8输出高电平%只有在 _J8P出

现上升沿后才开始计数%计数结束后输出一个时钟的负脉冲&在很多情况下需要测量脉冲的频率$周期$相位和脉冲宽度%这时需要一些标准信号输入%

这些任务都可通过对6".4的控制来完成&

4>5!中断系统

4>5>$!中断的基本概念

现代计算机都具有实时处理功能%能对内$外界发生的事件作出及时的处理%这些功能是

!D#$!

Page 113: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

依靠中断来实现的&*$+中断)中央处理器+9K正在处理某事件时%外部发生了某一事件*如定时器溢出+%请

求+9K迅速去处理%+9K暂停当前工作%转去处理所发生的事件%处理结束之后%再回到被打

断的地方继续原来的工作&这样的过程称为中断&*"+中断系统)实现中断功能的硬件称为中断系统*中断机构+&*4+中断源)能够产生中断请求的外部和内部事件称为中断源&

图4>4#!二级中断嵌套

*D+中断优先级)几个中断源同时申请中断

或者+9K正在处理某事件%又有另一外部事件申

请中断时%+9K必须区分哪个中断源更重要%从而

确定优先处理谁%这就是中断优先级的问题&就

后者来说优先级高的事件可以中断 +9K正在处

理的低优先级中断服务程序%待完成高级中断服

务程序之后%再继续执行被打断的低级中断服务

程序%这就是中断嵌套&没有中断嵌套功能的中

断系统称为单级中断系统&二级中断嵌套过程如

图4>4#所示&

4>5>"!中断系统

*+,-.$单片机中%不同型号单片机的中断源数量是不相同的%最典型的6#.$单片机有五

个中断源%具有两个优先级&为了实现二级中断服务程序嵌套%每个中断源可以通过编程设定

为高优先级或低优先级中断%允许或禁止向+9K请求中断&与中断系统有关的特殊功能寄存器有中断允许寄存器%P$中断优先级控制寄存器%9$中

断源寄存器*8+M2$,+M2中有关的位+%*+,-.$单片机的中断系统结构如图4>4$所示&

图4>4$!中断系统结构示意图

$>中断源

6#.$有五个中断源%6#."增加了一个定时器/计数器8"中断源%即六个中断源&6#.$中

!.#$!

Page 114: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的五个中断源是)*$+外部中断源

6#.$有两个外部中断源%28#和%28$%它们分别从 94>"$94>4两个引脚引入中断请求信

号%两个中断源的触发方式控制锁存在特殊功能寄存器8+M2的低D位中%8+M2的高D位为

8#$8$的运行控制和溢出标志位%其格式如下)O3 O5 O. OD O4 O" O$ O#

8+M2 8T$ 8T# %P$ %8$ %P# %8#

各位的功能及含义如下)! %P$)外部中断$请求源*%28$$94>4+中断请求标志&%P$a$%外部中断$正在向 +9K

请求中断%当+9K响应该中断时由硬件将%P$清#*下降沿触发方式+’! %8$)触发方式选择位&%8$a#%外部中断%28$选择电平触发方式%当%28$*94>4+输入

为低电平时%置位%P$’%8$a$%选择下降沿触发方式%当%28$引脚由高变低后%置位 %P$%申请

中断’! %P#)外部中断#请求源*%28#$94>"+中断请求标志%功能同%P$’! %8#)触发方式选择位%功能同%8$&$注意%!+9K在每个机器周期采样%28#或%28$引脚的输入电平&在电平触发方式中%当采样到低

电平时%置位%P#或%P$%采样到高电平时将%P$或%P#清#&采用电平触发时%外部中断源必

须一直保持低电平直至该中断请求被+9K响应%否则中断请求将丢失%同时在该中断源服务

程序执行结束之前%外部中断源必须被清除%变为高电平%否则将产生另一次中断&此外%为了

保证+9K能检测到%28’引脚上的低电平%必须保证%28’引脚上的低电平保持$个机器周期

以上&外部中断采用下降沿触发方式时%+9K每个机器周期采样外部中断输入引脚%如果相

继两次采样中一次为高电平%下一次为低电平%则置位 %P%向 +9K提出请求&+9K响应中断

后%硬件自动清%P&采用边沿触发方式时%高$低电平都必须保持$"个振荡周期以上%才能保

证+9K正确检测到由高到低的负变跳%正确地接收中断请求&一般情况下%使用下降沿触发方式比较好%因为无论低电平保持多长时间%从高到低的下

降沿只能是一个%产生一次中断%不存在电平触发方式时可能出现的中断重入的问题&*"+内部中断源

6#.$有4个内部中断源%分别是定时器8#$8$和串行口中断%6#."增加了一个定时器8"的中断&内部中断源的标志如下)

! 8T#)定时器/计数器8#的溢出中断请求标志位&8#被允许计数后%从初值开始加$计数%当产生溢出时%置位8T#%向+9K提出中断请求%一直保持到+9K响应该中断时%由硬件

清#&若采用查询方式%则由指令清除8T#标志&! 8T$)定时器/计数器8$的溢出中断%功能同8T#&! 串行口中断)串行口中断的接收中断I%标志和发送中断 8%标志经过逻辑或后作为内

部的一个中断源&当串行口发送完一个字符%由硬件置位发送中断标志 8%%接收完一个字符

也由硬件置位接收中断标志I%%但是应注意硬件不会清除 8%和 I%%必须由指令将其清除%否则将出错&

! 定时器/计数器8"中断)6#."单片机内部增加了一个 8"中断%8"中断有两个中断标

志8T"和P[T"&这两个中断标志经过逻辑或后作为内部的一个中断源&这两个中断源标志

!5#$!

Page 115: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

由硬件置位%但必须由指令清#%这一点与串行口中断相似&

">中断使能控制

中断的允许和禁止由中断允许寄存器*%P+控制&中断允许寄存器的字节地址为#J6L%可位寻址%其格式如下)

O3 O5 O. OD O4 O" O$ O#%P PJ 7 P8"$ P, P8$ P[$ P8# P[#

!!%P寄存器为#时%禁止中断’为$时%允许中断&系统复位后%%P寄存器各位均为#%禁止

所有的中断&各位的含义如下)! P[#)外部中断#中断允许位’! P8#)定时器/计数器8#中断允许位’! P[$)外部中断$中断允许位’! P8$)定时器/计数器8$中断允许位’! P,)串行口中断允许位’! P8"$)定时器/计数器8"中断允许位*$代表6#."也有此位+’! PJ)+9K中断总允许位&PJa$时%所有的中断开放’PJa#时%屏蔽所有的中断&$注意%!如果设置8#中断允许%仅置位P8#或PJ是不够的%必须二者均置位&

4>中断优先级

*+,-.$单片机有高$低两个中断优先级%可以通过中断优先级寄存器%9来设定中断优先

级%中断优先级寄存器%9的字节地址为#16L%可位寻址%其格式如下)O3 O5 O. OD O4 O" O$ O#

%9 98"$ 9, 98$ 9[$ 98# 9[#

!!%9寄存器中各位均是)为#时%低优先级中断’为$时%高优先级中断&复位后%%9寄存器

的各位均为#%即此时全部中断优先级为低级&在中断执行过程中%高优先级的中断可以中断

低优先级的中断服务%在中断服务程序中关掉所有中断*+NI!PJ+或关掉部分中断时除外&同优先级的中断不能相互中断&当+9K同时接收到同优先级的几个中断请求时%+9K按

硬件次序排定优先级顺序%其优先权顺序如下)%28#(#8#(#%28$(#8$(#串行口*由高到低+

D>中断请求的撤除

+9K响应中断请求%转向中断服务程序执行%在其执行中断返回指令*IP8%+之前中断请

求信号必须撤除%否则将可能再次引起中断而出错&中断请求撤除的方式有三种)*$+单片机内部硬件自动复位)对于定时器/计数器8#$8$及采用边沿触发方式的外部中

断请求%+9K在响应中断后%由内部硬件自动撤除中断请求’*"+应用软件清除响应标志)对于串行口接收/发送中断请求及定时器 8"的溢出和捕获

中断请求%+9K响应中断后%内部无硬件自动复位I%$8%$8T"及P[T"%必须在中断服务程序中

清除这些标志%才能撤除中断’!3#$!

Page 116: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*4+既无软件清除也无硬件撤除)对于采用电平触发方式的外部中断请求%+9K对引脚上

的中断请求信号既无控制能力%也无应答信号&为保证在 +9K响应中断后%执行返回指令前

撤除中断请求%必须考虑另外的措施&

.>中断响应过程

*+,-.$单片机在每个机器周期的,.9"状态顺序检查每个中断源的中断请求标志%若有

中断源发出请求%+9K则在下个机器周期的,.9"状态按优先级顺序查询各中断标志%并且取

高优先级的中断响应&响应中断后置位相应中断优先级状态触发器%表明当前中断服务的优

先级别%执行硬件调用程序%将程序计数器9+的内容压入堆栈保护&对应中断源的中断入口

地址装入程序计数器9+%使程序转向该中断入口处执行中断服务程序%直至遇到 IP8%指令&执行IP8%指令%撤消中断优先级触发器%弹出断点地址至程序计数器 9+%继续原程序的执行

过程&在接受中断申请时%如遇到下列情况的任一种%硬件调用子程序将被封锁)*$+正在执行同级或高一级的中断服务程序’*"+当前指令周期不是该指令的最后一个周期*或一条指令未执行完+’*4+当前正在执行的指令是IP8%或对%P$%9的读写操作&

5>中断入口地址

当+9K响应中断后%会执行一条硬件调用程序%将对应的中断源入口地址送程序计数器

9+%该中断入口地址是固定的&各中断源的中断服务程序入口地址为)

被查询的标志位 中断源 入口地址 优先级

%P# %28# ###4L 高

8T# 8# ###1L%P$ %28$ ##$4L8T$ 8$ ##$1LI%‘8% 串行口 ##"4L ,8T"‘P’T" 8"$ ##"1L 低

!!由于复位后%程序计数器9+的初值为####L*从####L开始取指执行+%在使用中断的程

序中%一般结构如下所示)!! ! ! !MI_!!####L!!!!!!

Ng*9 *J%2 ’跳过中断地址表%转主程序

MI_ ###4LNg*9 %28#T ’转8#中断服务

MI_ ###1LNg*9 8#T ’转%28$中断服务

MI_ ##$4LNg*9 %28$T ’转%28#中断服务

MI_ ##$1LNg*9 8$T ’转8$中断服务

MI_ ##"4LNg*9 ,T ’转串口中断服务

!6#$!

Page 117: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

MI_ ##4#L!!*J%2) *MU ,9%h.TL ’主程序

显然从###4LH###1L%6个字节是不够存放%28#中断服务程序的%所以一般中断入口处

均使用Ng*9转到各自对应的中断服务程序&

3>多外部中断源

*+,-.$单片机一般为用户提供两个外部中断请求输入线%但在有些应用系统中%外部中

断源不止两个%这时应考虑多个外部中断源引入+9K的方法&*$+定时器中断作外部中断

当定时器/计数器作外部计数器*+/8a$+时%94>D$94>.上发生的负跳变会使 8#或 8$计数器加$%若溢出则置位相应的8T#或8T$标志%申请中断&利用该特性%可以将定时器/计数器8#$8$作为外部中断请求源&

以8$为例%将8$编程设定为方式"*6位常数自动重装入方式+外部事件计数*+/8a$+%8L$$8N$的初值设为#TTL%允许8$中断&当 94>.上的外部中断源发生负跳变时%8N$加$并溢出%置位8T$a$%向+9K发出中断请求%同时 8L$中的常数#TTL送 8N$%为下一次中断

作好准备&这样%94>.引脚上的每一次负跳变都会置位 8T$%向 +9K申请中断%94>.就相当

于边沿触发方式的外部中断请求输入线了&*"+多个外部中断源逻辑或输入

若系统中有多个外部中断源%将它们按轻重缓急进行排队%把最高优先级的中断源直接输

入到%28#%其余的经过线或后接%28$&例如有5个中断源排列如下)

!!

O2U#O2U$O2U"O2U4O2UDO2U.

!!!

高优先级

!!

!!,低优先级

假定O2U#HO2U.这5个中断源高电平有效%均能由程序清#%且在 +9K响应中断请求

之前中断源信号保持有效%则外部中断源输入可采用图4>4"所示的电路&为提高响应速度%O2U#单独接%28#&O2U$HO2U.一方面经过线或后接%28$%另一方面通过3DN,"DD接入 9#口供查询%%28#$%28$均采用电平触发方式&+9K在响应中断后%读入3DN,"DD中的内容%查询O2U$HO2U.的状态%依次进行中断处理%该方法可以适合外部中断源较多的应用场合&

$注意%!在电路中非门的作用为)第一%逻辑电平变换%将外部中断请求的高电平转换为低电平%使

其符合外部中断源信号要求’第二%信号隔离&如果O2U$HO2U.是低电平中断请求信号%这时应使用与门将所有信号连接起来%与门起到了逻辑电平变换和信号隔离作用&

4>5>4!中断应用举例

$例4>3%!图4>4"中的多个中断源扩展电路的中断服务程序如下)!!!!!!MI_!!!!####L

!:#$!

Page 118: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图4>4"!多中断源与*+,-.$连接电路图

!!!!!!Ng*9 *J%2!!!!!!MI_!!!!###4L!!!!!!!

Ng*9 %28O#MI_ ##$4LNg*9 %28O$MI_ ##4#L

!!*J%2)! !!!!11 ’主程序

MI_ [[[[L

!!%28O#) !!!!11 ’外中断#中断服务程序

IP8%MI_ [[[[L

!!%28O$) 9K,L 9,W ’程序状态字入栈保护

*MU O98I%h3TTTL ’3DN,"DD地址送数据指针

*MU[ J%eO98I ’读入中断标志

g21 J++>4%O2U$ ’查是否为O2U$申请中断

N+JNN O2U$$ ’是%调中断处理

!!O2U$) g21 J++>D%O2U" ’查是否为O2U"申请中断

N+JNN O2U"$ ’是%调中断处理

!!O2U") g21 J++>.%O2U4 ’查是否为O2U4申请中断

N+JNN O2U4$ ’是%调中断处理

!!O2U4) g21 J++>5%O2UD ’查是否为O2UD申请中断

N+JNN O2UD$ ’是%调中断处理

!!O2UD) g21 J++>3%O2U. ’查是否为O2U.申请中断

!#$$!

Page 119: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

N+JNN O2U.$ ’是%调中断处理

!!O2U.) 9M9 9,WIP8% ’中断返回

!!O2U$$)!!!!11 ’O2U$中断服务程序

IP8

!! O2U"$)!!!!11 ’O2U"中断服务程序

IP8

!! O2U4$)!!!!11 ’O2U4中断服务程序

IP8

!!O2UD$)!!!!11 ’O2UD中断服务程序

IP8

!!O2U.$)!!!!11 ’O2U.中断服务程序

IP8

$例4>6%!测量外部脉冲":的频率&

图4>44!脉冲测量电路

分析)被测量脉冲频率信号":通过%28#引脚引入单片

机中%在两次外部中断之间%用内部定时器/计数器定时的

时间长短来计算被测量信号":的脉冲频率%硬件如图4>44所示&在第一次中断时%启动定时器/计数器计数%第二次

中断时%停止定时器/计数器计数%这样两次中断之间定时

器定时的时间为一个脉冲周期&一个机器周期的时间 7+a$"/"AY@%若定时器/计数器计数为1%则被测量脉冲周期为

7a1C$"/"AY@程序清单如下)!!!!!!MI_!!!!!####L

Ng*9 *J%2MI_ ###4LNg*9 %28#T

!!*J%2) *MU 8L#%h#*MU 8N#%h#*MU 8*MO%h#$L+NI T#,P81 %8#,P81 P[#,P81 PJNg*9 (

!!%28#T) g1 T#%,8M9,P81 8I#!!!!!’属8#定时

,P81 T#IP8%

!!,8M9) +NI 8I#

!$$$!

Page 120: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

+NI PJ*MU "#L%8N#*MU "$L%8L#IP8%

习!题!4

4>$!若$个6#4$系统扩展了"片"35D程序存储器$4片5"5DIJ*%试画出6#4$与"35D$5"5D的接口逻

辑%并说明各器件的地址范围&4>"!若$个6#4$系统扩展了$片5"5D$$片6$..和$片6"..芯片%"AY@a$"*LV%具有人工及上电自动

复位电路%请画出该系统的逻辑图%并说明各芯片的地址&4>4!$个6#4$系统若需要使用D片5"".5芯片%如何扩展.请画出系统的逻辑图%并说明芯片的地址&4>D!若晶振"AY@a$"*LV%用8#产生"##%Y的定时%有哪几种方式可以选择.分别写出定时器的方式

字和计数初值&4>.!若"AY@a5*LV%如何实现$Y的定时.4>5!如何利用外部引脚控制定时器/计数器的启动和停止.4>3!在外部中断源中%有几种中断触发方式.如何选择外部中断源的触发方式.4>6!串行口控制寄存器中816$I16起什么作用.4>:!请简单阐述多机通信原理%并指出816$I16$,*"各起什么作用.4>$#!串行口发送和接收标志*8%及I%+为什么不设计成自动清除而设计成由指令清#.4>$$!在开中断的条件下%什么条件会阻碍中断源的立即响应.

!"$$!

Page 121: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第D章!人%机界面

人-机界面是单片机应用系统不可缺少的组成部分%是指人与计算机系统进行信息交互的

接口%包括信息的输入和输出&控制信息和原始数据需要通过输入设备输入到计算机中%计算

机的处理结果需要通过输出设备实现显示或打印&这里的输入设备与输出设备构成了人-机界面&人-机界面中的输入设备主要是键盘%常用的键盘设备包括 1+O拨码盘$独立式键盘$矩阵式键盘等&输出设备包括发光二极管$七段数码管$液晶显示器及微型打印机等&!

D>$!键盘接口

键盘接口用于实现单片机应用系统中的数据和控制命令的输入%常用的键盘接口有 1+O拨码盘$键盘阵列等&根据输入信息的特点%不同的键盘接口有不同的应用场合&

D>$>$!5#6拨码盘

在某些单片机应用系统中%有时只需要进行少量的十进制数据设定%例如%设定温度恒定

在4#o&这些参数具有两个特点)一是都由十进制数字*#H:+组成’二是设定值可能随时需

要改变&对于符合上述特点的输入场合%使用1+O拨码盘较为合适&

$01+O拨码盘的构造

1+O拨码盘的构造如图D>$所示&它由处于前面板的拨码盘和处于后侧板的接线端组

图D>$!1+O拨码盘的构造

成&拨码盘由上下两个拨盘按钮和夹在按钮中间的

拨位数码指示器组成&拨位数码指示器是可随拨盘

的拨动进行转动#H:十个数字%用以显示拨码盘当

前数值&上面的拨码按钮为增量按钮%每按下一次%拨码盘正相旋转$/$#周%拨位数码指示器显示的数

值加$%连续按十次%数据将被还原’下面的拨码按钮

为减量按钮%每按下一次%拨码盘反相旋转$/$#周%拨位数码指示器显示的数值减$&接线端向外引出

标有6$D$"$$$J的五个引脚&在实际应用中%1+O拨码盘可以直接插入 1+O拨码盘插座中

使用%也可以采取从.个引脚上分别焊接引线的方式使用&1+O拨码盘的接线端是当前拨码盘位置的反映%拨码盘数码显示的数值直接影响6$D$"$

$四个引脚与公共引脚J的导通状态%例如%当前拨码盘拨位数码指示器的显示数据为3时%图D>$中的D$"$$引脚均与J导通%6引脚与J不导通’当前拨码盘拨位数码指示器的显示数

据为D时%仅有D引脚与J导通%其余三个引脚与 J均不导通&拨码盘从#拨到:%J引脚与

6$D$"$$四个引脚的导通的状态如表D>$所示&此表中的#表示输入控制线 J与输出线不

通%表中的$表示输入控制线J与输出线相通&

!4$$!

Page 122: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表D>$!5#6拨码盘状态表

位 置 6 D " $

# # # # #

$ # # # $

" # # $ #

4 # # $ $

D # $ # #

. # $ # $

5 # $ $ #

3 # $ $ $

6 $ # # #

: $ # # $

!!从表中可以看出%6$D$"$$四个端子与J是否导通所对应的数值与其1+O码完全一致&

"01+O拨码盘的接口方法

实际应用1+O拨码盘时%如果J端接高电平%6$D$"$$引脚需要经下拉电阻拉低%这样%这四个引脚不与J接通时为低电平%与J接通时为高电平&从6$D$"$$引脚上读到的数值即

为拨码盘输入对应的1+O码&如果J端接低电平%6$D$"$$引脚需经上拉电阻拉高%这样%这四个引脚不与J接通时为高电平%与J接通时为低电平&从6$D$"$$引脚上读取数据并取反

后%才能得到与拨码盘输入对应的1+O码&*$+单个1+O拨码盘与单片机的接口

$例D>$%!假设*+,-.$单片机系统可以根据外部输入#H:设定完成$#项不同的操作%

图D>"!1+O拨码盘与

*+,-.$的连接

各操作对应的程序已经编好%对应的程序入口地址为9I_#H9I_:&设计此系统的硬件结构和程序&

使 用 1+O拨 码 盘 作 为 输 入 工 具%1+O拨 码 盘 与

*+,-.$的连接方式如图D>"所示&将 1+O拨码盘的公共

引脚J接地%6%D%"%$引脚分别经上拉电阻连到*+,-.$的

9$>4H9$>#引脚上&这样%当 1+O拨码盘处于#H:十个

位置上时%*+,-.$从9$>4H9$>#上读取数据并取反%即可

得到相应的 1+O码数字&例如%图 D>"中的开关 D接通

时%9$口 低 D位 的 输 入 数 据 为 $#$$1%将 其 取 反 后 为

#$##1&此系统的程序清单如下)!!91+O$)*MU!!J%9$!!!!!!’读拨码盘输入

+9N J ’取反

J2N J%h#TL ’屏蔽高D位

*MU I.%J ’暂存

IN J ’*J+C"JOO J%I. ’*J+C4

!D$$!

Page 123: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU O98I%h8J1NP ’散转表首地址送O98Ig*9 eJ‘O98I ’散转

!!8J1NP)Ng*9 9I_# ’转功能#Ng*9 9I_$ ’转功能$Ng*9 9I_" ’转功能"

!!!!!!!!!!!11’转其他功能

*"+多个1+O拨码盘与单片机的接口

在单片机应用系统中%使用多个1+O拨码盘的场合较多&这时%一般针对 J端有两种方

式可以选择)第一%1+O拨码盘的公共引脚 J静态接高电平或低电平’第二%1+O拨码盘的公

共引脚J动态扫描&下面通过具体例子说明静态$动态两种方式的应用&$+J端静态连接法&此方法适用于1+O拨码盘数量不多的单片机系统中&$例D>"%!设计*+,-.$与两个1+O拨码盘接口的硬件电路&两个1+O拨码盘和*+,-.$单片机的连接方式如图D>4所示&1+O拨码盘的公共引脚J

接‘.U%D位数据线和3DN,"DD中的D位并行输入线相连%并通过电阻接地&这样%当1+O拨

码盘处于某个位置时%和J端相通的数据线为$%不相通的数据线为#%数据线的状态符合拨码

盘位置的1+O码编码规律&6#4$直接对扩展的3DN,"DD进行读操作%就可以读取拨码盘的

状态&

图D>4!两个1+O拨码盘和*+,-.$单片机的连接

图D>4所示的接口方法的硬件逻辑比较简单%但需要占用较多的 %/M口线&在单片机系

统中%为了节省%/M口线%可以采取将几个拨码盘的数据线经逻辑组合以后连接到并行口%通过动态扫描方式进行拨码识别的方法&"+动态扫描法&所有1+O拨码盘的公共引脚J分别接不同的扫描线&如果6$D$"$$数

据线上拉%则J端采用低扫描’如果6$D$"$$数据线下拉%则J端采用高扫描&这里的低扫描

具有两层含义)第一%任意时刻扫描线中只有一条为低电平%其余扫描线为高电平’第二%在扫

描过程中%扫描线需要周期性地依次变为低电平&高扫描则与低扫描完全相反&由于两种扫

描都是以动态的方式进行的%所以这两种方法共称为动态扫描法&动态扫描法在单片机的人-机界面中应用广泛&两种扫描法与数据线电位的拉高和拉低是对应的%如果采用高扫描%则数

据线需被下拉成低电平’如果是低扫描%则数据线需被上拉成高电平&这一规律适用于所有的

扫描应用场合&!.$$!

Page 124: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$例D>4%!设计利用*+,-.$的9$口与D个1+O拨码盘连接的硬件电路%并给出实现读

取数据的程序&此问题适合采取动态扫描法来解决&D个1+O拨码盘和*+,-.$单片机的连接方式如图

D>D所示&

图D>D!D个1+O拨码盘和*+,-.$单片机的连接方式

图D>D中D个1+O拨码盘的公共引脚J分别连接到9$>DH9$>3%9$>DH9$>3为D条扫

描线&数据线经过上拉电阻接 ‘.U后%通过两片双D输入与非门3DN,""和 9$>#H9$>4相

连&当某个拨码盘的公共引脚J为高电平时%表示未扫描到&那么不管此拨码盘处于哪个位

置%此拨码盘的D位数据线总是高电平&当拨码盘的公共引脚 J为低电平时%表示已被扫描

到%则和公共引脚J接通的数据线为低电平%不接通的数据线为高电平&若将数据线的状态

取反%就可以得到拨码盘位置*#H:+的1+O码&当#hH4h拨码盘的公共引脚 J中只有$位

为低电平时%与非门的输出取决于公共引脚J为低电平的拨码盘的状态&这样便可通过控制

各个拨码盘控制线的状态%来读取任意选择的某一个1+O拨码盘的输入数据&对于图D>D所

示的系统%假设1+O拨码盘输入数据读入内部IJ*的D$L$D#L单元&4号1+O拨码盘设定

为数据的高位%进行存放时%高位数据送入高位地址&程序清单如下)!!91+O")*MU!!I#%hD$L!!!

*MU 9$%h3TL ’仅9$>3为低

*MU J%9$ ’读入

,WJ9 J ’送至高D位

*MU eI#%J ’读4h拨码盘#*D$L+>DH3*MU 9$%h#1TL ’仅$>5为低

*MU J%9$ ’读入

[+LO J%eI# ’读"h拨码盘#*D$L+>#H4

!5$$!

Page 125: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

OP+ I# ’I#指向D#L单元

*MU 9$%h#OTL ’仅$>5为低

*MU J%9$ ’读入

,WJ9 J ’送至高D位

[+L J%eI# ’读$h拨码盘#*D#L+>DH3*MU 9$%h#PTL ’仅$>5为低

*MU J%9$ ’读入

[+LO J%eI# ’读#h拨码盘#*D#L+>#H4IP8

D>$>"!按键与去抖

$0键盘的分类

键盘输入是单片机应用系统中使用最广泛的一种输入方式&键盘输入的主要对象是各种

按键或开关&这些按键或开关可以独立使用%也可以组合成键阵使用&在单片机应用系统中%使用较多的按键或开关有带自锁和非自锁的$常开或常闭的以及微动开关$O%9开关等&

单片机中常用的按键式键盘可以分为两类)独立连接式和矩阵式&

图D>.!独立连接式键盘

*$+独立连接式键盘

独立连接式键盘是一种最简单的键盘%每个键独立地

接入一根数据输入线%独立连接式键盘如图D>.所示&当没有键被按下时%所有的数据输入线都为高电平’当

有任意一个键被按下时%与之相连的数据输入线将变为低

电平&通过相应指令%可以判断是否有键按下&这种键盘

的优点是结构简单%使用方便%但随着键数的增加%被占用

的%/M口线也将增加&因此%这种形式的键盘不适合在键

数要求较多的系统中使用%但在键数要求不多的单片机系

统中%独立式键盘使用相当普遍&*"+矩阵式键盘

矩阵式键盘是指由若干个按键组成的开关矩阵&D行D列矩阵式键盘如图D>5所示&这

种键盘适合采取动态扫描的方式进行识别%即如果采用低扫描%回送线必须被上拉为高电平’如果采用高扫描%则回送线必须被下拉为低电平&图中给出了低扫描的电路&这种键盘的优

点是使用较少的%/M口线可以实现对较多键的控制&例如%如果把$5个键排列成DCD的矩

阵形式%则使用$个6位%/M口*行$列各用D位+即可完成控制’如果把5D个键排列成6C6的矩阵形式%则使用"个6位%/M口*行$列各用$个6位%/M口+即可完成控制&

"0按键的抖动处理

对于图D>5所示的键盘来说%如果c$为低电平%按下和释放$号键的过程中%[#上的电

压波形如图D>3所示&图中的8$和84分别为键的闭合和断开过程中的抖动期*分别称为前沿

抖动和后沿抖动+%抖动时间的长短与开关的机械特性有关%一般为$#H"#BY’8"为稳定的闭

合期%其时间的长短由按键的动作决定%一般为几百毫秒至几秒’8#和8D为断开期&为了保证

+9K对键闭合的正确确定%必须去除抖动%在键的稳定闭合和断开期间读取键的状态&去除

!3$$!

Page 126: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图D>5!D行D列矩阵式键盘

图D>3!键按下和释放时

的行线电压波形

抖动可以采用硬件和软件两种方法&硬件方法就是在

按键输入通道上加硬件去抖动电路%从根本上避免电压

抖动的产生&软件方法则采用时间延迟%躲过抖动%待

电压稳定之后%再进行状态输入&由于人的按键速度与

单片机的运行速度相比要慢很多%所以%软件延时的方

法从技术上完全可行%而且经济上更加实惠%因而被越来越多地采用&

D>$>4!键盘接口

键盘接口的主要功能是对键盘上所按的键进行识别&使用专用的硬件进行识别的键盘称

为编码键盘%使用软件进行识别的键盘称为非编码键盘&这里主要研究非编码键盘的工作原

理$接口技术和接口设计%按键识别常用键盘扫描法和行反转法&

$0键盘接口的工作原理

以图D>5所示的D行D列的矩阵式键盘为例%图中键盘的行线[#H[4通过电阻接‘.U%当键盘上没有键闭合时%所有的扫描线和回送线都断开%无论扫描线处于何种状态%回送线都

呈高电平&当键盘上某一键闭合时%则该键所对应的扫描线和回送线被短路&例如仅5号键

被按下时%由于c#Hc4四条扫描线上逐一扫描%未扫描到c"线时%回送线的D位数据均为高

电平%当扫描到c"线*仅c"为低时+%由于5号键处于闭合状态%回送线[$也将变为低电平%因此可知扫描线c"与回送线[$相交处的键闭合了&可见%如果[#H[4均为高电平%说明无

键闭合’任一条回送线变为低电平%则说明该回送线上有键闭合&与此键相连的扫描线也一定

处于低电平*正在扫描+&因此%可以确定扫描线与回送线的编号%这样闭合按键的位置就可

确定了&+9K对键盘扫描可以采取以下方式)! 程序控制的随机方式&+9K空闲时扫描键盘’! 定时控制方式&每隔一段时间%+9K对键盘扫描一次%+9K可以定时响应键输入请求’! 中断方式&当键盘上有键闭合时%向 +9K请求中断%+9K响应键盘输入中断%对键盘

扫描以识别哪一个键处于闭合状态%并对键输入的信息进行处理&+9K对键盘上闭合键键号的确定%可根据扫描线和回送线的状态计算求得%也可以根据

行线和列线的状态查表求得&

!6$$!

Page 127: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

"0键输入程序设计方法

对于非编码键盘而言%仅有键盘的接口电路是不够的%还需要编制相应的键输入程序%实现对键盘输入内容的识别&键输入程序的功能包括以下五部分&

*$+判断键盘上是否有键闭合

即采取程序控制方式$定时控制方式对键盘进行扫描或采取中断方式接受键盘的中断信

号%判断是否有键闭合&*"+去除键的机械抖动

为保证键的正确识别%需进行去抖动处理&其方法是得知键盘上有键闭合后延迟一段时

间%再判别键盘的状态%若仍有键闭合%则认为键盘上有一个键处于稳定的闭合期%否则认为是

键的抖动或者是干扰&!*4+确定闭合键的物理位置

对于独立式按键来说%采取逐条%/M口线查询的方式实现对按键物理位置的确定’对于键

阵来说%需要采取扫描的方式来确定被按键的物理位置&*D+得到闭合键的编号

在得到闭合键物理位置的基础上%根据给定的按键编号规律%计算得出闭合键的编

号&!!!*.+确保+9K对键的一次闭合仅作一次处理

为实现这一功能%可以采用等待闭合键释放以后再处理的方法&需要指出的是%以上各功能部分可以在一个程序中完成%也可以通过子程序或中断子程序

的方式由多个程序完成&

40键盘接口方式

由于不同单片机应用系统对于输入的要求不同%各种单片机应用系统的键盘接口也不一

样&常用的单片机键盘接口有以下四种)*$+独立按键接口*静态方式+在单片机系统中所需按键数量较少时%采用独立式键盘&这种键盘结构简单%每个按键接

单片机的一条%/M线%或接88N扩展并行输入口%通过对输入线的查询%可以识别每个按键的

状态&$例D>D%!为*+,-.$单片机设计一个含5个按键的独立式键盘&含5个按键的独立式键盘的线路连接如图D>6所示%5个按键经上拉电阻拉高后分别接

到*+,-.$的9$口5条%/M线上*9$>#H9$>.+&在无键按下的情况下%9$>#H9$>.线上输

入均为高电平&当有键按下时%与被按键相连的%/M线将得到低电平输入%其他位按键的输入

线上仍维持高电平输入&由图D>6可知%9$口的5条 %/M线经一片3DN,$$和一片3DN,#6实现逻辑相与后%将所

得信号传至*+,-.$的%28#引脚上&一片3DN,$$可提供三组4端输入的与门%一片3DN,#6可提供四组"端输入的与门&这样%每当有键按下时%%28#引脚上将有一个下降沿产生%申请

中断&在中断服务程序中%首先延时"#BY左右%等待按键抖动过后再对各键进行查询%找到

所按键%并转到相应的处理程序中去&此线路图所对应的主程序清单如下)

!:$$!

Page 128: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图D>6!含5个按键独立式键盘的线路连接

!!!! !!MI_!!####L!!!!!!!!Ng*9 *J%2MI_ ###4L ’外部中断#中断服务入口地址

Ng*9 %28 ’转中断服务

!!*J%2) ,P81 PJ ’开总中断允许

,P81 P[# ’开%28#中断

,P81 %8# ’下降沿有效

!!!!!11!!’中断服务程序清单如下)!!%28%) +JNN O"# ’延时去抖动

*MU 9$%h#TTL ’9$口送全$值

*MU J%9$ ’读9$口各引脚

J2N J%h4TL ’屏蔽高两位

+g2P J%h4TL%2P[8 ’验证是否确实有键闭合

Jg*9 %28# ’无键按下

!!2P[8) g21 J++>.%TK2+. ’查询.号键

g21 J++>D%TK2+D ’查询D号键

g21 J++>4%TK2+4 ’查询4号键

g21 J++>"%TK2+" ’查询"号键

g21 J++>$%TK2+$ ’查询$号键

g21 J++>#%TK2+# ’查询#号键

!!%28#) IP8%

!!TK2+.) !!!!!11 ’.号键处理程序

!!TK2+.$)*MU J%9$ ’再读9$口各引脚

g21 J++>.%TK2+.$ ’确认键是否释放

IP8%

!#"$!

Page 129: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!TK2+D) !!!!!11 ’其他键处理程序

*"+行反转法矩阵式键盘接口

如果在单片机系统中需要安排较多的按键时%通常把键排列成矩阵形式%这样可以更合理

地利用硬件资源&矩阵按键可以采用行反转法和扫描法进行识别&行反转法识别按键时采取以下步骤)第一步)输出&将与键阵相连的两组 %/M口线中的一组设置为输入线*接收线+%另一组

设置为输出线*扫描线+&输入线的初值为全$%输出线的初值为全#&当有键被按下时%输入

线至少有一位为#%说明该输入线上至少有一个键闭合%并将输入线数据保存&*+,-.$单片

机可以采取两种方法判断是否有键闭合%一种方法是将所有输入线逻辑与后接 *+,-.$的外

部中断输入%通过中断法进行识别’另一种方法是逐条查询输入线是否出现低电平&第二步)行反转&将原有输入线和输出线的功能互换%即扫描线设定为输入%初值为全$’

接收线设定为输出%其初值为经第一步保存的值&然后读取输入口的状态并保存&第三步)判定&第一步保存值中为#的位只是被按下键所在的接收线’第二步保存值中为

#的位只是被按下键所在的扫描线’根据扫描线和接收线得出被按键的具体位置&$例D>.%!为63.$设计一个由5行5列键阵构成的键盘&5行5列键盘的线路连接如图D>:所示&在这里%使用63.$的 9$口的低5位作为输入

线%9"口的低5位作为输出线&

图D>:!5行5列键盘的线路连接

输入线通过一片3DN,$$和一片3DN,#6进行逻辑与的连接后作为63.$的一个外部中断

输入&这样%有键按下就将引起中断&中断服务程序要对所按的键进行判别&中断服务程序的开始部分应调用一段延时子程序*"#BY左右+%等待键的抖动消失%然后

再对所按的键作出处理&处理的第一步把输入线9$口的状态存入某寄存器中%从低向高依次

检查各位的状态%如果某位是#%与此位对应的9$口线即为被按键所在的输入线’第二步将上

一步寄存器的状态从9$口输出%送入9"口%并随之读9"口%采用同样的方法从低向高依次检

查各位找出输出线&根据两组线中#的位置即可确定是哪个键被按下&下面的IPJO子程序用以确定每组线中哪一位为#%是否有多个#&在调用子程序前%应

将从某组线读取的数据存入累加器J中&这段子程序返回时%某组线中#的位置*$H5+保存

在I4中&子程序清单如下)!$"$!

Page 130: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!IPJO)!+g2P!!J%h#TPL%2P[8$!!’测试9$>#*MU I4%h$ ’9$>#a#%说明被按键的输入线为9$>#Ng*9 P2ON ’返回

!!2P[8$) +g2P J%h#TOL%2P[8" ’测试9$>$*MU I4%h"Ng*9 P2ON

!!2P[8") +g2P J%h#T1L%2P[84 ’测试9$>"*MU I4%h4Ng*9 P2ON

!!2P[84) +g2P J%h#T3L%2P[8D ’测试9$>4*MU I4%hDNg*9 P2ON

!!2P[8D) +g2P J%h#PTL%2P[8. ’测试9$>D*MU I4%h.Ng*9 P2ON

!!2P[8.) +g2P J%h#OTL%P2ON ’测试9$>.*MU I4%h5

!!P2ON) IP8’按键引起中断后%执行下列中断服务程序)

N+JNN OPNJc ’延时去抖动

*MU J%9$ ’读输入线

J2N J%h4TL ’判断是否有键闭合

+g2P J%h4TL%2P[8 ’无键闭合%返回

IP8%!!2P[8) *MU 1%J ’暂存

N+JNN IPJO ’调用读取子程序

*MU D#L%I4 ’暂存在D#L单元

*MU 9"%h#TTL ’输出线写$*MU 9$%1 ’输入线写入数据

*MU J%9" ’读输出线

N+JNN IPJO ’调用读取子程序

[+L J%I4,WJ9 JMIN D#L%J ’得按键特征值

IP8%

上面的中断服务程序结束时%在D#L单元中存放有按键的单字节地址%即该键的特征值&此键的输出线号位于D#L单元的高D位%其输入线号位于低D位&此后%根据D#L单元的内

容查表%得到相应键的代码%可进行显示或其他处理&去抖动的延时子程序可以利用+9K的空闲方式&在这段子程序中%定时器必须预先置以

合适的初值%以得到需要的延迟时间&例如%晶振频率为$"*LV%欲延时"#BY%定时时间为)*"$577Q+C$"%Y/$"a"#C$#

4%Y%则应置初值7QaD..45%即#1$P#L&程序清单如下)!!OPNJc)*MU!!8M*O%h$$L!!!’方式$定时

*MU 8N$%h#P#L ’定时器$初始化

!""$!

Page 131: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU 8L$%h#1$L,P81 PJ,P81 P8$ ’开定时器$中断

,P81 98$ ’定时器$为高级中断

,P81 8I$ ’启动定时器$MIN 9+M2%h$ ’启动空闲方式%实际+9K在此处等待

+NI 8I$ ’以下D条指令只有在延时后定时器被唤醒%才能执行

+NI 98$+NI P8$IP8

上面的子程序中%定时器$被设定为高级中断&由于这段子程序被中断服务子程序调用%因此要把定时器$中断的优先级设置成高于键盘中断&

*4+动态扫描法矩阵式键盘接口

行反转法是一种有效的键盘接口方法%不仅节省%/M口线%编程实现也较容易&在只需要

扩展键阵的情况下是一种很好的方案&但是%多数单片机应用系统中%不仅需要扩展键阵%同时还要扩展NPO数码管显示器&此时%行反转法将不能满足要求&下面介绍另一种常用的键

盘接口方法(((动态扫描法%动态扫描法不仅可以扫描键阵%也可以实现显示%是目前应用十

分广泛的一种方法&$例D>5%!用6$..实现D行6列的4"键键盘接口&用6$..实现D行6列键盘的接口线路连接如图D>$#所示&6$..的 9J设定为输出口%

称其为扫描线&9+4H9+#设定为输入口%称其为回送线&在这里%6$..与 *+,-.$单片机

的接口采取第4章图4>"#的形式%即9J口的端口地址为3T#$L%9+口的端口地址为3T#4L&

图D>$#!用6$..实现D行6列键盘的接口线路连接

键值编码形式如下)!回送线9+#上的6个键从左到右依次为##LH#3L’!回送线9+$上的6个键从左到右依次为#6LH#TL’!回送线9+"上的6个键从左到右依次为$#LH$3L’!回送线9+4上的6个键从左到右依次为$6LH$TL&

!4"$!

Page 132: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

如果9+#上有键闭合%其键值为##L‘*##LH#3L+’如果 9+$上有键闭合%其键值为

#6L‘*##LH#3L+’如果9+"上有键闭合%其键值为$#L‘*##LH#3L+’如果9+4上有键闭

合%其键值为$6L‘*##LH#3L+&其中的*##LH#3L+的具体内容由扫描线决定%在程序中

用ID存放&下面的],$子程序用于判断键盘上是否有键闭合&程序清单如下)!!],$)*MU!!O98I%h3T#$L!!!!’将9J口地址送O98I%9J口作为扫描线

*MU J%h##L ’所有扫描线均为低电平

*MU[ eO98I%J ’9J口向列线输出##L%2+ O98I%2+ O98I ’指向9+口

*MU[ J%eO98I ’取回送线状态

+9N J ’行线状态取反

J2N J%h#TL ’屏蔽J的高半字节

IP8 ’返回

下面的]Pc子程序用于扫描键盘$识别按键的键码&程序中的O%I子程序是一个延时子

程序&程序清单如下)!!]Pc)!J+JNN!!!],$!!!!!!’检查是否有键闭合

g2\ N]$ ’J非#%说明有键按下

J+JNN O%I ’执行一次延时子程序*延时5BY+Jg*9 ]Pc

!!N]$) J+JNN O%IJ+JNN O%I ’有键闭合延时"C5BYa$"BY%以去抖动

J+JNN ],$ ’延时$6BY以后%再检查是否有键闭合

g2\ N]" ’有键闭合%转N]"J+JNN O%I ’无键闭合%说明是干扰信号%不作处理

Jg*9 ]Pc ’延时5BY后转]Pc$%继续等待键入

!!N]") *MU I"%h#TPL ’扫描初值送I"%设定9J#为当前扫描线

*MU ID%h##L ’回送初值送ID!!N]D) *MU O98I%h3T#$L ’指向9J口

*MU J%I"*MU[ eO98I%J ’扫描初值送9J口

%2+ O98I%2+ O98I ’指向9+口

*MU J%eO98I ’取回送线状态

g1 J++>#%NM2P ’J++>#a$%第#行无键闭合%转NM2P*MU J%h##L ’装第#行行值

Jg*9 N]9 ’转计算键码

!!NM2P) g1 J++>$%N8WM ’J++>$a$%第$行无键闭合%转N8WM*MU J%h#6L ’装第$行行值

Jg*9 N]9 ’转计算键码

!!N8WM)g1 J++>"%N8LI ’J++>"a$%第"行无键闭合%转N8LI*MU J%h$#L ’装第"行行值

Jg*9 N]9

!D"$!

Page 133: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!N8LI) g1 J++>4%2P[8 ’J++>4a$%第4行无键闭合%转2P[8*MU J%h$6L ’装第4行行值

!!N]9) JOO J%ID ’计算键码

9K,L J++ ’保存键码

!!N]4) J+JNN O%I ’延时5BYJ+JNN ],$ ’判断键是否继续闭合%若闭合再延时

g2\ N]49M9 J++ ’若键起%则键码送JIP8

!!2P[8) %2+ ID ’列号加$*MU J%I"g21 J++>3%]2O ’第3位为#%已扫描到最高列%转]2OIN J ’循环右移一位

*MU I"%JJg*9 N]D ’进行下一列扫描

!!]2O) Jg*9 ]Pc ’扫描完毕%开始新的一轮

!!O%I) !!!!!11 ’延时子程序*略+

键盘扫描程序的运行结果%是把被按键的键码放在累加器 J中%再根据键码进行相应的

处理&*D+通过串行口扩展键盘接口

*+,-.$系列单片机的串行口与并行%/M引脚配合可用来扩展键盘接口&在使用串口扩

展键盘接口时%还需用到串-并转换器件%例如使用串行输入$并行输出的3DN,$5D芯片&$例D>3%!使用串口与并行%/M口线配合%扩展"行6列的键盘接口%键号为#H$.&要

图D>$$!串口与并行%/M口线配合

扩展键盘接口的线路连接

求给出其硬件连接和键盘查询子程序&串口与并行%/M口线配合扩展键盘接口的线

路连接如图D>$$所示&在扫描时%扫描信号从串口输出的顺序为先

低位后高位%所以%从3DN,$5D的 f3引脚输出的

信号是低位扫描线&键盘的编码方式与前例类似)9$>$线上的6

个键分别为##L‘*##LH#3L+’9$>#线上的 6个键分别为#6L‘*##LH#3L+&扫描线*##LH#3L+的具体值采用ID存放&

程序清单如下)!!]Pc$5)!*MU!!,+M2%h##L!!!!’所有扫描线均为#

*MU J%h##L ’键盘初始化%送##L到列线上

N+JNN UJI8M ’发送数据

!!+L]) g21 9$>#%+L]# ’检查是否有键按下

g21 9$>$%+L]# ’检查是否有键按下

Jg*9 +L] ’无键按下%继续查找

!!+L]#) N+JNN O$#*, ’调用$#BY延时子程序%去抖

!."$!

Page 134: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

g21 9$>#%+LP2 ’确实有键按下%转+LP2g21 9$>$%+LP2Jg*9 +L] ’无键按下%继续查找

!!+LP2) *MU I"%h#TPL ’首列扫描字送I"%查键号%最低位为#*MU ID%h##L ’首列偏移值送ID

!!+L]2) *MU J%I" ’发送列扫描字

N+JNN UJI8Mg1 9$>#%+L$ ’检查9$>#有无键按下’若无%转+L$*MU J%h# ’第一行首列值送J%##L‘*ID+Jg*9 +]Pc ’转求键号

!!+L$) g1 9$>$%2P[8 ’检查9$>$有无键按下’若无%转2P[8*MU J%h6L ’第二行首列值送J

!!+]Pc) JOO J%ID ’求键号%并入栈保护

IP8!!2P[8) %2+ ID ’指向下一列

*MU J%I" ’取出原扫描字

g21 J++>3%]P2O ’是否已检查完6列

IN J ’6列未完%指向下一列

*MU I"%J ’列扫描字送I"Jg*9 +L]2 ’6列未完%检查下一列

!!]P2O) Jg*9 ]Pc$5 ’6列查完%未查到键入%等待

!!UJI8M)*MU ,1KT%J ’发送J中数据

g21 8%%( ’发送等待

+NI 8% ’清除

IP8 ’结束

!!O$#*,) !!!!!11 ’延时$#BY子程序*略+

此系统使用串口连接3DL+$5D后构成键阵的列线%9$>#和 9$>$作为行线&程序采取查

询方式读取键号%并且考虑了键的抖动问题&

D>$>D!薄膜开关

对于实际应用的单片机系统来说%系统中的输入器件*如键盘等+容易受到有害外界环境

*如灰尘$有害气体$液体+的侵蚀%因而%提高输入器件的抗侵蚀性能十分重要&由于薄膜开

关具有结构简单%体积小%防尘%防水%防有害气体侵蚀%寿命长等优点%因而%在单片机应用系

统中得到了愈来愈广泛的应用&与分立式元件不同%薄膜开关内部的连线都在开关的制作时预制完成%不需要进行导线与

开关间的焊接%因此%薄膜开关的可靠性也更高&与按键式键盘类似%多个薄膜开关也可按照

独立式和矩阵式设计内部电路%其原理与普通的键盘相同&由于薄膜开关的按键结构与普通的键盘不同%薄膜开关电路中的接触点也具有其本身的

特点&薄膜开关中的接触点主要有迷宫式和触点式两种形式&迷宫式薄膜开关适用于键数不

多的非矩阵式电路中%其原理是薄膜开关下方的电路由两条不相连的导线构成%薄膜开关提供

两条导线相连的触头%当开关被按下时%原来不相连的两条导线将会连通&触点式薄膜开关中

的触点是指开关中的薄膜上导线与开关下方的导线间导通的接点&当薄膜被按下时%上下触

!5"$!

Page 135: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

点中的导线将会连通&$注意%!本节讲述了单片机系统的几种常用输入设备)1+O拨码盘$独立按键式键盘$矩阵式键盘

等&其中1+O拨码盘和独立按键式键盘具有接口简单%易于操作的特点%但输入信息有限%适合于输入控制信息或比较少的数据’矩阵式键盘的接口相对复杂%而且需要编制相应的识别程

序来进行按键识别%由于按键采取矩阵式排列%按键数量较多%所以适合于需要输入较多数据

的系统中&矩阵式键盘在识别时可选用扫描法和行反转法&矩阵式键盘接口可以使用单片机

的%/M口%由于需要占用较多的%/M口线%因此%在多数应用系统中%使用扩展芯片*如6$..+或者使用单片机的串口实现矩阵式键盘接口&薄膜开关则具有抗侵蚀的特点%在单片机系统

中得到了越来越广泛的应用&

D>"!显示接口

显示接口用于实现单片机应用系统中的数据输出和状态的反馈%常用的有 NPO$NPO数

码管$N+O液晶显示接口等&

D>">$!/-6显示与驱动

发光二极管简称NPO*N?E;’PB?’’?&EO?AS(+&由 NPO组成的显示器%是单片机系统中常

用的输出设备&NPO显示器件的种类很多%但都是由单个的NPO发光二极管组成&从颜色上

来划分%可以有红$橙红$黄$绿$蓝等颜色的 NPO显示器’从 NPO的发光强度来划分%可分为

普通亮度$高亮度$超高亮度等’从NPO器件的外观来划分%可分为"6#字形的七段数码管$米字形数码管$点阵块$矩形平面显示器$数字笔画显示器等&其中数码管又可从结构上分为单$双$三$四位字’从尺寸上又可分为#>4英寸*$英寸a">.D@B+$#>45英寸$#>D英寸$--.>#英寸等类型&常用的NPO数码管尺寸为#>.英寸&将若干NPO按不同的规则进行排列%可以

构成不同的NPO显示器%常见的有NPO数码管显示器和NPO点阵模块显示器等&

$0NPO数码管显示器

如果要显示十进制或十六进制数字及某些简单字符%可选用数码管显示器&这种显示器

能显示的字符较少%形状有些失真%但控制简单%使用方便&其结构如图D>$"所示&

图D>$"!NPO数码管显示器

!3"$!

Page 136: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图中的QHE七个笔画*笔段+及小数点 S<均为发光二极管&如果所有发光二极管的阳

极连在一起%称为共阳极数码管%阴极连在一起的称为共阴极数码管&对于共阳极数码管而

言%所有发光二极管的阳极均接高电平%所以%哪一个发光二极管的阴极接地%则相应笔段的发

光二极管发光’对于共阴极数码管而言%所有发光二极管的阴极均接地%所以哪一个发光二极

管的阳极接高电平%则相应笔段的发光二极管发光&因此%要在NPO数码管显示器上显示某字符%必须向其公共端及各段施加正确的电压&

对公共端的施压操作称为位选%对各段的操作称为段选%段选码也称为字形码&字形码可以根

据显示字符的形状和各段的顺序得出&例如%显示字符"##时%Q$R$@$S$($Z点亮%E%S<熄灭%如果在一个字节的字形码中%各段的顺序由低至高为Q$R$@$S$($Z$E和S<%则可得到字符"##的共阴极字形码为4TL%共阳极字形码为#+#L&其他字符的字形码可以通过相同的方法得

出&根据NPO数码管位选的连接方法%可以有静态显示和动态显示两种方式&

图D>$4!NPO点阵模块显示

字母"J#的情况

"0NPO点阵模块显示器

NPO点阵模块显示器是指由发光二极管排成一个%/1的点

阵%每个发光二极管构成点阵中的一个点&这种显示器显示的字

形逼真%能显示的字符比较多%但控制比较复杂&常用的点阵模块显示器有3行.列$6行.列$6行6列等类

型&单个 NPO点阵显示器可以显示各种字母$数字和常用的符

号&图D>$4为由3行.列共4.个 NPO构成的显示器显示字母

"J#的情况 &用多个点阵式 NPO模块显示器可以组成更大的

NPO显示器%用于显示汉字$图形和表格&

图D>$D!单个NPO的驱动接口电路

40NPO的驱动接口

单个NPO实际上是一个压降为$>"H$>.U的发光二极管%相同型号的 NPO显示管的压

降基本相同%通过NPO的电流决定了它的发光强

度&图D>$D为单个 NPO的驱动接口电路&NPO工作电流计算公式为)

!!!!!!!!!!!!!3Ta/!++7

*!T‘!+,+0/#

式中!!T(((NPO的正向压降’!+,(((NPO驱动器的压降’#(((NPO的限流电阻’!++(((电源电压%3T为NPO的工作电流&

图D>$D中的3D#5是一个集电极开路输出%用于驱动 NPO&当单片机的 %/M端口为高电

平时%反相器输出低电平%NPO发光’当单片机的%/M端口为低电平时%反相器输出高电平%没有电流流过NPO%NPO熄灭&

当电源电压为.U时%NPO工作电流取$#BJ&限流电阻计算如下)

#a/!++7*!T‘!+,+0/3T!6"$!

Page 137: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!T一般取$>.H">.U%!+,取#>DU左右%则)

#a/.7*$>.‘#>D+0/$#a4$#’

取限流电阻为4##’%当工作电压为.U%驱动电流要求不太大时%使用3DN,#D等门电路即可

驱动NPO&使用具有锁存$译码和驱动功能的*+$D.$$驱动NPO数码管更具有实际意义&对于实际应用中的NPO%适当减小限流电阻可以增加NPO的工作电流%使NPO的显示效

果更好&但工作电流不宜过大%一方面%工作电流继续增大不会增加显示亮度’另一方面%过大

的工作电流会对驱动器件造成损害&

D>">"!/-6数码管的显示与驱动

NPO数码管显示器常用的工作方式有静态显示方式和动态显示方式两种&

$0静态显示方式

静态显示方式是指当显示器显示某一字符时%发光二极管的位选恒定地选中&例如显示

字符"##时%显示器的Q$R$@$S$($Z导通%E$S<截止&在这种显示方式下%每一个 NPO数码管

显示器都需要一个6位的输出口进行控制&由于单片机本身提供的 %/M口有限%在实际使用

中通常通过扩展%/M口的形式解决输出口数量不足的问题&$例D>6%!通过在串行口上扩展多片串行输入并行输出的移位寄存器3DN,$5D作为静态

显示器接口的方法%设计4位静态显示器接口%并写出显示更新子程序%实现将3TLH3OL三

个单元的数值分别在NPO"HNPO#上显示出来&接口方式如图D>$.所示&三个共阳极数码管的公共端均接 !++&段码通过串行口%采用

串-并转换原理%分别送出三个数码管的段码&图中%先送出的段码字节在 NPO"数码管上显

示&由于3DN,$5D输出低电平时最大电流为6BJ%所以%数码管每段工作电流不能超过6BJ&取3TaDBJ%3DN,$5D输出低电平为!MNa#>DU%所以%图中的电阻值为

#a/.7*$>.‘#>D+0/Da33.’这里取3.#’即可&

图D>$.!使用串行口扩展的静态NPO显示接口

下面的子程序用于实现显示器的更新*使用共阳极字形码+&程序清单如下)

!:"$!

Page 138: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!O%,9)*MU!!!I.%h#4L!!!!!’显示4个字符

*MU I$%h3TL ’3TLH3OL存放要显示的数据

!!ON#)*MU J%eI$ ’取出要显示的数据

*MU O98I%h,8J1 ’指向段数据表

*MU+ J%eJ‘O98I ’查表取字形数据

*MU ,1KT%J ’送出数据%进行显示

g21 8$%( ’全部输出否

+NI 8$ ’全部输出%清中断标志

OP+ I$ ’再取下一个数据

Og2\ I.%ON# ’循环4次

IP8 ’返回

!!,8J1)O1 #+#L%#T:L%#JDL%#1#L%::L!’段数据表

!!!!!11

静态显示的优点包括)显示稳定’在发光二极管导通电流一定的情况下显示器的亮度大’系统运行过程中%在需要更新显示内容时%+9K才去执行显示更新子程序%这样节约了+9K的

时间%提高了+9K的工作效率&其不足之处是占用硬件资源较多%每个NPO数码管需要独占

6条输出线&随着显示器位数的增加%需要的%/M口线也将增加&为了节约%/M口线%常采用

另外一种显示方式(((动态显示方式&

"0动态显示方式

动态显示方式是指逐位轮流点亮每位显示器*称为扫描+%即每个数码管的位选被轮流选

中%多个数码管公用一组段选%段选数据仅对位选选中的数码管有效&对于每一位显示器来

说%每隔一段时间点亮一次&显示器的亮度既与导通电流有关%也与点亮时间和间隔时间的比

例有关&通过调整电流和时间参数%可以实现既保证亮度又保证显示&若显示器的位数不大

于6位%则显示器的公共端只需一个6位 %/M口进行动态扫描*称为扫描口+%控制每位显示

器所显示的字形也需一个6位口*称为段码输出+&$例D>:%!设计5位共阴极显示器与6$..的接口电路%并写出与之对应的动态扫描显示

子程序&要求在这六只显示器上显示片内 IJ*3:LH3PL单元的内容&在这里%6$..与

*+,-.$单片机的接口采取第4章图4>"$的形式%即9J口的端口地址为3T#$L%9+口的端口

地址为3T#4L&5位动态显示器接口逻辑如图D>$5所示&在此系统中%使用了6$..的9J口和91口%其中 9J口作为扫描口%91口作为段码输出

口&6$..的9J口和91口都工作在基本输出方式下%在进行扫描时%9J口的6位依次置$%依次选中了从左至右的显示器&此图中%使用了KN2"6#4%而不是用3D#3作为段码输出驱动%这是因为 KN2"6#4具有6路驱动%只需一片即可驱动6位段码&但由于 KN2"6#4是反相驱

动%在段数据表中的字形码应与共阳极数码管的字形码相同&动态扫描子程序清单如下)!!O%,9)! *MU!!O98I%h3T##L!!!!!’指向6$..命令寄存器

*MU J%h######$$1 ’设定9J口91口为基本输出方式

*MU[ eO98I%J ’输出命令字

!!O%,9$) *MU I#%h3PL ’指向缓冲区末地址

!#4$!

Page 139: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

*MU J%h"#L ’扫描字%9J.为$%从左至右扫描

!!NMM9) *MU I"%J ’暂存扫描字

*MU O98I%h3T#$L ’指向6$..9J口

*MU[ eO98I%J ’输出位选码

*MU J%eI# ’读显示缓冲区一字符

*MU O98I%h98I2 ’指向段数据表首地址

*MU+ J%eJ‘O98I ’查表%得段数据

*MU O98I%h3T#"L ’指向6$..91口

*MU[ eO98I%J ’输出段数据

+JNN O$*, ’延时$BYOP+ I# ’调整指针

*MU J%I" ’读回扫描字

+NI + ’清进位标志

II+ J ’扫描字右移

g+ 9J,, ’结束

Jg*9 NMM9 ’继续显示

!!9J,,) IP8 ’返回

!!O$*,) *MU I3%h#"L ’延时$BY子程序

!!O*,) *MU I5%h#TTLOg2\ I5%(Og2\ I3%O*,IP8

!!98I2) O1!#+#L%#T:L%#JDL%#1#L%::L’段数据表

!!!!!11

图D>$5!5位动态显示器接口

!$4$!

Page 140: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

上面的程序中%虽然每次点亮时间仅为 $BY%由于往复循环点亮%所以%从视觉角度来看六

只显示器处于同时点亮状态&

D>">4!/#6液晶显示与驱动

液晶显示器简称 N+O*N?mG?S+FXY’Q)O?AS(Y+&这类显示器具有体积小%重量轻%功耗极

低%显示内容丰富等特点%在单片机应用系统中有着日益广泛的应用&

$0N+O的结构和工作原理

液晶显示器的结构如图D>$3所示&

图D>$3!液晶显示器的结构

N+O是通过在上$下玻璃电极之间封入液晶材料%利用晶体分子排列和光学上的偏振原

理产生显示效果的&同时%上$下电极的电平状态将决定 N+O的显示内容%根据需要%将电极

做成各种文字$数字$图形后%就可以获得各种状态显示&通常情况下%图中的上电极又称为段

电极%下电极又称为背电极&

"0N+O的分类及特点

N+O显示器有段式和点阵式两种%点阵式又可分为字符型和图像型&段式N+O显示器类似于NPO数码管显示器&每个显示器的段电极包括Q$R$@$S$($Z和E

七个笔画*笔段+和一个小数点S<&可以显示数字和简单的字符%每个数字和字符与其字形码

*段码+对应&点阵式N+O显示器的段电极与背电极呈正交带状分布*如图D>$6所示+%液晶位于正交

的带状电极间&点阵式N+O的控制一般采用行扫描方式%如图D>$:所示为显示字符"J#的

情况&通过两个移位寄存器控制所扫描的点&图中的移位寄存器$控制扫描的行位置%同一

时刻只有一个数据位为"$#%相对应的行处于被扫描状态%这时%移位寄存器"可以将相应的

列数据送入点阵中%这样逐行循环扫描%可以得到显示的结果为字符"J#&

40N+O液晶显示器的驱动

在N+O的段电极与背电极间施加电压*通常为DU或.U+%可使该段呈黑色%这样%可以

实现显示&但是%所施加的电压必须周期地改变极性%否则N+O中将发生化学变化%并导致液

晶的损坏&因此在段电极与背电极间应有一个周期改变极性的电压&$例D>$#%!使用*+,-.$直接控制两位N+O显示器%设计其硬件连线和显示程序&*+,-.$直接控制两位N+O显示器的线路连接如图D>"#所示&使用*+,-.$的9$口控制显示十位数的 N+O的段电极和背电极’9"端口控制显示个位

数的N+O的段电极和背电极&使用一个定时器来划分驱动电压的半周期&N+O的驱动电压重复频率应介于4#H$##LV!"4$!

Page 141: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图D>$6!点阵式N+O显示器的正交带状分布 图D>$:!点阵式N+O显示"J#的情况

图D>"#!*+,-.$直接控制两位N+O的线路连接

之间%若以$"BY作为半周期%则频率应等于D"LV%如果晶振频率为4>.6*LV%则定时器初值

应等于74.6#%即#T"#DL&*+,-.$通常处于空闲方式下%定时器产生溢出中断%使*+,-.$退出空闲方式%定时器中

断服务程序应包括以下两点)! 重置定时器初值’! 使N+O各段的电压反相&中断服务子程序清单如下)!!%88)*MU!8N$%h#DL

*MU 8L$%h#T"L

[IN 9$%h#TTL

[IN 9"%h#TTL

IP8

此程序中9$口和9"口的内容与$进行异或%达到了电压取反的目的&为了更新显示的内容%将通过查表法获得字符的段码&在段码表中%显示的段用$表示%

不显示的段用#表示%背电极也为低电平#&要显示的内容以1+O形式存放在片内IJ*的显

!44$!

Page 142: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

示缓冲单元1+OU中%查表操作根据1+O值的低半字节进行&另外%在向 N+O写入新段码期

间%应关闭定时器中断&显示更新子程序清单如下)!!O%,9)+NI!!P8$!!!!!!!!!!’关定时器$中断

*MU O98I%h8J1NP ’段表首地址

*MU J%1+OU ’要显示的数送J,WJ9 J ’先显示十位数

J2N J%h#TL ’屏蔽个位数

*MU+ J%eJ‘O98I ’查表

*MU 9$%J ’更新十位数

*MU J%1+OU ’读要显示的数

J2N J%h#TL ’屏蔽十位数

*MU+ J%eJ‘O98I ’查表

*MU 9"%J ’更新个位数

,P81 P8$ ’开定时器$中断

IP8 ’子程序结束

8J1NP) O1 4TL%#5L%.1L%DTL%53L ’段数据表

!!!!!11

此程序中%8J1NP为段表首地址%此表中数据的最高位均为#%这样%可以确保背电极为低

电平#&

D0N+O显示模块

上一个例子介绍了单片机直接控制N+O显示器的接口&其硬件连接虽然简单%但需占用

较多的%/M口线&在实际应用中%还有许多更为有效的 N+O显示器接口方式%包括使用专用

的N+O显示驱动器和N+O显示模块等方法&其中%N+O显示模块*N?mG?S+FXY’Q)O?Y<)QX*AS-G)(%简称N+*+是把N+O显示屏$背景光源$线路板和驱动集成电路等部件构造成一个整体作

为一个独立部件使用%其内部结构如图D>"$所示&N+O显示模块只留一个接口与外部通信&显示模块通过这个接口接收显示的命令和数据%并按指令和数据的要求进行显示’外部电路通

过这个接口读出显示模块的工作状态和显示数据&N+O显示模块一般带有内部显示IJ*和

字符发生器%只要输入J,+%%码就可以进行显示&

图D>"$!N+O显示模块的内部结构

N+O显示模块可分为)N+O段式显示模块%N+O字符型显示模块%N+O图形显示模块三

类&每类显示模块都有多种不同的产品可供选用&LODD36#各引脚功能定义如表 D>"所

示&!

!D4$!

Page 143: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表D>"!+6DD36#各引脚功能定义

引脚号 定义 功能简介

9%2$ !,, 接电源地线

9%2" !++ 接‘.U电源

9%24 !# 液晶灰度调整%使用可变电阻调整%通常接地

9%2D I,寄存器选择)输入低电平选择指令寄存器’

输入高电平选择数据寄存器

9%2. I/W读写选择)输入低电平为写操作’

输入高电平为读操作

9%25 P 使能信号输入

9%23H9%2$D O1#HO13 数据总线%双向%三态

!!LODD36#字符显示模块是较常用的N+O显示模块&每个 LODD36#可控制的字符可达每

行6#个字符%并且具有驱动$5CD#点阵的能力&LODD36#型N+O显示模块具有其自身的$$条指令构成的指令系统%用户对模块写入适当的控制命令%即可完成清屏$显示$地址设置等操

作&例如%向显示模块的口地址中写入h#$L即可实现清显示器功能&$例D>$$%!设计*+,-.$单片机驱动LODD36#显示模块的线路连接&*+,-.$单片机与LODD36#显示模块的线路连接如图D>""所示&LODD36#显示模块使

用*+,-.$单片机外部数据存储器地址空间&此图中单片机的 9$口与 LODD36#的数据线相

连%LODD36#的I/W端信号由*+,-.$的94>.提供%LODD36#的通讯允许信号P由*+,-.$的94>4提供%LODD36#的寄存器选择信号I,由*+,-.$的94>D提供&

图D>""!*+,-.$与LODD36#的线路连接

$注意%!本节介绍了单片机系统中的两种常用显示器 NPO显示器$N+O液晶显示器和各自的接

口&NPO显示器包括NPO数码管显示器和NPO点阵显示器两种&NPO数码管显示器所显示

!.4$!

Page 144: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的字符较少%形状有些失真%但接口简单%控制方便%适用于规模较小%显示精度要求不高的单

片机系统中&NPO点阵显示器的字形逼真%可显示的字符较多%但其接口较复杂%控制不够方

便%适用于显示精度要求较高的单片机系统中&NPO数码管显示器的工作方式有静态显示方式和动态显示方式两种&静态显示方式的

显示效果稳定%占用+9K时间较少%但需要占用较多的%/M口线&因此%在应用中多使用串口

扩展串-并转换芯片的方法&动态显示方式可以节约%/M口线%但需要编程实现对每位显示器

的循环扫描问题&N+O液晶显示器具有功耗低%显示内容丰富等特点&N+O显示器也可分为段式和点阵式

两种&N+O显示器可以使用单片机来直接驱动%但使用专用的 N+O驱动器和 N+O显示模块

是更实用的两种方法%尤其是N+O显示模块%其具有功能强大%易于控制%接口简单等优点%在单片机系统中应用较多&

D>4!微型打印机接口

微型打印机是众多单片机应用系统中典型的输出设备&当输出的数据$状态需要存档或

需要分析报表时%经常用到打印机之类的打印设备&微型打印机具有可打印字母$点阵的作

用%能满足一般的应用要求%并且具有体积小%价格低%使用方便等优点&常用的微型打印机有

_9$5$89%9$99D#等%本节以89%9中的 89%9-D#J微型打印机为例%讲述单片机与微型打印

机的接口&

D>4>$!.)!)打印机的主要技术性能

89%9微型打印机主要包括89%9-D#J和89%9-$5J等多种产品%有卧式$面板式和台式等

类型&这两种产品的接口与时序要求完全相同%操作方式相近%硬件及插脚完全兼容%只是指

令代码不完全相同&89%9-D#J每行打印D#个字符%89%9-$5J每行打印$5个字符&89%9-D#J的主要技术性能列举如下)*$+采用单片机控制%具有"]1的打印监控程序和标准的圣特罗尼克*+(&’FA&?@+并行接

口%便于与各种计算机应用系统联机使用’*"+具有较丰富的打印命令%命令代码均为单字节%格式简单’*4+可打印全部标准的J,+%%码字符以及$"6个非标准字符和图符’*D+可打印6C"D#点阵的图样*或汉字+%字符和图样可混合打印’*.+具有水平和垂直制表命令%便于打印表格’*5+字符$图符和点阵图可以在宽和高方向放大"倍$4倍或D倍’*3+字符的行间距可用命令更换’*6+具有重复打印同一字符的命令%以减少输入代码的数量’*:+带有命令格式的检错功能%当输入错误命令时%打印机立即输出错误信息代码&最新的89%9系列打印机增加了图表汉字库%使汉字的打印工作可以像英文字母一样方

便地打印&

D>4>"!.)!)%D#’打印机的接口信号和时序

89%9-D#J打印机的接口为"5针插座%如图D>"4所示%其引脚信号的定义如表D>4所示&!54$!

Page 145: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表D>4!.)!)%D#’打印机并行接口各引脚的定义

引脚号 信! 号 方! 向 说! 明

$ ,81 入!数据选通触发脉冲%低电平有效&在该信号上升沿时%数据线上的6位并行

数据被打印机读入机内锁存

4 OJ8J$ 入

. OJ8J" 入

3 OJ8J4 入

: OJ8JD 入

$$ OJ8J. 入

$4 OJ8J5 入

$. OJ8J3 入

$3 OJ8J6 入

!数据信号线%单向%由计算机输入到打印机’这些信号分别代表并行数据的

第一至第八位信息%每个信号当其逻辑为"$#时为"高#电平%逻辑为"##时为

"低#电平

$: J+] 出!回答脉冲%低电平有效&此信号有效时%表示数据已被接受而且打印机准备

好接收下一个数据

"$ 1K,c 出 高电平有效%此信号有效时%表示打印机正"忙#%不能接受数据

"4 9P ( 接地

". ,PN 出 经电阻上拉"高#电平%表示打印机在线

D PII 出

!"出错#信号%经电阻上拉"高#电平%表示无故障&当送入打印机的命令格

式有错时%打印机立即在此信号线上发出一个4#BY宽的负脉冲%并打印出一

行出错信息

"$5$6$"5 2+ ( 未接

$#-"D _2O ( 接地%逻辑"##电平

注)*$+"入#表示输入到打印机%"出#表示从打印机输出&

*"+信号的逻辑电平为88N电平&

图D>"4!并行接口插座及引脚

打印机各信号间的时序关系如图D>"D所示&

图D>"D!打印机各信号间的时序关系

!34$!

Page 146: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

需注意%选通信号的,81宽度应大于#>.%Y’采用查询方式时%一般使用,81和 1K,c作为

一对信号%采用中断或应答方式%/M时%一般使用,81和J+]作为一对信号&

D>4>4!.)!)%D#’打印机的打印代码和打印命令

$0打印代码

89%9-D#J打印机提供DD6种机内驻留代码符号%包括英文$希腊文$德文$法文$俄文$日语片假名和少量汉字%大量常见的数学符号$专用符号以及用于制表和制图的图形符号&字符

大小为.C3点阵%图符大小为5C6点阵&通过程序%可以定义4"种字符%以满足特殊的需

要&如果打印某英文或数字字符串%需要将此字符串的 J,+%%码送至打印机&例如打印字符

串"D.4">36#%则送入打印机的代码串为)4DL$4.L$44L$4"L$"PL$43L$46L$#OL%其中的

#OL为字符串的结束代码&

"0命令代码

89%9-D#J提供了多种命令代码%这些命令代码规定了打印机的下列功能)*$+定义格式’*"+放大或缩小字符’*4+打印点阵图形’*D+选择字符集’*.+定义用户可定义字符’*5+其他&这些命令代码由一个或多个字节的控制码组成&需要注意的是%不同型号打印机的命令代码并不完全相同&每一个打印机制造厂商都有

自己的一套命令代码系统&89%9-D#J的命令代码是在参考了主流的 %1*和 P9,M2打印机

的基础上设计的%因此89%9-D#J的命令代码和大多数打印机兼容&89%9-D#J的部分命令代码及功能如表D>D所示&

表D>D!.)!)%D#’的部分命令代码及功能

命 令 代 码 命 令 功 能

#JL 换行%即打印机向前走一行纸

$1LDJL& 打印机向前进纸%点行%%在#H"..之间

$1L4$L& 打印机为后面的换行命令设置%点行间距%%在#H"..之间

$1LD4L& 将打印机的每一页设置为%字符行%%在#H"..之间%默认值%+D#

$1L55L*& 如果;+#%打印%个空格’如果;+$%打印%个空行%此时%在#H"..之间

$1L..L& 此命令后%字符和图形将以正常宽度的%倍打印%%在$HD之间

$1L.5L& 此命令后%字符和图形将以正常高度的%倍打印%%在$HD之间

$1L.3L& 此命令后%字符和图形将以正常高度和宽度的%倍打印%%在$HD之间

$1L"OL&!如果%+$%此命令后打印的内容将带有下划线’如果%+#%此命令后打印的内容将没有

下划线

!64$!

Page 147: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

命 令 代 码 命 令 功 能

$1L"1L&!如果%+$%此命令后打印的内容将带有上划线’如果%+#%此命令后打印的内容将没有

上划线

$1LD1L&,&"-SQ’Q-

!此命令用于打印宽度为%$点%高度为6点的点阵图形%每一列的6个点可以由一个字

节来表示%最高位在上’%$在$到每行最大点数之间%%"等于#%SQ’Q为该图每一列字节的

内容

$1LD#L 初始化打印机%打印缓冲器将被清除

#OL 回车命令%打印缓冲器中所有数据将被打印%并且向前走纸一行

$6L 删除此命令码前打印缓冲器内所有文本%回到上一回车码

3TL 删除此命令码前打印缓冲器内的一个字符

$1L""L& %+$%允许十六进制打印%%+#%禁止十六进制打印

##L 空

D>4>D!"#$%.$单片机与.)!)%D#’打印机的接口及打印实例

*+,-.$单片机与89%9-D#J打印机之间可以通过接口芯片*如6$..+连接%也可以利用

单片机的并行%/M口%将单片机与打印机直接连接&$例D>$"%!设计 *+,-.$与一台 89%9-D#J的接口电路%并编写使打印机打印字符串

"J1+OPT_#的程序&

图D>".!*+,-.$与89%9-D#J的接口原理

*+,-.$与89%9-D#J的接口原理如图 D>".所示&图 中%*+,-.$单 片 机 的 9$口 负 责 向

89%9--D#J传 送 数 据%94>D产 生 选 通 信 号&89%9--D#J收到数据以后%J+]信号向 *+,-.$发出中断请求%通知再送数据&

使用这种接口方式传送数据时应注意以下几

点)! 94>"%即%28#应设置为下降沿触发方式’! 第一个要打印字符在主程序中发送%其余字符在中断服务程序中发送’! 用*MU指令把数据通过9$口送至打印机的数据线上*例如*MU!9$%J指令+’! 用+NI!94>D和,P81!94>D两条指令产生数据选通脉冲,81&打印主程序清单如下)!!9I28),P81!P[#!!!!!’允许%28#有效

,P81 PJ,P81 %8# ’%28#下降延有效

*MU J%hD$L ’字符"J#的J,+%%码送打印机

*MU 9$%J+NI 94>D ’发选通脉冲

,P81 94>D+g2P J%hD3L%( ’检查是否打印完毕并等待中断

!:4$!

Page 148: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

+NI P[#P2O

!!’中断子程序清单如下)!!9%8) %2+ J ’原J,+%%码加$

*MU 9$%J ’送打印机打印

+NI 94>D ’发选通脉冲

,P81 94>DIP8% ’中断返回

$例D>$4%!设计*+,-.$单片机与一台 89%9-D#J的接口电路%并编写使打印机打印汉

字"算#的程序&*+,-.$单片机与89%9-D#J的接口电路原理如图D>"5所示&图中%*+,-.$的 9$口负

责向89%9-D#J传送数据&94>D产生选通信号%94>"用于检测89%9-D#J的1K,c引脚信号%当检测到89%9-D#J不处于"忙#状态时%需打印的数据由9$口送至打印机打印&

汉字"算#的$5C$5点阵显示情况如图D>"3所示&89%9-D#J在打印汉字时使用打印点

阵图形命令#TL%其打印命令格式为)#TL$$#L$$#L&其中的两个参数$#L分别代表点阵的

宽度和所占的字节数&

图D>"5!*+,-.$单片机与

89%9-D#J的接口原理图D>"3!汉字"算#的$5C$5点阵

进行打印时%首先将行间距设定为#%然后送入打印点阵图形命令和要打印的点阵数据&对于点阵数据而言%在$5C$5的点阵中如果某点需要着色%则此点对应的数据为$%否则为#&送入点阵数据时%首先送入第#列$前6行的数据%即##L’然后%依次送入第$列$前6行的数

据##L%第"列$前6行的数据$#L%--送完第$.列$前6行的数据后%换行回车’然后再送

第#列$后6行的数据%--直到第$5列$后6行的数据&打印程序清单如下)!!,8JI8)*MU!!O98I%hOJ8J$!!!’O98I指向数据表

,P81 94>D ’选通打印机

*MU I3%hD ’通过两次循环打印%设定行间距

!!,P2O$)*MU+ J%eO98I ’送数据至打印机

N+JNN 9I%28 ’调用打印子程序

%2+ O98I ’O98I加$Og2\ I3%,P2O$ ’未完待续

*MU I5%h" ’通过两次外层循环%实现汉字打印

!#D$!

Page 149: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!!,P2O)*MU I3%h"$ ’每层循环%打印字的一半

!!,P2O")*MU+ J%eO98I ’送数据至打印机

N+JNN 9I%28 ’调用打印子程序

%2+ O98I ’O98I加$Og2\ I3%,P2O" ’未完待续

Og2\ I5%,P2O ’外层循环未完待续

*MU J%h#OL ’打印回车符

N+JNN 9I%28IP8

!!9I%28)g1 94>"%( ’检测打印机的"忙#状态

*MU 9$%J ’送数据至打印机

+NI 94>D ’取消选通打印机

2M9 ’等待

,P81 94>D ’选通打印机%为下次打印作准备

IP8!!OJ8J$)O1 $1L%4$L%##L%#JL ’行间距为#

O1 $1L%D1L%$#L%##L ’设定点阵打印方式

O1 ##L%##L%$#L%"#L ’汉字"算#的上半部分数据

O1 DTL%#TJL%DJL%DJLO1 "JL%DJL%#TJL%DTLO1 D#L%D#L%##L%##LO1 #OL ’换行

O1 $1L%D1L%$#L%##L ’设定点阵打印方式

O1 ##L%#6L%#6L%#:L ’汉字"算#的下半部分数据

O1 #PJL%#1+L%#J6L%#J6LO1 #J6L%#J6L%#1TL%#P6LO1 #6L%#6L%#6L%##LO1 #OL ’换行

P2O

习!题!D

D>$!根据图D>4编制程序%实现将1+O拨码盘的数据读出%并送入内部IJ*的D#L单元&D>"!参考图D>4%使用"片3DN,"DD%设计含D个1+O拨码盘的硬件电路%并编制程序%实现将1+O拨码

盘的数据读出%并送入内部IJ*的D$L$D#L单元&D>4!使用*+,-.$的9$口设计一个由$5个键组成的键阵接口电路%并编写出与之对应的扫描法键盘识

别程序&D>D!使用6"..的9+口设计一个D行D列键阵的接口电路%并编写出与之对应的行反转法键盘识别程

序&D>.!利用 3DN,$5D%通过串行口扩展 6个按键%并编写与之对应的按键识别程序&!!D>5!参照图D>$5%设计一个含5位动态显示和"C6键阵的硬件电路%并编写程序%实现将按键内容显示

在NPO数码管上&D>3!使用6$..方式$%扩展89%9-D#J打印机并编写程序%将内部单元4#LH43L中数据送入打印机&

!$D$!

Page 150: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

书书书

第!章"过程 !"#通道

单片机应用系统由被控对象和单片机系统两大部分组成!通过单片机系统的实时数据采

集"实时决策和实时控制#使被控对象完成预定的任务#实现设计确定的功能!单片机系统和

被控对象之间信息的交互有输入$#$%&’%和输出$(&’%&’%两种类型#前者在单片机系统数据采

集时#将被控对象的信息经输入通道送入单片机系统&后者在单片机系统控制输出时#将单片

机系统决策的控制信息经输出通道作用于被控对象!上述两类信息交互的通道称为过程#)(通道!

交互的信息有两种不同的形式#一种是随时间变化的连续物理量#如电流"电压等#称为模

拟量&另一种是有开"关两种状态的数字量#称为数字量式开关量$或数字量%!在本章中主要

涉及开关量输入和输出以及模拟量输入和输出四个方面的问题!过程#)(通道的一般结构如图!*+所示!

图!*+"过程#)(通道的一般结构

被控对象与单片机系统之间信息交互#一方面要解决输入输出通道设计#解决,)-转换"-),转换"接口电路等与单片机系统最接近的"侧重于数字电路的技术问题&另一方面还需解

决传感与信息的变送#输出信息的功率驱动等与被控对象最近的"侧重于模拟电路的技术问

题!前者安排在本章介绍#后者将安排在第.章中介绍!这样安排#将数字电路和模拟电路剥

离开#便于学习"掌握!

!*+"开关量输入

被控对象的一些开关状态可以经开关量输入通道输入到单片机系统#如电器的启动和停

止"电磁铁的吸合和断开"光路的通和断等!但是#控制现场这些开关状态一般都不能直接接

入单片机!原因有两点’一方面#现场开关量一般不是//0电平#需要将不同的电平转化成单

片机所需的//0电平#该过程称为电平匹配&另一方面#即使现场开关量符合 //0电平需要#由于来自现场的干扰严重#一般也需要将单片机与现场的电气隔离开#避免现场电气对单片机

的干扰!经过电平匹配和电气隔离后的开关信号才能够通过单片机接口#接入到单片机系统!(12+(

Page 151: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

单片机接口可以是单片机端口线!如果单片机的端口线不足#开关量输入信号就只能经

系统扩展中所扩展的输入缓冲芯片#通过数据总线进入单片机!特殊的情况#对大信号有时需要使用诸如互感器之类的器件#预先将大信号转换成相对较

弱的开关信号#通过上述方法接入单片机!

!*+*+"开关量!"#及常见问题分析

+*电平匹配

电平匹配用于解决将非 //0电平转化为 //0电平问题!现场开关量的电压往往大于

!3#最简单的电平匹配方法是采用分压电路!如图!*1所示#!--是现场电压#", 为转换成

//0电平后的电压!",的分压为’

",4#1

#+$#1%!--4!3

所以

#1#+$#1

&!!--因为单片机或扩展芯片端口的驱动能力为5,级#所以#+"#1通常取6!数量级!由于现场的干扰#图!*1所示电路在实际中并不实用!若采用电气隔离方案能很巧妙地

解决电平匹配问题!

1*电气隔离

如何实现现场与微机之间的电气隔离#避免相互干扰呢)在开关量#)(中#可以采用一种

廉价而十分有效的方法***光电隔离!该方法得到了广泛的应用#而且被证明是一种行之有

效的方法!光电隔离通常采用光电耦合器件$简称光耦%来实现!

!*+*1"光耦及其应用

光耦通常使用较为普通的红外发光二极管与光敏三极管器件#由二者封装在一起组合而

成#如图!*7所示#当发光侧有电流通过时#发光二极管发光#光敏三极管导通&反之#发光二极

管不发光#光敏三极管不导通!

图!*1"电平匹配 图!*7"光耦原理

发光侧使用现场电源!--与现场地#受光侧使用数字电源 !88与数字地#二者通过光联系

在一起#实现电气的隔离!光耦的特性由发光二极管和光敏三极管的特性决定!在使用该类器件时应注意以下两个

方面的问题’! 发光侧的分析与普通发光二极管相似#要使其发光应使发光二极管上的压降不低于

(72+(

Page 152: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

"9#防止正向电流超过发光二极管可以承受的最大电流’9:&! 受光侧的光敏三极管与三极管相似#其输出电流 ’8受 ’9控制!此特性也可用于模拟

信号的隔离!在使用光耦时#常用到的术语有’

! 电流传输比8/;$8&<<=$’/<>$?@=<?;>’=%4’8’9A+BBC#光耦的8/;为+BBC左右&

! 正向压降"9为+*!3左右&!最大正向电流’9:的范围为!BDEB5,&!饱和压降"8FG为B*23左右!光耦在开关量输入通道中的应用如图!*2所示!

图!*2"开关量隔离输入原理

在发光侧#;+"8构成;8滤波电路#一方面能够滤除由开关G+闭合"断开引起的抖动#另一方面能滤除现场的高频干扰#此外;+还起到分压和限流作用!!--为发光侧模拟电压#由于

发光二极管正向导通压降约+*!3左右#发光电流为2DEB5,!工作电流 ’9取+B5,情况

下限流电阻 #+4!--H+*!3+B5, &从滤波角度出发#;8电路的传递函数为

+#()I+#如果设计转角

频率为*#角频率为1"*#亦’+#(41"*#(4+1"*#

#例如!--4+J3#则#+4+J3H+*!3+B5, 4+*.!6!

#实际#+取+*.6!#(4 +B.1"*+".!B#

9!

在受光侧#;1起限流作用!假设选定光耦的 8/;4+BBC#且 ’9$工作点选择%取+B5,#

则’84+B5,#三极管饱和压降!8FG4B*23#有#14!3HB*23+B5, 42.B!#实际#(取2EB!!

一般在开关量输入通道的受光侧#由于三极管饱和压降!8FG和电源电压 !88已知#且光耦

的8/;一般在+BBC左右#限流电阻#1大约为!BB!&但在开关量输入通道的发光侧#由于!--差异较大#限流电阻#+需计算#光耦发光"受光侧状态如表!*+所示!

$$表!*+"光耦发光!受光侧状态表

开关G+ 发光二极管 光敏三极管 "K$3%

闭合 发光 导通 B*2$低电平%

断开 不发光 不导通 !$高电平%

如果希望经光耦的输出 "K得到与图!*2相

反的结果#只需将#1及输出点移至光敏三极管的

发射极即可#图 !*!给出了同相输出局部电路!目前常用的光耦有/0L!1+系列"2M系列等!

本书主要介绍/0L!1+系列!/0L!1+系列有/0L!1+N+"/0L!1+N1"/0L!1+N2三种芯片!其中/0L!1+N+为一个芯片只含

一路光耦#/0L!1+N1含二路#/0L!1+N2含四路#/0L!1+N2芯片原理如图!*.所示!其参数如

(22+(

Page 153: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

下’!94+*+!3$当’94+B5,时%#推荐选用’9取值范围为+.D1!5,#!8FG最大为B*23#’8取值范围为+D+B5,#!88取值范围为!D123$推荐!3%#8/;4+BBC$典型值%#实际使用中#8/;通常工作在!BC#亦’94+.5,#’84J5,#参照前述计算方法#可以算出选用/0L!1+系

列光耦时的阻容参数!

图!*!"同相输出局部电路 图!*."/0L!1+N2芯片原理

光耦除了可以很方便地用于数字量隔离之外#还可用于模拟量隔离!当用于模拟量隔离

时#有两种方法’一是使用两个光耦配合运放#二是直接采用模拟式隔离光耦!光耦由于具有良好的输入)输出特性"隔离特性"传输特性#被广泛地应用于光电隔离"长

传输线隔离"驱动和放大等电路中!例如长距离传输时#在发送端和接收端各使用一路光耦#就可以很方便地将传输导线+浮

空,#达到长距离数据可靠传输的目的!在很多应用场合中#往往在发光侧增加一个发光二极管 3+#指示现场开关的状态#如图

!*E所示!请思考此时#+"(应如何求取)

图!*E"含状态指示的开关量输入电路

!*+*7"开关量输入通道的设计方法

+*直接利用:8GN!+端口线

当:8GN!+系统端口线有未用的口线时#可以简单地将光耦的输出接到:8GN!+的未用端

口线上#如图!*J所示#直接连接到L+*B上!图中#+"(+的大小由!--和滤波频率而定##8约为!BB!!

1*利用E2系列门电路

当:8GN!+的端口线全部被占用#开关量输入点数不多时#使用E2系列门电路扩展并行

(!2+(

Page 154: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

输入口是常见的方法#该方法设计简单#性价比高!应注意的是选用有缓冲功能的门电路#门的数量由输入点的个数而定!采用E20G122$八总线缓冲器%的应用场合较多!在地址线够用

时#扩展芯片的片选$或选通%采用线选法&地址线不够用时#采用地址译码法!

7*利用可编程并行#)(芯片

采用可编程并行#)(芯片的方法不常用#仅为了几个开关量输入#代价太高!可编程器件

的优点在于其端口可编程设定为输入或输出!如果将某端口固定作为输入或输出#势必大材

小用#降低性能价格比!有一种情况是例外的#某些场合必须用到可编程并行#)(芯片且有一

些未用的口线时#这些未用的口线可以用于开关量#)(#以便充分利用资源!

图!*J"直接连接到L+*B上

!*1"开关量输出

在单片机应用系统中#现场电器的通)断是通过开关量输出通道进行控制的!如电机的

图!*O"开关量输出的基本结构

启)停"继电器的通)断"电磁阀的吸合)释放#甚至

步进电机的步进脉冲等#这些都是以开关量的形

式表现出来的#都可以用数字+或B表示!开关

量输出通道一般是一条端口线控制一路电器!由

于现场电器通断时会产生强烈的干扰#所以从端

口线输出的开关量都需要电气隔离#此外数字量

B"+的 //0电平不足以驱动电器#所以隔离后还

要经驱动才能控制电器!开关量输出的基本结构

如图!*O所示!

!*1*+"开关量输出常见的受控对象

开关量输出常见的受控对象有电磁阀"继电器"步进电机等#其应用将在第.章详细讨论!

!*1*1"开关量输出的电气隔离

与开关量输入类似#开关量输出也要采用光电隔离#硬件电路"限流电阻#+"#1的计算方

法等与开关量输入相似!与开关量输入不同的是’在发光侧由于 :8GN!+端口的驱动能力不足$2或J个 //0负

载%#尽管几毫安也可以点亮发光二极管$图!*O中E2BE驱动可以省略%#但由于光耦的 8/;为+BBC左右#受光侧的驱动能力因此被限制在几毫安!在受光侧使用驱动器或受光侧驱动

(.2+(

Page 155: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

要求不高的情况下#省去发光侧的驱动是可行的!实际应用中#发光侧同相驱动常用E2BE#反相驱动常用E2B.#其驱动能力可达2B5,!

在受光侧#由于光敏三极管的驱动能力为 5,级#一般不足以驱动执行机构#所以经常需

要使用驱动电路!

!*1*7"开关量输出的驱动

光电耦合器件的不足体现在输出时#其驱动能力不足!如果需控制驱动要求为几百毫安

的电器时#可以使用光控晶闸管驱动#其原理与光耦类似#仅把光敏三极管换成了可光控的晶

闸管!如果需控制驱动要求为几安培的电器#常直接使用固态继电器$GG;%驱动#其原理类似

于一个光耦加一级驱动再加上一个+继电器,!这里的+继电器,绝非机械有触点的#而是无触

点的电子开关#有关驱动的内容将在第.章中进一步讨论!

!*1*2"开关量输出的常用设计方法

+*直接利用:8GN!+端口线

当:8GN!+系统有未用的端口线时#优先选择该方案!只需将图 !*O中的输出线连接到

:8GN!+系统未用的端口线上即可!

1*利用E2系列门电路

当:8GN!+端口线全部被占用#所需开关量输出点数不多的情况下#常采用如E27E2或

E27EE等J-锁存器扩展并行输出口的方法!

7*扩展可编程并行#)(口

该方法常用于将系统扩展的可编程并行#)(芯片的未用口线资源加以充分利用的场合#专门为开关量输出扩展可编程并行#)(口的情况并不多见!在开关量#)(的点数较多且二者

数量均非J的整倍数$如#’+1点#(’+1点%的情况下#扩展一片J1!!,用于开关量#)(还是较

常见的!在实际应用中#常需要在受光侧添加一个0F-#用于指示输出状态#请思考如何添加)

!*7"模拟量输入通道

控制系统中模拟量输入通道的设计非常重要#因为现场的诸如温度"压力"流量等连续变

化的非电物理量经传感器转换成模拟电量$电压)电流等%#通过变送单元转换成为一定形式

的模拟电量之后#需要使用 ,)-转换器件#将模拟量转换成数字量#最后经由接口电路#将数

字量送入单片机进行处理!这些现场状态$包括开关量输入%是单片机系统控制决策的依据!模拟量输入通道的一般结构如图!*+B所示!

模拟量输入通道中主要涉及’传感器"变送器",)-转换器"接口电路四个方面的问题#其中传感器"变送器将在第.章介绍!

,)-转换器$,$>PQR/Q-SRS’8Q$T=<’=<%是一种将模拟量$,$>PQR%转换为与其成比例的数

字量$-SRS’%的器件#常用,-8表示#本节主要介绍双积分型"逐次逼近型"串行等常用的 ,)-(E2+(

Page 156: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*+B"模拟量输入通道的一般结构

转换器件!

!*7*+"%"&转换器的分类与技术指标

+*,)-转换器分类及特点

,)-转换器按转换输出数据的方式#可分为串行与并行两种#其中并行 ,-8又可根据数

据宽度分为J位"+1位"+2位"+.位等&按输出数据类型可分为 K8-码输出和二进制输出&按转换原理可分为逐次逼近型$G,;%和积分型$#$’=R<>’S$R,)-#由于需要进行被测电压和基准

电压的二次积分#所以国内资料形象地称其为双积分型%!串)并行,-8各有优势!并行,-8具有占用较多的数据线#输出速度快的特点#在转换

位数较少时#有较高的性价比&串行,-8具有输出占用的数据线少#转换后的数据逐位输出#输出速度较慢的特点#但它具有两大优势’其一#便于信号隔离#在数据输出时#只需少数几路

光电隔离器件#就可以很简单地实现与:LU间的电气隔离&其二#在转换精度要求日益提高的

前提下#使用串行,-8的性价比较高#且芯片小#引脚少#便于线路板制作!K8-码输出采用分时输出千"百"十"个位的方法$以三位半为例%#由于它可以很方便地

驱动08-显示#故常用于诸如数字万用表等应用场合&二进制输出一般要将转换数据送单片

机处理后使用!逐次逼近型,)-转换器具有很快的转换速度#一般是$?级&双积分型,)-转换器转换速

度较慢#一般是5?级!

1*,)-转换器的主要指标

$+%分辨率与分辨精度

分辨率习惯上用转换后的数据的位数来表示!例如#对于二进制输出型 ,-8#分辨率为+1位的 ,)-转换器是指能将模拟信号转换成

BBBBVDB999V数字量的芯片!对于 K8-码输出型 ,-8其分辨率是 K8-数的个数#如分辨

率为7+1位的 ,)-转换器指的是四位 K8-码输出#其中三位是精确的#一位有一半是精确

的!分辨精度是指转换数据个数的倒数#用百分比表示!如+2位的,)-转换器的精度为

+1+2A+BBC4 +

+."7J2A+BBC4B*BB.+C

$1%量化误差

量化误差是指将模拟量转换成数字量$量化%过程中引起的误差#理论上为+单位数字量,(J2+(

Page 157: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的一半#即+)1$P?W%!$7%转换时间和转换速度

转换时间是指从启动转换开始#到完成一次转换所需的时间&转换速度是转换时间的倒

数!$2%量程

量程是指能够转换的电压范围#如BD!3#H+BDI+B3等!$!%其他指标

包括内部)外部基准"温度系数"抑制比等!

!*7*1"双积分型%"&转换器

尽管双积分型,)-转换器的转换速度普遍不高$通常每秒转换几次到几百次%#但是双积

分,)-转换器具有转换精度高#廉价#抗干扰能力强等优点#在速度要求不高的实际工程中使

用广泛!常用的双积分型,)-转换器有:8+2277"#80E+B."#80E+7!",-E!!!等芯片#下面以

具有代表性的:8+2277和#80E+7!为例#从两种不同的角度#分别介绍它们与:8GN!+单片机

的接口及编程方法!

+*:8+22777+1位,)-转换器

$+%:8+2277芯片介绍

:8+2277具有以下特点’

! 7+1位双积分型,)-转换器&

! 外部基准电压输入’1BB53或13&! 自动调零&! 量程有+OO*O53或+*OOO3两种$由外部基准电压!;F9决定%&! 转换速度为$+D+B%次)?#速度较慢!

图!*++":8+2277芯片引脚

:8+2277为 -#L12封装#芯片引脚排列如图 !*++所

示#引脚的功能及含义如下’+%与电源相关的引脚$共.脚%!! !--’正电源端#典型值I!3!! !FF’模拟负电源端#典型值H!3!! !GG’数字地$所有数字信号输入输出的零电位%!! XM-’模拟地$所有模拟信号的零电位%!! !Y’被测电压输入端!! !;F9’外接电压基准$13或1BB53%输入端!1%与外接电阻"电容相关的引脚$共E脚%!! ;+’外接积分电阻输入!

! 8+’外接积分电容输入!! ;+)8+’外接电阻 ;+和外接电容 8+的公共端#电容 8+常采用聚丙烯电容#典型值

B*+#9#电阻;+有两种选择’一是量程为1BB53时##+42EB6!&另一是量程为13时##+41E6!!

(O2+(

Page 158: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! 8B+"8B1’外接失调补偿电容端#典型值为B*+#9!! 80ZB"80Z+’时钟振荡器外接电阻;8接入端#外接电阻 ;8典型值为2EB6!#时钟频

率随;8电阻阻值的增加而下降!7%与控制信号相关的引脚$共7脚%!! -U’更新转换控制信号输入#高电平有效!! F(8’转换结束输出#当-U有效后#F(8变低#+."2BB个时钟脉冲$80Z%周期后产生

一个B*!倍时钟周期宽度的正脉冲#表示转换结束!典型的#F(8与-U相连#每次,)-转换

结束后均自动启动新的转换!! (;’过量程状态输出#低电平有效!当[!Y[\!;F9时#(;有效$输出低电平%!2%与选通和数据相关的引脚$共J脚%!! -G2D-G+’分别表示个"十"百"千位的选通脉冲输出#格式为+J个时钟周期宽度的正

脉冲!例如#当-G1有效期间#]BD]7上输出的K8-码表示转换的百位的数值!! ]BD]7’某位K8-码数字量输出!具体是哪位#由选通脉冲-G2D-G+指定#其中]7

为高位#]B为低位!:8+2277选通时序如图!*+1所示!F(8输出+)1个 80Z周期正脉冲表示转换结束#依

次-G+"-G1"-G7"-G2有效!当-G+有效期间从]7D]B端读出的数据是千位数#-G1有效期

间读出的为百位数#依次类推#周而复始!当-G+有效时#]7D]B上输出的数据为千位数#由于千位只能是B或+#故-G+有效期间#]7D]B输出的数据被赋予了新的含义’

$$表!*1"’(+2277千位选通含义

K8-输出 -G+有效时千位的含义

]7 ]1 ]+ ]B 极性 千位 量程

+ + + B I B *

+ B + B H B *

+ + + + I B 欠量程

+ B + + H B 欠量程

B + B B I + *

B B B B H + *

B + + + I + 过量程

B B + + H + 过量程

]7表示千位!]74B#表示千位为+&]74+#表示千位为B!

]1表示极性!]14B#表示极性为负&]14+#表示极性为正!

]B表示超量程!]B4+#表示超量程&]B4B#表示未超量程!

]B4+时#进一步确定是由过量程还是欠量程引

起的超量程#由]7$千位数据%来确定!当]74B#表示千位为+#是由过量程引起的&当 ]74+#表示千位

为B#是由欠量程引起的!:8+2277千位选通含义如表!*1所示!

图!*+1":8+2277选通时序

$1%接口与编程

:8+2277与:8GN!+的连接如图!*+7所示#采用中断方式$下降沿触发%#结果存储格式

(B!+(

Page 159: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

如表!*7所示#欠量程"过量程和极性分别保存在BBVDB1V位地址单元中!

图!*+7":8+2277接口原理

表!*7"存储格式要求

存储单元 7+V高2位 7+V低2位 7BV高2位 7BV低2位

所存数据 千位 百位 十位 个位

程序清单如下’""UM-F;’F]U"BBV"""""""&位地址单元存放欠量程$+真B假%""(3F;’F]U B+V &位地址单元存放过量程$+真B假%""L(0,’ F]U B1V &位地址单元存放极性$+负B正%""V#XV’ F]U 7+V &高位

""0( ’ F]U 7BV &低位

(;X BBBBV0_:L :,#M(;X BB+7V &#M/+中断服务入口地址

0_:L #M/+9"":,#M’ :(3 0( #‘B

:(3 V#XV#‘B &将存放结果的单元清B80; UM-F;80; (3F; &将存放欠量程"超量程的位地址单元清零

80; L(0, &假定结果为正

GF/K #/+ &置外部中断为下降沿触发

GF/K FY+ &开#M/+中断允许

GF/K F, &开中断总允许

0_:L $ &等待中断

""#M/+9’:(3 ,#L+ &进入中断#说明:8+2277转换结束#读L+口

_MK ,88*2##M/+9 &-G+无效#等待

_K ,88*1#MFY/ &]14+表示正#已经预处理过#继续

(+!+(

Page 160: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

GF/K L(0, &为负#需将B1V置位

""MFY/’_K ,88*7#MFY/+ &千位为B#已经预处理过#继续

(;0 V#XV#‘+BV &将千位信息保存在高位单元中

""MFY/+’_K ,88*B#F;;(; &转欠"超量程处理#有千位已能区分

""#M#+’ :(3 ,#L+_MK ,88*!##M#+ &等待百位选通信号

,M0 ,#‘B9V &屏蔽高2位

(;0 V#XV#,""#M#1’ :(3 ,#L+

_MK ,88*.##M#1 &等待十位选通信号

,M0 ,#‘B9V &屏蔽高2位

G ,L, &交换到高2位

(;0 0( #,""#M#7’ :(3 ,#L+

_MK ,88*E##M#+ &等待个位选通信号

,M0 ,#‘B9V &屏蔽高2位

(;0 0( #,;F/#

""F;;(;’:(3 ,#V#XV &欠"超量程处理

8_MF ,#‘B#(3 &有千位表示过量程

GF/K UM-F; &置欠量程标志

;F/#""(3’ GF/K (3F; &置过量程标志

;F/#

1*#80E+7!2+1位,)-转换器

$+%#80E+7!芯片介绍

#80E+7!是2+1位双积分,)-转换芯片#可以转换输出 a1BBBB个数字量#有 G/K选通

控制的K8-码输出#与微机接口十分方便!#80E+7!具有精度高$相当于+2位,)-转换%#价格低的优点!其转换速度与时钟频率相关#每个转换周期均有’自校准$调零%"正向积分$被

测模拟电压积分%"反向积分$基准电压积分%和过零检测四个阶段组成#其中自校准时间为

+BBB+个脉冲#正向积分时间为 +BBBB个脉冲#反向积分直至电压到零为止$最大不超过

1BBB+个脉冲%!故设计者可以采用从正向积分开始计数脉冲个数#到反向积分为零时停止计

数!将计数的脉冲个数减+BBBB#即得到对应的模拟量!图!*+2给出了 #80E+7!时序#由图

可见#当KUGb变高时开始正向积分#反向积分到零时 KUGb变低#所以 KUGb可以用于控制

计数器的启动)停止!#80E+7!为-#L1J封装#芯片引脚排列如图!*+!所示#引脚的功能及含义如下’+%与供电及电源相关的引脚$共E脚%!! H!’#80E+7!负电源引入端#典型值H!3#极限值HO3!! I!’#80E+7!正电源引入端#典型值I!3#极限值I.3!! -XM-’数字地##80E+7!正"负电源的低电平基准!(1!+(

Page 161: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*+2"#80E+7!时序 图!*+!"#80E+7!芯片引脚

! ;F9’参考电压输入#;F9的地为,XM-引脚#典型值+3#输出数字量4+BBBBA$!#M)!;F9%!

! ,8’模拟地#典型应用中#与-XM-$数字地%+一点接地,!! V#’模拟输入正!! 0(’模拟输入负#当模拟信号输入为单端对地时#直接与,8相连!1%与控制和状态相关的引脚’$共+1脚%!! 80Z#M’时钟信号输入!当+4JB5?时#*c%4+1!6Vd#对!BVd工频干扰有较大抑制

能力#此时转换速度为7次)?!极限值*c%4+:Vd时#转换速度为1!次)?!! ;F98I’外接参考电容正#典型值+#9!! ;F98H’外接参考电容负!! KU99(’缓冲放大器输出端#典型外接积分电阻!! #M/(’积分器输出端#典型外接积分电容!! ,e#M’自校零端!! 0( ’欠量程信号输出端#当输入信号小于量程范围的+BC时#该端输出高电平!! V#XV’过量程信号输出端#当输入信号超过计数范围$1BBB+%时#该端输出高电平!! G/(;’数据输出选通信号$负脉冲%#宽度为时钟脉冲宽度的一半#每次 ,)-转换结束

时#该端输出!个负脉冲#分别选通由高到低的K8-码数据$!位%#该端用于将转换结果打到

并行#)(接口!! ;)V’自动转换)停顿控制输入!当输入高电平时#每隔2BBB1个时钟脉冲自动启动下

一次转换&当输入为低电平时#转换结束后需输入一个大于7BB$?的正脉冲#才能启动下一次

转换!! L(0’极性信号输出#高电平表示极性为正!! KUGb’忙信号输出#高电平有效!正向积分开始时自动变高#反向积分结束时自动变

低!7%与选通和数据输出相关的引脚$共O脚%!! KJDK+’K8-码输出!KJ为高位#对应K8-码!! -!’万位选通!! -2D-+’千"百"十"个位选通!#80E+7!外接阻容的典型应用如图!*+.所示!

(7!+(

Page 162: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

由于单片机资源的宝贵#如果采用:8+2277的接口方法#将占用J条以上端口线#下面重

点介绍一种利用KUGb信号特点的+转换,方式#大大地减少了对单片机资源的占用!

图!*+."#80E+7!典型应用

$1%接口与编程

#80E+7!与:8GN!+的连接可参照:80+2277与处理器连接方法#依次读出万位到个位的

K8-码!本节采用另外一种方法#重点推荐采用计数法进行,)-+转换,的方法!#80E+7!与

:8GN!+连接如图!*+E所示!

图!*+E"#80E+7!与:8GN!+连接

+%硬件连接!设:8GN!+的外接晶振*Q?c4.:Vd#则,0F输出约为+:Vd#将,0F信号

输入8-2B2B的80Z引脚!8-2B2B是由+1个/型触发器组成的串行二进制计数器)分频器#有+1个分频输出端]+D]+1#最大分频系数为1+142"BO.#由于 8-2B2B的所有输入"输出

端都设有缓冲器#所以有较好的噪声容限!8-2B2B的]1输出是对,0F进行了1142分频#故输入#80E+7!的时钟为+:Vd)241!B6Vd#可得/8L4+)1!B5?4B*BB25?#由于一次转

换最多需$+BBB+I+BBBBI1BBB+%42BBB1个脉冲#故转换一次需B*BB2A2BBB1#+.B5?#因此#80E+7!的转换速度为.*1!次)?!选择这一频率#以牺牲 #80E+7!抗工频干扰为代

价#使:8GN!+的+.位计数器能一次计数,)-+转换,的 8L脉冲数!在满电压输入时#KUGb宽度为正向积分+BBBB个 8L脉冲#反向积分1BBB+个 8L脉冲$总计7BBB+个 8L脉冲%!在*Q?c4.:Vd情况下#JB7+内部定时频率为.:Vd)+14!BB6Vd#比#80E+7!时钟频率1!B6Vd大了+倍!在满刻度电压输入时#定时器计数值应为7BBB+A14.BBB1#不超过:8GN!+的+.位计数的最大可计数值$1+.%#故在 KUGb高电平期间#计数器计数值除以1#再减去+B

(2!+(

Page 163: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

BBB$1E+BV%#余数就是被测电压的数值!1%程序设计!假定将转换的结果$二进制%存放在;7#;1寄存器中#其中 ;7存放高位#

程序清单如下’""_K""L7*1#$"""""&等待KUGb变低$,)-转换结束%

:(3 /0B#‘B:(3 /VB#‘B &+.位计数器初值清B:(3 /:(-#‘B+V &/B定时#方式+$+.位定时%_MK L7*1#$ &等待KUGb变高$,)-转换开始%GF/K /;B &启动定时

_K L7*1#$ &等待,)-结束

80; /;B &停定时

80; 8:(3 ,#/VB;;8 , &高位除以1:(3 ;7#, &存高位

:(3 ,#/0B;;8 , &低位除以1:(3 ;1#, &存低位

80; 8GUKK,#‘+BV &低位减+BV:(3 ;1#,:(3 ,#;7GUKK,#‘1EV &高位减1EV:(3 ;7#,;F/

!*7*7"逐次逼近型%"&转换器")%*#

逐次逼近型,)-转换器 G,;$G&cc=??ST=,%%<QfS5>’SQ$;=RS?’=<%也称为逐次比较法 ,)-转换器#它由结果寄存器"比较器和控制逻辑等部件组成!采用对分搜索逐位比较的方法逐步

逼近#是一个采用数字量试探地-),转换"比较判断的转换过程!,位逐次逼近型,)-转换器最多只需,次-),转换"比较判断#就可以完成 ,)-转换!

因此#逐次逼近型,)-转换速度很快!本节主要介绍J位$:8GN!+总线宽度%和大于J位的

两种,)-转换器,-8BJBO和,-!E2,!

+*,-8BJBOJ位,)-转换器

$+%,-8BJBO芯片介绍

,-8BJBO是MG$M>’SQ$>PG=5ScQ$g&c’Q<美国国家半导体%公司生产的逐次逼近型 ,)-转

换器!,-8BJBO具有以下特点’! 分辨率J位&! 误差a+P?W#无漏码&! 转换时间+BB#?$当外部时钟输入频率*c4.2B6Vd时%&! 很容易与#L接口&

(!!+(

Page 164: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! 单一电源I!3#采用单一电源I!3时供电量程为BD!3&! 无需零位或满量程调整&! 带有锁存控制逻辑的J通道多路转换开关#便于选择J路中的任一路进行转换&! -#L1J封装&! 可按比率工作或使用!3或采用经调整模拟间距的电压基准工作&! 带锁存器的三态数据输出!尽管J位的,)-转换器在实际应用中已很少使用#但是不同的 ,)-转换器其控制引脚

大同小异#学习此芯片#对于了解其他逐次逼近型,)-转换器是大有益处的!,-8BJBO为-#L1J封装#芯片引脚排列如图!*+J所示#引脚的功能及含义如下’+%与电源及基准相关的引脚$共2脚%!

图!*+J",-8BJBO芯片引脚

! !8"8’工作电源输入!典型值 I!3#极限

值.*!3!! <=@$I%’参考电压$I%输入#一般与!8"8

相连!! <=@$H%’参考电压$H%输入#一般与XM-

相连!! XM-’地$第 +7脚#图 !*+J中该引脚隐

含%!1%与控制及状态相关的引脚$共J脚%!! G/,;/’,)-启动转换输入信号#正脉冲

有效!脉冲上升沿清除逐次逼近型寄存器#下降

沿启动,)-转换!! ,0F’地 址 锁 存 输 入 信 号#上 升 沿 锁 存

,--N8",--NK",--N,引脚上的信号#并据此选

通转换#MNED#MNB中的一路!! F(8’转换结束输出!启动转换后自动变低电平#约+BB#?后#跳变为高电平#表示转

换结束#供:8GN!+查询!如果采用中断法#该引脚一定要经反相后接:8GN!+的#M/B或#M/+引脚!

! FM,K0F’输出允许!输入高电平有效!输入高电平时#转换结果才从 ,)-转换器的

三态输出锁存器送上数据总线!! 80(8Z’时钟输入#时钟频率允许范围为+BD+"1BB6Vd#典型值.2B6Vd#当时钟频率

为典型值时#转换速度为+BB#?$OBD++.#?%!! ,--N8",--NK",--N,’选通输入#选通#MNED#MNB中的一路模拟量!其中 ,--N8为

高位!7%与数据输出相关的引脚’$共J脚%!! 1HJD1H+’J位数据输出!其中1H+为数据高位#有些资料中将其记为 5?W&1HJ为数据

低位#记为P?W!2%与模拟输入相关的引脚$共J脚%!! #MNED#MNB’J路模拟量输入!,-8BJBO一次只能选通 #MNED#MNB中的某一路进行转

换#选通由,0F上升沿时送入的,--N8",--NK",--N,引脚信号决定!(.!+(

Page 165: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$1%接口与编程

+%硬件连接!,-8BJBO典型应用如图!*+O所示!,-8BJBO数据输出直接连接 :8GN!+的LB口$数据总线%#由于,-8BJBO输出含三态锁存#所以可以直接连接数据总线#无三态锁

存的芯片是绝对不允许直接连接数据总线的!转换结束F(8可以有两种选择’通过外部中断

或查询方式读取,)-转换结果!如果采用中断方式#F(8输出信号必须经反相后送 #M/B)#M/+#这是因为F(8信号在转换结束时电平由低变高#与外部中断请求的下降沿需求相反!

图!*+O",-8BJBO典型应用

$$表!*2"%&(BJBO选通通道

,--N8 ,--NK ,--N, 被选通的通道

B B B #MB

B B + #M+

B + B #M1

B + + #M7

+ B B #M2

+ B + #M!

+ + B #M.

+ + + #ME

写L1*E口有两个作用’其一#写 L1*E口脉冲的

上升沿 作 用 于 ,0F引 脚#将 送 入 ,--N8",--NK",--N,的低7位地址 ,1",+",B锁存#并由此选通

#MNBD#MNE中的一路进行转换#确保了在一次 ,)-转换过程中转换通道的确定性#除非再次写 L1*E口#,--N8",--NK",--N,锁存的低7位地址与选

通的通道间的关系如表!*2所示&其二#写L1*E口脉

冲的下降沿清除逐次逼近寄存器#启动,)-转换!读L1*E口时$,--N8",--NK",--N,低7位地

址已无任何意义%#保存,)-转换结果的三态锁存器

的+门,打开#将数据送数据总线!$注意%只有在F(8信号有效后#读L1*E口才有意义!80Z时钟输入信号频率的典型值为.2B6Vd!鉴于.2B6Vd频率的获取比较复杂#在实际

工程中多采用在,0F信号的基础上分频的方法!例如#当单片机的 *Q?c4.:Vd时#,0F引脚

上的频率大约为+:Vd#经1分频之后为!BB6Vd#使用该频率信号作为 ,-8BJBO的时钟#基本上可以满足要求!该处理方法与使用精确的.2B6Vd时钟输入相比#仅仅是转换时间比典

型的+BB#?略长一些$,-8BJBO转换需要.2个80Z#M时钟周期%!(E!+(

Page 166: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

1%程序设计!假设,-8BJBO与:8GN!+的硬件连接如图!*+O所示#要求采用中断方式#进行J路,)-转换#将#MBD#ME转换结果分别存入7BVD7EV地址单元!

程序清单如下’""""""(;X""BBBBV""""""

0_:L :,#M &转主程序

(;X BBB7V &#M/B中断服务入口地址

0_:L #M/B9 &#M/B中断服务

"" :,#M’:(3 ;B#‘7BV &内部数据指针指向7BV单元

:(3 -L/;#‘E99JV &指向L1*E口且选通#MB$低7位地址为BBB%GF/K #/B &设置#M/B下降沿触发

GF/K FYB &允许#M/B中断

GF/K F, &开中断总允许

:(3Y h-L/;#, &启动,)-转换

0_:L $ &等待转换结束中断

"" #M/B9’:(3 ,#h-L/; &取,)-转换结果

:(3 h;B#, &存结果

#M8 ;B &内部指针下移

#M8 -L/; &外部指针下移#指向下一路

8_MF ;B#‘7OV#MFY/ &未转换完J路#继续转换

80; FYB &关#M/B中断允许

;F/# &中断返回

""MFY/’ :(3Y h-L/;#, &启动下一路,)-转换

;F/# &中断返回#继续等待下一次

1*,-!E2,+1位,)-转换器

在单片机应用系统中#J位 ,)-转换器的精度往往是不够的#其精度很低甚至达不到

2i!实际应用中精度要求经常是B*+i D+i!+BD+2位的 ,)-转换器在实际应用中使用

较多#尤其是+1位,)-转换器具有较高的性能价格比#使用更为普遍!在使用并行接口的

,)-转换器中#主要需要解决如何将大于J位的转换结果送回到J位单片机内部这一问题!由于OD+.位的 ,)-转换器与 :8GN!+的连接方式和 +1位的类似#所以本节以常用的

,-!E2,为例#介绍+1位,)-转换芯片与:8GN!+的连接!通过对,-!E2,的学习#对掌握OD+.位的,)-转换器的应用有很好的帮助!$+%,-!E2,芯片介绍

,-!E2,是,$>PQR-=TSc=?公司$,-#%生产的具有微处理器$#L%接口的快速+1位 ,)-转换器!,-!E2,具有以下特点’

! 内建电压基准"时钟电路和J位"+1位或+.位微处理器总线接口的完整+1位,)-转

换器&! 可选择J或+1位转换&! 外接电路简单#无需外接元件#就可独立完成,)-转换&! 内设三态数据输出锁存器&! 高速!+1位转换时间为1!#?&J位转换时间为+.#?&! 非线性误差小于a+)10KG或a+0KG&(J!+(

Page 167: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*1B",-!E2芯片引脚

! 廉价#//0"8:(G兼容!,-!E2,为 -#L1J封装#芯片引脚排列如图

!*1B所示#引脚的功能及含义如下’+%与电源相关的引脚$共+B脚%!! I!G’模拟正电源#典型值I+13或I+!3!! H!G’模拟负电源#典型值H+13或H+!3!! ,MNXM-’模拟地!! !88’数字电源#典型值I!3!! -XM-’数字地 $第 +!脚#图 !*1B中该

引脚隐含%!! +B!?%$’模 拟 +B3电 压 输 入 端#单 极 性

BD+B3#双极性H!DI!3!! 1B!?%$’模 拟 1B3电 压 输 入 端#单 极 性

BD1B3#双极性H+BDI+B3!! ;F9N#M’参考电压输入!! ;F9Q&’’I+B3参考电压输出!! KL0;Q@’双极性偏置输入#与 ;F9Q&’引脚

构成偏置量!上述7个引脚通常采用典型应用的连接方式!1%与数字量输出相关的引脚$共+1脚%!! 5?WN++"-K+BD-K+"P?W-KB’,)-转换数据输出$具有三态锁存功能%#其中5?WN++为

高位#P?W-KB为低位!7%与控制信号相关的引脚$共.脚%!! 8G’片选输入#低电平有效!! ,B)G8’字节选择)短周期输入控制线!在转换期间’,B4B时进行+1位转换#,B4+

时进行J位转换!在读出期间$,)-转换结束#读转换结果时%’,B4B时高J位数据有效&,B4+时低2位数据有效!

! +1)J’数据输出格式选择输入!接I!3时选择+1位$双字节%输出&接XM-时#选择

单字节$J位%输出!在与:8GN!+连接时#该引脚必须接地#分两次读出+1位数据!! ;)8’读出)转换控制输入!输入高电平选择;$读出%#输入低电平选择8$转换%!! 8F’芯片使能输入引脚#高电平有效!8G4B且8F4+时#芯片才被选中!! G/,/UG’状态输出引脚#,)-转换期间为高#转换结束变低!$注意%,-!E2可进行单极性或双极性转换#其典型应用如图!*1+$图中 a+!3也可换成 a+1

3%和图!*11所示!$1%,-!E2,真值表

由于:8GN!+的数据总线宽度为J位#因此+1位数据必须分两次输出!与 :8GN!+相连

的,-!E2,的+1)J引脚应接地!,-!E2,的+1位转换结果中的高J位直接送数据总线#低2位数据也要送 :8GN!+的数

据总线!高J位数据格式为’高2位为 ,-!E2,转换的低2位数据#低2位补B#组成+个字

(O!+(

Page 168: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*1+",-!E2,单极性应用 图!*11",-!E2,双极性应用

节!表!*!给出了,-!E2,真值表!表!*!"%&!E%%真值表

8F 8G ;)8 +1)J ,B 含"义

B A A A A 无操作

+ + A A A 无操作

+ B B A B 初始化为+1位转换

+ B B A + 初始化为J位转换

+ B + !3 A 允许+1位并行输出

+ B + 地 B 允许高J位输出

+ B + 地 +"允许低2位并行输出#格式为低2位后

面补2个B组成一个字节

""$7%接口与编程

+%硬件连接!,-!E2,与:8GN!+的连接如图!*17所示!8F引脚在读或写操作时均有效&片选8G在对,E4B的地址进行操作时有效&;)8引脚在对,+4+的地址进行操作时读出数据#对,+4B的地址进行操作时启动转换&,B)G8引脚在转换期间对,B4+的地址进行操作时进行

J位转换#对,B4B的地址进行操作时进行+1位转换&,B)G8引脚在读出期间对,B4B的地址

进行读操作时读出的数据是高J位#读,B4+地址时读出的数据是低2位&由表!*!可知’! 启动+1位,)-时#应写端口’,E4B#,+4B#,B4B&$E8V%! 读出高J位结果时#应读端口’,E4B#,+4+#,B4B&$EFV%! 读出低2位结果时#应读端口’,E4B#,+4+#,B4+!$E9V%1%程序设计!假设,-!E2,与:8GN!+的连接如图 !*17所示#+1位的转换结果存放于

7+V单元和7BV单元的高2位中#其中7+V存放高位!采用中断方法!程序清单如下’""V#XV""F]U""7+V""""""&7+V存放高字节

""0( F]U 7BV &7BV存放低字节

(;X BBBBV0_:L :,#M(;X BBB7V0_:L #M/B9

(B.+(

Page 169: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

"":,#M’ :(3 ;B#‘E8V &指向启动+1位,)-端口地址

GF/K F,GF/K FYB &开中断

GF/K #/B &中断请求下降沿有效

:(3Y h;B#, &启动+1位,)-转换

0_:L $ &等待转换结束中断

""#M/B9’ :(3 ;B#‘EFV &指向,)-转换结果高J位

:(3Y ,#h;B &取高J位数据

:(3 V#XV#, &存高位

:(3 ;B#‘E9V &指向,)-结果低2位

:(3Y ,#h;B &取低2位数据

:(3 0( #, &存低位

;F/# &中断返回

图!*17",-!E2,与:8GN!+的连接

!*7*2"串行%"&转换器

随着转换精度要求的不断提高#,)-转换芯片的位数不断提高!一方面高精度并行 ,)-转换芯片引脚数不断增加#价格攀升#一定程度上限制了用户的选用&另一方面#由于模拟量和

数字量之间需要考虑隔离#在数字端隔离具有技术成熟"稳定#无误差等一系列优点#被广泛使

用#但是随着并行 ,)-位数增加#数字隔离代价太大#不现实&此外引脚增加也无形中增大了

印制板的面积#增加了成本#限制了某些场合的使用!随着芯片集成度和工艺水平的提高#串行,)-$尤其是高精度串行,)-%转换芯片正在被

广泛地采用!串行,)-转换芯片以其引脚数少$常见的J引脚或更少%#集成度高$基本上无

需外接其他器件%#价格低#易于数字隔离#易于芯片升级$例如+B位串行,)-:,Y+127和+1位串行,)-:,Y+JE)+JO都是-#LJ封装且引脚完全对应一致#再如+2位串行 ,)-:,Y+O2

(+.+(

Page 170: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

和+.位串行,)-:,Y+O!都是-#L+.封装且引脚完全对应一致%#廉价等一系列优点#正逐

步取代并行,)-转换芯片#其代价仅仅是速度$主要是数据串行逐位传送的速度#而非转换速

度%略微降低!串行,)-转换芯片的型号较多#例如#:,Y+E+是带光电隔离的+1位串行 ,)-芯片#

:,Y+2E是J通道的+1位串行,)-芯片等等!串行,)-转换器的生产厂商很多#例如著名的厂商有’,-#"MG$国家半导体%"/#$德州仪

器%等!由于串行,)-转换器的基本结构功能相似#本书以:,Y#:公司的:,Y+JE)+JO为例

介绍!

+*:,Y+JE)+JO芯片引脚及功能

:,Y+JE)+JO是:,Y#:公司的具有GL#$G=<S>PL=<S%j=<>P#$’=<@>c=%总线接口的+1位逐次

逼近型$G,;%,)-转换芯片!-#LJ引脚封装#外接元件简单#使用方便!具有+个模拟量通

道#单一I!3供电#转换速度为E!6Vd#转换时间为J*!#?#内建采样)保持器$/<>c6)VQPg%#可转换BD!3模拟电压!

:,Y+JE)+JO的不同在于’:,Y+JE具有内部基准#无需外部提供基准电压&:,Y+JO则需

外接基准电压!:,Y+JE)+JO内部结构如图!*12所示#芯片引脚如图!*1!所示!

图!*12":,Y+JE)+JO内部结构

图!*1!":,Y+JE)+JO芯片引脚

:,Y+JE)+JO芯片引脚及功能如下’+%与电源相关的引脚$共2脚%!! !--’工作电源#为I!3a!C!! XM-’模拟和数字地!! ;F9’参 考 电 压 输 入!对 于 内 含 基 准 电 压 的

:,Y+JE#只需外接一个2*E#9的退耦电容+激活,内部基

准#使其产生2*BO.3的输出即可&对于 :,Y+JO需外接

1*!3到!--的精密电压#并增加B*+#9的退耦电容$外接

基准电压适用于禁止内部基准电压的:,Y+JE%!! ,#M’模拟电压输入范围为BD;F9或BD2*BO.3$:,Y+JE%!

(1.+(

Page 171: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

1%与控制和数据相关的引脚’$共2脚%!! GV-M$Gj&’-Qk$%’关闭控制信号输入#提供三级关闭方式!当GV-M输入低电平时#

表示芯片处于待命低功耗状态#此时电流仅+B#,&当GV-M输入高电平时#允许使用内部基

准&当GV-M悬浮时#禁止使用内部基准#只能使用外部参考电压!! -(U/’串行数据输出#串行脉冲G80Z的下降沿数据变化!! 8G’片选输入#低电平有效!8G信号下降沿启动,)-转换#,)-转换期间8G应保持低

电平!8G变高时#-(U/呈高阻态!! G80Z’串行时钟输入#最大允许频率!:Vd!:,Y+JE)+JO具有内部的采样保持器$/)V%#待转换模拟电压$范围在BD!;F9之间%经

/)V与-,8转换的结果比较#比较结果影响+1位移位寄存器#移位寄存器数据再送入 -,8转换#再比较#直至转换结束!

使用:,Y+JE)+JO进行 ,)-转换时应分两步走!第一步#启动 ,)-转换#等待转换结

束!当8G输入低电平时#启动,)-转换#此时 -(U/引脚输出低电平#充当传递+转换结束,信号的作用!当 -(U/输出变高电平时#说明转换结束$在转换期间#G80Z不允许送入脉

冲%!第二步#串行读出转换结果!此时#从G80Z引脚输入读出脉冲#G80Z每输入一个脉冲#-(U/引脚上输出一位数据#数据输出的顺序为先高位后低位#在 G80Z信号的下降沿数据改

变#在G80Z的上升沿数据稳定!因此#读出+1位数据需要+7个G80Z下降沿!可以在G80Z信号为高电平期间从-(U/引脚上读数据!

1*接口与编程

$+%硬件连接

:,Y+JE与:8GN!+的连接如图!*1.所示!其中#L+*E控制片选#L+*.输入串行移位脉

冲#L+*!取出串行数据!:,Y+JE外接2*E#9退耦电容激活内部电压基准#GV-M接I!3允

许使用内部基准!

图!*1.":,Y+JE与:8GN!+的连接

$注意%与其他器件片选不同的是#:,Y+JE)+JO的片选在转换和读出数据期间始终保持低电平#

不能采用前面章节介绍的写L1*E之类的做法!$1%程序设计

工作流程’清L+*E#启动:,Y+JE开始,)-转换!读L+*!直至变高#等待转换结束!从

L+*.引脚发串行脉冲#从L+*!引脚逐位读取数据!$注意%由于:8GN!+单片机外接晶振最大不超过+1:Vd#即便是执行一条单周期指令也需+#?#

(7.+(

Page 172: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

所以发送G80Z时无需延时!例如#将:,Y+JE转换结果存入7+V"7BV单元#右对齐#7+V存高位$高2位补B%!程序清单如下’""V#XV"F]U""7+V""""""""0( F]U 7BV

:(3 V#XV#‘BB:(3 0( #‘BB &将转换结果单元清除

80; L+*.80; L+*E &启动,)-转换

_MK L+*!#$ &等待转换结束

GF/K L+*. &G80Z上升沿

:(3 ;E#‘+1 &置循环初值+1""0L’ 8L0 L+*. &发G80Z脉冲

_MK L+*.#0L &等待G80Z变高

:(3 8#L+*! &将数据取到8:(3 ,#0(;08 ,:(3 0( #,:(3 ,#V#XV;08 ,:(3 V#XV#, &将取到的数据位逐位移入结果保存单元

-_Me ;E#0LGF/K L+*E &结束

;F/

在实际应用场合中#通常需要电气隔离!图!*1E给出了采用电气隔离的电路原理图!由

于读取,)-转换结果的速度较慢#对光耦的要求也不是很高#使用 /0L!1+N2也是可行的#图!*1E仅供参考!

!*7*!"其他%"&转换方式

+*电压频率$"-.%转换

因为单片机具有很强的定时)计数功能#且一定频率的脉冲信号很容易隔离#所以将模拟

电压$"%通过电压频率$"-.%转换器件转换成与之成正比的频率$.%脉冲#通过计数的方法

实现,)-转换不失为一种好方法!这种方法具有接口简单#占用单片机资源少#抗干扰能力

强#便于长距离传输等一系列优点#在一定时期内"-.转换得到了较广泛的应用#例如,-#公

司的 ,-39871",-.!B等#MG公司的 0:+7+)17+)77+等!本书以 0:+7+)17+)77+$以下称

0:Y7+%为例#简单介绍其应用!0:Y7+具有输出频率.Q&’正比于!S$#输出脉冲与//0兼容#可驱动7个//0负载#最大线

性度B*B+C#可以用H!3电源工作#满量程频率范围+VdD+BB6Vd等特性!0:Y7+的应用

较为简单#其典型应用需要外接一些阻容#外接阻容的方法易于从相关资料中获得#本书不作

过多介绍!通过单片机的 /B)/+计数#可以得到与模拟输入 !S$对应的数字量!0:Y7+"-.转换原理如图!*1J所示!

(2.+(

Page 173: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*1E":,Y+JE的电气隔离接口

图!*1J"0:Y7+"-.转换原理

1*多斜积分

多斜积分是在双积分的基础上演变而来的!为了进一步提高,)-转换精度#在不提高价

格$甚至是降低价格%的前提下#工程技术人员

考虑采用运放的积分电路#构建分别将各个数

据位分离出来的方法#如图!*1O所示!图中

采用不同的斜率#不同的电压门限#分别分离

出万位"千位"百位"十位和个位!

图!*1O"多斜积分原理

7*其他,)-转换方法

在过程输入通道设计中#由于追求高性价比#还曾经流行过像软件,)-之类的方法#随着

#8的性能提高#价格不断降低#该类方法渐渐减少#设计者的工作重心逐渐由降低成本#转向

提高性能和工作效率上!大量的高性能的,)-芯片被采用!(!.+(

Page 174: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!*7*."数据采集系统

数据采集系统属于开环控制系统#它不产生控制输出#主要实现从现场采集数据#由单片

机分析处理或显示打印#为现场操作者提供操作指导等功能!

+*数据采集系统的一般结构

数据采集系统主要需要解决的是模拟量输入通道问题#在众多的模拟量输入中#需要确定

模拟量输入通道的结构!模拟量通道结构有两种’其一#每路模拟量均有各自独立的,)-转

换器"采样)保持器&其二#多路模拟量共用一套采样)保持器",)-转换器!在两种结构中#前者电路结构简单#程序设计方便#由于每路模拟量均需各自独立的 ,)-

转换器#所以#尽管只有一个处理器#但 ,)-转换是并行的#具有很快的转换速度!由于使用

的,)-转换器数量多#故总体成本高昂#仅在高速数据采集系统中采用&后者如图!*7B所示#具有经济实用等良好特点#在性能指标要求许可的情况下#一般采用该方案!尤其高性能的

,)-转换器件不断推出#选择一种,)-转换器满足多路数据采集还是比较容易的!所以#本节主要介绍该方法#并通过一个例子给读者一个全面的认识!

1*数据采集系统应用举例

由于并非必须选用采样)保持器#且目前多数 ,)-转换器$高速%都内含采样)保持器#所以#举例不考虑采样)保持器#重点介绍多路模拟转换器$也称多路模拟转换开关%!

多路模拟转换器$:&P’S%P=f=<%的生产厂商及产品很多#本书以最普通的8-2B!+$J路模拟

转换开关%为例!$+%8-2B!+芯片简介

$$表!*."(&2B!+真值表

输"入"端

#MV 8 K ,

与Y端导

通的通道

B

B

+

B

+

B

+

B+B+B+B+

YBY+Y1Y7Y2Y!Y.YE

+ Y Y Y 高阻

图!*7+给出了8-2B!+芯片引脚!8-2B!+芯片由地址

译码器和多路双向模拟开关组成#可以通过外部地址$8"K",端%输入经内部地址译码后#接通 Y引脚与地址相对应的其

中一个开关$YBDYE%#允许八线到一线的多路开关连接或一

线到八线的多路分配连接&!--和!FF提供工作电源#其幅值不

得低于模拟信号&#MV$高电平禁止%为控制输入#输入高电平

时#多路开关中各开关均不通#输出呈高阻!表!*.给出了

8-2B!+真值表!$1%数据采集系统

例如#要求使用+片 ,)-转换芯片巡回采集2B路模拟

量!+%电路原理!采用!片8-2B!+#每片接J路模拟量输入#!片构成!AJ42B路模拟采

集通道!同理可以扩展到.2路或更多路的数据采集!例如#在E20G7EE输出端#添加7NJ译

码器#就可以构建JAJ4.2路数据采集系统&添加2N+.译码器#就可以构建JA+.4+1J路$表!*E"E2+)7EE的数据格式

-E -. -! -2 -7 -1 -+ -B

!‘ 2‘ 7‘ 1‘ +‘ 8 K ,

数据采集系统#2B路数据采集局部原理如图!*71所示$图中

未考虑采样)保持器%!采用+片E20G7EE扩展J位并行输出

口#其中低7位用于选路#用于选通每片2B!+的 YBDYE路

中的+路#高!位用于!片 8-2B!+的片选#分别接 8-2B!+的 #MV#该!位为低扫描#任一时

(..+(

Page 175: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

刻只能有一位为低!E20G7EE的数据格式如表 !*E所示!写入 L1*E口数据 ++++BBBBD++++B+++为选通+‘2B!+的BDE路&+++B+BBBD+++B++++为选通1‘2B!+的BDE路等等!其规律为数据的低7位从BBBD+++变化#高!位初值为++++B#其中的B左移!次#完成对2B路模拟量的数据采集!

图!*7B"数据采集系统的一般结构 图!*7+"8-2B!+芯片引脚

图!*71"2B路数据采集局部原理

1%程序设计!""""":(3""-L/;#‘E999V"""&指向L1*E口

:(3 ,#‘++++BBBBK &选通第+片8-2B!+芯片的YB路

:(3 ;E#‘! &计数!次$!片8-2B!+%""0L+’ :(3Y h-L/;#, &选通+路

08,00 ,-8(M3 &调用,)-子程序

08,00 ,--GL &调用转换结束后数字处理&

(E.+(

Page 176: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

:(3 ;1#, &用;1暂存,88,M0 ,#‘BEV &屏蔽高!位

8_MF ,#‘BEV#0L1 &判断,是否到E#未到E选择下一路

,_:L 0L7& &处理下一片

""0L1’ :(3 ,#;1 &取回暂存值

#M8 , &选择下一路

,_:L 0L+ &继续处理本片下一路

""0L7’ :(3 ,#;1 &取回暂存值

;0 , &高!位B的位置左移

,M0 ,#‘B9JV &指向下一片的第B路$低7位清B%-_MF ;E#0L+;F/

!*2"模拟量输出

单片机系统的控制输出#一部分$与开关量有关%经开关量输出通道#作用于执行机构&另一部分$与模拟量有关%则经模拟量输出通道#通过隔离"-),转换"驱动#作用于执行机构!模拟量输出通道中主要涉及-),转换器!

-),转换器$-SRS’’Q,$>PQR8Q$T=<’=<%是将数字量$-SRS’%转换成模拟量$,$>PQR%的器件#通常用-,8表示#它将数字量转换成与之成正比的电量#广泛地应用于过程控制中!

本节主要介绍串行"并行两种类型的 -),转换器#有关驱动和执行机构将在第.章介

绍!"

!*2*+"&"%转换器指标与分类

+*-),转换器分类及特点

-),转换器按待转换数字量的位数来分#可以分为J位"+B位"+1位等&按数据传送形式

来分#可以分为并行和串行两种&按转换输出的模拟量类型来分#可以分为电流和电压输出型!与,)-转换器类似#并行-,8具有占用较多的数据线#输出速度快的特点#在转换位数

较少时#有较高的性能价格比&串行-,8具有占用的数据线少#待转换的数据逐位输入#影响

转换速度的特点#在转换位数较多时#有较高的性能价格比#串行-,8还具有便于信号隔离和

芯片小#引脚少#便于线路板制作等优点!

1*-),转换器的主要指标

$+%分辨率’输出模拟量的最小变化量&$1%满刻度误差’数字量输入为满刻度$全+时%#实际输出模拟量与理论值的偏差&$7%输出模拟量的类型与范围&$2%转换时间’完成一次-),转换所需时间&$!%与8LU的接口方式’分为串行和并行两种!

!*2*1"并行&"%转换器

(J.+(

Page 177: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

+*-,8BJ71J位-),转换器

尽管目前J位-),转换器已经很少使用#但由于其具有和:8GN!+同等的数据宽度#接口

简单#且J位-),转换器与大于J位的-),转换器的控制引脚具有共同的特性#掌握J位-),转换器#对学习其他的大于J位的 -),转换器大有益处!所以#本书还是针对比较典型的

-,8BJ71进行介绍!$+%-,8BJ71芯片介绍

-,8BJ71是MG公司生产的 -,8BJ7B系列$-,8BJ7B)71%产品中的一种#该系列芯片具

有以下特点’! J位并行-),转换&! 片内二级数据锁存#提供数据输入双缓冲"单缓冲"直通三种工作方式&! 电流输出型的芯片#通过外接一个运算放大器#可以很方便地提供电压输出&

图!*77"-,8BJ71芯片引脚

! -#L1B封装#单电源$I!D+!3#典型值为

!3%&! #L兼容#可以很方便地与:8GN!+连接!-,8BJ7B系列均为 -#L1B封装#且管脚完全

兼容#其芯片引脚如图!*77所示!+%芯片性能及引脚说明!与电源相关的引脚$共2脚%’! !88’数字电源输入$!D+!3%#典型值为

I!3!! !;F9’基准电压输入$H+BDI+B3%#典

型值为H!3$当输出要求为I!3电压时%!! ,XM-’模拟地#在MG提供的数据手册中#7"+B脚均为XM-#未予区分!! -XM-’数字地#通常,XM-"-XM-一点接地$第+B脚#图!*77中该引脚隐含%!与控制和输出相关的引脚$共J脚%’! 8G’片选输入#低电平选中!! #0F’数据锁存允许输入#高电平有效!! ^;+’写+信号输入#低电平有效!当8G#0F^;+为B+B时#数据写入 -,8BJ71的第

一级锁存!! ^;1’写1信号输入#低电平有效!

! Y9F;’数据传输信号输入#当^;1Y9F;为BB时#数据由第一级锁存进入第二级锁存#并开始进行-),转换!

! ’Q&’+’电流输出+端!! ’Q&’1’电流输出1端!! ;9K’反馈信号输入!当需要电压输出时#’Q&’+接外接运算放大器+H,端#’Q&’1接运算放

大器+I,端#;9K接运算放大器输出端!与数据相关的引脚$共J脚%’! -#ED-#B’并行数据输入#其中-#E为高位#-#B为低位!1%电压输出!-,8BJ71需要电压输出时#可以简单地使用一个运算放大器连接成单极性

(O.+(

Page 178: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

输出形式$如图!*72所示%#输出电压!Q&’4-S$1JA$H!;F9%&当 !;F94 H!3时#!Q&’输出范围

为BD!3&采用二级运算放大器可以连接成双极性输出$如图!*7!所示%#当 !;F94 H!3时#!,取值范围为BD!3#!Q&’输出范围为 H!DI!3!

图!*72"单极性输出 图!*7!"双极性输出

选择-,8BJ71的最重要理由有两点’第一#其内部具有锁存器&第二#其内部具有二级锁

存!如何充分地利用其二级锁存#使 -,8BJ71的特点得以充分的利用是选用该芯片的重点!利用-,8BJ71内部二级锁存器的基本原理是’将待转换的数据送第二级锁存的同时#将下一

个待转换的数据送入第一级锁存!本书重点介绍双缓冲方式!7%双缓冲方式!假设某一分时控制系统#由一台单片机控制并行的1台设备!1台设备

的模拟控制信号分别由1片-,8BJ71输出#要求1片-,8BJ71同步输出!图!*7.给出了利

用-,8BJ71双缓冲原理的电路#根据电路图#对不同端口地址的访问具有不同的功能#如表

!*J所示!

图!*7."-,8BJ71双缓冲原理

表!*J"端口地址

L1*E L1*. L1*! 功"能 口地址

(BE+(

Page 179: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

B + + +‘数据由-K$第一级锁存 E999V

+ + B B‘数据由-K$第一级锁存 B-999V

+ B + +‘及B‘均由第一级$第二级 BK999V

""实现同步输出的操作步骤为’! 将+‘待转换数据由数据总线$+‘-,8BJ71的第一级锁存$写E999V口%&! 将B‘待转换数据由数据总线$B‘第一级锁存$写B-999V口%&! 定时时间到#将+‘-,8BJ71以及B‘-,8BJ71的第一级锁存器中的数据$各自的第二

级锁存#同时开始-),转换$写BK999V%#周而复始!上述步骤#可以简单地理解为’前两步是在准备#并未开始转换#控制时间到了之后#才

+同时,开始各自的J位的-),转换!$7%程序设计

根据上述要求#程序清单如下’"":(3"-L/;#‘E999V"""""&数据指针指向+‘的第一级锁存器

:(3 ,#+‘数据 &取第一个待转换数据

:(3 h-L/;#, &送入

:(3 -L/;#‘B-999V &数据指针指向B‘的第一级锁存器

:(3 ,#B‘数据 &取第二个待转换数据

:(3 h-L/;#, &送入

:(3 -L/;#‘BK999V &指向传输

:(3 h-L/;#, &+‘和B‘数据同时由第一级向第二级锁存传送

;F/

1*-,8+17B+1位并行-),转换器

随着对控制精度要求的不断提高#-),转换的位数不断加大#通常要求达到+1D+.位!随着器件集成度不断提高#价格不断降低#这种高精度的 -),转换器件的应用越来越广!当

-),转换器大于J位#尤其是无片内锁存器时#与:8GN!+之间的数据传送成为亟须解决的一

个难点和重点!:8GN!+数据总线宽度仅J位#转换数据需要分次送出#问题的关键在于如何

保证分时送出的待转换的数据同时到达-),转换器#同时开始转换!下面以12位-,8为例

讲述此问题!采用多级锁存原理#图!*7E介绍了一种常用的方法’第一级锁存器+个#仅存高J位数

据&第二级锁存器1个#一个存高J位数据#另一个存中J位数据&第三级锁存器7个#分别存

高"中"低字节数据!工作过程如下’首先#LB口送出高J位数据$写L1*!口%#虽然高J位数据被首先送出来#

但不能抵达-),转换器&然后LB口送出中J位数据$写L1*.口%#与此同时使高J位数据移

入第二级锁存#亦使高J位"中J位数据同时抵达第二级锁存&最后 LB口送出低J位数据时

$写L1*E口%#使高J位"中J位数据同时移入第三级锁存#从而确保12位数据+同时,送达

-),转换器$该方法同样适用于介于JD+.位的无内部锁存的 -),转换器#需二级共7个J-锁存器%!

由于片内无锁存器的-),转换器与 :8GN!+连接相当烦琐#因此在选用并行 -),时#一般选用内部含二级锁存的-),芯片#如+1位的 -,8+1+B或 -,8+17B等#并且目前具有二级

(+E+(

Page 180: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*7E"多级锁存原理

锁存的-),芯片也越来越多!下面以-,8+17B为例#简单介绍具有双寄存器结构的+1位并行-),转换器!$+%-,8+17B芯片介绍

-,8+17B为-#L1B封装#芯片引脚如图!*7J所示#引脚的功能及含义如下’+%与电源相关的引脚$共2脚%!! !88’数字电源输入$I!DI+!3%#典型值为I!3!

图!*7J"-,8+17B芯片引脚

! !;F9’基准电压输入$H+BDI+B3%#典型值为H!3!

! ,XM-’模拟地#MG公司的数据手册中

第7"+B引脚名称均为XM-#未区分!! -XM-’数字地$第 +B脚#图 !*7J中该

引脚隐含%#通常,XM-"-XM-一点接地!1%与控制和输出相关的引脚$共J脚%!! 8G’片选输入#低电平选中!! Kb/+)1’数据顺序控制输入#高电平时

所有+1位锁存器均允许锁存#一般用来装入J位数据锁存器&低电平时数据只能装入2位数

据锁存器!! ^;+’写+信号输入#低电平有效!8G

^;+为BB时#数据由数据总线写入-,8+17B#写入情况由Kb/+)1确定!! ^;1’写1信号输入#低电平有效!

! Y9F;’数据传输信号输入#当^;1Y9F;为BB时#数据由第一级锁存进入+1位 -,8锁

存#开始进行-),转换!! ’Q&’+’电流输出+端!

(1E+(

Page 181: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! ’Q&’1’电流输出1端!! ;9K’反馈信号输入!当需要电压输出时#’Q&’+接外接运算放大器的+H,端#’Q&’1接运算

放大器的+I,端#;9K接运算放大器输出端!7%与数据相关的引脚$共J脚%!! -#++)7"-#+B)1"-#O)+"-#J)B"-#ED-#2’并行数据输入#其中 -#++为高位#-#2为低

位!-,8+17B是MG公司的-,8+17B)+)1系列产品中的一种#三种芯片具有相同的引脚!图

!*7O为-,8+17B的内部结构图#可以发现-,8+17B与-,8BJ71芯片引脚极为相似!

图!*7O"-,8+17B内部结构图

$1%接口与编程

+%硬件连接!-,8+17B接口原理如图!*2B所示!控制信号’8G"Y9F;" ;+" ;1"Kb/+)1在写J位数

据时应为B+B++&写2位数据时应为B+B+B#由第一级锁存器送第二级+1位 -,8锁存器时应

为’+B+B/$/表示任意%!

图!*2B"-,8+17B接口原理图1%程序设计!假设待转换数据的高J位存于 ;E中#低2位存于 ;.的高2位中#符合该数据格式要求

(7E+(

Page 182: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的数据可以很方便地分批"直接送入-,8+17B中转换!下面是完成该功能的程序清单’""GF/K"L+*."""""""&禁止传送

:(3 -L/;#‘E999V &L1*E为低

GF/K L+*E &指向高J位

:(3 ,#;E &取高J位数据

:(3Y h-L/;#, &送高J位数据

80; L+*E &指向低2位

:(3 ,#;. &取低2位数据

:(3Y h-L/;#, &送低2位数据

80; L+*. &+1位同时传送

;F/

!*2*7"串行&"%转换器

与串行,)-转换器类似#串行-),转换器具有较多的优点#逐渐受到工程技术人员的喜

爱!本书以:,Y#:公司的:,Y!7J)!7O为例#介绍串行,)-转换器的使用!

+*:,Y!7J)!7O芯片介绍

:,Y!7J)!7O具有以下特点’! GL#串行接口&! +1位#电压输出型&! 单I!3工作电源&! 输出电压值’:,Y!7J为BD1*.3#:,Y!7O为BD!--!其内部结构如图!*2+所示!

图!*2+":,Y!7+)!7J)!7O内部结构

:,Y!7J)!7O为-#LJ封装#芯片引脚如图!*21所示#引脚的功能及含义如下’! -#M’串行数据输入&

(2E+(

Page 183: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图!*21":,Y!7J)!7O芯片引脚

! G80Z’串行时钟输入&! 8G’片选输入#低电平有效&! -(U/’串行数据输出$当使用菊花链时%&! ,XM-’模拟地&! ;F9S$’参考电压输入&! !Q&’’-,8电压输出&! !--’工作电源!:,Y!7J)O的数据输入是在8G和 G80Z信号的配合下

完成的!首先8G引脚输入低电平时选中 :,Y!7J#G80Z引脚输入上升沿时 -#M引脚上的数

据被:,Y!7J锁入#所以待转换数据必须在 G80Z为低电平时送到!尽管 :,Y!7J是+1位

-),转换器#但由于其符合GL#接口标准#在送入数据时必须先送高位后送低位#并且必须送

出1字节$+.位%数据#其中高2位不参与 -),转换$由图!*21可见高2位数据不参与 -),转换%!

1*接口与编程

$+%硬件连接

如图!*27所示#L+*B经光耦输出:,Y!7J所需的串行时钟#L+*+经光耦输出片选#L+*1经

光耦输出-),转换数据#;F9S$由/027+提供1*!3外部基准电源#故:,Y!7J输出电压范围为

BD1*!3#该输出电压经运算放大器0:7!J构成的电压跟随器#向控制对象提供模拟电压输出!

图!*27":,Y!7J应用

/027+是一种精密可调基准电压源集成电路#它具有动态电阻小#噪声低#在一定范围内

电压可调的特点#受到越来越多的设计者的欢迎!其内部具有1*!3电压基准#调压范围为

1*!D7.3#最简单的应用就是直接使用其内部的1*!3基准输出#本例就是采用了该方法!$1%程序设计

假设:,Y!7J与:8GN!+的连接如图!*27所示#要求编写 -),转换子程序!入口参数’待转换数据存放在,--;开始的连续的两个内部;,:单元中#如7+V#7BV#,--;初值指向

7+V$高J位%!程序清单如下’

(!E+(

Page 184: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

""--/,8’LUGV"",88"""""""LUGV LG &保护现场

:(3 ;B#‘,--; &;B指向待转换数据的高位

:(3 ;E#‘1 &需连续传送两个字节

80; L+*+ &置:,Y!7J片选有效

""0L1’ :(3 ;.#‘J &每个字节传送J位

:(3 ,#h;B""0L+’ 80; L+*B &G80Z变低

;08 ,:(3 L+*1#8 &向:,Y!7J的-#M引脚送+位

08,00 -0+ &延时

GF/K L+*B &G80Z上升沿

08,00 -0+-_Me ;.#0L+ &J位未完#继续

-F8 ;B &准备取下一数据$低字节%-_Me ;E#0L1 &未完#继续

GF/K L+*+ &令:,Y!7J片选无效

L(L LGL(L ,88 &现场恢复

;F/ &返回

""-0+’ :(3 ;!#‘+B-_Me ;!#$ &软件延时#+BA1A+1)*Q?c41B#?$*Q?c4+1:Vd%;F/

实际上:,Y!7J的数据传输速度很快’G80Z时钟信号高"低电平的最小要求均为7!$?#对*Q?c4+1:Vd的单片机应用系统来说#执行一条单机器周期指令尚需+#?#根本无需延时!但在上述系统中由于采用了速度较低的光电隔离器件/0L!1+N2#所以必须延时!/0L!1+N2受

光侧"8F导通延时典型值为1#?#关断延时典型值为1!#?#所以程序中选择了1B#?软件延

时!所谓导通延时是指发光侧电流’9导通$发光%开始到受光侧 "8F变为低电平$导通%的时

间&关断延时是指发光侧电流’9关断$不发光%开始到受光侧 "8F变为高电平$关断%的时间!如果希望不延时地传输数据#只需换成速度更快的光电耦合器件即可!

!*2*2"其他&"%转换器

目前-),转换器的型号很多#厂家也很多#新型的-),转换器不断涌现出来#例如#内含

基准的"内含采样)保持器的"内含光电耦合器的#甚至内含硬件滤波电路的等等#给设计者提

供了广泛的选型空间!由于-),转换输出直接作用于被控对象#要求其具有很高的精度和很好的抗干扰能力!

就抗干扰而言#一般需要采用隔离的方法!高精度"高速度的 -),转换器本身的价格就比较

高#加上与其配合的隔离器件也要和其速度"精度一致#要么进一步增加了成本#要么以牺牲速

度为代价#于是人们开始谋求一种能进行-),转换的新方法!目前使用较广泛的是一种基于

脉冲宽度调制技术$L :#L&P?= Sg’j:Qg&P>’SQ$%的-),转换方法!L :的基本原理就是根据待转换的数字量输出一定频率和幅值的脉冲#使脉冲的平均电

压与要转换的数字量成正比!(.E+(

Page 185: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

如图!*22所示#"% &0+"B+#式中0+为一个周期内电压 "B持续的时间#+为一个周期#"%

为平均电压!如果"B和+恒定#可以看到#输出电压和0+成正比#如果由数字量决定 0+的大

小#就使得输出电压与数字量成正比!具体地#可以将一个周期+细分为,份#即+&,!$!为

每份所占时间%#控制0+的宽度使其符合 0+&1!#则有 "% &1!"B,!&1"B,#,越大#精度也越高!

常用的方法是采用可编程定时)计数器J1!7#就可以很方便地实现-),转换!

图!*22"L :原理

!*!"过程通道设计及干扰抑制

!*!*+"过程通道设计

+*总体设计

根据模拟量和开关量的数量#完成总体结构设计!主要依据#)(通道的一般结构#选择器

件"接口方式等#画出系统过程通道#编写相关说明!

1*通道设计

开关量 #)(通道设计一般比较简单#接口可以每 J路一组#采用扩展简单的门电路

E20G122$输入时缓冲%或E20G7E2$输出时锁存%的方法!特殊情况下#也可采用扩展可编程

#)(接口芯片的方法!模拟量#)(比较复杂#如果是多路模拟量#需考虑采用共用一个 ,)-或 -),转换器#还

是每一路专用一个转换器!这时#涉及到使用多路转换器)分配器!在图 !*71中已经给出了

模拟量输入通道设计#使用多路转换开关共用一个,)-转换器的方法!使用多路分配器共用

一个-),转换器的方法如图!*2!所示!

图!*2!"多路模拟量输出通道

(EE+(

Page 186: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

此外#还要根据系统精度等技术指标要求选择合适的,)-"-),转换器件#考虑是否需要

采样)保持器等!

!*!*1"干扰与抑制

单片机系统的干扰主要来自三个方面’第一#供电电源$,811B3%&第二#空间电磁场&第三#过程#)(通道!由于过程#)(通道是单片机与控制对象联系的纽带#所以避免现场强信号

对单片机系统弱信号的干扰是成功开发单片机应用系统的关键!从干扰的分类来说#无外乎串模和共模干扰两种#解决过程#)(通道干扰可以从以下几个

方面着手!

+*隔离

目前很多的应用场合均采用光耦实现电气隔离!

1*屏蔽

采用屏蔽的方法可以避免空间电磁干扰#注意屏蔽层应接地!

7*!地"的正确处理

单片机应用系统的+地线,有很多#应仔细区分#恰当处理!$+%数字地’也称为逻辑地#为逻辑芯片如JB7+"J+!!等芯片提供工作电源的零电位!$1%模拟地’,)-"-),转换模拟部分的地#如参考电压"模拟输入等的零电位!$7%功率地’大功率器件的零电位#如大继电器$电流较大时%"接触器等的零电位!$2%信号地’一般常指传感器的地!$!%交流地’!BVd交流电源的地线$对于三相交流电源来说就是中线%!$.%屏蔽地’屏蔽层的接地端!正确的接地能有效地保证少受干扰!例如#数字地和模拟地应分开走线#可以不共地#共

地时#应保证两地线仅在一点处汇合$一点接地%#不能形成环路!交流地和信号地不能共用!机壳可接地但不能形成地线环路!特别注意#不良的接地方法可能使系统仅能在实验室试验

运行#一到现场就无法工作!

2*软件抗干扰措施

在硬件的基础上采用软件的方法#进一步加强系统抗干扰能力是必要的!具体方法是除

了过程输入通道中采用的软件滤波外#应注意过程通道中开关量输出对系统正常运行有很大

影响!诸如继电器吸合等大功率设备+投上,或+断开,时#都会产生强烈的干扰#如同一个胆

小的孩子放爆竹#自己点燃了爆竹#反被爆竹声吓坏了!同理#在单片机控制的开关量输出时#如果能立刻使8LU进入睡眠状态#也就可以避免干扰自己#等 8LU醒来时#干扰高峰已过去

了!对于8V:(G型的JB87+#执行一条(;0L8(M#‘+就可以进入睡眠状态#定时)计数等中

断可以将其唤醒!据统计#!BC以上的时间8LU无事可做!所以#当自己点燃+爆竹,的同时

捂住耳朵#进入睡眠状态是避免干扰#又不会影响正常工作的好方法!采用这种思路时#系统

软件的设计应采用事件驱动法!当无事可做时8LU进入睡眠状态#所有的事件均产生中断或

定时将8LU唤醒!(JE+(

Page 187: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

习$题$!

!*+"假设现场开关为’断开B3#接通123#试画出采用光电耦合的隔离输入电路#将该开关量输入到单

片机的L+*B口!!*1"分析:8+2277和#80E+7!分别相当于几位$二进制%的,)-转换器!!*7"仿照:8+2277与:8GN!+的硬件连接方法#画出#80E+7!与:8GN!+的硬件连接&仿照:8+2277的

编程方法#编写依次读出万"千"百"十"个位的程序!!*2",-8BJBO与:8GN!+的硬件连接如图!*+O所示#试编写程序#要求’$+%每一路均连续采样J次#并进行算术平均滤波&$1%循环采样J路!将#MBD#ME每路滤波后的结果对应保存在7BVD7EV内存单元!!*!"简述串行,)-转换器的优点!以:,Y+JE为例#粗略计算从 ,)-转换开始#到数据被取出所需要

的时间!!*."仿照图!*71#画出.2路数据采集原理图#编写.2路数据采集程序!!*E"比较-,8BJ71和-,8+17B#写出两种芯片的异同!!*J"画出-,8BJ71与:8GN!+的硬件连接图#编写程序#要求分别输出周期为2*BO.5?的BD!3的方

波"BD!3的锯齿波"BD!3的三角波!提示$以锯齿波为例%’采用/B定时+.#?$+.A1!.42"BO.%#将,88$初值为B%送去-),转换的同时#

启动定时#定时到,88I+并继续送转换!!*O"-,8+17B与:8GN!+的硬件连接如图!*2B所示#如果要在!Q&’端输出一个频率为!BVd的正弦波#

试分析程序如何设计#并编写程序!提示’通过查表的方法#计算正弦函数值!!*+B"如图!*27所示#选用的光电耦合器件满足何条件时#:8GN!+向 :,Y!7J传送数据时可以无软件

延时!!*++"根据图!*2!的结构#采用8-2B!+共用+个-,8BJ71#实现J路模拟量输出#并编写程序#将内部

;,:单元中的7BVD7EV的数据经转换后分配给第一到第八路模拟输出通道!

(OE+(

Page 188: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第.章"传感与驱动

在第!章中#已经对过程#)(通道进行了全面"详细的介绍#第!章主要侧重于过程通道

的数字部分#也就是与单片机直接进行信息交换的部分!本章是上一章的延续和补充#侧重于

过程通道的模拟部分#也就是与控制对象进行信息交换的部分!本章将从输入通道角度介绍

传感器和变送器#从输出通道角度#介绍驱动和常用执行机构!

.*+"常见传感器简介

传感器也称为敏感元件"换能器等#是一种能将非电变量转换成成比例电量的器件!本节

将传感器分为开关量传感器和模拟量传感器#分别进行介绍!

.*+*+"常见的开关量传感器

+*接近开关

当铁"镍等磁性金属接近开关的检测面时#接近开关中的线圈将发生变化#该变化转换成

电压输出#从而形成接近金属时开关导通#远离金属时开关断开的开关特性!由于接近开关属

于无接触型开关#广泛用于取代行程开关#在机床行业应用尤其广泛!接近开关在物体接近检

测和转速检测中的应用如图.*+所示!除此之外#它还可以广泛应用于工件定位"液位检测"脉冲发生器"多限位控制等场合!

图.*+"接近开关的应用

接近开关从外观上可分为平扁型"圆柱型"环型"槽型"平面安装型等!种不同外形#其中

最常见的螺纹圆柱型接近开关外形如图.*1所示!接近开关的类型一般分为高频振荡型"差动线圈型"磁性型和静电电容型2种$如图.*7

所示%!其原理如下’! 高频振荡型’根据高频振荡回路中振荡线圈的阻抗变化#使其停振加以检测!具有响

(BJ+(

Page 189: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图.*1"螺纹圆柱型

接近开关外形

应速度快"可以检测金属等特点!! 差动线圈型’把检测物体中产生涡流造成的磁通用检测线圈

和比较线圈之差加以检测!具有检测距离长#可检测金属等特点!! 磁性型’利用磁钢$永磁体%的吸力驱动舌簧开关#仅能用于

磁性金属物体的检测!! 静电电容型’振荡回路根据静电电容的变化开始振荡或停止

振荡加以检测!选择接近开关时#除了要根据需要选择的类型和外形之外#还要

注意检测距离"复位距离"检测物体"响应时间和响应频率等技术指

标!由于接近开关只是提供常开或常闭的开关输出#所以引线有7

根’!88"XM-"负载端#其中 !88"XM-提供电源!对于常开型接近开

关#当检测物体接近时#负载端与!88引脚导通&当检测物体远离时#负载端与!88引脚断开!常闭型接近开关则相反!

图.*7"接近开关原理

1*光电开关

光电开关被广泛应用于检测各种有光线阻断的场合!例如在安全控制中#物体$包括人%进入禁入地区后急停相关电器#包装行业中的计数#各种透明"半透明"不透明液体的检测等

等!光电开关一般由投光器和受光器两部分组成#或者将投光器和受光器合二为一整合为投

受光器#光电开关的应用如图.*2所示!投光器发出经聚焦的平行光线!无物体阻断光路时#受光器接收到光线#控制电器不动

作&当光线受阻时#受光器接收不到光线#控制电器动作#这种方式称为+暗动,!相反#也可以

(+J+(

Page 190: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

选择接收到光线时控制电器动作#称为+亮动,!由于投光器发出的是特定波长的光线#现场

的光线对其影响不大#具有一定的干扰抑制能力!在图.*2中#分别给出了透射型"直接反射型"带反射板的直接反射型以及槽型四种光电

开关的应用!例如#在打印机打印头定位和软盘驱动器磁头定位中采用的就是槽型光耦!

图.*2"光电开关的应用

图.*!"舌簧开关结构与应用

7*舌簧开关

舌簧开关是一种机械触点式开关#其结构与应用如图.*!所示!当线圈中有电流通过或

永久磁铁接近时#舌簧开关触点吸合#两侧端子导通#否则触点断开#两侧端子不通!舌簧片采

用具有良好导磁性"导电性并有的弹性铁镍合金材料!为保证良好的通断能力#甚至还要在簧

片的触点部分镀上一层金"铑或钯等贵重金属!由于采用在玻璃封管中充入惰性气体#触点镀

(1J+(

Page 191: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

金等手段#舌簧开关具有以下优点’! 结构简单#廉价&! 闭合电阻小#断开电阻大&! 工作寿命长#除空间磁场外#几乎不受其他环境因素的影响!舌簧开关的缺点为反应时间长#开关频率低#体积大等!舌簧开关广泛地应用于限位开

关"行程开关等场合!

2*光电编码器

光电编码器是一种输出与转速成正比脉冲的编码器件#通过计数脉冲个数可以方便地得

到转速信息!光电编码器结构如图.*.所示!在图.*.中#光电编码器的旋转轴与被测转轴固定在一起转动#将刻有一系列狭缝的圆盘

装在旋转轴上#当圆盘转动时#狭缝进入光路为+白,#离开光路为+黑,#从而通过光量产生通

断变化!光电晶体管将光信号转换为电信号#经放大整形#输出与旋转速度成正比的脉冲信

号!通过计数器$例如:8GN!+的/B)/+计数%#就可得到转速值!

图.*."光电编码器结构

尽管光电编码器是一种将模拟量$转速%转化成数字量$脉冲个数%的器件#由于它采用的

是开关量的技术#所以将它归入开关量传感器!光电编码器的精度由狭缝圆盘上所刻的狭缝数量决定#狭缝越多#精度越高!通常编码器

的每周脉冲数在几百至几万不等!光电编码器具有体积小#重量轻#精度高#安装方便#便于与处理器连接等优点#广泛应用

于转速测量场合#逐步取代了测速发电机等传统器件!

(7J+(

Page 192: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

转速测量除了采用传统的测速发电机外#较多地还是采用光电转速传感器$如光电编码

器%"霍尔转速传感器等!

!*光电转速传感器

光电转速传感器与光电编码器的原理是相同的’在转盘上+开,,个槽$或 ,个孔%#使光

线能从槽)孔中穿过#安装槽形光耦#通过槽形光耦统计脉冲个数#经转换得到转速!该方法使

用方便#可以直接使用单片机的计数器统计脉冲个数#在精度要求不高的应用场合使用较多!

.*霍尔传感器

霍尔传感器目前使用较多的是 G%<>R&=FP=c’<Sc$美国史普拉格电子公司%生产的 UXM7YYY系列霍尔开关传感器"放大器#它内含史密特触发器#(8开路输出#与//0电平兼容#使用简单方便#元件小巧#廉价#内部结构如图.*E所示!7个引脚中’1个为电源输入引脚#+个

为脉冲输出引脚$第+脚!88#第1脚XM-#第7脚 (&’%&’%!其典型应用为’第+"7脚间跨接

J1B!电阻$上拉%#第1"7脚间跨接+个1B%9滤波电容!!88的允许范围为2*!D123!UXM7B1B是 UXM7YYY系 列 霍 尔 传 感 器 中 使 用 较 多 的 一 种 型 号#当 有 磁 钢 接 近 时

UXM7B1B导通"第7脚$(&’%&’%与第1脚$XM-%导通#输出低电平&当磁钢远离时UXM7B1B截

止#由于上述J1B!上拉电阻的作用#(&’%&’输出高电平!利用UXM7B1B测量转速时#在转盘上贴 ,个小磁钢#将 UXM7B1B$霍尔开关%置于磁钢

旁#每个磁钢随着圆盘的转动不断接近或远离UXM7B1B#在UXM7B1B的(&’%&’端产生方波脉

冲!由于UXM7B1B内部含有史密特触发器#一般不需外部波形整形就可以通过计数器统计脉

冲个数#得到转速!被检测物体贴上小磁钢#霍尔传感器就可以取代接近开关!

.*+*1"常用的模拟量传感器

+*常用力传感器

使用较多的测量力的传感器有’电阻应变片"半导体应变片"压电式压力传感器等#其中金

属电阻应变片使用较多!金属电阻丝应变片的结构如图.*J所示#其工作原理为’与基底黏合在一起的电阻丝连同

基底贴在要产生弹性形变的物体$或应变梁%上#电阻丝随着物体的变形被拉伸或压缩#使电

阻丝的长度"横截面积发生变化#从而改变电阻值!常见的金属电阻应变片阻值有+1B!"71B!等!

图.*E"霍尔传感器结构 图.*J"金属电阻丝应变片结构图

(2J+(

Page 193: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

应变片阻值变化较小#但价格便宜#一般采用四片组成电桥的方式使用#每两片一组贴在

形变物体的正"反两面!

1*常用温度传感器

$+%热敏电阻

热敏电阻具有体积小#价格低#使用方便等特点!常见的热敏电阻有7种类型’正温度系

数L/8"负温度系数M/8和临界温度系数 8/;!正温度系数的热电阻的阻值与温度成正比#负温度系数热电阻的阻值与温度成反比#临界温度系数的热电阻在临界温度时电阻的阻值才

有较大的变化!热敏电阻的外观与普通电阻相似!热敏电阻的最大不足是温度N阻值曲线的线性度不是很好#需要采用硬件或软件的方法进

行非线性处理!$1%热电偶

热电偶是将两种不同金属组成闭环#利用其两端头处温度不同产生回路热电动势的特点#将传感器得到的小信号进行放大后使用!与热电阻相似#其线性度也差#但它的可测温度范围

很大#最高可测温度达千度左右!$7%其他温度传感器

其他常用的温度传感器包括半导体 LM结传感器"集成电路温度传感器等!其中集成电

路温度传感器将传感器"补偿电路与信号放大集成在一起#能达到最优的传感效果!随着集成

电路价格不断降低#该类传感器越来越多地被工程技术人员采用!常用的集成电路温度传感

器有 ,-#的 ,-!OB#MG公 司 的 0:EB"0:E2#-,00,G公 司 的 -G+J1#:,Y#: 公 司 的

:,Y.!E!).)E等!

7*常见的流量传感器

流量传感器主要用于测量液体的流量#常见的流量传感器主要有以下7种’差压式流量

计"容积式流量计"速度式流量计!差压式流量计是利用压能与动能的转换和守恒原理来测量流量的!容积式流量计是利用测量流体的容积来得到流体的流量的!速度式流量计是通过测量流体流速来得到流体的流量的!

.*1"信号变送

传感器将现场的非电模拟量转换成电阻"电压"电流等电量后#还需要经过以下7个步骤

的处理#才能送到,)-转换器转换!$+%要将该电量转换成一定范围的电压$电流%量&$1%由于该信号仍然很微小#很难长距离传输#往往需要考虑前置放大&$7%在进入,)-转换器之前#还涉及到硬件滤波等信号处理问题!下面分别针对上述问题加以讨论!

.*1*+"电桥

电桥被广泛地用于阻值随变的传感器应用系统中#四臂电桥如图.*O所示!图.*O中;+"

(!J+(

Page 194: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

;1";7为精密电阻#;/为阻值随变传感器#可知’

"B &"K, &"K2", &#+

#7$#+%3B2

#1#+$#1

%3B

&3B#+#+$#1#+2#1#72#1#+$#+$#1%$#7$#+

[ ]%一般地选择#+&#B$%+$其中#B为常量#%+为变量%时#取#+ &#1 &#7 &#B有’

"B &3B%#B%+

1#B$1#B$%+%& "+1$1#B$%+%

%3B

例如#某热敏电阻#常温阻值为+1B!#且#+&+1B$4+$4为常数#+为温度%此时#选取

电桥电阻均为+1B!的精密电阻!

建议选用%+&1#B的传感器#此时"B#%+2#B%3B#输出电压与%+成正比#有较好的线性

度!在桥路中#由于#B’%+$否则线性度差%#"B变化量很小#所以#供桥电压3B通常采用 $

+13"I+!3或更高的电压!但不是说一味提高3B供桥的电压值就不需要前置放大!传统的电桥除传感器;/外#其他的元件均与控制器在一起#原则上只需从控制器引两根

线到现场即可#称其为二线电桥!但是#由于控制器距被控对象往往很远#;/两端将有两段长

导线$每段导线电阻为5%与之相连#导线电阻15均叠加在;/上#使得电桥线性度变差!为了解

决这一问题#在工程实际中#往往采用三线电桥或四线电桥!三线电桥原理如图.*+B所示$其

中实 线 在 控 制 器 内#虚 线 为 从 控 制 器 引 向 现 场 的 导 线%!由 图 .*+B可 以 推 得’

"B &#B%+

$1#B$5$%+%$1#B$5%%3B#由于5&#B#所以"B#

%+$1#B$%+%

%3B#可见导线电

阻5被屏蔽了!

图.*O"四臂电桥 图.*+B"三线电桥原理

三线电桥可以理解为多引了一根供桥电源的+地线6至现场#以抵消导线电阻的影响#提高电桥的线性度!

由于四个桥上仅有四个电阻#所以工程人员有时也将四个电阻均安置在现场!这样#就需

要从计算机系统向控制对象送去供桥电压3B$用1根线%#从电桥中取回电压"B$用1根线%#组成四线电桥!由于电阻受扰少#在温度比较稳定的现场#四线电桥也广为使用!由于 "B要长

距传送$不同于二线"三线电桥%#通常其前置放大一般在现场#所以受扰的概率也增加了!对于输出为电流或电压的传感器#无需电桥#可以直接将传感器输出信号经信号放大处

理!

.*1*1"信号放大

信号放大介于传感器与硬件滤波之间#大多数的信号放大采用运算放大器#个别应用中的

(.J+(

Page 195: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

信号放大也有采用集放大"变送等功能于一体的集成电路来实现!本书重点介绍采用运算放大

器电路进行信号放大!信号放大一般采用单运算放大器组成放大电路来实现#例如采用#80E.!B芯片!#80E.!B具有以下特性’输入偏置电流+B%,#开环电压增益+!BgK#共模抑制比+2BgK#

共模电压范围为 H!D7*!3#上升速度1*!3)#?!由于其良好的特性#在仪表中被广泛使用#也称其为仪用放大器!

采用 #80E.!B组成同相放大与反相放大电路原理如图 .*++7@&8Q8S&+$

#@#( )+

和图

.*+17@&8Q8S&2#@#( )+

所示#并给出了对应的放大电路的增益!

图.*++"同相放大电路原理 图.*+1"反相放大电路原理

在实际应用中#为了进一步提高放大电路的共模抑制比#常采用差分放大电路#差分放大

原理如图.*+7所示!在设计该电路时#应注意,+和,1两个运算放大器应保持对称$性能尽

量完全一致%#可以得到其差模电压增益7为’7&2#7#1% +I

1#+#( )B

图.*+7"差分放大原理

式中#B为可调电阻 #%调整后的阻值!如果#7&#1#则开环增益只与 #+"#B有关#可以

通过调整#%获得希望的电压增益!事实上#由于7+和71两个运算放大器保持完全对称#两侧的电阻也完全一致是不可能

(EJ+(

Page 196: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

的#所以上面得到的增益也并非绝对的!随着集成电路的飞速发展#各种高性能的放大器和放大电路也不断涌现#例如#MG公司推

出的0:V..21)27#具有高速$+7B:Vd%"轨到轨输出"真正单电压操作等特点&/#公司的

VG2+YY系列#提供全差动式的平衡输出#可有效地抑制共模噪声#其中#/VG2+2+的最大带宽

为+.B:Vd#信号转换速率$GP=k;>’=%为2!B3)5?&,-公司的,-1B1",-1B2",-1+B",-1+!等具有内部隔离的放大器等!

.*1*7"信号处理

+*硬件滤波

硬件滤波是在,)-转换之前对模拟量采用硬件的方法滤波#常采用有源滤波电路实现!有源滤波是滤除无用信号保留有用信号所在频段的方法#通常使用运算放大器构成有源滤波

电路!根据实际需要#常用的有源滤波器有低通"高通"带通和带阻四种#常采用二阶滤波的方

法!由于二阶滤波电路设计涉及到自动控制理论中的有关传递函数"幅频特性"转角频率等有

关知识和相关计算#本书略去理论和计算#只给出四种二阶有源滤波器的原理电路#如图.*+2所示#其中电阻"电容如何计算#可参考相关资料!

图.*+2"二阶有源滤波器原理电路

1*软件滤波

软件滤波是对硬件滤波的一种补充#主要针对,)-转换后的数字量#对其进行软件处理!软件滤波常用的方法有’算术平均值法"中值法"低通滤波等!

软件滤波是一种消除随机干扰的有效方法#具有灵活"方便"可靠"价廉"滤波频率宽等特

点#下面介绍几种常用的滤波方法!$+%算术平均值法

(JJ+(

Page 197: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

连续采样1个数值9:$:&+;1%#取其平均值作为滤波输出#亦<&+1(1

:&+9:!采用该方法#

可使信噪比提高!1倍!算术平均值法是以多次采样为代价#获得一次精确的输出!不同的系统 1的最佳取值不

同#1一般取1的幂次方#便于计算+-1!$1%中值滤波法

连续采样7次$9+"91"97%#取其中值作为滤波输出!<&91$9+)91)97%

图.*+!";8滤波电路图

从概率分析可知#该方法有很高的获得无干扰信号的概

率#而且代价最小!$7%低通滤波法

硬件上的低通滤波最简单的方法是采用 ;8滤波电路#如图.*+!所示!

使用传递函数可以推得’

8Q1 &+

+$#(%+

%8S1$

#(%+

+$#(%+

%8Q$12+%

令#& +

+$#(%+

#有8Q1 &#%8S1$$+2#%%8Q$12+%#其中%+为采样时间#8S1为第1次采样输

入#8Q1为第1次滤波输出#8Q$12+%为第$12+%次滤波输出#转角频率*& +1"#(

#若%+足够短

则有’#(%+’+##&%+#(#亦*&

#1"%+

##越小则转角频率也越小#如取%+&+B5?$采样时间%#

#&+-J#则有*& +-J1"%+B%+B27

&+*OJVd#用软件方法实现1Vd滤波#而从硬件上实现1Vd

的滤波几乎是不可能的!低通滤波也可以看成是加权平均滤波##取值越大#说明越看重当前采样值&反之看重上

次滤波输出值!例如#采样值存于$7+V%$7BV%单元#其中7+V为高位##取+)J!滤波输出$包括上次滤

波输出%存于$77V%$71V%单元#编写低通滤波程序!分析’根据低通滤波要求#输出应为

$77V%$71V%4-$7+V%$7BV%.)JI-$77V%$71V%.AE)J即

$77V%$71V%4-$7+V%$7BV%.)JI/$77V%$71V%H-$77V%$71V%.)J04$77V%$71V%I-$7+V%$7BV%H$77V%$71V%.)J

+%计算$7+V%$7BV%H$77V%$71V%#结果存放于$7+V%$7BV%&1%计算$7+V%$7BV%)J#结果存放于$7+V%$7BV%&7%计算$77V%$71V%I$7+V%$7BV%#结果存放于$77V%$71V%!程序清单如下’

(OJ+(

Page 198: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

" " ""80;""8"""""":(3 ,#7BVGUKK ,#71V:(3 7BV#,:(3 ,#7+VGUKK ,#77V:(3 7+V#, &完成+%功能

:(3 ;E#‘7 &循环7次

""0L+’80; 8:(3 ,#7+V;;8 ,:(3 7+V#,:(3 ,#7BV;;8 ,:(3 7BV#,-_Me ;E#0L+ &完成1%功能

:(3 ,#71V,-- ,#7BV:(3 71V#,:(3 ,#77V,--8 ,#7+V:(3 77V#, &完成7%功能

;F/

.*1*2"信号转换

在过程通道中常常需要信号转换#下面从开关量和模拟量两个方面介绍常用的信号转换

方法!$+%开关量电平转换

开关量电平转换比较简单#使用光耦就能很容易地实现!开关量电平转换原理如图.*+.所示!

例如#将BD+13开关量转换成//0电平!采用图.*+.电路即可!

图.*+."开关量电平转换原理

光耦的发光和受光侧的电气是完全隔离的#只要适当选取 #+"#1就可以实现各种电平的

转换!

(BO+(

Page 199: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$1%模拟量电平转换

+%电流转换为电压!电流转换成电压的原理如图.*+E所示#只要一路运算放大器和一

个精密电阻即可!由于运算放大器输入电阻无穷大#所以电阻#上的压降为 ’##通过电压跟

随器#运算放大器输出电压为 ’##选取适当的 ##就可以实现电流向电压的转换!例如#将

BD1B5,电流信号转换成BD!3电压信号#图.*+E电路中#选取1!B!精密电阻即可!1%电压转换为电流!与电压信号传输不同#电流信号传输具有信号无衰减#不受导线电

阻影响等特性#在实际应用#尤其是在较长距离的信号传输时#采用电流传输的场合较多!下

面以常见的BD!3电压转换成BD1B5,电流为例介绍两种不同的转换方法!方法一’采用三极管的方法#实现电压转换成电流的原理电路如图.*+J所示!图中使用

了+路运算放大器和1只三极管!根据基尔霍夫电流定理有’

图.*+E"电流转换成电压原理 图.*+J"电压转换成电流实用原理一

’&’+$’1

’1#"S# &$’+$$为OB+7放大倍数%

由第二式得’’+&"S#$#将其代入第一式有’’&

"S#$

"S#$&"S# +$

+( )$!由于OB+7的放大倍

数$=+BB#可以视为+$&

+#得’’#"S##由于"S&B;!3#当#取1!B!时#’取值范围为’B

;1B5,!由于忽略了+$#所以实际结果存在较小的误差!

方法二’采用两个运算放大器的方法#实现电压转换成电流原理如图.*+O所示’

’&"S#$

#+2#72###7

%"7

当满足条件#+2#72#&B时#’&"S##与"7无关!#+取+BB6!#因为"S为B;!3#’转

换成B;1B5,#所以#取1!B!#得#74+BB6!H1!B!4OO*E!6!$注意%第一#上述电阻均应采用精密电阻!第二#运算放大器应采用一致性好的对称运算放大

器!(+O+(

Page 200: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图.*+O"电压转换成电流实用原理二

由于精密电阻1!B!"+BB6!"OO*E!6!均非绝对的#所以转换有一定的误差!通过上述

公式可以计算出当电阻存在偏差时#对转换精度的影响是很小的!比较以上两种方法#第一种方法由于具有使用器件较少等特点在实际中使用更多!

.*1*!"过程!"#通道设计中的其他问题

+*,)-转换器的选择

,)-转换器的选择依据系统性能指标要求来确定!例如某温控系统要求测温范围是

BD+BBl#分辨率为B*+l!实际是要求 ,)-转换器有+BB)B*+4+BBB个数字量#即11*+BBB$1为,)-转换器的位数%#可得1*+B!再如#某称重仪表精度要求为B*1i#选择 ,)-转换器应保证+)11)B*1i#或者是11*$+)B*1i%4!BBB#解得1*PQR1!BBB4+7#在实际选

用时#往往采用比理论值大一点的,)-转换器#上面两例中实际选用+1位和+2位的 ,)-转

换器!,)-转换器的转换速度依据不同测量对象特性而定#例如#对温控系统来说#由于温度

变化很慢#,)-转换器的转换速度每秒几次即可&而称重之类的应用场合要求就高一些#,)-转换器的转换速度要求每秒几百次至几千次!

根据精度"速度要求列出可选的,)-转换器#进行性价比较#结合实现起来的难易$接口

方式"技术人员的熟悉程度%等因素综合选定,)-转换器!

1*孔径误差与采样)保持器

$+%孔径误差的由来

在-),转换器转换期间待转换的数字量是被锁存的#也就是说 -),转换期间数字量是

不变的#因此-),转换输入的数字量和输出的模拟量之间是完全对应的!但是在 ,)-转换

期间#因为,)-转换需要时间$%0%#现场的模拟信号是变化的#此变化是否会影响 ,)-转换

的结果#是否也需要对模拟量进行+锁存m呢)下面就此问题分析如下’设待转换的模拟量用"*&"B?S$$%0$&%$其中"B为有效值#%为角频率#&为初相位%表

示#其导数表示如下’

"*>&"B%?S$$%0$&%41"*"BcQ?$%0$&%

用微商表示’

%8%0#

1"*"BcQ?$%0$&%

(1O+(

Page 201: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

%8#1"*"B%0cQ?$%0$&%

取其最大值#因为cQ?$%0$&%)+#所以%"5>f41"*"B%0#其含义为在,)-转换的 %0时间内#模拟量变化的最大值!

由上式的含义#可以得出以下结论’如果模拟量变化的最大值小于一个数字量对应的模拟

量#则,)-转换的结果未受影响&反之#则,)-转换结果必受影响!由孔径时间$,)-转换时

间%带来的,)-转换结果的误差称为孔径误差!例如#,-8BJBO的采样信号频率取何范围时不会产生孔径误差!假定,-8BJBO转换电压

幅值为BD!3#J位 ,)-转换时间%04+BB#?#则转换期间模拟量最大变化量为’1"*"B%04

1"*A!3A+BB#?#一个数字量对应的模拟量为!3HB31J

!依题意有’当 1"*A!3A+BB#?n

!3HB31J

时不会产生误差#所以 *n +1BB#?A1J"

4EO!*JVd#亦当模拟信号的频率大于EO.Vd

时#就会带来孔径误差&反之#不会产生孔径误差!孔径误差的计算一方面根据所选的,)-转换器的性能指标#另一方面根据所转换信号的

特性$幅值"频率%#如果不产生孔径误差就无需采样)保持器#反之必须使用!$1%采样)保持器

图.*1B"采样)保持器原理

采样)保持器原理如图.*1B所示#它由运算

放大器$电压跟随器%"充)放电电容和受控开关

组成!控制开关闭合时#"S对电容 (充电#直至充

满时$"S4"Q%断开开关#由于电容 (无放电回

路#故"Q一直保持等于"S的电平#直至下次控制

开关闭合#该电平被+锁存,#供 ,)-转换器转换

用!常用的采样)保持器有09+OJ)1OJ)7OJ#高速采样)保持器有0VBB!7等!由于该类器件使用简单#故不过多介绍!此外根据设计需要#采样)保持器并非所有的系

统均要使用#即便需要使用#也可采用内建采样)保持器的 ,)-转换芯片#该类芯片很多且使

用更加简单!

.*7"输出驱动

开关量输出往往直接驱动现场的电器或作用于大功率电器的控制回路#需要有一定的功

率驱动能力!常见的功率驱动有下面四种方式’集成电路"可控硅"继电器和晶体管!

.*7*+"常用的驱动集成电路

集成电路的驱动能力一般不是很强#往往在几十至几百毫安#在一些驱动电流要求不大的

应用场合#由于集成电路具有占用空间小#易于焊接#使用方便等优点#常用来驱动如 0F-显

示等小功率的电器!

+*采用//0门电路

//0门电路中E2B.和E2BE常用于驱动电路中!(7O+(

Page 202: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

一般来说#//0电路中(8开路的缓冲器)驱动器均有较强的驱动能力!E2B.)E2BE驱动

能力达2B5,#其中E2B.为反相驱动#E2BE为同相驱动#二者均属六高压输出缓冲器)驱动器!每个芯片含.个门#引脚排列如图.*1+所示!

1*E!系列功率集成电路

E!系列功率集成电路的芯片很多#常用的有E!2!+)1)7)2四种#E!2!+)1)7)2驱动能力为

7BB5,#四种芯片的引脚相同#如图 .*11中心的芯片的引脚排列#其中E!2!+的输出是两个

输入的与"E!2!1为与非"E!2!7为或"E!2!2为或非关系!由于它们都是 -#LJ封装器件#且每

片只有1路驱动#常用于驱动少量信号的应用场合!

图.*1+"驱动中常用的//0门电路

图.*11"E!系列功率集成电路

7*U0M1BB系列或1J系列

U0M1BB7又称:8+2+7L#具有E路反相驱动#驱动能力达!BB5,#芯片引脚如图.*17$>%所示!该器件为-#L+.封装#左入右出#布线方便#可驱动E路#引脚效率高#而且内含续流二

极管#可以在驱动含线圈类电器时起到很好的保护作用#所以被广泛使用!芯片的 8(::(M引脚接地#80,:L引脚接被驱动电器的电源!

由于数码管具有J段#使用 :8+2+7L时#往往造成一片不够用#两片浪费的情况!所以#很多开发者使用与:8+2+7L结构完全一样#但多一路驱动的UM01JB7!

UM01JB7为-#L+J封装#如图.*17$W%所示#具有J路驱动#左入右出#第O脚接地#第+B

(2O+(

Page 203: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

脚接驱动电源#和U0M1BB7性能完全一样#仅比1BB7多了+路驱动!

图.*17"U0M1B系列和1J系列芯片引脚

通过下表#可以很直观地看出常用的驱动集成电路的特性!表.*+"驱动集成电路特性

系"列 输出低电平时吸入电流#(0

E20G J5,

E2 +.5,

E2V 1B5,

E2G 1B5,

E!系列 一般7BB5,#有些达!BB5,#1到2路)片

U0M1JB7

U0M1BB7

!BB5,#J路)片!BB5,#E路)片

.*7*1"可控硅

可控硅$G8;%又称晶闸管#表示符号如图.*12所示#具有体积小#效率高#寿命长#驱动能

图.*12"可控硅表

示符号

力大$一般是几安培至几百安培%等优点!

+*可控硅结构与特性

可控硅由阳极$,%"阴极$Z%和控制极$X%三极组成#可控硅与二极管

很类似#具有正向导电性#但其正向导通性还受控于控制极!可控硅导通条件’一是,"Z两端加正向电压#二是X上加一个正脉冲

$触发脉冲%#该脉冲无须维持!可控硅截止条件’,"Z两端加零压或反压!

1*可控硅的应用

可控硅的应用如图.*1!所示#图中#控制角#指可控硅从可导通$交流信号过零后%到导

通$触发脉冲发出%的时间#导通角’指从触发导通到零压)反压关断之间的时间!输出信号的有效值随控制角的改变而变化#从而实现对大功率负载的有效控制!

(!O+(

Page 204: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图.*1!"可控硅的应用

7*双向可控硅

双向可控硅表示符号如图.*1.所示#/+为第一电极#/1为第二电极#X为控制极!双向

图.*1."双向可控

硅 表 示 符

可控硅在交流电器控制中的应用更广#其原理与单向可控硅类似!

2*可控硅触发

完整的可控硅触发电路分为两部分!$+%过零检测电路

过零检测实用电路很多#图.*1E是一种精度不高但结构简单的电

路!交流电通过全桥转换成直流#通过 #+限流#使用光耦检测过零!当

全桥整流后的电压高于+*!3$发光二极管导通压降%时#发光二极管发光#光敏三极管导通#送入:LU的电压为低电平&当全桥整流后的电压低于+*!3时#发光二极管不发光#光敏三极

管不导通#送入:LU的电压为高电平!一旦检测到过零就启动定时#定时到控制角时发出触

发脉冲!

图.*1E"可控硅过零检测原理

$1%触发脉冲输出电路

触发脉冲输出电路如图.*1J所示#图中通过 L+*B口线#输出触发脉冲#经过光耦隔离和

三极管放大#驱动G8;的控制极X!

(.O+(

Page 205: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

过零检测电路中电阻#+"#1分别为 #+&11B3H+*!3+B5, 4116!##14

!3HB*E3+B5, 427B!#

同理可计算可控硅触发电路中的电阻!可控硅虽然也像开关量一样控制其导通或断开#但是 G8;的导通角可控#其输出经滤波

后的电压因而可控#所以经常用于模拟量的输出驱动!

(EO+(

Page 206: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图.*1J"可控硅触发原理

.*7*7"继电器

可控硅虽然驱动能力很强#但需要检测电

路和触发电路配合使用#结构比较复杂#在实

际开关量的控制场合中#常常需要几百毫安到

几十安培的驱动能力#此时使用继电器更为简

单"方便!继电器有多种不同的类型#本书主要针对

实际应用中使用较多的印刷板用超小型电磁

继电器和固态继电器进行介绍!

+*印刷板用超小型电磁继电器

该类继电器具有体积小#重量轻#易于焊在线路板上等优点!线圈电压几伏到几十伏&触点负荷范围为1D+B,$-8123%#电气寿命在+B!以上#属于机械有触点式开关!通常有!个

引脚#其中1个引脚接线圈$当线圈通电时#继电器吸合#常开触点闭合#常闭断开%#+个引脚

为触点的中心点#+个引脚为常开触点#+个引脚为常闭触点!直流继电器接口原理如图.*1O所示!

图.*1O"直流继电器接口原理

继电器由三极管OB+7驱动!OB+7有7BB5,的驱动能力#足够驱动继电器 !$注意%在使用继电器时一定要在线圈两端安装+续流二极管,!因为在继电器释放时#线圈上的

电感在线圈两端会产生较高的感应电压#很容易将驱动继电器的三极管击穿$如果采用

:8+2+7L等内部含有二极管的集成芯片驱动时#不增加续流二极管也是可以的%!

1*固态继电器#GG;$

由于继电器一般都需要采用隔离"驱动#而且属于机械触点接触型电器#可靠性和寿命均

(JO+(

Page 207: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

不是很好!1B世纪JB年代GG;应运而生#它是一种无触点电子开关器件#而且内含光电隔离

和驱动!由于它具有工作可靠#驱动功率大#无触点#无噪声#抗干扰#寿命长等特点#被广泛应

用于机电控制#尤其是防爆等应用场合!GG;工作原理如图.*7B所示#由图可见#GG;为四端器件#两两一组#分别接控制信号和

负载输出!控制信号可以直接与//0"8:(G集成电路相连#无需专门驱动!选择不同型号的

GG;#主要应考虑负载特性要求#如使用场合$直流)交流%"电流大小等!随着价格不断降低#固态继电器越来越多地被采用!

图.*7B"GG;工作原理框图

.*7*2"晶体管

晶体管在驱动中一般使用它的开关特性!如OB7+MLM型三极管$如图.*7+所示%#当"W=

图.*7+"OB+7MLM型三极管

\B*E3$正偏电压%时#三极管导通#导通时 ’c可达7BB5,#故称其

有7BB5,驱动能力!三极管由于具有价格低#电路简单等特点被广泛地应用于中"小

电流驱动的场合#如继电器驱动"0F-或 0F-数码管的驱动等!下

面以动态驱动+.个0F-数码管为例说明三极管的驱动作用#三极管

在显示驱动中的应用如图.*71所示!

图.*71"三极管在显示驱动中的应用

由于是动态显示且同时点亮,4+.个数码管#所以动态电流应为静态的,倍!亦’每个

0F-静态电流15,发光#动态电流要1A+.4715,&J个0F-需JA7141!.5,#使用OB+7

(OO+(

Page 208: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

来驱动一个0F-数码管已足够了!此时#限流电阻 #4!3H+*!3HB*E3715, 4JJ!#实际选J1

!!三极管也被较广泛应用于诸如蜂鸣器等单一器件驱动中#如 I!3直流蜂鸣器驱动电路#

如图.*77$>%所示!如果一个晶体管的驱动能力不够#可以采用达林顿型的接法或直接采用

达林顿型晶体管#如图.*77$W%所示!

图.*77"I!3直流蜂鸣器的三极管驱动电路

.*2"常用的执行机构

+*步进电机

步进电机是一种可控制的特种电机#它的旋转是以固定的角度$称为+步距角,%一步一步地

运行#其特点是没有积累误差$精度为+BBC%#广泛应用于各种自动控制场合!步进电机的运行

需要使用步进电机驱动器驱动#它是把控制系统发出的脉冲信号转化为步进电机的角位移#换

而言之#控制系统每发一个脉冲信号#通过驱动器使步进电机旋转一个步距角!所以步进电机的

转速与脉冲信号的频率成正比#通过控制驱动脉冲的频率#达到控制电机转速的目的!步进电机的相数是指电机内部线圈组数#常用的有二相"三相"四相"五相步进电机!电机

相数不同#其步距角也不同#二相电机的步距角为 B*Oo)+*Jo#三相为 B*E!o)+*!o#五相为

B*7.o)B*E1o!以B*E!o)+*!o为例#它表示半步工作时步距角为B*E!o#整步工作时步距角为

+*!o!这个步距角可以称为+电机固有步距角,#通常用户靠选择不同相数的步进电机来满足

步距角的要求#显然步距角越小#控制精度越高!目前广泛使用细分驱动器!例如#对于三相反应式电机#细分后的步距角等于电机的半步

步距角除以细分数#如果细分数设定为2B#驱动步距角为B*E!o)+*!o的电机#其细分步距角为

B*E!o)2B4B*B+JE!o!用户只需在驱动器上改变细分数#就可以改变步距角!所以采用细分

驱动器后#+相数,已经变得意义不大#而且控制精度更高!在驱动步进电机时#可以选择专用的步进电机驱动器#通常只需要通过 8LU向步进电机

驱动器发送步进脉冲信号8L"方向电平信号-#;等少数几个开关量信号即可#通过拨位开关

设定驱动器的细分数和设定驱动器的输出电流等参数#也可以采用光电隔离配合三极管驱动

步进电机的各相#例如7相步进电机需要7路开关量驱动!

1*三相异步交流电机与变频器

异步电动机具有结构简单#制造"使用"维护方便#运行可靠#重量较轻及成本较低等优点#(BB1(

Page 209: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

所以它在各种电动机中应用最广#需求量最大!在工业控制领域#三相异步交流电机使用极为广泛!其转速和交流电源的频率成正比#由

于交流电源的频率固定为!BVd#所以无论是否需要#电机只要工作#都以额定转速转动#由于

电机转速不可控制造成了电力资源的极大浪费!变频调速$3><S>WP=3=PQcS’p3><S>WP=9<=q&=$cp%是一项集现代先进电力电子和计算机于

一体的高效节能技术#其基本原理是通过改变电源的频率达到改变交流异步电机转速的目的!自1B世纪JB年代世界各国将其投入工业应用以来#变频调速显示出了强劲的竞争力#其应用

领域也在迅速扩展!现在凡是可变转速的拖动系统#只要采用该项技术就能取得非常显著的

效果!国家科委十分重视这一技术的推广工作#已在+OO!年将其列入国家级重点推广的科技

成果项目!采用变频调速可以大大节约能源#随着我国工业生产的迅速发展#电力工业虽然有

了长足进步#但能源的浪费却是相当惊人的!这是由于许多拖动电机处于恒速运转状态#而实

际生产中要求处于变工况运行&还有许多企业在进行系统设计时#容量选择得较大#往往是

+大马拉小车,#造成大量的能源浪费!此外#变频调速也使执行机构的交流异步电机的转速

可以受控#大大提高了控制系统的控制质量#对国民经济的发展具有重要意义#对产品质量的

提高具有极大的意义!三相交流变频调速常使用变频器实现!生产变频器的公司较多#著名的有三菱"东芝"西

门子等!变频器的使用很简单#以最常用的三相交流7JB3变频器为例#交流7JB3$!BVd%7根电源线作为变频器的电源输入#变频器输出7根交流7JB3的电源#该输出的电源的频率是

受控的!控制变频器输出的方式通常有7种’一是键盘控制#采用变频器提供的控制器面板上的按

键改变输出频率&二是模拟输入控制#从外部输入控制电压"电流等模拟量改变输出频率$该

方法在变频器的使用中用得最多%#随着变频器的数据通道的增加#目前新型的变频器还提供

;GN2J!等通信接口#通过上位机进行输出频率控制&三是开关量控制#通过外部继电器控制变

频器工作在某些固定的频段上!此外#变频器还提供正转"反转等控制端子!控制变频器时#单片机需要提供1路开关量输出#分别控制变频器启动)停止"正转)反转#提供+路模拟量输

出$一般是2D1B5,或BD!3%控制变频器的频率输出!变频器的安装使用很方便#有两类导线与变频器相连!一类是电源线#包括从外部引入的

三相电源$7根%和输出到三相异步交流电机的三相电源$7根%&另一类是控制线$小信号

线%#包括两组开关量和一组模拟量!由于变频器干扰严重#所有信号线均需采用屏蔽线#且屏蔽层按要求接变频器提供的地!

在使用变频器的系统中#一定要注意地线的处理#变频器一定要按要求接地#单片机系统

和变频器应一点接地#此外#也要特别注意单片机系统的供电系统#尽量避免受变频器的影响!

7*直流电机

直流电机是一种调速性能优良#启)制动方便#能经受冲击负载的电机#因而被广泛使用!直流电机的转速和加在电机上的直流电压成正比#通过调节电压的方法#可以很方便地实现调

速控制#由于直流电机的功率一般较大#所以直流电机的调速常使用可控硅驱动的方法!在

.*7*1节#已经介绍了可控硅#将交流电源经过全桥整流变成直流后#通过控制可控硅的导通

角实现对直流电机电压的控制#该技术很成熟#在实际工程设计中已被广泛采用!

(+B1(

Page 210: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

2*电磁阀

所谓电磁阀是指受电磁力控制开)闭的阀体#主要应用于液体或气体构成的液路"气路控

制场合#属于开关量执行机构!大量应用于液压"气压系统中#尤其在自动化生产线中使用广

泛!简单地说#与继电器类似#当电磁阀线圈通电时#铁心克服弹簧的弹力#与固定铁心吸合#阀门处于打开状态&反之#铁心依靠弹簧的弹力#与固定铁心脱离#阀门处于关闭状态!这样#就可以通过油缸或气缸#推动物体的机械运动#完成进给"往复等运动!从线圈的驱动源来看#电磁阀可分为交流"直流两种#线圈电压也有+13"123"2J3等!在液压控制系统中常使用

换向阀#例如两位三通阀"两位四通阀等#这里的+位,指电磁阀中滑阀的停留位置的个数#+通,指液体的通道数!通过控制电磁阀线圈得电)失电#改变滑阀的位置#从而改变液路的流

向!

习$题$.

.*+"简述常用的开关量传感器有哪些#试分析其中一种的工作原理!

.*1"多种开关量传感器都可以用于限位"定位!试分析#哪种类型的传感器的定位精度更准#为什么)

.*7"假设电机的转速为$+BBD+BBB%<)5S$#光电转速传感器每转输出71个脉冲$由 /+输入到单片机

内部%#编写测速程序#将测得的转速$<)5S$%存放在设定的存储单元!提示’采用/B定时+5S$#启动/B定时的同时启动/+计数$初值为B%#/B定时到停止 /+计数#/+计数

值除以71即可!.*2"用于前置放大的运算放大器和信号放大的运算放大器哪个要求更高#为什么).*!"编写中值滤波程序#假设三次采样的值已经放在7BV"7+V"71V单元#滤波输出结果存放在 ,88

中!.*."某,)-转换器精度为+1位#转换模拟量范围为BD+B3#转换时间为1!#?#试分析模拟信号的频

率为何范围时#可以不用考虑使用采样)保持器!.*E"常用的驱动集成电路有哪些#分别常用于何种场合).*J"常用的驱动方法有哪些#各有什么特点).*O"常用的执行机构有哪些)

(1B1(

Page 211: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第E章"单片机应用系统设计

本章从单片机应用开发的一般步骤入手#着重介绍总体设计"硬件设计"软件设计"开发装

置的使用与系统调试"编程器的使用与程序固化"产品验收与交付使用等技术环节要完成的任

务和实际开发中应注意的问题!内容上贴近实际#注意对自上而下的任务逐级分解过程的介

绍#力图按工程的要求#使开发进程有条不紊#有理有据#文档齐全!单片机应用系统设计的一般步骤可以分为以下几个阶段’$+%总体设计&$1%硬件设计&$7%可靠性设计&$2%保密性设计&$!%软件设计&$.%软硬件调试&$E%文档编制等!

E*+"总体设计

+*用户需求分析

对用户提出的功能需求"技术指标等#进行必要的可行性论证!明确设计任务#并以书面

形式确定以下几方面的内容#经用户认可#形成设计任务书!$+%产品名称&$1%设计目的&$7%系统功能要求&$2%系统性能指标&$!%总体要求&$.%设计周期&$E%设计费用&$J%其他!无论是技术改进项目还是新产品开发#都应针对用户需求#参考国内外有关资料#避免与

有关标准抵触!

1*构建系统总体架构

根据设计任务书的要求#在满足功能"性能等用户需求的基础上#初步提出可选技术路线#并对各方案进行必要的分析#选择一种实施方案#在方案筛选过程中应充分听取方方面面的意

见!系统总体架构应以用户需求为出发点!主要包括’$+%选择机型&

(7B1(

Page 212: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$1%选择需要进行哪些系统功能扩展&$7%初步确定主要的软硬件功能&$2%明确用户界面$键盘"显示"打印%的形式&$!%提出系统的结构$或建议#经用户确认%&$.%单片机内部资源分配及任务分解!在总体设计阶段应形成包括前面六项在内的总体报告和设计任务书!报告形成后#

就可分成两组进行同步设计了!第一组负责硬件#第二组负责软件#两个组由项目负责人协

调!硬件设计除了主要完成L8K线路板设计外#还应考虑可靠性和保密性#最终形成L8K图"

元器件清单"网络表"端口地址表等技术文档&软件设计主要完成软件功能模块划分"出口)入口参数定义"最终形成程序$子程序%框图"源程序清单等技术文档!

软硬件调试必须由软硬件设计人员共同参与#形成调试报告!最后向用户提交产品"产品

说明书等!

E*1"硬件设计

尽管硬件设计是从总体报告和设计任务书出发#设计任务依次为’硬件原理图绘制"L8K板图绘制"印制板测试与焊接三大块#但本节从技术角度出发#将其细分为在设计中应重点考

虑的六个方面的问题!硬件设计的任务是将在总体设计时明确的要求用具体电路实现#包括系统扩展"元件选择

$必要时还要进行局部电路的验证实验%"设计原理图"印制板制作等!硬件设计$包括硬件原

理图和L8K图%目前基本上采用计算机辅助设计$8,-#8Q5%&’=<,Sg=g-=?SR$%!常用的电子

线路8,-软件有L<Q’=P"(<c>g等!硬件原理设计是系统设计开始后最重要的第一步!硬件原理设计中存在的缺陷将对整个

设计产生影响#所以原理设计要特别细心周到!原理设计完成后#将产生硬件原理图"网络表"元件清单等重要文档#这些文档是后续工作的基础!在硬件原理图基础上#可以采用 8,-自

动布局"自动布线自动地完成印制板绘制!通过印制板和原理图各自生成的网络表#可以验证

所绘制的线路板与原理图是否一致!网络表还用于检查生产出来的印制板上线路的通断!此

外#硬件原理图还是硬件调试$甚至软硬件联调%时查错"纠错"分析故障点的必不可少的图

纸!正确的原理设计几乎是硬件设计成功的标志!

E*1*+"硬件原理设计

硬件原理设计的任务是设计并绘制硬件原理图#主要应从以下几个方面考虑!

+*最小应用系统设计

包括微处理器的选择"程序存储器的选择"晶振的选择"总线是否驱动"复位电路的设计"内部资源$如定时"计数"中断%的使用等!

1*过程#)(通道设计

包括开关量#)(通道#接口电路"端口地址等问题#模拟量 #)(通道中 ,)-"-),转换芯

(2B1(

Page 213: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

片的选择等!

7*人机界面设计

人机界面设计包括键盘"显示和打印电路及其接口设计!

2*其他系统扩展设计

根据系统需要扩展外部;,:"定时)计数"中断管理"串)并口扩展等!

!*接插件定义

确定线路板之间的数据通信形式#包括接插件的类型#接插件管脚定义等!原理设计最好在自己以前开发成功的基础上+修改,#这样不仅高效#而且还可避免+大

意,出错!基于此#要求设计人员从一开始就养成按功能模块画原理图的良好习惯!目前的

8,-软件多数支持分图#所以一个硬件功能模块画一张图是可行的!

E*1*1"资源分配

完成了原理设计之后#硬件资源就基本确定了#适时地进行资源分配#对后续工作能起到

很好的限定作用!此外#在资源分配时能及时发现资源的利用情况#一方面减少资源浪费#另一方面发现资源不足#及时修正原理设计中的潜在问题!

资源分配的主要任务是对单片机内部;,:"1$或7%个定时)计数器"!$或.%个中断源"+个全双工异步串行口"2个并行#)(口等单片机内部资源及扩展资源逐个分析其用途"工作方

式"工作起止时间和限定条件#分配端口地址等!

E*1*7"线路板图绘制

原理图最终还要通过8,-软件绘制出线路板图才能交付生产#在绘制线路板时一定要注

意以下几个问题!

+*器件的布局

器件布局是指在线路板上布置器件的位置!在电路板设计时应合理地分区#如强"弱信

号#数字"模拟信号#输入"输出通道等安排在不同区域#尽可能使干扰源$如电机"继电器%与

敏感元件$如单片机%远离#应考虑走线的密度均衡"发热均衡等因素!除了按用户要求的键

盘"显示等器件的位置已确定外#其他器件最好是环绕8LU或在8LU引出的总线两侧!

1*布线

$+%布线时应注意大电流线路的线径应确保可以通过该电流#并有一定余量#在可能的情

况下尽量加大线径!$1%一般情况下#线径为!B"5SP$!BAB*B1!2"554+*1E"55%的导线可以通过近2,

的电流#电源和地线应尽量加粗或至少保证!B5SP以上#信号线一般为+15SP!$7%走线要合理#地线构成闭环多数情况下能明显地提高抗干扰能力!$2%三总线分开#减少互感振荡!$!%模拟地与数字地分开走线#最后在一点处汇合$一点接地%!

(!B1(

Page 214: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$.%单片机和大功率器件的地线要单独接地#以减少相互干扰!大功率器件尽可能放在

电路板边缘!$E%有条件尽量采用四层以上印制板#中间两层为电源及地!$J%当大电流线宽到一定程度时#由于占用线路板资源太多#一般采用粗导线+跨接,的

方法#这样不仅节省了线路板资源#而且避免了由于大电流导致线路板被+加热,!$O%走线应避免出现直角或锐角#以减少高频噪声发射!$+B%注意晶振布线#晶振与单片机引脚尽量靠近#用地线把时钟区隔离起来#晶振外壳接

地并固定!

7*可靠性

$+%减少多余的过孔#减少线路板不可靠因素!$1%在允许的范围内尽量加大线和线"线和盘$焊盘%"孔$过孔%和盘的距离!$7%防止线路板制作时的毛刺及阻焊材料不良造成的搭接问题或隐患!$2%尽量采用独立系统结构#减少接插件与连线#提高可靠性#减少故障率!$!%集成块与插座接触要可靠#如采用双簧插座!$.%集成块最好直接焊在印制板上#防止器件接触不良故障!$E%对于单片机闲置的#)(口#不要悬空#要接地或接电源#其他 #)(的闲置端在不改变

系统逻辑的情况下接地或接电源!

2*退#去$耦电容

每个芯片电源进线处尽可能接一个+B2$B*+#9%或+B7$B*B+#9%的退耦电容$可以用陶

瓷电容#目前使用较多的是独石电容%!每隔!个左右芯片安置一个+D+B#9的胆$电解%电

容#因为这种电容的高频阻抗很小#对噪声抑制效果很好!

!*续流二极管

在继电器线圈两端增加续流二极管#消除线圈断开时产生的反电动势干扰!仅加续流二

极管会使继电器的断开时间滞后#若再增加稳压二极管#则可改善响应速度#消除滞后性!在

继电器触点两端应并接火花抑制电路#减小电火花影响!

.*兼容性

在制作批量生产的印制板时一般考虑多封装兼容设计!在制作L8K时放置一个器件#其封装形式是固定的!但在实际生产中有可能使用其他封装的同一芯片!例如#使用E271//0门电路#在制作 L8K时#可以放置两种封装’L-#L双列直插封装$-&>PN#$N0S$=LP>?’ScL>c6>NR=?%和G(#8表$面%贴封装$G5>PP(&’PS$=LP>?’ScL>c6>R=?%的相应引脚相通"放置位置重叠的

1个器件$实际上仅用其中的一种%#方便器件采购与生产!

E*瞬态电压抑制器/3G

瞬态电压抑制器$/<>$?S=$’3QP’>R=G&%%<=??Q<#简称/3G%#是一种二极管形式的高效能保

护器件#有的文献上也称为/3L",_/3G"G,_/3G等!当/3G二极管的两极受到反向瞬态高能

量冲击时#能以+BH+1?量级的速度#将其两极间的高阻抗变为低阻抗#吸收高达数千瓦的浪涌

(.B1(

Page 215: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

功率#使两极间的电压箝位于一个预定值#有效地保护电子线路中的精密元器件#免受各种浪

涌脉冲对元器件造成的损坏!使用/3G二极管进行浪涌保护比使用压敏电阻优越得多#具有

响应时间快#瞬态功率大#漏电流低#击穿电压偏差小#箝位电压易于控制#无损坏极限#体积小

等特点#目前已广泛应用于计算机系统"通信设备"电源"家用电器等各个领域!总之#/3G二

极管在各种电路中的应用是极为广泛的#其功能如下’! 将/3G二极管加在信号及电源线上#能防止微处理器或单片机因瞬间的脉冲#如静电

放电效应"交流电源浪涌及开关电源的噪声所导致的失灵!! 静电放电效应能释放超过+BBBB3".B,以上的脉冲#并能持续+B5?#而一般的 //0

器件#遇到超过7B#?的+B3脉冲时#便会导致损坏!利用/3G二极管#可有效吸收对器件造

成损坏的脉冲#并能消除由总线之间开关所引起的干扰$8<Q??N’>P6%!! 将/3G二极管连接在信号线及地之间#能避免数据总线及控制总线受到不必要的噪声

影响!/3G的特性曲线如图E*+所示#/3G在数字电路中的应用如图E*1所示!/3G的特性参

数如下’! 额定反向关断电压 " :是/3G最大连续工作的直流或脉冲电压!当这个反向电压加入

/3G的两极间时#它处于反向关断状态#流过它的电流小于或等于其最大反向漏电电流’-!

图E*+"/3G的特性曲线

图E*1"/3G在数字电路中的应用

! 最小击穿电压"K;是/3G最小的雪崩电压!1!l时#在电压未达到"K;期间#/3G是不

导通的!当/3G流过规定的+5,电流$即击穿电流’;%时#加入/3G两极间的电压为其最小

击穿电压"K;!按/3G的"K;与标准值的离散程度#可把 /3G分为 a!C"K;和 a+BC"K;两

种!对于a!C"K;来说#" :4B*J!"K;&对于a+BC"K;来说#" :4B*J+"K;!

(EB1(

Page 216: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! 当持续时间为1B#?的最大峰值脉冲电流’LL流过/3G时#在其两极间出现的最大峰值

电压为最大箝位电压"8!"8"’LL反映了 /3G器件的浪涌抑制能力!"8与 "K;之比称为箝位

因子#一般在+*1D+*2之间!! 最大峰值脉冲功耗?: 是/3G能承受的最大峰值脉冲功率耗散!/3G二极管按极性可分为单极性和双极性两种&按用途可分为各种电路都适用的通用型

器件和特殊电路适用的专用型器件#如各种交流电压保护器"2D1B5,电流环保护器"数据线

保护器"同轴电缆保护器"电话机保护器等&若按封装及内部结构可分为’轴向引线二极管"双列直插/3G阵列$适用多线保护%"贴片式"组件式和大功率模块式等!

选用/3G时#主要从以下几方面考虑’$+%确定被保护电路的最大直流或连续工作电压#电路的额定标准电压和+高端,容限!$1%/3G的额定反向关断电压 " :应大于或等于被保护电路的最大工作电压!若选用的

" :太低#器件可能进入雪崩或因反向漏电流太大影响电路的正常工作!/3G并联应用时#由于分流作用而允许总电流增加#串联时#总电压为各个/3G压降之和!

$7%/3G的最大箝位电压"8应小于被保护电路的损坏电压!$2%在规定的脉冲持续时间内#/3G的最大峰值脉冲功耗?: 必须大于被保护电路内可能

出现的峰值脉冲功率!在确定了最大箝位电压后#其峰值脉冲电流应大于瞬态浪涌电流!$!%对于数据接口电路的保护#还必须注意选取具有合适电容8的/3G器件!$.%根据用途选用/3G的极性及封装结构!交流电路选用双极性 /3G较为合理#多线保

护选用/3G阵列更为有利!$E%对于温度#瞬态电压抑制器可以在H!!lDI+!Bl之间工作!如果需要/3G在一个

变化的温度下工作#由于其反向漏电电流’-是随温度增加而增大#功耗随 /3G温度增加而下

降#从I1!lDI+E!l#大约线性下降!BC#击穿电压 "K;随温度的增加按一定的系数增加!因此必须查阅有关产品资料#考虑温度变化对其特性的影响!

$J%L<Q/=6公司提供的/3G二极管#有下列不同的功率选择’!!BB >’’?’G,系列

!.BB >’’?’L.ZF"G:K_系列

!+!BB >’’?’+M!.1ON+M.7JO#+*!ZF#08#08F系列

!!BBB >’’?’!ZL系列

!+!BBB >’’?’+!Z,L"+!ZL系列

E*1*2"可靠性设计

单片机应用系统的可靠性是指在指定的应用环境和条件下#系统稳定工作的能力!单片机应用系统由于具有很高的性能价格比#已逐步深入到各个领域#对单片机系统工作

的可靠性也就提出了越来越高的要求!因为系统一旦出现问题#将带来一系列损失#产生严重

的后果!单片机应用系统的工作环境$如温度"湿度"电压扰动"电磁干扰"机械振动等%往往是很

恶劣的#在系统开发中#应确保不受环境条件的影响!形成干扰的基本要素有三个’$+%干扰源’指产生干扰的元件"设备或信号#如雷电"继电器"可控硅"电机"高频时钟等

都可能成为干扰源!(JB1(

Page 217: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$1%传播路径’指干扰从干扰源传播到敏感器件的通路或媒介!典型的干扰传播路径是

通过空间的辐射"导线的传导和过程通道!$7%敏感器件’指容易被干扰的对象#如 ,)-转换器"-),转换器"单片机"数字 #8"弱信

号放大器等!抗干扰设计的基本原则是’抑制干扰源#切断干扰传播路径#提高敏感器件的抗干扰能力!提高系统的可靠性可以从两方面入手#一方面从硬件设计角度提高系统抗干扰能力#另一

方面从软件角度提高系统的可靠性!软件设计中#可以通过增加系统的自检#设置软件陷阱#重要参数备份#模拟量输入采用软

件滤波等手段提高系统的可靠性!在硬件设计中#提高系统可靠性的主要措施有’采用抗干扰措施#提高系统的环境适应能

力&把好元件质量关#元器件经筛选"老化后使用&印制板设计应充分考虑可靠性等!硬件设计中干扰抑制是极其重要的#尤其在现场环境比较恶劣的应用中#不能很好地解决

干扰问题#无异于温室养花只能长在实验室里!抑制干扰主要还是要从现场的环境实际出发#认真分析可能的干扰#防患未然!因此硬件干扰的抑制一定要深入现场考察与分析#避免闭门

造车!例如#虽然绝大多数工矿企业的现场空间电磁干扰都比较严重#但具体严重到何种程

度#程度不同处理不同!干扰程度低的#只需将控制器屏蔽即可#但像电视中转台那样空间电

磁干扰非常强烈的现场#几乎所有的器件包括传输信号线都需要屏蔽!再如发电厂#其环境温

度一般在1BlD2Bl左右#选择器件时#应考虑选用工作温度高的芯片#如E2系列芯片一般

工作在BlDEBl#而!2系列的芯片一般工作在 H!!l D+1!l!干扰抑制应主要从供电系

统和过程通道等方面入手!

+*供电系统

供电系统干扰主要来自电网的过压"欠压"停电"浪涌"下陷"尖峰等干扰!其中过压"欠压

图E*7"后备电池

的抑制方法可以采用稳压器"电源调节器!对停电可以采

用ULG$不间断电源%或用静态 ;,:辅以可充电电池备份

重要运行参数#也有些系统采用串行 F1L;(:保存参数!采用后备电池的典型应用如图E*7所示!图中9;+B2起反

向截止作用#电池电压一般是7*.3#.B5,j表示电池的容

量为提供.B5,电流时能持续+j!在!88$I!3%有电时#!88对电池充电#;起到分压"限流作用##越大电池的充电

时间越长##的选取应根据现场停电周期来定!9;+B2是有必要的#因为断电后电池仅需给JB87+供

电#保存其内部1!.K数据$电池无力也无需为 8LU以外的其他器件供电%#同时使JB87+进

入掉电方式#否则电池仅能维持几个小时#具体地应选用掉电监测电路#通过高优先级中断的

方式通知8LU#8LU中断服务中放置一条 :(3"L8(M#‘B1V指令#即可使晶振停振#进入掉

电状态#此时耗电仅!D!B#,#当电源有电时#通过9;+B2和电阻对锂电池充电!$注意%只有8V:(G工艺的单片机$如JB87+"JB8!1等%才有掉电等节能方式!在供电系统设计中#一般的应用场合可以采取同时使用工频变压器"全桥"三端稳压的方

法#电路如图E*2所示!三端稳压器件由7个引脚组成#分别为’电源输入"稳压电源输出和

(OB1(

Page 218: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

地!三端稳压器件通常要求输入电压要比稳压输出电压高73以上#才能确保输出电压稳定!全桥是一种单列2端器件#1个引脚为,8$交流输入%#1个引脚为 -8$直流输出%#现在很少

再使用2只+M2BB系列整流二极管按图E*2搭接全桥了!

图E*2"变压"整流"稳压电路

采用工频变压器#将交流11B3的电压降为所需的电压#根据三端稳压器件的要求#选择

交流要比直流电压高73以上#经全桥整流后#选用EJ系列三端稳压器件$或EO系列三端稳

压器件%输出稳定的正$或负%电压#如EJB!稳压输出为I!3#EJ+1稳压输出为I+13!根据

输出电流的要求不同#可以选择EJB!$+,%"EJ:B!$B*!,%"EJ0B!$B*+1!,%!一般在三端稳

压器件输入"输出端都要使用一个B*B+#9和一个几百微法或几千微法的电解电容#使用电解

电容时#应注意选择的电容的耐压值应有+倍以上的富余量!

图E*!"多板结构独自稳压原理

采用上述方法电路简单"实用#但对浪涌"过

压"欠压等抑制效果比较差!目前较广泛地采用

开关电源或电源模块#如 ,8N-8模块"-8N-8模

块等方法!通常情况下#交流11B3电源在工频变压之

前应经电源低通滤波器$现在市场上的开关电源

一般已内置了电源低通滤波%!电源低通滤波器

对1B6Vd以下的谐波有很好的抑制力#但对1B6Vd以上谐波的抑制效果就一般了!当系统有多块线路板组成时#尽量采用每块线路板独自稳压的方法!避免线路板电源间

的相互干扰#多板结构独自稳压原理如图E*!所示!

1*过程通道

过程通道的干扰在第!章已经提到#一般多采用隔离的方法#在开关量和模拟量#)(通道中

应加隔离!在长距离信号传送时#采用双绞线方式传送#或者转换成BD1B5,电流传输方式!

7*硬件抗干扰常用手段

$+%#L监控

工程技术人员常用/0EEB!电源监视芯片来监测电压!/0EEB!电源监视如图E*.所示#其中GFMGF为电源监视端#当GFMGF上的电压小于2*!

3时#;FGF/输出低电平$产生下降沿%#向JB87+申请中断!;FGF/’复位输出#低电平有效#(8开路#需上拉电阻!;FG#M’复位输入端#输入低电平时#强制复位输出端!

随着芯片集成度不断提高#工程技术人员往往热衷于既能提供#L监控#又能提供其他功

能的芯片!如:,Y#:公司的:,YJBE#它将电源监视与看门狗集成到一起#提供定时"电源切

换等多种功能!(B+1(

Page 219: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图E*."/0EEB!电源监视

$1%硬件看门狗

使用硬件看门狗的主要目的是防止程序执行受到干扰#不能按正常的流程执行的一种监

视芯片!具体方法是’在程序执行的某处或几处#安排一条指令来+喂,看门狗#使+看门狗,处

于饱状态#一旦程序+跑飞,#长时间无法执行+喂狗,指令#+看门狗,饿了就会+叫,#将单片机

复位或通过中断#使程序重新开始执行!例如#Y#8(;公司的 Y1!B27)2!就是将看门狗电路与复位电路$含手动)上电复位%以及

2ZK的串行F1L;(:集成在一起的芯片!Y1!B2!典型应用如图E*E所示!

图E*E"Y1!B2!典型应用

E*1*!"保密性设计

单片机应用产品多数采用双面板#线路板上走线一目了然#很容易将线路板测绘出来#所以#保密设计是必不可少的!保密设计多采用以下两种方法!

+*程序加密

程序加密是指使其他人无法读出固化的程序#达到阻止+仿制,的目的的一种方法!如果

采用FL;(:来存放程序#根本无法阻止程序被读出#所以一般采用将程序固化在单片机内部

的方法!例如选用内含程序存储器带+加密,位的单片机#这种方式比较多见#如选用JO系列

或JE系列单片机等!

1*可编程逻辑阵列加密

由于L,0"X,0等小规模可编程逻辑阵列在单片机应用系统中很实用#可以直接取代//0(++1(

Page 220: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

组合逻辑#所以被广泛地使用#且多数L,0"X,0器件可以设量加密$不可读%#使+仿制,者不

能一劳永逸!L,0"X,0器件的实用性加之可加密的特点#使其应用更加广泛!尽管如此#工夫不负苦心人#L,0"X,0的门太少#有经验的仿制者根据周边与之相连的器件#大致可以推测

到该L,0"X,0芯片功能#借助逻辑测试仪#可以将所写入的逻辑表达式+解读,出来!

E*1*."硬件线路板的焊接与测试

+*线路测试

L8K板生产出来后#首先要目测#观察线路板有无断线"毛刺"焊盘)过孔偏心"线路搭接等

问题$一般的线路板生产厂在出厂前均作过检查%&其次根据打印出的网络表逐个检查每个网

络是否导通!由于一般情况下都不会有问题#很多开发者都不愿做上述烦琐的工作!但是将元件焊上

后#一旦发现问题再查线路时#由于在板元件的影响#检查难度很大!

1*元件焊接

对于产品开发##8多采用焊#8座的方法#便于线路修改!如果是批量生产的产品#除了

易损坏的#8之外#为了确保硬件线路的可靠性#应把#8直接焊在线路板上!在元件焊接时#要注意避免漏焊"错焊和虚焊!

7*局部线路测试

局部线路测试是通过编写测试程序#检查局部硬件线路能否正常工作!如果不能正常工

作还需通过检查原理图#考虑原理设计是否存在问题!如果原理正确无误#问题就出在线路或

焊接上!一旦原理有错#就需要在L8K板上采用割线"飞线"外部追加辅助线路板等技巧加以

解决!问题太多很难处理时#就只能改正原理设计#重新生产L8K线路板!

E*7"软件设计

软件设计首先要进行软件任务划分#数据类型规划#资源使用约定#模块功能定义以及模

块接口定义等软件总体设计工作!软件的开发过程可以套用软件工程的要求!除此之外#还有一些单片机系统开发的特殊性!

规划数据类型是为了保证数据类型的一致性!数据类型可以分为逻辑型和数值型#逻辑

型数据通常归入软件标志#数值类型可分为定点数和浮点数!使用定点数的优点是直观"编程

简单#缺点是数值范围小!浮点数则相反!确定了选择定点数"浮点数之后还要进一步规定数

据是二进制还是K8-码或压缩K8-码!如果是定点数还要指明是定点整数还是定点小数!参数的数据类型确定了以后#需形成数据类型字典#供编程时查阅!模块功能定义包括程序中使用哪些模块)子程序)中断服务子程序等!规定其执行$触

发%条件"入口)出口参数"子程序完成的具体功能等!硬件设计中已经将单片机的资源基本分配完毕#软件设计中的资源分配主要是将还未具

体分配的各;,:单元进行合理分配#尤其是片内;,:!例如#规定工作B区用于主程序#+区

用于子程序#1区用于低优先中断服务#7区用于高优先中断服务!规定需要使用哪些标志#占(1+1(

Page 221: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

用从1BV开始的几个字节用来存放这些标志位!其余 ;,:单元可以存放字节信息$包括

1BV到19V单元未被用于标志的单元%#这些单元的使用还要扣除堆栈区!一般来说将 GL$堆栈指针%指向!9V#对!+系列单片机而言#有71个字节的堆栈区空间是足够用的!单片机

内部其他;,:单元对多数开发应用来说是够用的!内部;,:单元不够用的情况下#应确保

单片机内部;,:均被用于存放最常用的变量!其他不常用的参数可以存放在片外#这是因

为片外数据的存取要比片内困难!;,:资源初步划定后#各编程小组工作进程中可能发现某些资源分配不尽合理#需要局

部改动或增减!;,:资源由软件项目负责人独自掌管#各小组资源需求可以通过申请批准的

模式获得!+一支笔,的模式避免了 ;,:争用和冲突!;,:资源的管理最好通过伪指令定

位的方法#避免使用直接地址#这样#可以很方便地进行修改!软件开发前期工作非常重要#如果准备工作马虎#可能造成大量返工!

E*7*+"系统监控程序设计

监控的任务简单地说主要是调度’根据当前单片机内"外部的状态或发生的+事件,#适时

决策#执行相应的模块#完成指定的作业!监控程序的结构一般有作业顺序调度"键盘驱动调度等方法!前者适用于顺序控制类应

用场合#后者适用于键盘指令型开发场合!监控程序的设计方法常见的有状态分析法"状态转移法和事件驱动法等!

E*7*1"中断与子程序调用

+*中断

:8GN!+有!个中断源’7个内部中断/B"/+和串口#1个外部中断#M/B"#M/+!在总体设

计时!个中断源已经任务明确#在软件设计时#依据已定义的功能完成中断服务程序的编写!软件总体设计时#应充分考虑中断程序的相关处理’! 合理分配任务#确定哪些任务在主程序中实现#哪些任务在中断服务程序中实现!充

分考虑中断服务程序任务量适中!防止中断服务未结束之前#下一中断请求又到来#同级中断

得不到及时响应!例如#/B设定为B*+5?定时时钟时#/B定时中断服务程序应保证+BB#?之

内执行完#否则将造成无限制地+积压,下去!为此#可以在程序中设置一些处理标志#在主程

序中根据标志再进行处理!! 中断优先级的合理配置!由于中断一般都要求响应及时#但!个中断源中有些中断响

应的紧迫性更强#对这些中断应置高优先权#保证更加紧迫的任务随时得到服务!中断服务程序设计时应注意以下三个问题!$+%现场保护

由于中断服务程序执行时刻的不确定性#如果不保护现场就可能出现中断返回后其他程

序的执行受到+莫名其妙,的影响#而且该影响具有随机性#检查难度很大#所以在编制中断服

务子程序时#一定要保护现场!现场保护与现场恢复使用LUGV"L(L指令来实现!设计时可

以先不考虑现场保护#待中断服务程序编写完成后#列出所有目的操作数#将其中全局变量扣

除#其余均需保护和恢复!特殊的工作寄存器;BD;E#一般采用+换区,的做法#即主程序"低优先级中断"高优先级中断采用不同的工作区#避免;BD;E的冲突!

(7+1(

Page 222: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

例如某低优先级中断服务子程序段$使用工作区1区%编制完成后#列出目的操作数如

下’;B";E","K"-L/;"7BV$直接地址单元%#其中7BV为全局变量!;B";E通过换区的方法

保护和恢复#全局变量7BV不要保护#其余 ,"K"-L/;需要保护#现场保护和恢复程序段如

下’"""LUGV"""LG

GF/K ;G+80; ;GB"""&工作区选定1区

LUGV ,88LUGV KLUGV -LVLUGV -L0"""1"""1

"""""&中断服务子程序段

L(L -L0L(L -LVL(L KL(L ,88L(L LG ""&恢复LG 的状态位的同时也恢复了工作区

;F/#

一般来说#中断服务子程序有可能改变LG 中的8b",8"L"(3等标志位#所以即便在中

断服务子程序中不改变工作区#也需要保护LG !$1%及时返回#释放资源

初学者在编写中断服务子程序时#往往希望服务+一步到位,#致使中断服务程序很大#执行时间很长#这种做法使得处于同等优先级的其他中断请求得不到及时响应#可以理解为长时

间资源独占!中断的目的之一就是提高响应的实时性!很多工作可以在主程序中排队处理#中断服务程序只需要置一个任务标志#并将该任务列入主程序任务处理队列#及时释放中断资

源!这种方式可以理解为事件驱动程序流程#在此方式下的主程序与中断服务子程序结构如

图E*J所示!例如#一般的应用系统均有实时时钟#实时时钟采用定时中断的方式实现#实时时钟同时

还起到采样定时的作用!如果定时器采用方式1#定时+BB#?#显然采样"采样处理"存采样结

果"决策"控制输出等任务决非在+BB#?之内可以完成#所以在实时中断服务程序中#完全可

以置采样时间到标志#中断返回后#由主程序去采样"决策和输出!实时时钟中断服务程序框

图如图E*O所示!$7%避免中断重入

在:8GN!+系统中#处理器完全依据 #FB"/9B"#F+"/9+";#和 /#这些标志位是否为+#触发中断响应!其中只有;#和/#引发的串行口中断特殊#由于引发中断的不惟一性#所以进入

中断服务后#需要用户使用80;";#或80;"/#来清除中断请求标志!其他2个中断请求标

志#中断响应后会被自动清除!因此对串行口来说#如果用户在中断返回前不清除 ;#)/##就会造成中断重入#即一次中断请求造成多次#甚至是无休止的中断服务#使中断服务子程序反

复执行!中断服务子程序的反复执行一方面可能导致错误的结果#另一方面也使其他正常的程序

(2+1(

Page 223: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

执行+举步维艰,$每执行一条指令后就要被中断一次%!同样的道理#对 #M/B"#M/+也一样#其请求标志#FB"#F+完全由#M/B"#M/+引脚上的外部信号决定!如果设置 #/B)#/+4B$中断

请求低电平有效%#就应保证在中断返回前#M/B"#M/+引脚的电平变高!否则中断响应后#虽然系统自动清除了#FB"#F+#但由于#M/B"#M/+引脚为低电平#又会使 #FB"#F+被置位***向

8LU申请中断#造成中断重入!所以建议 #M/B"#M/+使用下降沿触发方式#因为无论 #M/B"#M/+上的低电平保持时间多长#也只能是一个下降沿引发的!这样就不会造成中断重入了!

图E*J"主程序与中断服务子程序结构

1*子程序与子程序调用

子程序是在功能模块划分完成后#进一步细化分解出来#完成某些功能的程序块!子程序

不是在软件总体设计时能够确定下来的!各个软件设计组采用结构化程序设计方法时#可以

形成各自软件框图#将重叠部分以子程序的形式提取出来#共同约定其入口"出口参数#这是一

种方法!另一种方法是全部程序编制完成后#在优化程序时#将所有可能合并的程序段或子程

序合并成一个子程序!由于子程序可能在不同的场合被不同的程序段调用#所以子程序的编写要规范#程序结构

合理"易读#不能有漏洞$某些场合正常#而另一些场合却出错%#尽可能少地占用资源!尤其

(!+1(

Page 224: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图E*O"实时时钟中断服务程序框图

避免制造垃圾#中间变量$用于暂存的寄存器%尽量使用工作寄存器#避免占用直接地址单

元!子程序采用何种方式传递参数很重要!

E*7*7"软件抗干扰措施

与硬件的抗干扰措施一样#软件的抗干扰

措施也非常重要#主要包括’软件陷阱"数字滤

波等#这些内容在前述章节已经讲述过!软件抗干扰还可以在上电复位后#调用自

检子程序#检测单片机内部资源和外部扩展电

路能否正常工作#自检正常后才进一步执行其

他程序#否则提示故障点#确保电路能正常工

作!由于单片机内部;,:单元存放着重要的

标志和数据#一旦受扰引起标志)数据的改变#势必造成系统运行异常!防止标志位受扰可

以采用定期检查标志合法性的方法#发现干扰

及时处理#例如发现不可能出现的标志组合及时处理!也可以采用标志冗余的方法#借助冗余

标志#进行标志位异常判定和纠错!防止数据受扰可以采用热备份的方法#适时比照"判定并

纠错!在保护单片机内部;,:时经常使用双重备份"表决纠错的方法#将单片机内部 ;,:单

元数据作两个热备份#一旦发现三个数不相同就采取表决的方式确定正确的数据!

E*7*2"程序测试

程序编写完成后#在软硬件调试之前#应首先进行程序测试#确保程序正常运行!在软硬

件联调时#减少故障点的检出时间#提高联调效率!程序设计的全过程分为分析问题"画流程图"编辑程序"程序测试四个步骤!前三步只占

总工作量的2BC左右#.BC以上工作量在测试上#所以一定要有充分的思想准备!程序测试的方法与软件工程中所述方法是一致的#可以采用白盒测试法"黑盒测试法!选

择白盒测试法可以使用路径覆盖"语句覆盖"判断覆盖"条件覆盖中的任意一种方法采用白盒

测试法#一定要选择好测试用例#保证选用的测试用例覆盖全面!黑盒测试法包括等价类测试

法#边界测试法等!由于程序测试的复杂性#在多数情况下#人们往往满足于能用即可#满足于一时能正常运

行#对偶尔的不正常往往不深追细究#这样的产品经不起时间和条件的考验#因而是不可取的!在实际应用中#采用自底向上的白盒测试法较常见!由具体的模块开发者采用某种覆盖

进行测试#确保每个模块均能有效工作!模块+装配,后#就只需要进行+装配,测试了!由于

测试任务被分解#有利于提高效益!

(.+1(

Page 225: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

E*2"单片机开发装置的使用与系统调试

E*2*+"单片机开发装置

目前市场上的单片机开发装置$又称仿真器%厂商和型号比较多#其使用如图 E*+B所

示!"仿真器通过串行数据线与L8机相连#充分利用 L8机的资源#也可以不连 L8机#单独使

用!不连L8机时#欲运行的程序只能通过仿真器的键盘#将可执行的机器码逐一键入#这种

情况不适于大型应用系统的开发!

图E*+B"单片机开发装置的使用

仿真器通过仿真线#连在用户板的8LU插座上!用户可以在L8机上编写汇编源程序#通过汇编程序将源程序汇编成机器码#通过 L8机串行口将机器码传入仿真器内!仿真器也可

以不连用户板#仅进行软件运行测试!通过设置断点运行"单步运行等方式#可以+跟踪,程序

的执行!仿真器将执行结果通过串行口回送L8机#在显示器上#用户可以很明了地看到程序

运行的结果$甚至每一步执行的结果%#大大地方便了程序的查错"纠错!当仿真器通过仿真线连在用户板的8LU插座上时#可以通俗地理解为仿真器将其 8LU"

程序存储器等资源全部+租借,给了用户系统#与前述相似#用户仍可以指定程序运行到哪里#并通过L8机的显示器观察单片机内部资源的变化情况$外部情况通过用户板上的数码管"0F-可以观察到%!

使用仿真器可以很直观地看到每执行一条语句 8LU内部寄存器"状态位的变化#以及外

部0F-等的变化!发现错误后#又可以很快地在 L8机上修改"汇编"重新装入"再运行检查#使用非常方便!

E*2*1"系统联调

虽然软硬件均已经独自完成了各自的测试#系统联调问题相对少得多#但仍不能以为万事

大吉#调试的任务仍很艰巨!系统联调的常见方法有两种!

(E+1(

Page 226: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

+*由顶向下的系统联调

该方法是进行整个系统的全速仿真运行#未出现问题#完成任务&出现问题时#分析问题可

能出现在哪里!分析问题主要侧重于软硬件配合时可能引起的问题#如硬件中断等!根据分

析#提出解决方案#着手解决问题!

1*自底向上的系统联调

该方法是分模块进行局部的仿真运行#排除了局部故障点后#再进行系统全速仿真运

行!"

E*!"程序固化与编程器的使用

编程器是一种将程序代码固化$烧入%到指定芯片内部的工具!虽然国内生产的单片机

开发装置有些也提供一些 FL;(:固化的功能#但往往只能针对某几个公司"几种型号的

FL;(:编程#局限很大!所以在单片机开发中#编程器这一工具还是必不可少的!目前著名

的编程器有河洛的,00系列"力浦公司的0L系列等#提供对FL;(:"F1L;(:"9P>?jFL;(:"G=<S>PF1L;(:"KS%QP><L;(:"MQ$TQPG;,:"L,0"X,0"LFF0"FL0-":LU等多类型"多公司"多种型号器件的编程"擦除"校验等功能!文件形式支持K#M$二进制%"#$’=PVFY":Q’Q<QP>等

数据格式!

+*程序固化

在仿真完成后#需要将程序固化在单片机片外或片内!$+%程序固化在片外

如果采用FL;(:$1E系列%芯片#需要使用 FL;(:擦除器!FL;(:擦除器是一种可设

定时间的紫外线灯管#通过紫外线一定时间$一般+BD+!5S$%的照射#使 FL;(:芯片中的数

据+挥发,掉#检查是否擦除干净#可以通过编程器查空的方法#也可以采用编程器读出的方

法#观察读出的内容是否均为B99V#如果不全是B99V#则说明未擦除干净#继续在擦除器中擦

除!如果反复擦除仍+擦不干净,#说明该芯片寿命已到#无法继续使用!FL;(:芯片的擦除

次数在+B次左右!在使用FL;(:擦除器时#切忌长时间直视紫外线灯管#因为这样很容易得+电光眼,#造

成不必要的痛苦!写好的FL;(:芯片#其石英窗口最好用不透光的纸贴上#防止日光中的紫外线长时间积

少成多的照射#使芯片内的数据被擦除!$1%程序固化在片内

如果:LU是FL;(:类型的#同样需要进行前述的+擦除,!非FL;(:型器件擦除就简单得多了#可以直接在编程器上+擦除,#这也是非 FL;(:型

器件被广泛应用的原因之一!由上可知1E系列FL;(:使用极不方便且无法加密#寿命又短#所以应用越来越少#而片

内具有9P>?j的单片机得到越来越广泛的使用!(J+1(

Page 227: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

1*编程器简介

编程器一般与L8机的打印口$L<S$’=<LQ<’%相连!需要固化程序时#启动编程器应用程

序#依次执行以下四步操作!$+%选择欲编程元件$-=TSc=%! 选择类别$8>’=RQ<p%#如FL;(:"9P>?j"F1L;(:等&! 选择厂商$:>$&@>c’&<=<%#如,:-",/:F0"#$’=P等&! 选择某厂商的元件型号$/p%=M&5W=<%#如,:1E+.",:1E8!+1",:1E8B+B!完成上述三项选择后#元件确定下来#其容量"编程电压"编程方式等也自动确定!$1%装入目标文件$0Q>g%将欲固化的程序代码装入缓冲区#并选择正确的文件格式!$7%检查代码$K&@@=<FgS’%检查调入的代码是否正确#采用查看缓冲区的做法$K&@@=<FgS’或 K&@@=<-S?>??=5WP=%#如

果正确就可以固化程序了!$2%编程$L<QR<>5%将欲固化芯片固定在编程器的锁紧插座上锁紧#可以选择自动编程$,&’Q%或依次执行擦

除$F<>?=%"查空$KP>$68j=c6#如果不空继续擦除%"编程$固化 L<QR<>5%"校验$3=<S@p%操作#有些器件还可以设置加密位$G=c&<S’p%#加密位仅仅是使程序无法读出#并不影响程序功能的

实现!

E*."产品验收与交付使用

尽管并非所有的项目均要技术鉴定$取决于合同约定等因素%#但产品验收是必要的#验收表明了用户对开发方产品的认可!如果说合同签订是任务的开始#产品验收则标志着任务

的结束!在产品验收时#应依据合同规定#逐条落实#并最终向用户交付产品及产品使用说明

书等有关文档!产品开发初期的合同与交付使用时的验收报告#是供需双方签订的非常重要的文件#对于

解决未来双方可能产生的纠纷能起到很好的帮助作用!

E*E"应用举例

在化工"炼油"冶金"制药"食品"印染"电力等众多行业中#水监测以及水处理是很重要的!一些行业中#水的质量控制得好坏直接关系到产品质量的优劣#多数行业监测并控制工业排放

是环境保护对生产提出来的必要条件#所以水处理不仅涉及广泛#而且非常重要!本节以水处

理中的酸度控制为例#介绍采用单片机应用技术设计的 %V控制器的开发过程!项目开发要

求如下’某火力发电厂#锅炉用水的酸度$%V值%要求控制在J*JDO*1%V之间#测量精度为

aB*B+%V#根据此要求来设计该控制系统!

E*E*+"用户需求分析

水的酸度可以通过%V监测仪或%V传感器测量!设计时可以选择定型的%V监测仪#也(O+1(

Page 228: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

可以直接选用%V传感器!事实上#%V监测仪也是一个包括 %V传感器在内的单片机应用系

统#它完成将%V传感器获取的电信号转换成数字量或模拟量#实现工艺参数设定"信号处理"显示打印等功能!选择前者能加速应用系统的设计开发速度#降低设计开发难度#同时也使设

计开发成本增加#系统功能重叠!例如#%V监测仪需要 ,)-转换器将现场的 %V值转换成数

字量#%V控制器依然需要,)-转换器将%V监测仪送来的%V值$模拟量%转换成数字量!选

择后者#尽管不会造成功能重叠且开发成本下降#但开发难度增加了!本节以后者为例介绍该

项目的开发过程!这里首先涉及到了传感"变送"过程输入通道的设计等问题!经传感器变送器#水的酸度$%V值%送入单片机内部#经过数据处理#在显示器上显示或

从打印机打印出来!工艺参数的设定需要使用键盘或K8-拨码盘等方式输入#这必然会涉及

到人N机界面的设计问题!在单片机内部#采集到的现场的%V值经控制算法计算后实时决策#驱动执行机构实施管

理!根据用户需求#控制算法可以是多种多样的!例如可以采用+砰 H砰,控制’当水的酸度

低于要求的低限$J*J%V%时#开始向水中加氨&当水的酸度高于要求的高限$O*1%V%时#停止

向水中加氨!这种+砰H砰,控制方式尽管控制算法简单#控制程序易于编写#但几乎不可能

实现用户对精度的要求!比较好的方法是采用 L#-$比例"积分"微分%控制#只要合理地整定

比例"积分"微分常数#就可以获得较好的控制效果!经控制决策之后的控制输出直接作用于执行机构!具体来说#驱动电机带动泵#将氨水槽

中的氨水通过加药管道注入到锅炉水管道中#从而实施对水的酸度的控制!控制水的酸度$%V值%只是水处理中的一小部分#在水处理中向水中加入氨水或其他化

学药剂统称为+加药,#配制一定浓度的药剂称为+配药,!%V控制是一个从实时数据采集"实时决策到实时控制的闭环控制系统#首先采样水的%V

值#通过控制加药量的大小#来控制水的%V值!该系统的设计涉及到了传感"变送"过程 #)(通道"驱动以及人N机界面等方面的问题#几乎涵盖了本书的全部内容#是一个相当全面"有代

表性的系统!%V控制器的基本结构如图E*++所示!

图E*++"%V控制器的基本结构

(B11(

Page 229: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

E*E*1"系统总体结构

根据前述分析#系统总体结构应包括以下几部分’! 单片机最小应用系统&! 传感器选择以及变送&! 过程输入通道设计&! 执行机构和过程输出通道&! 人N机界面的选择与设计!总体设计中需要针对上述问题#分别确定需要完成的功能和要实现的任务!

+*单片机最小应用系统

在本系统中可以选择:G8N!+系列单片机#尽管 %V控制器的控制精度要求比较高#但是

对于此类速度要求不高的自动控制应用领域#牺牲时间以获取精度是完全可行的!只有在速

度和精度要求都很高#:8GN!+系列单片机均不能胜任的情况下#才考虑选择+.位的其他单片

机!单片机最小应用系统包括:8GN!+系列单片机"程序存储器"上电复位电路等#这部分内

容在本书第+章中已经介绍了#这里不再重复!该系统的运行环境比较恶劣#在设计最小应用系统时#可以使用集看门狗"复位"串

行F1L;(:功能于一体的#L监控芯片#此类芯片中的串行 F1L;(:可以用于存储一些重要

的工艺参数#防止因停电"掉电引起的参数丢失!即便不使用此类芯片#在单片机应用系统中

扩展少量串行 F1L;(:用于存储工艺参数也是必要的!本例限于篇幅#不再介绍此类芯

片!"

1*传感器选择及信号变送

目前测量%V值的传感器$包括人工测量在内%基本上采用的是 %V玻璃电极#不再使用

工业电导仪测量%V值#因为水的电导和水的 %V值之间并非一一对应!采用玻璃电极测量

%V值的原理是’由 %V玻璃电极和参比电极组成化学原电池$参比电极提供一个稳定的电

位%#%V玻璃电极的电位与被测液体的%V值之间符合能斯特公式’

3&3B21*7B1.#%+

. %@A

式中"3***%V玻璃电极和参比电极的电位差&3B***对一个确定的电极为一固定的常数&#***克分子气体常数&+***被测液体的绝对温度&.***法拉第常数&%V***被测液体的%V值!

%V玻璃电极和参比电极的电位差与被测液体的 %V值成比例!由于上述电位差随被测

液体的绝对温度呈线性变化#所以必须进行温度补偿#才能确保所测 %V值的精度!比较简单

实用的方法是在采样被测液体的%V值的同时采集被测液体的温度#在单片机内部#根据液体

温度的高低#对所测量的%V值经转换得到的数字量进行数字补偿!所以#一般的 %V仪表都

(+11(

Page 230: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

会同时提供液体温度显示!消除了温度的影响#%V值与经过传感器)变送器的电信号之间成

正比!这时#可以采用一点校正$测量一种已知%V值的标准试剂%或两点校正$测量两种不同

%V值的标准试剂%的方法#得到实际%V值与上述电信号大小之间的直线方程!通过 ,)-转

换器转换经由传感器)变送器的电信号#由 ,)-转换结果#通过上述公式计算#就可以得到被

测液体的%V值!通过上述分析可知’使用玻璃电极测量液体的 %V值时#需要使用玻璃电极和温度传感

器!

7*过程输入通道

$+%开关量输入

在药液槽中需要安装液位传感器#当液位低于一定程度时报警#通知工作人员药水将要用

完#需要配药补液!液位传感器是一种开关量传感器#可以是常开型或常闭型!如果选择常开

型#则有药水时开关打开&药水液面达到或低于液位传感器时#开关闭合!该传感器经电平匹

配后直接送入单片机的端口#其电路比较简单!$1%模拟量输入

模拟量输入通道包括两路!一路是现场液体的%V值经传感器$玻璃电极%和变送器的模

拟量输入通道#一路是用于温度补偿的现场液体的温度值经传感器$集成温度传感器%和变送

器的模拟量输入通道!前者是主要和精确的&后者是为前者服务的#精度要求不高!由于水的

温度变化范围为Bl D+BBl#假定精度要求为B*!l时#需要1BB个数字量表示#故选用J位

的,)-转换器即可&%V值介于BD+2%V之间#测量精度为B*B+%V#则需要+2)B*B+4+2BB个数字量#故应选取用++位的,)-转换器#实际选用+1位或+1位以上的,)-转换器!由于

%V值的变化速度很慢#几分钟采样一次就能满足要求#所以温度与 %V值的 ,)-转换可以通

过多路模拟开关共用一片,)-转换芯片#分时进行模)数转换!

2*执行机构及过程输出通道

为了达到良好的控制效果#目前%V控制多数采用计量泵计量加药的方法’由电机带动计

量泵#电机采用三相异步交流电机#交流电机的转换正比于加药量&通过控制交流电机转速的

方法#达到控制%V值的目的!""三相异步电机转速由变频 器 控 制!变 频 器 又 称 为 逆 变 器#其 内 部 结 构 如 图E*+1所

示!"变频器的生产厂家很多#例如富士电机的 9;MX++G系列"三菱公司的 9;N9!BB系列#西

门子公司的:Sc<Q5>?’=<22B系列等!变频器的内部结构与工作原理大同小异#本书以富士电

机公司的9;MX++G系列为例介绍!三相电源由;"G"/端子引入#由U"3" 端子引出至三相异步电动机!变频器的输出频率可以采用以下两种方式控制’是采用键盘面板操作控制方式#如图

E*+7$>%所示&二是采用控制电路端子操作控制方式#如图E*+7$W%所示!$+%键盘面板操作控制方式!在此控制方式下

! 电机的正反转由跳接线控制#当 9 -端子与8:端子短接时#电机正转&当 ;F3端子

与8:端子短接时#电机反转!

(111(

Page 231: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图E*+1"9;MX++G变频器结构

图E*+7"变频器的输出频率控制方式

(711(

Page 232: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

""! 电机的转速由键盘面板上的向上和向下两个键调整#当按下向上键时#逆变器输出频

率提高#电机转速增加&当按下向下键时#逆变器输出频率降低#电机转速下降!$1%控制电路端子操作控制方式!在此控制方式下

! 电机的正反转在变频器外部由开关量控制的继电器触点控制#当继电器吸合"常开触

点闭合时#9 -端子与8:端子短接#电机正转!! 电机转速控制可以有以下四种方式’+%通过外接频率设定电位器控制’在+7"+1"++三个端子上外接一个+D!6!的电位器#

通过调节电位器改变逆变器输出的频率&1%通过外部输入电压控制’在3+端子和++端子$地%间引入一个-8H+BDI+B3的控

制电压#由该电压控制逆变器输出的频率&7%通过外部输入电流控制’在8+"++$地%两端子间引入一个-82D1B5,的控制电流#由

该电流的大小控制逆变器输出频率&2%通过外部开关量控制’控制Y+"Y1"Y7端子 (M或 (99#控制电机工作在多步速度+"

多步速度1"22多步速度E!说明’有些型号的变频器不提供 3+端口#通过开关量输出控制 9 -$正转%端口与

8:$公共端%接通实现正转#或通过开关量输出控制 ;F3$反转%端口与 8:接通实现反

转!"9;MX++G系列变频器频率输出范围为BD2BBVd#分辨率为B*+Vd#对应2BBB个数字量#

所以单片机通过控制决策后的模拟输出可以直接通过变频器的模拟量输入端口控制三相异步

电机的转速#由计量泵改变加药量的大小!由于 9;MX++G频率输出范围为BD2BBVd$分辨

率B*+Vd%#需要2BBB个数字量!所以单片机控制输出的数字量应不低于2BBB个#-),转换

器的分辨率应选择+1位或+1位以上$1+142BO.\2BBB%!此外#由于药槽中的药液是氨和水按一定比例配制的#需要定期启动搅拌电机搅匀#所以

还需要一路开关量输出控制搅拌电机的启)停!综上所述#过程输出通道需要1路开关量输出和+路具有+1位以上精度的模拟量输出#

输出格式为-82D1B5,电流!!*人N机界面的选择与设计

$+%键盘

键盘用以设定)改变工艺参数#例如设定%V值上限"%V值下限"变频器的启动转速"变频

器的最高转速等工艺参数!键盘还用于下达控制命令#例如控制电机启)停"召唤打印"切换显

示"进入设置菜单等!设计键盘时#键盘按键的个数应尽可能少!涉及到BDO十个数字量的设定时#并非一定

要安排十个按键#目前绝大多数应用系统中都采用辅以显示的方法#仅靠上下两个键就能够设

定显示闪烁处的数字量#就像K8-拨码盘一样#靠左右两个键#选择要改变的前一个或后一个

数字#利用闪烁显示表明该位数字处于改变状态!此外还需要参数设置"启)停控制"手)自动

切换"显示切换"召唤打印"确认共.个功能键#合计+B个按键即可!$1%显示

显示的主要任务是显示当前工作状况#例如检测采样的 %V值以及控制输出$电机转速%值#显示设定值等!根据需要#要显示的数据有以下四种形式’

! 运行时#需要显示当前%V值#格式为LYY*YY$!位%#变频器的输出频率$百分比%#格(211(

Page 233: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

式为UYY*YY$!位%#共计需要+B位数码显示&! 设定时#需要显示当前设定哪个参数$,Y%以及该参数的值$YYY*YY%#格式为 ,YH

YYY*YY#需要0F-数码管的个数由参数的长度确定#一般不会超过J位&! 显示日期时#需要显示年$2位%"月$1位%"日$1位%#加上分界符1位#共计+B位#格

式为bbbbN::N--&! 显示时间时#需要显示时$1位%"分$1位%"秒$1位%#加上分界符1位#共计J位#格式

为VVN::NGG!因此#使用+B个0F-数码管分时显示上述数据是充分的#另外需要J个 0F-$相当于一

个0F-数码管%显示当前的工作状态#总计需++个0F-数码管!$7%打印

由于发电厂锅炉12j工作#需要定时$例如每半小时%打印一次当前工况#便于事故责任

认定或工作记载!此外当工况异常时#也应该允许召唤打印#以便责任认定时有据可依!所以

根据用户的需要#选择提供打印功能!由于需打印的工况多数为英文"字母或数字#且打印的速度"格式等要求不高#所以绝大多

数工业控制应用领域采用/LN#L系列打印机!该打印机经济实惠#接口比较简单#硬"软件设

计容易#除了J位的数据线外#控制信号只需检测打印机的KUGb即可!综上所述#该系统的总体结构基本设计完成!针对上述基本结构需要对系统的各个单元

电路进一步细化!由于,)-"-),转换器的速度要求不高#所以可以选用串行转换器:,Y+JE和:,Y!7J#降低设备成本!

.*单片机内部资源分配

单片机内部资源分配主要是分配单片机的端口"定时)计数器"中断等内部资源#规定其功

能!在本系统中#单片机内部资源分配约定如下’LB口’数据总线和低J位地址总线复用口&L1口’高J位地址线&L7口’/B用于定时#提供系统时钟##M/B用于J1EO键盘中断请求输入# ;用于写控制#

;-用于读控制&L7口的其他2条口线未用#与L+口的J条口线合计+1条口线用于’! 多路转换器的选择$1条%&! 打印机KUGb检测$+条%&! :,Y+JE的片选数据输出$串行%"时钟$共计7条%&! :,Y!7J的片选"数据输入$串行%"时钟与:,Y+JE复用$共计1条%&! 报警蜂鸣器输出$+条%&! 液位传感器输入$+条%&! 变频器 9 -继电器输出$+条%!定时器B工作在定时方式下#用于系统实时时钟#选择方式1$常数可重装载%#假定单片

机的外接晶振*Q?c4.:Vd#定时器B的最大定时时间为$1JHB%A1#?4!+1#?!设定/B定时

1!B#?#利用计数器计数2B次/B中断就可以累计到+B5?#再设置一个计数器计数+B5?的次

数#计数+BB次累计到+?!尽管目前端口地址没有明确#但是已经不影响硬"软件分组设计了#软件设计者完全可以

(!11(

Page 234: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

借助伪指令进行软件开发!例如#尽管 :,Y+JE芯片的片选8G使用哪个端口还未确定#但可

以假定使用:,Y+JE端口选中:,Y+JE芯片时#执行80;:,Y+JE即可#待硬件设计完成后#知道:,Y+JE的片选实际接到了L+*7端口时#只要在程序前添加一条 :,Y+JEF]UL+*7指

令即可#无须改变已编好的程序!

E*E*7"硬件设计

根据前面的总体结构#进一步确定局部电路!该系统结构如图E*+2所示!

图E*+2"系统结构

图中J1EO用于扩展键盘显示&E20G7E2用于锁存单片机送往打印机的数据&.1.2主要用

于存放待打印的数据&:,Y+JE用于 %V值和温度的 ,)-转换&:,Y!7J用于输出控制量#由于:,Y!7J输出模拟量为电压量#必须经过电压)电流转换成变频器需要的-82D1B5,电流

量!由于篇幅所限本书不能展开介绍#在系统结构图中#绝大部分局部电路的原理图在本书中

都有详细的介绍#读者只要将系统结构图中所涉及到的局部电路+组装,在一起#就可以得到

详实的硬件原理图了!在图E*+2中#本书惟一没有涉及到的芯片是J1EO#它是可管理+.个

0F-数码管显示以及JAJ键阵的键盘"显示接口芯片#使用该芯片的目的在于简化软件设计#读者也可以将J1EO换成本书中介绍的J+!!来管理键盘"显示!

在具体设计时#应该特别注意本章E*1节中六个方面的问题!

E*E*2"软件设计

在软件设计中#一定要先作好规划!首先#要规划好数据#包括在系统开发过程中使用哪

些数据以及这些数据的类型"存放地址"含义说明等!其次#要进行软件任务划分#将软件任务

分解开#明确各自的功能"任务!$+%数据类型规划

单片机内部具有+1J)1!.K的;,:单元#系统中只有一个/B内部中断源和一个#M/B外

部中断源#不允许中断嵌套#选择主程序使用工作区B区#中断服务程序用+区!工作区1区"7区$+BVD+9V%的+.个字节可以挪作它用!

单片机内部数据包括字节变量和位变量#字节变量用于存放各种格式的数据#字节变量数

据类型见表E*+!

(.11(

Page 235: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

表E*+"字节变量数据类型

类别 变量名称 含"义 数据格式 存放地址 备""注

现场

输入

LVHS$采样的 %V值暂存#%V算

术平均滤波值二进制$+1位% $7+V%$7BV%单元 范围’BBBBVDB999V

/HS$采样的温度值暂存#温度

算术平均滤波值二进制$+1位% $77V%$71V%单元 范围’BBBBVDB999V

8,- 串行,)-计数器 二进制 $J位% $72V%计数+1次#将+1位,)-转换

结果移入变量暂存

G,- ,)-转换数据累加器 二进制$+.位% $7.V%$7!V%将J次,)-转换的结果累加#

求平均

控制

输出

3HQ&’决策输出#变频器的模拟

输入二进制$+1位% $7JV%$7EV%单元 范围’BBBBVDB999V

8-, 串行-),计数器 二进制$J位% $7OV%计数+1次#将变量中的+1位

数据移入-),转换器

显示

键盘

打印

-LVHS$ 显示采样的%V值 压缩K8-码 $7KV%$7,V%单元 例如BO*72%V

-3HQ&’ 显示变频器的模拟输入 压缩K8-码 $7-V%$78V%单元 例如 JE*72C

-#GLBD

-#GL+B

++个 0F-数码管对应的

段码

0F-数 码 管 的

段码$2BV%D$2,V% 共++个字节单元

ZKU9当前按键的键盘缓存#保

存键盘的行列值#用于键

分析

二进制$J位% $7FV% *

MU:BD

MU:7数字缓冲器#长度为 2字

节#用于参数设定二进制$J位% $+BV%D$+7V%

因为数字缓冲约定为2字节#

故所有参数长度不能超过 2

字节

LL(#M/打印指针#指向当前存放

在 .1.2;,:单 元 中 待 打

印数据的地址

二进制$+.位% $+!V%$+2V% 地址范围BBBBVD+999V

LKU9打印缓冲#暂存从.1.2中

取出来待打印的数据二进制$J位% $79V% *

参数

设定

/G,: 采样时间$秒% 二进制$J位% $2KV% 最大采样响应时间BD1!!?

/L;M 定时打印时间$分钟% 二进制$J位% $28V% 最大打印响应时间BD1!!5S$

LVV LV控制上限压 缩 K8- 码

$+.位%$2FV%$2-V% 数据格式为’YY*YY$%V%

LV LV控制的要求值压 缩 K8- 码

$+.位%$!BV%$29V% 数据格式为’YY*YY$%V%

LV0 LV控制下限压 缩 K8- 码

$+.位%$!1V%$!+V% 数据格式为’YY*YY$%V%

3V转速高限禁止#防止控制

输出计算数值超过限定

压 缩 K8- 码

$+.位%$!2V%$!7V%

高于设定时#以该值运行#防

止电机超速

30转速低限禁止#防止控制

输出计算数值低于限定

压 缩 K8- 码

$+.位%$!.V%$!!V%

低于设定时#使电机停转#防

止电机长期低速运行

(E11(

Page 236: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$续%

类别 变量名称 含"义 数据格式 存放地址 备""注

参数

设定

3G 电机启动转速设定压 缩 K8- 码

$+.位%$!JV%$!EV% 电机启动的初始速度设定

M,8/ 当前处于哪个设定项 二进制$J位% $!OV% *

ML(#M/当前处于 M,8/设定项的

哪一位数据设定二进制$J位% $!,V% *

实时

时钟

bF,; 年压 缩 K8- 码

$+.位%$+EV%$+.V% 表示YYYY年

:(M/ 月 二进制$J位% $+JV% 表示YY月

-,/F 日 二进制$J位% $+OV% 表示YY日

V(U 时 二进制$J位% $+,V% 表示YY时

:#M 分 二进制$J位% $+KV% 表示YY分

GF8 秒 二进制$J位% $+8V% 表示YY秒

:G +B毫秒计数 二进制$J位% $+-V% 表示YY次+B5?

UG 1!B微秒计数 二进制$J位% $+FV% 表示YY次1!B#?

其他

暂存

""位变量用于存放状态"标志等信息!位变量数据类型见表E*1!表E*1"位变量数据类型

类别 变量名称 含"义 类型 存放地址 备"注

现场

输入

00 药槽液位状态 输入 BBV位$1BV*B% B表示满&+表示空

GG,: 采样时间到 状态 B+V位$1BV*+% +表示真

控制

输出

9 - 变频器的正转控制 输出 B1V位$1BV*1% B表示断开&+表示接通

:#Y 搅拌电机启)停 输出 B7V位$1BV*7% B表示停止&+表示启动

KF00 报警 输出 B2V位$1BV*2% +表示报警

显示

键盘

打印

G;UM 显示当前运行状态 状态 B!V位$1BV*!% +表示真

GbF,; 显示当前年月日 状态 B.V位$1BV*.% +表示真

G/#:F 显示当前时分秒 状态 BEV位$1BV*E% +表示真

G,8/ 显示设定信息 状态 BJV位$1+V*B% +表示真

G-#GL 刷新显示时间到 状态 BOV位$1+V*+% +表示真

GL;M 打印时间到 状态 B,V位$1+V*1% +表示真

其他

""在实际系统开发中#构建上述两种表是非常有益的!一方面#软件开发过程中可以借助伪

指令定位#直接针对变量名编程#便于改变变量的存放地址$仅针对伪指令修改即可%&另一方

(J11(

Page 237: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

面#便于明确不同变量的数据类型!因为数据类型的不同#处理的方法也不同!比如#在实时

时钟中断服务程序中#处理秒计数I+#并判断是否加到+5S$时#存放秒的变量 GF8的数据类

型如果是压缩K8-码#其程序如下’"":(3"",#GF8""""""&将秒单元内容送累加器

"",-- ,#‘+ &累加器I+""-, , &十进制调整

""8_MF ,#‘.BV#;;FG &如果,+.B?#转现场恢复

"":(3 GF8#‘B &到+5S$#秒清B"":(3 ,#:#M &分送累加器

"",-- ,#‘+ &分I+""-, ,

11

如果GF8的数据类型是二进制的话#其程序如下’"":(3 ,#GF8""#M8 ,""8_MF ,#‘.B#;;FG"":(3 GF8#‘B"":(3 ,#:#M""#M8 ,

很显然二者的处理是不完全一样的!当程序比较大"逻辑相对复杂的情况下#即使是一个

有经验的开发者也需要手头常备这一数据字典!随着软件开发的深入#这一字典需要适时调整!所以#在字典中应留有一定的空间#以便

添加一些新的变量!表E*+和表E*1将该系统设计中绝大多数可能涉及到的变量都罗列其

中!在单片机应用系统中#不可避免地要使用堆栈#本系统将堆栈放到了.BVDE9V地址空

间!在初始化程序中执行一条:(3 GL#‘!9V指令即可!从表面上看#如果使用!+子系列单片机#其内部;,:单元已经基本都被分配了!而实际

上#地址单元1BVD19V的+.个字节$1!.个可寻址位%不可能全部被占用#未被占用的单元

仍可以挪作字节变量使用&如果片内+1JK不够用#就需要考虑使用!1子系列单片机了!!1子系列单片机中高+1JK;,:使用不太方便#因为只能使用h;S间址寻址方式访问高+1JK地址单元!

$1%软件任务划分

在软件任务划分时#要约定好主程序"中断服务子程序"事务处理子程序等要完成的任务"功能等!具体分析如下’+%主程序!主程序的任务主要是监控"任务分析和调度执行功能模块!其软件流程图如

图E*+!所示!1%中断服务子程序!在本系统中#中断来源于外部键盘中断和内部定时中断#内部定时

中断服务子程序的任务主要是完成实时时钟#判定定时时间是否已经到#进行简单的处理后构

建任务#并将任务留到主程序中处理!/B定时中断服务子程序流程图如图E*+.所示!7%事务处理子程序!事务处理包括采样"打印"设定"显示等具体的要完成的任务#是软

件设计中任务量最大的部分#下面分别简单介绍如下!(O11(

Page 238: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

,--

,--

,--

,--

.////////

.////////,--

图E*+! 主程序程序流程

入口

初始化

有事件

事务处理

判断事件

b

M

图E*+."/B定时中断服务子程序

该 应 用 系 统

中#事件无外乎由

以 下 7个 方 面 引

发’第一#由外部过

程$工 艺 过 程%引

发#第二#由外部事

件引发#第三#由单

片机内部引发!外部过程主要

是在控制流程的整

个过程中可能涉及

到的所有任务#包括’采样$开关量和模拟量%"数字

滤波以及控制决策"控制输出三个最基本的事务!其中启动采样任务分两种情况’其一#系统当前不处

于运行态#由于按下启动键#系统状态转入运行状

态&其二#系统当前已经处于运行态!如果是前者#需要立即启动采样程序采样#后者则需要等待采样

周期到#具体由/B$定时器%定时#一旦采样时间到#就启动采样程序#采样子程序流程如图 E*+E所示!采样结束#启动控制决策#运行控制算法程序#控制

决策子程序流程如图E*+J所示!控制决策结束#启动控制输出程序!控制输出结束等待下一次采样时

间到#周而复始#循环不断!

开始

,采样/和%V$J次%

,算术平均滤波

,%V值计算

,清除采样任务#构建决策任务

图E*+E"采样子程序流程

外部事件在本系统中主要是外部中断"刷新显

示等要求!刷新显示有可能是两种情况引发的’第

一#由于按下功能键!例如当前处于设定状态时#显示的内容为某一参数的设定值#按下运行键后#显然

显示的内容要更新为显示当前采样的 %V值和控制

输出值&第二#由于定时到+?时会使系统时钟发生变化#在当前显示为系统时钟的前提下#定时到+?会引发显示刷新事件!外部事件中最多也是最复杂的事件是由于键盘按键引发的#每一个按键在不同的条件"不同时刻引发的事件不同#处理的方法各异#程序也最难编制#本系统

(B71(

Page 239: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

涉及到的按键功能见表E*7!

(+71(

Page 240: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

图E*+J"控制决策子程序流程

表E*7"按键功能

按键名称 当前状态 状态转移 功""能

设定非设定状态 设定状态

"指向第一个工艺参数#相应更新数字W&@@=<和显示内容为设定显示#选定修改其

第一位数字

设定状态 设定状态 "不执行操作#不改变当前参数

确认

非设定状态 不改变 "不执行操作

设定状态 设定状态"将数字W&@@=<中的数据转换成相应格式#回存到当前设定参数单元#指向下一个

工艺参数#更新显示#选定修改其第一位数字

运行非运行状态 运行状态 "启动采样程序#待采样"决策"控制输出结束后#更新显示内容为运行显示

运行状态 运行状态 "不执行操作

切换

显示

非运行状态 不改变 "显示内容按年月日"时分秒二者切换

运行状态 不改变 "显示内容按年月日"时分秒"运行显示三者切换

手动)自动 任意 不改变 "手动"自动二者切换

上箭头 设定 设定 "指向前一个工艺参数#相应更新数字W&@@=<和显示内容#选定修改其第一位数字

下箭头 设定 设定 "指向下一个工艺参数#相应更新数字W&@@=<和显示内容#选定修改其第一位数字

左箭头 设定 设定 "设定选定的工艺参数中某一位的前一位数字

右箭头 设定 设定 "设定选定的工艺参数中某一位的后一位数字

""只要将上述事件逐一分析清楚#任务明确#程序设计就容易了&反之#如果事件定义模糊#任务分解不够明确#很容易造成大量的返工!

内部事件在本系统中主要是内部定时中断#该部分内容已经在中断服务中介绍了#这里就

不介绍了!设计完成之后#应根据前述章节#注意生产过程"调试"安装的各个环节#把好质量关#使得

开发的产品可靠"有效!

习$题$E

E*+"简述单片机应用开发的基本过程!

(171(

Page 241: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

E*1"总体设计的任务有哪些)用户需求分析与软件设计中的需求分析有哪些差异)E*7"在硬件设计中#主要解决的问题有哪些)任务完成后要形成哪些文档)E*2"硬件设计中要注意哪些问题)如何解决)E*!"针对干扰的传播途径#有哪些抑制措施)E*."如何提高系统的保密性)具体方法有哪些)E*E"软件设计中主要完成哪些任务)采用模块化设计有何优点)E*J"采用中断的方法编写系统时钟程序!E*O"在子程序或中断服务子程序中#能否执行改变GL内容的操作#为什么)E*+B"+测试某个运算操作的子程序的正确性时#采用随机的一组数据进行测试#如果运算结果正确#说

明该子程序编写正确&如果运算结果错误#说明该子程序编写错误,这句话对吗)为什么)E*++"简述单片机软硬件联调的基本方法和过程!E*+1"单片机开发过程需要使用哪些仪器$工具%)其作用分别是什么)

(771(

Page 242: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

第J章"常用单片机简介

随着单片机应用领域的不断拓展#单片机的需求量大幅攀升#单片机厂商也不断推出更多

新型的单片机以满足日益增长的单片机应用需求#单片机的系列和型号飞速增长#呈现出欣欣

向荣的景象!本章主要介绍目前常用的单片机系列产品#包括 #$’=P公司的 :8GNO.)OJ系列":Sc<QcjS%公司的L#8+."+E系列":Q’Q<QP>公司的.J系列以及其他单片机!

J*+"!,-./’()0O."OJ系列单片机

#$’=P公司的:8GNO.)OJ系列单片机是继 :8GN!+之后推出的+.位的单片机#包括O.子

系列和OJ子系列#其中O.子系列为+.位单片机#OJ子系列为准+.位单片机$片内+.位#片外J位%!:8GNO.)OJ系列单片机在硬件及指令系统设计上与 :8GN!+系列的J位单片机相

比有许多不同之处#例如8LU采用寄存器N寄存器结构#外部数据总线宽度可控#片内有 ,)-转换器等!

J*+*+"’()0O.系列单片机的总体结构

:8GNO.系列单片机的总体结构框图如图J*+所示!从图中内容可知#:8GNO.系列单片

机由8LU"片内;(:"片内 ;,:"高速 #)(口"并行 #)(口"串行 #)(口"定时器",)-和 -),转换器等部分组成!

图J*+":8GNO.系列单片机内部结构框图

(271(

Page 243: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

J*+*1"’()0O.系列单片机的基本组成部分

+*中央处理器

:8GNO.的中央处理器由寄存器算术逻辑单元 ;,0U"寄存器阵列"指令寄存器和控制单

元等部分组成!与:8GN!+系列单片机不同#:8GNO.系列单片机的8LU中没有累加器!寄存器算术逻辑单元;,0U是中央处理器中的核心器件#用来完成算术逻辑运算#由于

8LU中没有累加器#;,0U将直接对寄存器阵列进行各种算术逻辑操作!这样#数据不必在累

加器中进进出出#从而提高了运算速度!寄存器阵列实际上就是片内 ;,:#共有171个字节#可以按字节"字或双字存取#其中的

任何一个单元均可以为;,0U所用#使用起来灵活方便!

1*存储器

:8GNO.系列单片机的存储器分为程序存储器和数据存储器两部分#但与 :8GN!+系列单

片机不同#:8GNO.单片机采用程序存储器与数据存储器统一编址的普林斯顿结构!其存储器

的总容量为.2ZK#存储器地址空间分配如图J*1所示#:8GNO.存储空间中各部分的功能如表

J*+所示!外部存储器

或#)(

内部程序存储器;(:

工厂测试码

中断矢量

L2口

L7口

外部存储器

或#)(

内部;,:

寄存器阵列

堆栈指针

中断寄存器

$按数据存储器访问时%

9999V

2BBBV7999V

1BJBV1BE9V

1B+1V1B++V

1BBBV+999V

+99FV+99-V

B+BBV

BB99V

BBBBV

外部存储器#保留给 #$’=P开发

系统使用

$按程序存储器访问时%

BB99V

BBBBV

图J*1":8GNO.存储空间分配

表J*+"’()0O.存储空间中各部分的功能

地址范围 功能说明

BBBBVDBB99V"内部;,:#包括寄存器阵列和专用寄存器#这部分地址所覆盖的外部

存储器保留给#$’=P开发系统使用

B+BBVD+99-V和2BBBVD9999V 外部存储器和#)(使用#可配FL;(:或数据存储器;,:+99FVD+999V 专为L7口和L2口使用

1BBBVD1B++V 中断矢量

1B+1VD1BE9V 工厂测试码

1BJBVD7999V 内部程序存储器;(:#其中的1BJBV为系统复位入口

(!71(

Page 244: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

7*输入)输出##)($口

:8GNO.单片机定义了!个J位 #)(口 LBDL2#其中 LB口只能作为输入口使用#并且有

数字信号输入和模拟信号输入的复用功能&L+口为准双向输入输出口#称其为准双向输入输

出口是因为在作为输入口使用之前#必须先对此口写+&L1口为多功能输入)输出口#其中

L1*BDL1*!具有复用功能#可作为控制信号使用&L7口和L2口既可作为准双向口使用#也可

作为系统总线使用#当作为系统总线使用时#L7口为低J位地址数据复用总线,-BD,-E#L2口为高J位地址数据复用总线,-JD,-+!!

2*总线

:8GNO.系列单片机的总线包括8LU总线$内部总线%和系统总线$外部总线%两部分!8LU总线由J位地址总线,NKUG和+.位数据总线-NKUG组成#用于实现8LU内部各部

分间的信息交换!系统总线包括控制总线和地址)数据总线#根据应用场合的不同#地址)数据总线可以有两

种情况’一是地址总线和数据总线全部是+.位#二是地址总线+.位#数据总线J位!

!*中断系统

:8GNO.系列单片机的中断系统共有O种中断源#其中的J种可供用户使用#系统在存储

器中为每种中断分配了两个字节#用于存放相应中断的中断服务子程序入口地址$中断矢

量%!:8GNO.系列单片机的中断源"中断矢量和优先级如表J*1所示’

表J*1"’()0O.系列单片机的中断源!中断矢量和优先级情况

中断源中断矢量地址

高字节地址 低字节地址优先级

软件中断 1B++V 1B+BV 不用

外部中断 1BB9V 1BBFV E$最高%

串行口中断 1BB-V 1BB8V .

软件定时器中断 1BBKV 1BB,V !

高速输入B$VG#*B%中断 1BBOV 1BBJV 2

高速输出VG(中断 1BBEV 1BB.V 7

高速输入数据有效中断 1BB!V 1BB2V 1

,)-转换完成中断 1BB7V 1BB1V +

定时器溢出中断 1BB+V 1BBBV B$最低%

J*+*7"’()0O.系列单片机的指令系统

+*操作数类型

:8GNO.系列单片机支持的操作数类型有以下七类’(.71(

Page 245: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

!字节#范围在BD1!!之间的J位无符号数&!字#范围在BD.!!7!之间的+.位无符号数&!双字#范围在BD171H+之间的71位无符号数&!短整数#以补码表示的J位带符号整数#范围为H+1JDI+1E&!整数#范围在H71E.JDI71E.E之间的+.位带符号整数&!长整数#范围在H17+DI17+H+之间的71位带符号整数&!位#仅占一个二进制位#取值为B"+两种情况!

1*寻址方式

:8GNO.系列单片机共有J种寻址方式#其中.种为基本寻址方式#它们是寄存器直接寻

址方式"间接寻址方式"自动增量间接寻址方式"立即寻址方式"短变址寻址方式和长变址寻址

方式&另外1种为派生寻址方式#它们是零寄存器寻址方式和栈指针寄存器寻址方式!由于

:8GNO.系列单片机具有丰富的寻址方式#使得用户在编程和数据处理时有较大的灵活性!

7*指令格式

:8GNO.系列单片机的汇编语言的指令格式如下’操作码 -操作数+-#操作数1-#操作数7...

即在一条指令中操作码是必须的#操作数可以没有#最多情况下#有三个操作数#在指令格式这

一点上#:8GNO.系列单片机与:8GN!+系列单片机基本一致!

2*指令系统

:8GNO.系列单片机的指令系统具有丰富的指令#其指令操作码可达+BB条#与寻址方式

结合后#可以实现强大的运算及处理功能!:8GNO.系列单片机的指令系统按功能可分为算术

逻辑运算类指令"数据传送类指令"转移类指令"专用控制类指令和规格化类指令!:8GNO.系列单片机指令最短执行时间为2个状态周期#最长执行时间为7J个状态周期!

当系统的时钟频率为+1:Vd时#指令执行时间在+DO*!#?之间!:8GNO.系列单片机的指令系统与:8GN!+系列单片机的指令系统相比#其指令的数量更

多#功能更强#可以进行J位和+.位数据操作#对于某些乘法"除法和移位操作#还可支持71位数据!

由于具有丰富的指令资源#设计者可以在 :8GNO.系列单片机应用系统中编制较为复杂

的程序#实现强大的控制功能!

J*+*2"’()0O.系列单片机的片内接口

:8GNO.系列单片机所提供的片内接口#包括高速输入输出口"串行输入输出口"模)数转

换器等!

+*高速输入)输出口

:8GNO.系列单片机的高速输入输出口包括高速输入单元VG#和高速输出单元 VG(!其

+高速,的含义是这个部件的工作只与内部的定时器有关#与定时器同步#而不用 8LU干预!VG#的功能是用来记录某外部事件的触发时刻和状态!VG(的功能是在特定时刻触发一个或

(E71(

Page 246: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

多个事件的信号#例如#可以输出脉冲宽度调制信号 L :!

1*串行输入)输出口

:8GNO.系列单片机有一个全双工串行口#此口与:8GN!+系列单片机的串行口是相互兼

容的!与:8GN!+系列单片机类似#:8GNO.系列单片机的串行口也有2种工作模式!与:8GN!+系列单片机串行口的不同之处在于:8GNO.系列单片机的串行口具有一个专用的波特率发

生器#这样VG#"VG(和定时器的功能不受影响!

7*定时器

:8GNO.系列单片机具有两个+.位定时器 /+和 /1#另外还有一个特殊定时器***监视

定时器!定时器+是一个+.位的计数器#其时钟信号来自内部时钟发生电路#每J个状态周期计

数器加+#当计满时#能触发一个中断!定时器+在系统中作为实时时钟使用#此定时器一直

在循环计数#任何时候都可以进行读取#只有系统复位时才能使其停止工作!定时器1也是一个+.位的计数器#与定时器+的不同点在于#定时器1计数脉冲不是来

自系统时钟#而是来自VG#引脚的输入跳变#因此#定时器1在单片机系统中的功能是用来对

外部事件定时!监视定时器的功能是使系统在出现故障时能够自动恢复!

2*模)数转换器和数)模转换器

:8GNO.系列单片机的部分产品中有一个+B位的逐次逼近型 ,)-转换器#每JJ个状态

周期$当时钟频率为+1:Vd时#需要11#?%完成一次转换!:8GNO.系列单片机可以通过脉冲宽度调制器或高速输出口VG(提供脉冲宽度调制输出

信号#即 L :信号!L :信号经平滑滤波后#可以得到与数字信号对应的模拟信号#因此#又可称为-),转换器!

J*+*!"’()0O.系列单片机的主要产品

#$’=P公司于+OJ1年和+OO!年推出了+.位的 :8GNO.系列单片机#其主要产品如表J*7所示#其中模拟型内部含,)-转换!

表J*7"’()0O.系列单片机产品

类型 程序存储器 .J引脚 2J引脚

数字型#)(

无;(: JBO. JBO2

JZK;(: J7O. J7O2

JZKFL;(: JEO. JEO2

模拟型及

数字型#)(

无 ;(: JBOE JBO!

JZK;(: J7OE J7O!

JZKFL;(: JEOE JEO!

(J71(

Page 247: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

J*1"1!(系列单片机

J*1*+"1!(系列单片机产品及特点

+*引言

当今单片机厂商众多#产品性能各异!针对具体情况#如何选择单片机的型号呢)首先#要区分两个基本概念’复杂指令集8#G8$8Q5%P=f#$?’<&c’SQ$G=’8Q5%&’=<%和精简指令集;#G8$;=g&c=g#$?’<&c’SQ$G=’8Q5%&’=<%!采用8#G8结构的单片机数据线和指令线分时复用#其指

令丰富#功能较强#但取指令和取数据不能同时进行#速度受限#价格亦高&采用 ;#G8结构的

单片机数据线和指令线分离#这使得取指令和取数据可同时进行#且由于一般指令总线宽于数

据总线#使其指令较同类8#G8单片机指令包含更多的处理信息#执行效率更高#速度亦更快!同时#这种单片机指令多为单字节#程序存储器的空间利用率大大提高#有利于实现超小型化!属于8#G8结构的单片机有#$’=P公司的JB!+系列":Q’Q<QP>公司的:.JV8系列",’5=P公司的

,/JO系列"台湾^S$WQ$g$华邦%公司 EJ系列"荷兰 LSPS%?公司的 L89JB8!+系列等&属于

;#G8结构的有:Sc<QcjS%公司的L#8系列"eSPQR公司的 eJ.系列",’5=P公司的 ,/OBG系列"韩国三星公司的ZG!E8系列2位单片机"台湾义隆公司的 F:NEJ系列等!一般来说#控制关

系较简单的场合如小家电#可以采用;#G8型单片机&控制关系较复杂的场合#如通信产品"工业控制系统应采用8#G8单片机!不过#随着 ;#G8单片机的迅速完善#其佼佼者在控制关系

复杂的场合也可以得到应用!根据程序存储方式的不同#单片机可分为 FL;(:"(/L$一次可编程%"]/L$掩膜%三种!

我国一开始都采用;(:P=??型单片机$片内无;(:#需片外配FL;(:%#对单片机的普及起了

很大作用#但这种强调接口的单片机无法广泛应用#如果单片机的应用一味强调接口#外接 #)(及存储器#那么就会失去单片机的特色!目前单片机大多将程序存储体置于其内#给应用带

来了极大的方便!

1*L#8系列单片机的优势

L#8系列单片机具有独特的结构和较高性能价格比以及容易掌握精简的指令集等优势#具体表现在如下八点!

$+%应用功能的完善

图J*7"L#8+18!BJ单片机外型

L#8最大的特点是不搞单纯的功能堆积#而是从实际出

发#重视产品的性能与价格比#靠发展多种型号来满足不同层

次的应用要求!就实际应用而言#不同的应用对单片机功能和

资源的需求也是不同的!比如#一个摩托车的点火器需要一个

#)(较少#;,:及程序存储空间不大#可靠性较高的小型单片

机#若采用2B脚且功能强大的单片机#不但投资大#而且使用

起来也不方便!L#8系列从低到高有几十个型号#可以满足各

种需要!其中#L#8+18!BJ单片机仅有J个引脚#是世界上最

小的 单 片 机#外 观 如 图 J*7所 示!该 型 号 单 片 机 有 !+1K(O71(

Page 248: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

;(:"1!K;,:"+个J位定时器"+根输入线"!根#)(线#这样的一款单片机在类似摩托车点

火器的应用场合无疑是非常适合的!L#8系列单片机的高档型号#如 L#8+.8E2$还不是最高

档型号%有2B个引脚#其内部资源为2ZK;(:"+O1K;,:"J路 ,)-"7个J位定时器"1个

88L模块"7个串行口"+个并行口"++个中断源"77个#)(脚!这种单片机完全可以和其他品

牌的高档型号单片机媲美!$1%执行效率的提高

L#8系列J位8:(G单片机具有独特的 ;#G8结构#数据总线和指令总线分离#使指令具

有单字长的特性#且允许指令码的位数可多于J位的数据位数#这与传统的采用 8#G8结构的

J位单片机相比#可以达到1r+的代码压缩#速度提高2倍!$7%产品上市零等待$e=<Q/S5=’Q:><6=’%采用L#8的低价(/L型芯片#可使单片机在其应用程序开发完成后立刻使该产品上市!$2%优越的开发环境

(/L单片机开发系统的实时性是一个重要的指标#像普通的 :8GN!+系列单片机的开发

系统大多采用高档型号来仿真低档型号#其实时性不尽理想!L#8在推出一款新型号的同时

推出相应的仿真芯片#所有的开发系统由专用的仿真芯片支持#实时性非常好#仿真结果与实

际运行结果基本相同!$!%很强的引脚防瞬态能力

通过限流电阻可以接至11B3交流电源#可直接与继电器控制电路相连#无须光电耦合器

隔离#给应用带来极大方便!$.%特殊的保密方式

L#8单片机以保密熔丝来保护代码#用户在烧入代码后熔断熔丝#无法将代码读出#除非

恢复熔丝!目前#L#8采用熔丝深埋工艺#恢复熔丝的可能性极小!$E%自带看门狗定时器

可以用来提高程序运行的可靠性!$J%睡眠和低功耗模式

虽然L#8在这方面已不能与新型的/#N:GL27B相比#但在大多数应用场合还是能满足需

要的!

7*:Sc<QcjS%公司的L#8系列单片机主要特点

L#8J位单片机具有指令数量少#执行速度快等优点#其主要原因是 L#8系列单片机在结

构上与其他单片机不同!该系列单片机引入了原用于小型计算机的双总线和两级指令流水结

构!这种结构与一般采用8#G8$复杂指令集计算机%的单片机在结构上是有差异的!$+%双总线结构

具有8#G8结构的单片机均在同一存储空间取指令和数据#片内只有一种总线!这种总线

既要传送指令又要传送数据#如图J*2$>%所示!因此#8#G8结构的单片机不可能同时对程序

存储器和数据存储器进行访问!所以具有这种结构的单片机#只能先取出指令#再执行指令

$在此过程中往往要取数%#然后#待这条指令执行完毕#再取出另一条指令#继续执行下一条!这种结构通常称为冯(诺依曼结构#又称普林斯顿结构!

L#8系列单片机采用了一种双总线结构#这种结构有两种总线#即指令总线和数据总线!这两种总线可以采用不同的字长#如L#8系列单片机是J位机#所以其数据总线当然是J位!

(B21(

Page 249: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

但低档"中档和高档的L#8系列机分别有+1位"+2位和+.位的指令总线!这样#使用指令总

线取指令#使用数据总线取数据#互不冲突!这种结构如图J*2$W%所示!指令总线为什么不用J位#而要增加位数呢)这是因为指令的位数越多#则每条指令包含

的信息量就越大#这种指令的功能就越强!一条+1位"+2位或+.位的指令可能会具有两条J位指令的功能!因此#L#8系列单片机的指令与 8#G8结构的单片机指令相比#指令的总数要

少得多$即;#G8指令集%!

图J*2"单片机两种类型总线示意图

$1%两级指令流水线结构

图J*!"流水线指令取指与执行图

由于L#8系列单片机采用了指令空间和

数据空间分开的结构#使用了两种位数不同的

总线#因此取指令和取数据有可能同时交叠进

行#所以在L#8系列单片机中取指令和执行指

令采用指令流水线结构#如图J*!所示!当第

一条指令被取出后#随即进入执行阶段#这时

可能会从某寄存器取数而送至另一寄存器#或从一端口向寄存器传送等#但数据不会流经程

序总线#而只是在数据总线中流动#因此#在这

段时间内#程序总线有空闲#可以同时取出第

二条指令!当第一条指令执行完毕#就可执行第二条指令#同时取出第三条指令#22如此等

等!这样#除了第一条指令的取出#其余各条指令的执行和下一条指令的取出是同时进行的#使得在每个时钟周期可以获得最高效率!

在大多数微控制器中#取指令和指令执行都是顺序进行的#但在L#8单片机的指令流水线

结构中#取指令和执行指令在时间上是相互重叠的#这样L#8系列单片机才可能实现单周期指

令#只有涉及到改变程序计数器 L8值的程序分支指令$例如 X(/("8,00%等才需要两个周

期!此外#L#8的结构特点还体现在寄存器组上#如寄存器 #)(口"定时器和程序寄存器等都

是采用了;,:结构形式#而且都只需要一个周期就可以完成访问和操作!而其他单片机常

需要两个或两个以上的周期才能改变寄存器的内容!上述各项#就是 L#8系列单片机能做到

指令总数少#且大多为单周期指令的重要原因!

2*:Sc<QcjS%公司的L#8系列单片机的主要产品

由美国:Sc<QcjS%公司推出的L#8系列单片机产品#首先采用了 ;#G8结构的嵌入式微控

制器#其高速度"低电压"低功耗"大电流08-驱动能力和低价位 (/L技术等都体现出单片机

产业的新趋势!现在L#8系列单片机在世界单片机市场的份额排名中已逐年升位#尤其在J位单片机市场#据称已从+OOB年的第二十位上升到目前的第二位!L#8单片机从覆盖市场出

发#已有三种$又称三层次%系列多种型号的产品问世#所以在全球都可以看到 L#8单片机从

(+21(

Page 250: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

电脑的外设"家电控制"电讯通信"智能仪器"汽车电子到金融电子各个领域的广泛应用!现今

的L#8单片机已经是世界上最有影响力的嵌入式微控制器之一!L#8J位单片机产品共有三

个系列#即基本级"中级和高级!$+%基本级系列

基本级产品的特点是低价位#如L#8+.8!Y#适用于各种对成本要求严格的家电产品选用!又如L#8+18!YY是世界第一个J脚的低价位单片机#因其体积很小#完全可以应用在以前不

能使用单片机的家电产品中!$1%中级系列

中级产品是L#8产品中最丰富的品种系列#它是在基本级产品上进行了改进#并保持了很

高的兼容性!外部结构也是多种的#从J引脚到.J引脚的各种封装#如 L#8+18.YY!该级产

品其性能很高#如内部带有,)-转换器"F1L;(:数据存储器"比较器输出"L :输出"#18和

GL#等接口!L#8中级系列产品适用于各种高"中和低档的电子产品的设计中!$7%高级系列

高级系列产品如L#8+E8YY#其特点是速度快#所以适用于高速数字运算的应用场合中#加之它具备一个指令周期内$+.B$?%可以完成JAJ$位%二进制乘法运算能力#所以可取代某

些-GL产品!再有L#8+E8YY具有丰富的#)(控制功能#并可外接扩展FL;(:和;,:#使它

成为目前J位单片机中性能最高的机种之一!所以很适用于高"中档的电子设备中使用!上述的三层次$级%的L#8J位单片机还具有很高的代码兼容性#用户很容易将代码从某

型号转换到另一个型号中!常用的:Sc<QcjS%公司的L#8系列单片机如表J*2所示!

表J*2"常用的’23453627公司的1!(系列单片机

型" 号 管脚程序存储器

$个A位%数据寄存器 #)(端口 说 ""明

L#8+18YYY***2BB$?指令周期#77)7!条指令$每个#)(口 1!5,吸收"驱动电流#内部振荡器%

L#8+18!BJ,NB2)L J !+1A+1 1! . *

L#8+18!BO,NB2)L J !+1A+1 2+ . *

L#8+18.E+NB2)L J +B12A+2 +1J . 2路J位,-8

L#8+18.E1NB2)L J 1B2JA+2 +1J . 2路J位,-8

L#8+.8!Y***1BB$?指令周期#77条指令$每个#)(口1!5,吸收电流"1B5,驱动电流#+个定时器#片内^-/%

L#8+.8!2N;8)L +J !+1A+1 1! +1 *

L#8+.8!28NB2)L +J !+1A+1 1! +1 *

L#8+.8!!N;8)GL 1J !+1A+1 12 1B *

L#8+.8!.N;8)L +J +B12A+1 1! +1 *

L#8+.8!E8NB2)GL 1J 1B2JA+1 E1 1B *

L#8+.8!J,NB2)L +J 1B2JA+1 E7 +1 *

L#8+.8YYY***2D+1个中断#1BB$?指令周期#7!条指令#L#8+.8!Y向上兼容$每个 #)(口1!5,吸收"驱动电流#片内

^-/%

L#8+.8!!2NB2)L +J !+1A+2 JB +7 1*!3#+个定时器

(121(

Page 251: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

型" 号 管脚程序存储器

$个A位%数据寄存器 #)(端口 说 ""明

L#8+.8!!JNB2)L +J 1B2JA+2 +1J +7 1*!3#+个定时器

L#8+.8.1,NB2)GL 1J 1B2JA+2 +1J 11+路捕捉)比较)L :#硬件#18)GL#/:#掉电保护#7个

定时器

L#8+.8.7NB2)GL 1J 2BO.A+2 +O1 111路 捕 捉)比 较)L :#硬 件 UG,;/)#18)GL##掉 电 保

护#7个定时器

L#8+.8.!,NB2)L 2B 2BO.A+2 +O1 77并行从动口#1路捕捉)比较)L :#硬件 UG,;/)#18)

GL##掉电保护#7个定时器

L#8+.8.1BNB2)L +J !+1A+2 JB +7 可编程!;F9#1*!3#1个比较器#掉电保护#+个定时器

L#8+.8.1+NB2)L +J +B12A+2 JB +7 可编程!;F9#1*!3#1个比较器#掉电保护#+个定时器

L#8+.8.11NB2)L +J 1B2JA+2 +1J +7 可编程!;F9#1*!3#1个比较器#掉电保护#+个定时器

L#8+.8E++NB2)L +J +B12A+2 .J +7 2路J位,-8#+个定时器#掉电保护

L#8+.8E+!NB2)L +J 1B2JA+2 +1J +7 2路J位,-8#+个定时器#片内^-/#掉电保护

L#8+.8E1,NB2)GL 1J 1B2JA+2 +1J 11+路捕捉)比较)L :#!路J位 ,-8#硬件 #18)GL##掉

电保护#7个定时器

L#8+.8E2,NB2)L 2B 2BO.A+2 +O1 77并行从动口#1路捕捉)比较)L :#J路J位,-8#硬件

UG,;/)#18)GL##掉电保护#7个定时器

L#8+.8E.NB2)GL 1J J+O1A+2 7.J 111路 捕 捉)比 较)L :#!路 J位 ,-8#硬 件 UG,;/)

#18)GL##掉电保护#7个定时器

L#8+.9J7NB2)L +J !+1A+2 7. +7每个#)(口1B5,驱动电流#9P>?j;(:#.2字节数据

F1L;(:#1*B3工作电压#+个定时器

L#8+.8J2NB2)L +J +B12A+2 .J +7每个#)(口1B5,驱动电流#9P>?j;(:#.2字节数据

F1L;(:#1*B3工作电压#+个定时器

L#8+.8O17NB2)GL .2 2BO.A+2 +E. !1+路捕捉)比较)L :#08-功能块#静态#+)1"+)7"+)2

多种模式#硬件#18)GL##7个定时器

L#8+.8O12NB2)GL .2 2BO.A+2 +E. !1

+路捕捉)比较)L :#08-功能块#静态#+)1"+)7"+)2

多种模式#硬件#18)GL##!路J位,-8#7个定时器#片

内^-/

L#8+E8YYY***+1B$?指令周期$包括乘法%#!J条指令#L#8+.8YYY)L#8+.8!Y向上兼容

L#8+E821,N+.)L 2B 1B2JA+. 171 77每个 #)(口1B5,驱动电流"7!5,吸收电流#1个捕

捉#外 部 扩 展#J位 乘 法 指 令 只 需 +个 周 期#硬 件

UG,;/#2个定时器#片内^-/

(721(

Page 252: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

J*1*1"典型1!(+.系列单片机内部结构

L#8系列J位单片机为适应不同的应用场合#有多种型号可供选用!尽管 L#8单片机有

不同的档次和型号#但其最基本组成则大同小异!因此#这里以 L#8+.8J2单片机为例#讨论

其基本组成!L#8+.8J2是双列直插式$-#L+J%封装#最大时钟频率可达2:Vd!

+*L#8+.8J2的引脚及功能

L#8+.8J2单片机的引脚排列如图J*.所示#图中涉及的引脚符号的含义和功能如下’! (G8+)80Z#M’振荡器晶体输入)外部时钟源输入&! (8G1)80Z(U/’晶体振荡器输出!在晶体振荡器方式同晶体或谐振器相连&! :80;’主复位输入!该引脚低电平有效&! ;,BD;,7’双向#)(口&! ;,2)/(8Z+’双向#)(#可作为/:;B定时器)计数器时钟输入!输出为开路漏极&! ;KB)#M/’双向#)(#也可作为一个外部中断引脚&! ;K+D;K!’双向#)(&! ;K.’双向#)(#串行编程时钟输入&! ;KE’双向#)(#串行编程数据输入&! !??’地&! !--’正电源!

图J*."L#8+.8J2引脚图

1*L#8+.8J2的内部结构及其工作过程

L#8+.8J2虽然体积不大#但仍然是一个完整的计算机#它有一个中央处理器$8LU%"程序

存储器$;(:%"数据寄存器$;,:%和两个输入)输出口$#)(口%#内部结构框图如图J*E所

示!

图J*E"L#8+.8J2内部结构框图

(221(

Page 253: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

与其他型号的单片机一样#8LU是此单片机的核心#它从程序存储器中读取和执行指令!在取指和执行时#还可同时对数据寄存器进行取数!由图J*E可明显看出#程序存储器和数据

存储器各有一条总线与8LU相连!有些 8LU将其内部的寄存器与其外部的 ;,:进行分开

管理#但 L#8单片机不是这样#它的通用数据 ;,:也归为寄存器#称为 9SP=寄存器!在

L8+.8J2中#有.J个字节的通用;,:#其地址范围为B8VD29V!除了通用数据寄存器外#还有一些专用寄存器#其中最常用的工作寄存器为+ 寄存器,!

8LU将工作数据存放在^寄存器中!^寄存器的作用与其他单片机中的+累加器 ,,相似!此外#还有几个专用寄存器#它们以各自的方式控制L#8的运作!

L#8+.8J2的程序存储器由9P>?j$闪速%;(:构成#它可用电来记录和擦除#而在断电时#仍可保留其内容!某些型号的L#8单片机程序存储器用的是 FL;(:#需要用紫外线来擦除&还有一些型号的单片机是一次性可编程$(/L%的产品$一经编程便不能再擦除%!

L#8+.8J2有两个输入)输出口#即,口和K口!每个口的每个引脚可单独设定为输入或

输出!各个口的位序号是从B开始编号的!当,口为输出方式时#其第2位$即;,2%为开路

集电极$或开路漏极%输出#而K口及,口其他各位为常规的全8:(G驱动电路!这些功能必

须注意#否则会在编程时出错!8LU对每个端口都按一个字节J位来处理#但 ,口只有!位

引脚!L#8输入与8(:G兼容#所以L#8输出可驱动 //0或 8:(G逻辑芯片!每个输出引脚可

以流出或吸入1B5,电流#即使一次只用了一个引脚亦是如此!L#8+.8J2还有一些其他功能#如用来长期存放数据的 F1L;(:"定时器)计数器模块等#

由于篇幅所限这里不再一一介绍!

J*7"’5-545/8系列单片机

J*7*+"概述

:Q’Q<QP>公司于+OE2年开始生产:.JBB$J位%微处理器#随后开发了J位的 :.JB+系列

单片机!该系列单片机集成了;(:";,:"并行#)(口"串行口"定时器等功能部件!:LU功

能"指令集与:.JBB兼容!在 :.JB+系列单片机的基础上#:Q’Q<QP>公司针对家用电器控制

等简单的应用场合#进一步降低单片机成本#研制了 :.JB!系列单片机!+OJB年生产了结构

比:.JB!更加简单的 :.JB2系列单片机!+OJ7年采用 V8:(G技术#相继推出了 :.JV8B!和:.JV8B2系列单片机#其结构和功能比原来的 :.JB!和 :.JB2有较大改进#性能更强#速度更快#功耗更低!+OJ2年#:Q’Q<QP>公司在:.JB+的基础上#采用 V8:(G技术#研制出了高性能"J位增强

型:.JV8++系列单片机!:Q’Q<QP>公司的J位单片机主要有以下7个系列’$+%采用V8:(G工艺制造的:.JB!系列&$1%采用V8:(G工艺制造的:.JV8B!系列&$7%采用V8:(G工艺制造"高档的:.JV8++系列!:Q’Q<QP>公司的J位单片机在结构上主要具有以下特点’$+%存储器统一编址!#)(端口",)-转换器以及定时器等的寄存器均与 ;(:";,:一

(!21(

Page 254: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

样#作为一个存储单元寻址&$1%寻址方式丰富!支持位操作#适合控制应用场合&$7%采用向量方式进行中断处理&$2%单片机工作电压范围宽!工作电压可在7D!*!3之间#片内 ;,:数据保持电压甚

至可以低到13&$!%具有串行外围接口GL#$G=<S>PL=<S%j=<>P#$’=<@>c=%!GL#是:Q’Q<QP>单片机独有的串

行接口#它是一种三线串行同步接口#便于多机通信和外围扩展!$.%具有串行通信接口 G8#$G=<S>P8Q55&$Sc>’SQ$#$’=<@>c=%!G8#自带波特率发生器#能

通过;GN171和;GN211标准接口与其他计算机进行长距离通信!$E%部分型号单片机片内含多通道#内建采样)保持器的,)-转换器!$J%部分型号单片机片内含08-驱动电路#能直接驱动08-点阵!+OE2年#:Q’Q<QP>公司开始生产+.位微处理器:8.JBBB#同时推出了+.位的:8.JV8+.

系列单片机!伴随着71位微处理器的研制#:Q’Q<QP>公司推出了71位的 :8.J7BB系列单片

机!:Q’Q<QP>公司的单片机种类繁多#可以满足各种不同的应用需求#具有较高的市场占有

率!由于篇幅所限#本书仅对:Q’Q<QP>公司生产的J位单片机作简单介绍!

J*7*1"’.JB!"’+2.JB!系列单片机

:.JB!系列与 :+2.JB!系列单片机的区别仅在于工艺上不同’:+2.JB!系列采用 8:(G工艺制造#:.JB!系列采用的是V:(G工艺!

:.JB!系列单片机价格低廉#适用于家电类领域!该系列单片机具有J位8LU"+个累加

器"+个J位变址寄存器"+个堆栈指针#通常应用于+最小系统,下!其指令系统为 :.JBB的

子集#在:.JBB的基础上增加了位处理和条件转移指令!:.JB!系列单片机的封装形式有以下三种’1J脚 -#L封装$该系列的多数单片机型号为

此封装形式%"2B脚-#L封装和22脚L088封装!:.JB!系列单片机主要有以下六种类型’$+%L型’1J脚-#L基本型&$1%;型’内含,)-转换器&$7%U型’无,)-转换器的;型&$2%G型’含,)-转换器"GL#"+.位定时器的多功能型&$!%/型’带锁相环型&$.%Z型’含F1L;(:型!表J*!列出了:.JB!系列单片机的主要产品!

表J*!"’.JB!系列单片机主要产品型号表

型号 ;(: F1L;(: ;,: 并行#)( 定时器 串口 ,)- 中断 引脚 备注

.JB!L1

.JB!L2

.JB!L.

+ZK

+ZK

+*JZK

*

.2K

++1K

.2K

1B

1B

1B

J位

J位

J位

* *

7

7

7

1J

1J

1J

1J-#L

基本型

L型

(.21(

Page 255: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

型号 ;(: F1L;(: ;,: 并行#)( 定时器 串口 ,)- 中断 引脚 备注

.JB!;1

.JB!;7

1ZK

7*EZK*

.2K

++1K

71

71

J位

J位* J位A2

2

2

2B)22

2B)22;型

.JB!U11

.JB!U7

1ZK

7*EZK*

.2K

++1K

71

71

J位

J位* *

2

2

2B)22

2B)22U型

.JB!G1

.JB!G7

+*2JZK

7*EZK*

.2K

++1K

1B

1B

J"+.位

+."1AJ位

GL#

GL#

J位A2

J位A2

.

J

1J

1JG型

.JB!/1 1*.ZK * .2K +O J位 * * 7 1J /型

.JB!Z1

.JB!

1ZK

7*.ZK

+1JK

+1JK

.2K

O.K

71

71

J位A1

J位A1

GL#

GL#*

2

2

2B

2BZ型

J*7*7"’.J9(B!系列单片机

:.JV8B!系列单片机有+B余种子系列#+BB多种不同型号#其中8"L子系列为基本型&K子系列具有,)-转换器"F1L;(:等#功能最强&0子系列具有 08-驱动&_"Z子系列功能最

简单#只有+.或1B引脚#价格最低!:.JV8B!系列单片机具有J位8LU"片内含 ;(:或 F1L;(:或 (/L;(:$一次可编程

;(:%"G8#或GL#等功能#具有 -#L"G(#8"]9L"L088等多种封装!表J*.列出了 :.JV8B!系列单片机的主要产品!

表J*."’.J9(B!系列单片机主要产品型号表

型号 ;(: ;,: F1L;(: 定时器 串口 ,)- 引脚 备注

V8B!82

V8B!8J

2ZK

JZK

+E.K

+E.K*

+.位

+.位

G8#)GL#

G8#)GL#*

2B)22

2B)22*

V8B!L1

V8B!L7

7ZK

7ZK

O.K

+1JK +1JK实时时钟

+.位#18 *

71

1J*

V8B!K2

V8B!K.

2ZK

.ZK

+E.K

+E.K 1!.K

+.位

+.位

G8#

G8#

JAJ位

JAJ位

!.)!1

!.)!1L :’1AJ位

V8B!0+ 2ZK +1JK * +.位 * .AJ位 !.).2 .2段 08-

V8B!01 1ZK O.K * +.位 #18 +AJ位 21 2!段 08-

V8B!_+ +ZK .2K * 实时时钟 * * 1B *

V8B!Z+ B*!ZK 71K * 实时时钟 * * +. *

J*7*2"’.J9(++系列单片机

+*:.JV8++概述

$+%概述

:.JV8++系列单片机是:Q’Q<QP>公司J位单片机中功能最强#性能最高#速度最快的单

片机系列产品#其8LU为J位#有1个J位累加器$可组成+个+.位累加器来使用%#有1个

(E21(

Page 256: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

+.位变址寄存器"+个+.位堆栈指针"!个J位并行#)(口"可实现O种功能的+.位定时器系

统"+个串行通信口$G8#%"+个串行外围接口$GL#%"J路J位,)-转换器!其+.位定时器系

统具有三路输入捕捉"五路输出比较以及实时中断功能#一个J位脉冲累加器子系统可以记录

外部事件和内部时钟周期!与其他单片机相比#:.JV8++系列单片机提供了完备的自检功能#其片内的自监测电路

可以防止系统出错&片内专用的看门狗定时系统可以防止软件运行的失效&内部的时钟监测系

统在时钟信号失效或运行速度太低时会产生系统复位信号&片内的非法代码检测电路在检测

到非法代码时产生非屏蔽中断!:.JV8++系列产品目前已有!B多种不同型号#在工业控制"自动化仪表"通信等领域有

广阔的应用前景#其代表产品 :8.JV++,J的主要性能如下’JZK;(:&!+1KF1L;(:&1!.K;,:&+.位定时)计数器#具有2级可编程预分频器"7个输入捕捉和!个输出比较功能&J位

脉冲累加器&2个并行J位和+个并行.位#)(&+个G8#全双工串行通信口#+个GL#串行外围

接口#J路J位含采样)保持器的,)-转换器&实时时钟中断电路&计算机操作正常 8(L监视

系统& ,#/和G/(L低功耗操作方式!$1%指令系统特点

:8.JV8++的指令系统是在:8.JBB和:8.JB+指令系统的基础上增加了O+条新操作码

构成的!:8.JV8++具有E个8LU寄存器!其中1个J位累加器 ,和K在一些指令中可用

来作为一个独立的+.位累加器使用#称为 -寄存器!尽管 :8.JV8++单片机中的 8LU是J位的#但允许进行一些+.位的操作!

$7%:8.JV8++系列单片机主要产品

常用的:8.JV8++系列单片机的主要产品型号如表J*E所示!表J*E"常用的’(.J9(++系列单片机的主要产品型号表

型号 FL;(: ;(: F1L;(: ;,:

:8.JV8++,J * JZK !+1K 1!.K

:8.JV8++,+ * * !+1K 1!.K

:8.JV8++,B * * * 1!.K

:8.JV8++FO * +1ZK !+1K !+1K

:8.JV8++F+ * * !+1K !+1K

:8.JV8++FB * * * !+1K

:8.JV8J++F1 * * 1ZK 1!.K

:8.JV8E++FO +1ZK * !+1K !+1K

:8.JV8++-7 * 2ZK * +O1K

:8.JV8E++-7 2ZK * * +O1K

:8.JV8++9+ * * !+1K +ZK

1*:8.JV8++系列单片机8LU结构

:8.JV8++系列单片机8LU中的寄存器由以下五部分组成!$+%累加器 $,"K和-%累加器,和K是J位通用累加器#用来保存操作数和运算结果!一些指令把这两个J位

(J21(

Page 257: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

累加器合起来作为一个双累加器$累加器-%使用!$1%变址寄存器 $#Y"#b%变址寄存器#Y和#b是用于变址寻址的+.位寄存器!在变址寻址方式中#变址寄存器

#Y或#b的内容加上一个J位偏移量#形成操作数的有效地址!$7%程序计数器 $L8%程序计数器L8是一个+.位寄存器#用来保存将要执行的下一条指令的地址!$2%堆栈指针 $GL%:.JV8++的8LU中有一个+.位寄存器堆栈指针GL#GL可以指向.2ZK地址空间的任意

位置!入栈时#GL自动递减#GL总是指向下一个可用堆栈地址$数据先压入堆栈#随后指针减

+%&出栈时#GL自动递增#GL总是指向下一个要出栈数据的地址!堆栈指令有以下几种’+%LGV,)LGVK’将累加器,或K压栈&1%LU0,)LU0K’将累加器,或K出栈&7%LGVY)LGVb’将变址寄存器#Y或#b压栈&2%LU0Y)LU0b’将变址寄存器#Y或#b出栈&!%#MG’将GL内容加+&.%-FG’将GL内容减+&E%/YG)/bG’将变址寄存器$YH+%或$bH+%放入堆栈指针&J%/GY)/Gb’将堆栈指针加+的内容放入变址寄存器#Y或#b中!:8.JV8++系列单片机在子程序调用)返回时#8LU自动使用堆栈!当执行 _G;或 KG;

指令调用子程序时#8LU自动执行两次入栈指令#保存返回地址#先入栈的是低J位地址#后入

栈的是高J位地址#即堆栈高地址压入的是返回地址的低J位!当发生非屏蔽中断时#除 GL外#8LU中.个寄存器均自动入栈#先后顺序为’L8$低 J

位%"L8$高J位%"#b$低J位%"#b$高J位%"#Y$低J位%"#Y$高J位%"累加器,"累加器K和

LG;!执行中断返回;/#时#自动恢复8LU寄存器的内容!$!%程序状态寄存器 $LG;%程序状态寄存器LG;$L<QR<>5G’>’&?;=RS?’=<%是一个J位寄存器#包含!个状态指示"1

个中断屏蔽位和+个禁止$G/(L%位!:8.JV8++系列单片机在:8.JBB和:8.JB+的基础上

增加了屏蔽位和禁止位!状态标志反映8LU算术和其他运算结果!!个标志位分别是’半进位标志$V%"负标志

$M%"零标志$e%"溢出标志$3%和进位)借位标志$8%!半进位标志$V位%#只用于K8-算术

运算#该标志位受下面指令影响’累加器,与K相加$,K,指令%",--指令和带进位加 ,-8指令!

! V位#半进位标志’表示加法运算时#低2位向高2位有进位!8LU可以借助该标志调

整J位K8-加法运算结果#使之成为正确的 K8-形式!V位受 ,K,",--",-8指令影响#-,,指令根据V位对累加器,中的结果校正#得到正确的K8-形式!

! M位#负标志’表示运算结果是否为负数#该位实际是运算结果的最高位!在二进制补

码运算中#一个数字如果最高位是+#就是负数&如果最高位是B#则是正数!该位除了用于二

进制补码操作外#还可将需要测试的标志位放入寄存器或存储器的最高位#借助测试 M位的

方法来测试该位!(O21(

Page 258: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

! e位#零标志’表示运算结果是否为B!如果运算结果的所有位均为B#e位被置位#否则e位被清除!在比较指令中#e位表示减的结果!操作 #MY"-FY"#Mb和 -Fb只影响 e位

但不影响其他状态标志!! 3位#溢出标志’表示运算结果是否使二进制补码产生溢出#如果溢出#该位置+#否则

该位清零!! 8位#进位)借位标志’在加法运算时表示是否有进位或减法是否有借位!在乘"除运

算时8位作为错误标志!移位和循环移位指令可以带进位位也可以不带进位位!:.JV8++8LU的状态码几乎可以被所有指令自动修改!如加载累加器,$0-,,%指令和

保存累加器,$G/,,%指令自动置位或清除M"e和3标志!不改变状态码的主要的指令有’入栈"出栈"K加到Y$,KY%和K加到b$,Kb%以及+.位

传送和交换指令!! G位#禁止位’用于允许或禁止G/(L指令!G位置位$为+%#表示禁止G/(L命令&G位

清除$为B%#表示允许G/(L命令#8LU执行 G/(L指令会使振荡器停止!但如果用户置位 G位禁止G/(L指令#则8LU遇到G/(L指令将视之为M(L指令#继续执行下一条指令!

! #位#中断请求$#;]%屏蔽位’#位是一个全局屏蔽位#可禁止所有可屏蔽中断源!该位置

位时#禁止所有可屏蔽中断&该位清除时#允许可屏蔽中断!当发生任何中断时#在寄存器压入堆

栈之后#取中断向量之前##位将被自动置位!若#位置位时发生中断请求#该请求将被锁存#一旦中断屏蔽位清B#8LU就会立即处理锁存的中断#所以即使#位为+期间外部中断请求也不会

丢失!中断服务结束#执行中断返回;/#命令#8LU寄存器恢复以前的值##位将自动清B!任何复位之后##位均为+#且只能由软件清B!! Y位#屏蔽位’用于允许)禁止来自Y#;]引脚的中断!该位置位时#禁止来自Y#;(引脚

的中断&该位清除时#允许来自Y#;]引脚的中断!Y#;]中断响应后#在寄存器压入堆栈之后#取中断向量之前#Y位被自动置位!中断服务结束#执行中断返回 ;/#命令#8LU寄存器恢复

以前的值#Y被自动清B!任何复位之后#Y位均为+#且只能由软件清B!

7*:8.JV8++系列单片机的典型应用

:8.JV8++系列单片机的典型应用与:8GN!+系列单片机类似#图J*J给出了其三总线扩

展的原理!

J*7*!"’(.J9(++的片内存储器

:8.JV8++的片内存储器包括;(:";,:和F1L;(:!;(:用来存储程序#有时也存储一些固定的数据#:8.JV8++系列单片机中不同型号单

片机 所 含 ;(:不 同!如 :8.JV8++,J内 含 JZK;(:#:8.JV8++FO内 含 +1ZK;(:#:8.JV8++-7内含2ZK;(:等!对不含片内 ;(:的单片机#用户程序需要存放在扩展的

FL;(:中!;,:用来保存程序运行过程中的临时数据#:8.JV8++系列单片机中不同型号单片机

;,:的空间各不相同!如:8.JV8++,J为1!.K"FO为!+1K等!F1L;(:是该系列单片机独有的特点#对其写入数据或擦除其中的数据均受软件控制#而

且执行写或擦除数据时不需额外编程电源#与 ;(:类似#掉电后数据不会丢失#这种特性对

(B!1(

Page 259: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

于有的系统设计来说是非常有用的#如:8.JV8++,J中包含!+1KF1L;(:!

图J*J":8.JV8++系列单片机三总线扩展原理

+*片内;(:简介

:8.JV8++系列单片机有两种基本操作方式’单片方式和扩展方式#操作方式的选择由复

位时:(-,和:(-K引脚上的电平决定!两个引脚上的电平可以组合成四种方式’普通单

片"普通扩展"特殊自举和特殊测试方式!片内;(:的基本作用是保存用户的应用程序#因为程序和数据写入 :8U后就不能再改

变#所以用户开发"调试好自己的应用程序#向厂家提供定制单片机中需要写入 ;(:的程序

和数据!公司将用户程序转换为照片掩膜#在生产芯片时使用!:Q’Q<QP>首先生产一小批

;(:检验单元#返回给用户检验!经用户确认无误后#才生产完整的:8U!单片机片内;(:可以被8Q$@SR寄存器的;(:(M控制位禁止!所谓无内部;(:的产品

$如:8.JV8++,+%#实际上其内部是有;(:的#只是由于其 8Q$@SR寄存器的 ;(:(M位被清

B#所以片内;(:被禁用了!:8.JV8++,J有两个独立的片内;(:存储器#分别是JZK的用户 ;(:$用来存放用户

程序%和+O1K的引导加载;(:!引导加载;(:与用户;(:是分离的#用于控制特殊自举方

式下的程序加载!在普通操作方式下#引导加载 ;(:被禁止#不占 :8U的.2ZK地址空间!在扩展测试方式下#引导加载;(:可以被允许用于测试#复位后不占存储器地址空间!在特

殊自举方式下#引导加载;(:定位在地址$K92BD$K999#这是复位后的默认状态!复位向

(+!1(

Page 260: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

量在地址$K99F和$K999!引导加载程序还具有保护功能#使用户得以保护 F1L;(:和 ;,:的数据和软件不被窃

取!当保护功能被允许#:8U复位后只能工作在普通单片方式或特殊自举方式下!在这两种

工作方式下#都能够有效地保护用户程序和数据不被窃取!

1*片内;,:简介

:8.JV8++,J片内的1!.K;,:可分布在.2ZK地址空间中任意2ZK开始的存储单元!以下介绍分址方法!

$+%用#M#/寄存器分配地址

默认情况下#片内;,:放在.2ZK存储空间的第一个1!.单元$$BBBBD$BB99%!在多

数情况下#这样安排便于使用片内;,:!片内 ;,:在.2ZK地址空间的位置由 #M#/寄存器

控制!$1%;,:供电的软件保护

在有电池的系统中#备用 ;,:功能提供一种当 :8U不工作时节省电池能量的方法#延长电池的工作时间!通过单片机的掉电检测电路#一旦发现掉电即切换到低电压备用方式#可使:8U系统维持更长的时间!在系统不工作时使;,:内容保持更长时间!

:.JV8++系列片内;,:全是静态的#可以有两种方法保持;,:内容并把系统耗电降到

最低!最简单的方法是用软件的G/(L方式#另一种方法是通过单片机的外接引脚输入备用

电源!由于整个:8U";,:都是静态的#功耗很小!当:8U静止时#只要!--存在#所有8LU寄存器"控制器和#)(寄存器的内容保持不变#为:8U供电的’--只有几毫安!

7*F1L;(:简介

:8.JV8++,J是第一个内含8:(G型 F1L;(:的 :8U!!+1KF1L;(:可以与 ;(:同

样使用#但它具有;(:和;,:不具备的功能!由于对F1L;(:的编程和擦除的电源采用了

由!--驱动的片内升压泵#所以不需要外部提供特殊电源!:8.JV8++,J除了!+1KF1L;(:之外#还有+KF1L;(:$8Q$@SR寄存器%#控制 :8U的

一些基本功能!:.JV8++系列的其他产品具有不同数量的 F1L;(:#例如 :8.JV8J++,J具

有J*!ZKF1L;(:!

J*2"其他单片机

,-&8J+1是,-公司最新推出的带J路+1位,-8"1路+1位-,8#片内含JZK9P>?j与

JB!+指令兼容的高性能单片机#其主要特性如下!$+%提供了模拟量输入输出口

! 单片机内含J路+1位高精度,-8$,)-转换器%&! 片内含2%%5)l的电压基准&! 高速率’转换速度1BB6?%?&! 高速,-8N;,:的-:,控制器&! 两路+1位-,8输出$-),转换器%&! 片内温度传感器!(1!1(

Page 261: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

$1%存储器

! JZK片内9P>?j)F1L;(:程序存储器&! .2BZK片内9P>?j)F1L;(:非易失性数据存储器&! 片内电荷泵-8N-8变换器$无需外接!LL编程电压%&! 1!.ZK片内数据;,:&! 最大+.:K的外部数据存储访问空间&! 最大.2ZK外部程序存储访问空间!$7%JB!+内核

! +1:Vd工作频率$最高+.:Vd%&! 7个+.位定时)计数器&! 71个可编程#)(引脚&! L7口提供具有驱动功能的高电流输出&! O个中断源#1个中断优先级!$2%电源

! 73)!3工作电压&! 提供三种工作模式’正常"理想"关闭!$!%接口

! UG;/串口&! 1线$#18兼容%和GL#串行接口 &! 提供看门狗电路&! 电压功率监视&! 采用!1脚L]9封装!应用领域’瞬时捕捉系统"智能传感器"数据采集系统和通信系统"电池供电系统$可移动

L8"手持仪器"终端%等!

习$题$J

J*+":8GNO.系列单片机的中央处理器在结构上有何特点)其优点是什么)J*1":8GNO.系列单片机的存储器与:8GN!+系列单片机的存储器相比有何区别)J*7":8GNO.系列单片机的外部数据总线宽度有哪两种情况)J*2":8GNO.系列单片机的指令系统有何特点)J*!":8GNO.系列单片机的高速输入)输出口有何功能)J*."8#G8和;#G8的含义是什么)8#G8结构的单片机具有哪些特点)J*E":Sc<QcjS%公司的L#8系列单片机具有哪些特点)J*J":Q’Q<QP>公司的J位单片机主要有哪些系列)J*O".JV8++系列单片机与:8GN!+系列单片机的程序状态字$寄存器%有哪些区别)J*+B"比较.JV8++系列单片机与:8GN!+系列单片机的数据"地址总线扩展方法有何不同)J*++"具有:8GN!+单片机内核的,g&8J+1单片机在:8GN!+的基础上添加了哪些硬件资源)

(7!1(

Page 262: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

附录 %$’()0!+指令表

十六进制代码 助 记 符 功能对标志位影响

L (3 ,8 8b字节数 周期数

数 据 传 送 指 令

FJDF9 :(3",#;$ $;$%0 , 1 A A A + +

F! :(3",#gS<=c’ $gS<=c’%0 , 1 A A A 1 +

F.#FE :(3",#h;S $$;S%%0 , 1 A A A + +

E2 :(3",#‘g>’> g>’>0 , 1 A A A 1 +

9JD99 :(3";$#, $,%0 ;$ A A A A + +

,JD,9 :(3";$#gS<=c’ gS<=c’0 ;$ A A A A 1 1

EJDE9 :(3";$#‘g>’> g>’>0 ;$ A A A A 1 +

9! :(3"gS<=c’#, $,%0 gS<=c’ A A A A 1 +

JJDJ9 :(3"gS<=c’#;$ $;$%0 gS<=c’ A A A A 1 +

J! :(3"gS<=c’+#gS<=c’1 $gS<=c’1%0 gS<=c’+ A A A A 1 1

J.#JE :(3"gS<=c’#h;S $$;S%%0 gS<=c’ A A A A 7 1

E! :(3"gS<=c’#‘g>’> ->’>0 gS<=c’ A A A A 1 1

9.#9E :(3"h;S#, $,%0$$;S%% A A A A 7 1

,.#,E :(3"h;S#gS<=c’ $gS<=c’%0$;S% A A A A + +

E.#EE :(3"h;S#‘g>’> g>’>0$;S% A A A A 1 1

OB :(3"-L/;#‘g>’>+. g>’>+.0-L/; A A A A 1 +

O7 :(38",#h,I-L/; $$,%I$-L/;%%0, 1 A A A 7 1

J7 :(38",#h,IL8 $$,%I$L8%%0, 1 A A A + 1

F1#F7 :(3Y",#h;S $$;S%I$L1%%0, 1 A A A + 1

FB :(3Y",#h-L/; $-L/;%0, 1 A A A + 1

91#97 :(3Y"h;S#, $,%0$;S%I$L1% A A A A + 1

9B :(3Y"h-L/;#, $,%0$-L/;% A A A A + 1

8B LUGV"gS<=c’$GL%I+0GL

$gS<=c’%0GLA A A A 1 1

-B L(L"gS<=c’$$GL%%0gS<=c’

$GL%H+0GLA A A A 1 1

8JD89 Y8V",#;$ $,%2$;$% 1 A A A + +

8! Y8V",#gS<=c’ $,%2$gS<=c’% 1 A A A 1 +

8.#8E Y8V",#h;S $,%2$$;S%% 1 A A A + +

-.#-E Y8V-",#h;S $,%BD72$$;S%%BD7 1 A A A + +

(2!1(

Page 263: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

十六进制代码 助 记 符 功能对标志位影响

L (3 ,8 8b字节数 周期数

算 术 运 算 指 令

1JD19 ,--",#;$ $,%I$;$%0, 1 1 1 1 + +

1! ,--",#gS<=c’ $,%I$gS<=c’%0, 1 1 1 1 1 +

1.#1E ,--",#h;S $,%I$$;S%%0, 1 1 1 1 + +

12 ,--",#‘g>’> $,%Ig>’>0, 1 1 1 1 1 +

7JD79 ,--8",#;$ $,%I$;$%I8b0, 1 1 1 1 + +

7! ,--8",#gS<=c’ $,%I$gS<=c’%I8b0, 1 1 1 1 1 +

7.#7E ,--8",#h;S $,%I$$;S%%I8b0, 1 1 1 1 + +

72 ,--8",#‘g>’> $,%Ig>’>I8b0, 1 1 1 1 1 +

OJDO9 GUKK",#;$ $,%H$;$%H8b0, 1 1 1 1 + +

O! GUKK",#gS<=c’ $,%H$gS<=c’%H8b0, 1 1 1 1 1 +

O.#OE GUKK",#h;S $,%H$$;S%%H8b0, 1 1 1 1 + +

O2 GUKK",#‘g>’> $,%Hg>’>H8b0, 1 1 1 1 1 +

B2 #M8", $,%I+0, 1 A A A + +

BJDB9 #M8";$ $;$%I+0;$ A A A A + +

B! #M8"gS<=c’ $gS<=c’%I+0gS<=c’ A A A A 1 +

B.#BE #M8"h;S $$;S%%I+0$;S% A A A A + +

,7 #M8"-L/; $-L/;%I+0-L/; + 1

+2 -F8", $,%H+0, 1 A A A + +

+JD+9 -F8";$ $;$%H+0;$ A A A A + +

+! -F8"gS<=c’ $gS<=c’%H+0gS<=c’ A A A A 1 +

+.#+E -F8"h;S $$;S%%H+0$;S% A A A A + +

,2 :U0",K $,%A$K%0,K 1 1 A 1 + 2

J2 -#3",K $,%)$K%0,K 1 1 A 1 + 2

-2 -,", 对,中内容进行十进制数调整 1 1 1 1 + +

逻 辑 运 算 指 令

!JD!9 ,M0",#;$ $,%3 $;$%0 , 1 A A A + +

!! ,M0",#gS<=c’ $,%3 $gS<=c’%0 , 1 A A A 1 +

!.#!E ,M0",#h;S $,%3 $$;S%%0 , 1 A A A + +

!2 ,M0",#‘g>’> $,%3 g>’>0 , 1 A A A 1 +

!1 ,M0"gS<=c’#, $gS<=c’%3 $,%0 gS<=c’ A A A A 1 +

!7 ,M0"gS<=c’#‘g>’> $gS<=c’%3 g>’>0 gS<=c’ A A A A 7 1

2JD29 (;0",#;$ $,%4$;$%0 , 1 A A A 7 1

2! (;0",#gS<=c’ $,%4$gS<=c’%0 , 1 A A A + +

2.#2E (;0",#h;S $,%4$;S%0 , 1 A A A 1

+22 (;0",#‘g>’> $,%4g>’>0 , 1 A A A + +

21 (;0"gS<=c’#, $gS<=c’%4$,%0 gS<=c’ A A A A 1 +

(!!1(

Page 264: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

十六进制代码 助 记 符 功能对标志位影响

L (3 ,8 8b字节数 周期数

27 (;0"gS<=c’#‘g>’> $gS<=c’%4g>’>0 gS<=c’ A A A A 1 +

.JD.9 Y;0",#;$ $,%5$;$%0 , 1 A A A 7 1

.! Y;0",#gS<=c’ $,%5$gS<=c’%0 , 1 A A A + +

..#.E Y;0",#h;S $,%5$;S%0 , 1 A A A 1 +

.2 Y;0",#‘g>’> $,%5g>’>0 , 1 A A A 1 +

.1 Y;0"gS<=c’#, $gS<=c’%5$,%0gS<=c’ A A A A 1 +

.7 Y;0"gS<=c’#‘g>’> $gS<=c’%5g>’>0gS<=c’ A A A A 1 +

F2 80;", B0 , 1 A A A 7 1

92 8L0", $,%0 , A A A A + +

17 ;0", ,循环左移+位 A A A A + +

77 ;08", ,带进位循环左移+位 1 A A 1 + +

B7 ;;", ,循环右移+位 A A A A + +

+7 ;;8", ,带进位循环右移+位 1 A A 1 + +

82 G ,L", ,半字节交换 A A A A + +

位 操 作 指 令

87 80;"8 B08b A A A 1 + +

81 80;"WS’ B0WS’ A A A 1 +

-7 GF/K"8 +08b A A A 1 + +

-1 GF/K"WS’ +0WS’ A A A 1 +

K7 8L0"8 $8b%08b A A A 1 + +

K1 8L0"WS’ $WS’%0WS’ A A A 1 +

J1 ,M0"8#WS’ $8b%3$WS’%08b A A A 1 1 1

KB ,M0"8#)WS’ $8b%3$WS’%08b A A A 1 1 1

E1 (;0"8#WS’ $8b%4$WS’%08b A A A 1 1 1

,B (;0"8#)WS’ $8b%4$WS’%08b A A A 1 1 1

,1 :(3"8#WS’ $WS’%08b A A A 1 1 +

O1 :(3"WS’#8 8b0WS’ A A A A 1 1

控 制 转 移 指 令

6+ ,8,00">gg<++

,8,00">gg<++

$L8%I10L8#$GL%I+0GL

$L8%00$8L%$GL%I+0GL

$L8%V0$GL%

>gg<++0L8+BDB

A A A A 1 1

+1 08,00">gg<+.

$L8%I10L8#$GL%I+0GL

$L8%00$8L%#$GL%I+0GL

$L8%V0$GL%#>gg<+.0L8

A A A A 7 1

(.!1(

Page 265: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

十六进制代码 助 记 符 功能对标志位影响

L (3 ,8 8b字节数 周期数

11 ;F/$$GL%%0L8V#$GL%H+0GL

$$GL%%0L80#$GL%H+0GLA A A A + 1

71 ;F/#

$$GL%%0L8V#$GL%H+0GL

$$GL%%0L80#$GL%H+0GL

从中断返回

A A A A + 1

6+ ,_:L">gg<++ >gg<++0L8+BDB A A A A 1 1

B1 0_:L">gg<+. >gg<+.0L8 A A A A 7 1

JB G_:L"<=P $L8%I$<=P%0L8 A A A A 1 1

E7 _:L"h,I-L/; $,%I$-L/;%0L8 A A A A + 1

.B _e"<=P$L8%I10L8#若$,%4B#

则$L8%I$<=P%0L8A A A A 1 1

EB _Me"<=P$L8%I10L8#若$,%+B#

则$L8%I$<=P%0L8A A A A 1 1

2B _8"<=P$L8%I10L8#若8b4+#则$L8%I$<=P%0L8

A A A A 1 1

!B _M8"<=P$L8%I10L8#若8b4B#则$L8%I$<=P%0L8

A A A A 1 1

1B _K"WS’#<=P$L8%I70L8#若$WS’%4+#则$L8%I$<=P%0L8

A A A A 7 1

7B _MK"WS’#<=P$L8%I70L8#若$WS’%4B#则$L8%I$<=P%0L8

A A A A 7 1

+B _K8"WS’#<=P$L8%I70L8#若$WS’%4+#则B0WS’#$L8%I$<=P%0L8

7 1

K! 8_MF",#gS<=c’#<=P

$L8%I70L8#若$,%不等于

$gS<=c’%#则$L8%I$<=P%0L8

若$,%小于 $gS<=c’%#则+08b

A A A A 7 1

K2 8_MF",#‘g>’>#<=P

$L8%I70L8#若$,%不等于

g>’>#则$L8%I$<=P%0L8

若$,%小于 g>’>#则+08b

A A A A 7 1

KJDK9 8_MF";$#‘g>’>#<=P

$L8%I70L8#若$;$%不等于

g>’>#则$L8%I$<=P%0L8

若$;$%小于 g>’>#则+08b

A A A A 7 1

K.#KE 8_MF"h;S#‘g>’>#<=P

$L8%I70L8#若$;S%

不等于g>’>#则$L8%I$<=P%0L8

若$;S%小于 g>’>#则+08b

A A A A 7 1

(E!1(

Page 266: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

续表

十六进制代码 助 记 符 功能对标志位影响

L (3 ,8 8b字节数 周期数

-JD-9 -_Me";$#<=P

$L8%I10L8#$;$%H+0;$#

若$;$%不等于B#则$L8%I$<=P%0L8

A A A A 1 1

-! -_Me"gS<=c’#<=P

$L8%I70L8#$gS<=c’%H

+0gS<=c’#若$gS<=c’%不等于B#

则$L8%I$<=P%0L8

A A A A 7 1

BB M(L 空操作 A A A A + +

""注’,8,00和,_:L两条指令的十六进制代码中+6,的内容由转向地址的高7位决定!

(J!1(

Page 267: 单片机原理与应用教程 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook2/y/38474.pdf · 司的*+,-.$系列单片机在单片机应用领域仍占有很重要的地位%从大量的与*+,-.$兼容的

附录 :$本书芯片索引

芯片名称 书 中 位 置 芯片名称 书 中 位 置

1E.2 .O E1

1E+1J .O E1

1E1!. .O E1 E.

1E!+1 .O E1 E7

.++. E!

.1.2 E! E.

.11!. E! E.

.M+7. +.2

E2B2 E7 ++B

E2B. +1J +O2

E2BE +2. +O2

E20GBJ +1B +1+

E20G++ +1B +1+

E20G+2 17 1. +OB

E20G11 ++.

E271 ++B

E20G+.2 OE +1! +1O

E20G+.! OE

E20G122 EO ++B ++!

E20G1E7 EB

E20G7E7 EB E1 E.

E20G7E2 EJ

E20G7EE EJ +.E

E!2!+)1)7)2 +O2

EJB! 1BO

EO0B! +EB

J+!! J7 J. +17

J1!!, J7

OB+7 +O+ +OE +OJ

,-!E2, +!O +.B +.+

,-8BJBO +!. +!E

8-2B!+ +.E

-,8BJ71 +.O +EB

-,8+17B +E1 +E7

V-22EJB +7!

#80E+7! +!7 +!2

#80E.!B +JE

0:+7+)17+)77+ +.!

0:712 +EB

0:7!J +EB

:,Y+JE)+JO +.1 +.7 +.2

:,Y171 O.

:,Y!7J)!7O +E2 +E!

:8+2277 +2O +!+

/0EEB! 1+B

/0L!1+N2 +2! +OE

U0M1BB7 +O!

U0M1JB7 +7+ +O!

Y1!B2! 1+B

* * * *

(O!1(