锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

MCU应用笔记

时间:2022-12-24 10:00:00 125磁环电感ct90125积成电路二三极管单片机存储器52磁环电感ct10652

单片机硬件系统设计原则
单片机应用系统的硬件电路设计包括两部分:一是系统扩展,即单片机内部
例如,功能单元ROM、RAM、I/O、当定时器/计数器、中断系统等不能满足应用系统的要求时,
必须在片外扩展,选择合适的芯片,设计相应的电路。二是系统配置,即根据系统
键盘、显示器、打印机等外围设备的功能要求A/D、D/A转换器等,设计合适的连接
口电路。
系统的扩展和配置应遵循以下原则:
1.尽量选择典型的电路,并符合单片机的常规用法。为硬件系统的标准化和模块化奠定良好的基础
好的基础。
2、系统扩展和外围设备的配置水平应充分满足应用系统的功能要求,并留出适当的空间,
便于二次开发。
3.硬件结构应与应用软件方案相结合。考虑到硬件结构和软件方案的相互影响
原则是软件能尽可能实现的功能,以简化硬件结构。但必须注意的是,软件
硬件功能的实现,一般响应时间比硬件长,占用CPU时间。
4.系统中的相关设备应尽可能匹配性能。 如选用CMOS芯片单片机构成低功耗系统
系统中的所有芯片都应尽可能选择低功耗产品。
5.可靠性和抗干扰设计是硬件设计的重要组成部分,包括芯片、设备选择、去耦过滤
波、印刷电路板布线、通道隔离等。
当单片机外围电路较多时,必须考虑其驱动能力。当驱动能力不足时,系统工作不可靠,
总线负载可以通过增加线路驱动器来增强驱动能力或减少芯片功耗来减少。
7.硬件系统尽片方向设计硬件系统。系统设备越多,设备之间的相互干扰就越强,功耗就越大
也增大,也不可避免地降低了系统的稳定性。随着单片机片内集成的功能越来越强,真正
的片上系统SoC可以实现,比如ST新推出的公司μPSD32××系列产品在芯片上收集
成了80C32核、大容量FLASH存储器、SRAM、A/D、I/O、两个串口,看门狗,上电复位电路
等等。

● 实践单片机系统硬件抗干扰常用方法
影响单片机系统可靠安全运行的主要因素主要来自系统内外的各种电气干扰,
受系统结构设计、部件选择、安装、制造工艺的影响。这些都是单片机系统的干扰因素
,往往会导致单片机系统运行异常,品质量和产量到事故
经济损失。
形成干扰的基本要素有三个:
(1)干扰源。指干扰元件、设备或信号, 用数学语言描述如下:du/dt, di/d
t干扰源是最大的地方。如雷电、继电器、可控硅、电机、高频时钟等。

(2)传播路径。指干扰从干扰源传播到敏感器件的通道或媒介。典型的干扰传播路径是
导线的传导和空间的辐射。
(3)敏感器件。指易受干扰的对象。A/D、 D/A变换器、单片机、数字IC,弱信
号放大器等。
1干扰的分类
1.1 干扰的分类
干扰的分类有很多种,通常可以根据噪声的原因、传导方法、波形特性等进行
同一类别。按原因分类:
可分为放电噪声音、高频振荡噪声、浪涌噪声。
可分为共模噪声和串模噪声。
可分为连续正弦波、脉冲电压、脉冲序列等。
1.2 干扰耦合模式
干扰源产生的干扰信号通过一定的耦合通道对测控系统起作用。因此,我们有
有必要查看干扰源和被干扰对象之间的传输方式。干扰耦合无非是通过导线和空间
、细分公共线等,主要有以下几种:
(1)直接耦合:
这是系统中最直接、最常见的方式。例如,干扰信号通过电源线侵入
系统。这种形式最有效的方法是添加去耦电路。
(2)公共阻抗耦合:
这也是一种常见的耦合方式,通常发生在两个电路电流有共同通路的情况下。
在电路设计中,通常需要考虑停止这种耦合。使干扰源与被干扰对象之间没有公共阻抗。
(3)电容耦合:
又称电场耦合或静电耦合。它是由分布电容的存在引起的耦合。
(4)电磁感应耦合:
也被称为磁场耦合。它是由分布式电磁感应引起的耦合。
(5)漏电耦合:
当绝缘不好时,这种耦合是纯电阻的。
2常用的硬件抗干扰技术
抗干扰成干扰的三要素,抗干扰主要有以下手段。
2.1 抑制干扰源
抑制干扰源是尽可能减少干扰源du/dt, di/dt。这是抗干扰设计的最要考虑和
最重要的原则往往事半功倍。 减少干扰源du/dt主要是通过干扰源
实现端并联电容。减少干扰源di/dt干扰源电路串联电感或电阻,增加续流二
实现极管。
抑制干扰源的常用措施如下:
(1)继电器线圈增加续流二极管,消除断开线圈时产生的反电势干扰。只增加续流二极
管道会延迟继电器的断开时间,增加稳压二极管后继电器在单位时间内可以移动更多次

(2)在继电器接头两端连接火花抑制电路(通常是RC串联电路一般选择几K到几十个电阻
K,电容选0.01uF),减少电火花的影响。
(3)给电机加滤波电路,注意电容和电感引线尽量短。
(4)电路板上的每IC要并接一个0.01μF~0.1 μF减少高频电容IC对电源的影响。
注意高频电容器的布线。连接应靠近电源端,并尽可能粗短。否则,它将增加电容器的等效串联
电阻会影响滤波效果。
(5)布线时避免90度折线,减少高频噪声发射。
(6)可控硅两端并联RC抑制电路,减少可控硅产生的噪声(当噪声严重时,可能会使用
)。
2.2 切断干扰传播路径
传导干扰和辐射干扰可分为干扰传播路径。
传导干扰是指通过导线传输到敏感器件的干扰。高频干扰噪声和有用信号的频带
同样,高频干扰噪声的传播可以通过在导线上添加滤波器来切断,有时还可以添加隔离光耦合
解决。电源噪声危害最大,要特别注意处理。
辐射干扰是指通过空间辐射传播到敏感器件的干扰。一般的解决方案是增加干扰源
与敏感器件的距离,用地线隔离,在敏感器件上加屏蔽罩。
切断干扰传播路径的常用措施如下:
(1)充分考虑电源对单片机的影响。如果电源做得好,整个电路的抗干扰就会解决一半以上。
许多单片机对电源噪声非常敏感,需要向单片机电源添加滤波电路或稳压器,以降低电源噪声
片机的干扰。例如,磁珠和电容器可以用来组成π当然,当条件不高时,也可以使用形状滤波电路
100Ω电阻代替磁珠。
(2)如果是单片机I/O用于控制电机等噪声器件I/O应隔离口与噪声源(增加)
加π形状滤波电路)。
(3)注意晶振布线。晶振应尽可能靠近单片机引脚,时钟区应用地线隔离。
接地并固定。
(4)电路板分区合理,如强、弱信号、数字、模拟信号等。尽量使用干扰源(如电机、继电器
远离敏感元件(如单片机)的电器)。
(5)用地线将数字区域与模拟区域隔离开来。数字地与模拟地分开,最后一点与电源地连接。
A/D、D/A芯片布线也以此为原则。
(6)单片机和大功率器件的地线应单独接地,以减少相互干扰。大功率器件应尽可能放置
电路板边缘。
(7)单片机I/O磁珠、磁环、电源线、电路板连接线等关键部位使用抗干扰元件
、电源滤波器和屏蔽罩可显著提高电路的抗干扰性能。
2.3 提高敏感器件的抗干扰性能
提高敏感器件的抗干扰性能是指从敏感器件这边考虑尽量减少对干扰噪声的拾取,以及
尽快恢复异常状态的方法。
提高敏感器件抗干扰性能的常用措施如下:
(1)尽量减少电路环的面积,以减少感应噪声。
(2)布线时,电源线和地线应尽可能粗。除了降低压降外,更重要的是降低耦合噪声。
(3)单片机闲置I/O口,不要悬挂,接地或连接电源。IC闲置端不变
在系统逻辑下接地或连接电源。
(4)单片机使用电源监控和看门狗电路,如: IMP809,IMP706,IMP813, X5043,
X5045等,可大大提高整个电路的抗干扰性能。
(5)在满足速度要求的前提下,尽量减少单片机的晶,选择低速数字电路。
(6)IC尽量将设备直接焊接在电路板上,少用IC座。
2.4 其它常用的抗干扰措施
(1)电感电容滤波器用于交流端:去除高频低频干扰脉冲。
(2)变压器双隔离措施:变压器初级输入端串联电容,初次和次级线圈间屏蔽层与初级间电
容量中心接点与地面连接,二级外屏蔽层与印刷板连接,是硬件抗干扰的关键手段。二次加低通滤
波器:吸收变压器产生的浪涌电压。
(3)采用集成式直流稳压电源: 过流、过压、过热等保护作用。
(4)I/O口采用光电、磁电、继电器隔离,去除公共场所。
(5)双绞线通信线:排除平行互感。
(6)防雷电用光纤隔离最有效。
(7)A/D隔离放大器转换或现场转换:减少误差。
(8)外壳接地:解决人身安全,防止外界电磁场干扰。
&bsp;(9)加复位电压检测电路。防止复位不充分, CPU就工作,尤其有EEPROM的器件,复位不
充份会改变EEPROM的内容。
  (10)印制板工艺抗干扰:
  ① 电源线加粗,合理走线、接地,三总线分开以减少互感振荡。
  ② CPU、RAM、ROM等主芯片,VCC和GND之间接电解电容及瓷片电容,去掉高、低频干扰信
号。
  ③ 独立系统结构,减少接插件与连线,提高可靠性,减少故障率。
  ④ 集成块与插座接触可靠,用双簧插座,最好集成块直接焊在印制板上,防止器件接触不
良故障。
  ⑤ 有条件的采用四层以上印制板,中间两层为电源及地。

● 单片机系统软件抗干扰方法
  在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性
好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究

  1  软件抗干扰方法的研究
  在工程实践中,软件抗干扰研究的内容主要是: 一、消除模拟输入信号的嗓声(如数字
滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效
的软件抗干扰方法。
  1.1 指令冗余
  CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道
“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码
,程序将出错。若“飞” 到了三字节指令,出错机率更大。
  在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是
在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,
由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。

  此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两
条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
  1.2 拦截技术
  所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截
乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
  1.2.1 软件陷阱的设计
  当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将
其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地
址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:
                       NOP
                       NOP
                       LJMP 0000H
其机器码为0000020000。
  1.2.2 陷阱的安排
  通常在程序中未使用的EPROM空间填0000020000。最后一条应填入020000,当乱飞程序
落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使
用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中
断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
                       NOP
                       NOP
                       RETI
  返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序
的设计可靠、 完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理
故障并恢复程序的运行。
  考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。
  1.3 软件“看门狗”技术
  若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过
不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷
入“死循环”,需进行出错处理。
  “看门狗”技术可由硬件实现,也可由软件实现。 在工业应用中,严重的干扰有时会破
坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件
看门狗可有效地解决这类问题。
  笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监
视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰
性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定
时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用
T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1
中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环
一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、 T1Watch加1。在T0中
断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测
MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别
T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处
理程序作排除故障处理。当然,对主程序最大循环周期、定时器T0和T1定时周期应予以全
盘合理考虑。限于篇幅不赘述。
  2  系统故障处理、自恢复程序的设计
  单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非
正常复位前的状态。
  2.1 非正常复位的识别
  程序的执行总是从0000H开始,导致程序从 0000H开始执行有四种可能:一、系统开机上
电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位; 四、任务正在执行中掉电
后来电复位。四种情况中除第一种情况外均属非正常复位,需加以识别。
  2.1.1 硬件复位与软件复位的识别
  此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H
, SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序
正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为
1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。图1是采用PSW.5
作上电标志位判别硬、软件复位的程序流程图。


图1 硬、软件复位识别流程图

此外,由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,
因此可选取片内某一个或两个单元作为上电标志。设 40H用来做上电标志,上电标志字为
78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转
向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
  2.1.2 开机复位与看门狗故障复位的识别
  开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易
失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行
时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将
该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否
看门狗复位。
  2.1.3 正常开机复位与非正常开机复位的识别
  识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过
程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在
已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行
测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时
间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段
则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进
行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此
单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
  2.2 非正常复位后系统自恢复运行的程序设计
  对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个
模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态
、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时
备份,同时若有修改也应立即予以备份。
  当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块
初始化、片外扩展芯片的初始化等。其次再对测控系统的系统状态、运行参数等予以恢复
,包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复, 再进入系统
运行状态。
  应当说明的是,真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份
,并加以数据可靠性检查,以保证恢复的数据的可靠性。
  其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题,笔者实际应用
的数据恢复过程流程图如图2所示。


图2 系统自恢复程序流程图

图中恢复系统基本数据是指取出备份的数据覆盖当前的系统数据。系统基本初始化是指对
芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而
复位前任务的初始化是指任务的执行状态、运行时间等。
  3  结束语
  对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本
文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充完善,才能取得较好
的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周
到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片
机系统是完全可行的。

● I2C总线原理及应用实例
  I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用
于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如
今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进
行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存
、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
  1  I2C总线特点
  I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占
用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度
可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是
,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总
线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

  2  I2C总线工作原理
  2.1 总线的构成及信号类型
  I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC
之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总
线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的
地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又
是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控
制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该
调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总
线上,却彼此独立,互不相关。
  I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应
答信号。
  开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
  应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲
,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,C
PU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,
由判断为受控单元出现故障。
  目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的 C
8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如
存储器、监控芯片等也提供I2C接口。

3  总线基本操作
  I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据
则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通
常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停
止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA
状态的改变被用来表示起始和停止条件。参见图1。


图1 串行总线上的数据传送顺序

3.1 控制字节
  在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片
类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为
1时为读操作,为0时为写操作。如图2所示。


图2 控制字节配置


  3.2 写操作
  写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所
不同。关于页面写的地址、应答和数据传送的时序参见图3。  


图3 页面写

  
  3.3 读操作
  读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。
应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机
必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止
条件。


图4 顺序读

  4  实例:X24C04与MCS-51单片机软硬件的实现
  X24C04是XICOR公司的CMOS 4096位串行EEPROM,内部组织成512×8位。16字节页面写。
与MCS-51单片机接口如图5所示。由于SDA是漏极开路输出,且可以与任何数目的漏极开路
或集电极 开路输出“线或”(wire-Ored)连接。上拉电阻的选择可参考X24C04的数据手
册。下面是通过I2C接口对X24C04进行单字节写操作的例程。流程图及源程序如下:  


图5 X24C04与51单片机接口

;名称:BSENT
;描述:写字节
;功能:写一个字节
;调用程序:无
;输入参数:A
;输出参数:无
BSEND: MOV R2,#08H ;1字节8位
SENDA: CLR P3.2    ;
RLC A              ;左移一位
MOV P3.3,C         ;写一位
SETB P3.2
DJNZ R2,SENDA      ;写完8个字节?
CLR P3.2           ;应答信号
SETB P3.3
SETB P3.2
RET


图6 流程图

  
  5  结束语
  在I2C总线的应用中应注意的事项总结为以下几点 :
  1) 严格按照时序图的要求进行操作,
  2) 若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。
  3) 程序中为配合相应的传输速率,在对口线操作的指令后可用NOP指令加一定的延时。

  4) 为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),
或者在EEPROM内部没有用的空间写入标志字,每次上电时或复位时做一次检测,判断EEPR
OM是否被意外改写。

● Keil C51分页模式Bankswitch在PSD813F2应用的实现
  在十分复杂的8051控制系统中,软件的规模随着功能的加强而不断的扩大,可执行代码的
长度也不断的增加,当代码的长度超过64K时问题就使得软硬件设计变得复杂了。本文将介
绍一个利用Keil提供的分页模式Bankswitch实现8051寻址的代码空间突破64KB的实例。

  1  Bankswitch原理
  使用Keil的BL51可使用页面寻址的方式来增加代码空间。EPROM被分页,每页的大小和在
页间进行跳转的方式取决于具体的应用。
  Keil C51支持的分页方式有三种。1)利用单片机I/O口线。通常默认是P1口,采用1条P
1口线时, 分组数为2,采用5条P1口线时,最多可分为32个代码组,剩余的P1口线也可用
于其他用途。2)利用片外数据存储器(XDATA)空间实现分页。指定一个XDATA端口字节实
现分页操作,该字节中的剩余位,不能再用于其他目的。3)用户自定义方式实现分页。本
文介绍的是其中的第二种。采用的分页方式、页数和地址在L51_BANK.A51中进行配置。

  应当注意的是所有的页面代码要有一个共用空间。这个空间是处理器在任何时候都能够
寻址的。这个区域存储包括中断向量、中断功能函数、可能调用其它EPROM页面的函数、C
51库函数、在页面间跳转的代码和被多个页面代码使用的常量。通常在每页的底部都复制
公共代码。
  一般情况下,页切换需要大约50个机器周期和2字节的堆栈空间。
  2  8031与PSD813F2的硬件设计
  PSD813F2内置128KB闪存,分为8个页面,每页空间16KB,内置可选的32KB启动存储器、
2KB的SRAM、27个I/O端口、电源管理单元、40个可编程逻辑宏单元CPLD,通过JTAG串行接
口允许在系统编程整个器件。适用于8031、MC68HC11、 Dallas、Z80等20余种单片机。

  PSD813F2内含地址锁存器,因此PSD813F2的引脚可直接与8031相连,如图1所示。  


图1


  3 Keil C51环境下分页实现
  本文将PSD813F2片内的128KB的FLASH存储器分为两个区(bank),地址范围从0000H~ff
ffH。
  3.1 PSD Soft设置
  1)在Page Register Definition步骤中选择pgr0,只分两页,如图2所示。在Chip Sele
ct Equation n步骤中设置rs0为0页,地址0000H~07ffH;csiop地址4000H~40ffH;fs0、f
s1、fs2、fs3设置为0页,地址分别为0000H~3fffH(如图3所示)、4000H~7fffH、8000H~
bfffH、c000H~ffffH,fs4、fs5、fs6、fs7设置为1页。


图2




图3


  3.2 Keil C51工程设置
  1)建一个KeilC51的新工程,命名为如PSD,在菜单Project选择中选择Option for Tar
get “Target 1”选择项,按图4所示进行项目配置。


图4


  ● 由于PSD813F2片内从FLASH为32KB。故在off-chip code memory-Eprom设为0x0000~
0x7fff。如果这32KB用户未使用,也可空着不填。
  ● 在PSD813F2的PSDSoft Express已配置2KB的SRAM,地址范围为0x0000~0x07ff,故在
off-chip Xdata memory-Ram设为0x0000,长度为0x0800。
  ● 在PSD813F2的PSDSoft Express已配置256个字节的CSIOP空间,地址范围为0x4000~
0x40ff, 故在off-chip Xdata memory-Ram设为0x4000,长度为0x00ff。
  ● 在PSD813F2的主FLASH为128KB,共分为8个物理页,已在PSDSoft Express软件中定义
地址为0x8000~0xbfff,因此在KeilC51中如图4所示分为2个Banks,地址范围为0x0000~
0xffff。
  2)在KeilC51的安装目录/KeilC51/C51/EXAMPLES/Bank_EX1中,把L51_Bank.A51文件的
拷贝并加入到新工程。在L51_BANK.A51文件中需改以下代码。
  A?B_NBANKS EQU 2 //定义最大页数(0~32),可为2、4、8、16和32。
  ?B_MODE EQU 1 //0:通过8051单片机的I/O口进行分组切换,1:通过XDATA存储器单元
进行分组切换,4:用户自定义切换方式。
  ?B_XDATAPORT EQU 40E0H //如果?B_MODE被定义为1,就通过XDATA口定义XDATA口引脚地
址/位来映射开关定义XDATA口地址40E0H。
  3)新建主程序和各bank文件。
  示例的工程主要是为演示Bankswitch,实现的功能较简单。在主文件psd1.c调用psd2.c中
的两个子程序。
  4)设置文件的属性。选择主文件psd1.c,选择Options for File,设置Code Bank为“
bank#0”,设置Stop on Exit为“Not Specified”如图5所示。类似地,Psd2.c设置为Ba
nk #1。L51_Bank.A51设置为“default”。
  5)设置好后,进行编译。


图5


  3.3 编程
  ● 打开PSDSoft Express软件,在Merge MCU Firmware with PSD模块中设置各个FLASH
页面的地址和文件名,如图6所示。


图6


  主FLASH第0页(FS0),地址:0x0000-0x3fff,文件名:psd.hoo
  主FLASH第1页(FS4),地址:0x0000-0x3fff,文件名:psd.ho1
  ● 通过FlashLink便可将文件下载到PSD813F2中,实现BankSwitch功能,使8031的可访
问的地址空间超过64KB。

● μPSD3200系列产品的双串口使用和在系统编程实现
  PSD系列器件的可编程特性及其潜在的优点已逐步为广大的产品设计和应用工程师所理解
和掌握,并将其应用在各自的产品设计中,最近ST又推出了新一代在系统可编程内含8032
核微控制器的PSD器件uPSD3200系列芯片,该系列产品具有高度整合特性和完整的在系统可
编程特性,从而可使嵌入式系统的设计更加简单、灵活。
  uPSD3200系列产品采用模块化设计,它包含一个标准的8032微控制器模块和一个PSD模块
。采用模块化设计技术,将构成一个单片机应用系统所需的多个功能块,如8032core、FL
ASH、SRAM、I/O、PLD、USB接口、I 2C接口、双URAT口、DDC通道(用于液晶显示)、PWM
控制器、AD转换器等,集成在单一硅片上,为简化嵌入式应用系统的设计、缩短产品的开
发周期、提高系统的可靠性、降低系统的成本、缩小产品尺寸提供了一条便利的捷径。该
产品的主要特性可参考产品数据手册。本文以 uPSD3234A-40T6为例,介绍其双串口及ISP
功能的使用。
  1  双串口的使用
  uPSD3200系列芯片提供两个标准的8032 UART 串行口。串口1连接到P3.0(RX)和P3.1(
TX)。串口2连接到P1.2(RX)和P1.3(TX)。这两个串口为全双工接口,即接收和发送可
以同时进行。串行口的接收和发送是通过SBUF寄存器(对串口2是SBUF2寄存器)的访问进
行的。串行I/O口有4种工作方式, 可以通过SCON寄存器(对串口2是SCON2寄存器)中的S
M0和SM1位编程来选择。如表1所示。


表1 串行I/O口4种工作方式



串行口的波特率在方式0和方式2中是固定的,只有在方式1和方式3中波特率由定时器的溢
出率决定。在uPSD3200系列中,定时器1和定时器2都可以用作串口1和串口2的波特率发生
器,仅仅需要在T2CON和PCON寄存器中设置TCLK、TCLK1、 RCLK和RCLK2位就可以了,波特
率由定时器1、2的初值TH1、RCAP2H和RCAP2L决定。
  例如将串口1和串口2 定义为19200波特率,使用定时器2作为波特率发生器的串口设置源
程序如下 :
  T2CON = 0x34;   // 使用定时器2作为波特率发生器
                  // 使串口1使用定时器2作为波特率发生器
  PCON |= 0x0C;   // 使串口2使用定时器2作为波特率发生器
  RCAP2L = 0xc6 ; //设置定时器2初值
  RCAP2H = 0xff ;
  SCON = 0x50;    // 初始化串口1
  SCON2 = 0x50;   // 初始化串口2
  EA = 1;         // 开中断
  2  在系统编程(ISP)实现
  ● 在系统编程的物理连接
  uPSD3200系列芯片为现场可编程器件,芯片的PSD配置、PLD阵列、Flash存储器均能在系
统编程。通过ST公司提供的PSDspft Express软件包,可生成各种编程器所需的目标文件,
通过低成本的FlashLink编程适配器,其一端与PC机的并口相连,另一端则是标准14引脚的
JTAG带状连接器,可直接与目标系统板上的JTAG接口相连,通过JTAG信号线对uPSD3200系
列器件进行在系统编程。其物理连接如图1所示。


图1 JTAG接口物理连接图


  ● uPSD3200系列器件内部的存储器的结构
  256K字节的主FIash存储器,分成8个大小相同的块,每个块均可被设定为程序空间或数
据空间,以分别用来存放程序或数据;
  32K字节的第二FIash存储器,分成4个大小相同的块,每个块均可被设定为程序空间或数
据空间,以分别用来存放程序或数据;
  8K字节的SRAM存储器,掉电时可自动切换到备用电源供电,以保持数据;
  uPSD3200系列器件内部的存储器大于64K,因此使用了分页技术,引入了8位的PAGE寄存
器,使8032微控制器的寻址空间扩大256倍。具体设计中使用的页数,用户可以通过ST公司
提供的PSDspft Express软件设置。如图2所示。


图2 使用PSDspft Express软件对存储器分页


  PAGE寄存器共有8位,每一位可以定义两页, 如图1中我们定义了3位,也就是说,我们
将器件中的存储器分成了8页,我们可以将器件内的每块FLASH存储器和SRAM分别定义到这
8页中,片内的8032微控制器在运行时通过改写PAGE寄存器中的值,就可以方便的寻址每块
FLASH存储器和SRAM了。
  ● uPSD3200在系统编程实现步骤
  ST的PSDsoft Express软件包支持在系统编程,为了实现在系统编程,我们以ST的开发套
件DK3200 为例,讲述在系统编程的过程。DK3200开发套件以uPSD3234A为核心,还包含一
些用于演示PWM控制、AD转换等功能的源程序,因篇幅所限,我们仅讨论如何使用该开发套
件实现在系统编程的功能。
  为了实现在系统编程,我们按图1将DK3200目标板通过FlashLink编程适配器连接到PC机
并口,然后启动PSDsoft Express软件。现在我们点击PSDsoft Express “STMicroelectr
onics JTAG/ISP”对话框,这时你将被问到有多少JTAG设备在目标板上,可能选择“Only
one”。然后进入下一步。
  这时你将看到如图3显示JTAG-ISP Operations界面,我们首先进行第一步,在“Selec
t Folder and programming file:”栏目中输入目标文件名(其文件扩展名为.obj),
也可用鼠标点击Browse按钮框, 以浏览并选取相关的文件,然后打开该文件。如选中DK3
200_1.obj文件名,并打开。在“Select device:”选择要编程的芯片型号,如PSD3234
A。然后我们开始第二步,在“Select operation:”栏目中我们选择Program/Verify,
在“Select PSD”栏目中选择All,表明我们要编程PSD芯片中所有结构,当然我们也可以
通过该选项的下拉菜单仅对其中部分结构进行编程。在“Select # of JTAG pins to us
e on”栏目中选择JTAG口类型,我们在下拉菜单中选择“6 pins”选项。在本步骤中,但
我们点击“Properties”时,我们可以设置芯片在ISP过程中A,B,C,D口的输入输出状态和
电平,这些选择由用户的应用决定。设置好这些选项以后,我们返回到JTAG-ISP Operat
ions界面下,点击“Exexute”,在系统编程开始,在该界面底下的记录窗口将显示进程。
最后一步是告诉我们,在ISP结束以后,我们可以保存JTAG配置信息,点击“Save”,我们
可以得到扩展名为.JCF的文件。当下次我们再次使用时,我们可以点击“Browse”导入该文件就可以恢复原来JTAG配置了。


图3 JTAG-ISP Operations界面


● MSP430与A/D转换器TLC549/1549的接口
  MSP430系列的许多型号内部都含有A/D转换器 (ADCs),例如MSP430F13x系列和MSP430
F14x系列,内部均含有12位的A/D。但在许多应用场合,不需要12位的A/D,只需要8位或1
0位的A/D就足够了。这时候用户可能会选择MSP430x11x系列,外部添加模数转换器。在典
型应用中,低功耗、易操作的TLC549(8位A/D)或TLV1549(10位A/D)器件可经很方便地
与MSP430连接。本文介绍一个MSP430F1121与TLC549的接口实例。
  1  硬件设计
  MSP430F1121使用三个I/O口与TLC549的接口串行相连,通过串行接口采样。TLC549完成
A/D转换的时间小于17μs。电路原理图如下所示。    


TLC549-MSP430F1121应用电路


  2  工作原理
  利用三个数字I/O接口,MSP430F1121驱动TLC549 A/D转换采用异步串行接口,在实际应
用中,MSP430F1120的I/O管脚P2.0和P2.1用P2的方向寄存器(P2DIR)配置为输出,用P2的
输出寄存器(P2OUT)提供相应位的输出缓冲信息。P2.0管脚与TLC549的选片管脚CS相连,
P2.1管脚与TLC549的输入/输出时钟I/O CLK相连。转换数据从TLC549的数据输出管脚DO读
出,进入MSP430F1121的P2.3管脚。如上图所示,MSP430F1121选择了P2.0、P2.1、P2.3三
个管脚,实际上任意一个管脚均能够驱动TLC549。当CS为高电平时,DO为高阻状态。转换
开始之前,CS必须为低电平,以确保完成转换,MSP430F1121在P2.1管脚上产生总计8个的
时钟脉冲应用于TLC549 I/O CLK管脚的输入。当CS为低电平时,最先出现在DO管脚的信号
为转换值得最高位。MSP430F1121通过P2.3管脚,从TLC549的DO管脚连续移位读取转换数据
进入ADCDATA寄存器。最初的四个脉冲的下降沿分别移出上一次转换值的第6位、5位、4位
、3位,其中第四个时钟下降沿启动采样功能,采样TL549模拟输入信号的当前转换值。后
续三个时钟脉冲输送给I/O CLK管脚,分别在下降沿把上一次转换值的第2位、1位、0位转
换位移出。最终(第八个)时钟脉冲的下降沿芯片,采样/保持功能开始保持操作,保持操作持续到下一个第四时钟的下降沿。转换的周期由TLC549的内部振
荡器定时,不受外部时钟的约束。一个转换完成需要17μs。在转换过程中, CS给一个高
电平,DO回到高阻状态。下一次转换序列之前,至少延时17μs,否则TLC549的转换代码将
被破坏。
  3  软件设计
  在程序中,在程序MEAS_549需要150 MCLK周期和31个字节的汇编代码包括子程序调用。
整个例程需要60个字节,功能包括:关闭看门狗,设置堆栈指针,系统复位以后I/O的初始
化,子程序MEAS_549被调用驱动8位转换代码顺序进入ADCDATA寄存器,一个寄存器(R12)
临时用来计算字节的位数。源代码如下:

;
*********************************************************************

NAME fet_549 ; MSP430F1121 - TLC549接口例程;

;

#define ADCData R11
#define Counter R12

P2IN             equ 00028h ; P2口输入寄存器
P2OUT_ equ 00029h ; P2口输出寄存器
P2DIR_ equ 0002Ah ; P2口方向寄存器  
WDTCTL_ equ 00120h  ; 看门狗定时控制器  
WDTHOLD equ 00080h ; 看门狗保持位
WDTPW equ 05A00h ; 看门狗写入控制字
CS equ 001h ; P2.0   芯片片选
CLK equ 002h ; P2.1 芯片时钟  
DO equ 008h ; P2.3 数据输出  
;---------------------------------------------------------------------
ORG 0F000h ; 编程起始地址
;---------------------------------------------------------------------  
RESET mov.w #0300h,SP ; 初始化X112X堆栈
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; 关闭看门狗定时器  
SetupP2 mov.b #CS,&P2OUT ; /CS设置, P2.X初始化
bis.b #CS+CLK,&P2DIR ; /CS 和 CLK输出
;
Mainloop call #Meas_549 ; 调用Meas_549子程序
jmp Mainloop ; 重复调用Meas_549子程序
;---------------------------------------------------------------------
Meas_549; 采样TLC549的数据,数据移入ADCData(R11),
;计数器 (R12)记录移位的位数
;---------------------------------------------------------------------  
mov.w #8,Counter ; 8位数据的位数
clr.w ADCData  ; 清除数据缓冲区  
bic.b #CS,&P2OUT ; /CS复位, 使能ADC
ADC_Loop bit.b #DO,&P2IN ; (4) DO移入C (进位)  
bis.b #CLK,&P2OUT ; (4) 时钟变高电平
bic.b #CLK,&P2OUT ; (4) 时钟变低电平
rlc.w ADCData ; (1) C移入ADCData
dec.w Counter ; (1) 8位全部移入否?
jnz ADC_Loop  ; (2) 如果没有,调用ADC_Loop
bis.b #CS,&P2OUT ; /CS设置, 关闭ADC
ret ; 调出子程序  
;---------------------------------------------------------------------
ORG 0FFFEh ;
;---------------------------------------------------------------------
DW RESET ; MSP430复位向量  
END
  用户可对子程序MEAS_549的其中一行进行修改,目的是达到10位转换的需求。程序中需
要10个脉冲量,数据移动10位进入ADCDATA寄存器。 mov.w #10,Counter ; 10位数据的位




http://forums.afterdawn.com/哪儿有我哪里就会热闹!
你的爱好就是你的方向!
你的兴趣就是你的资本!你的性情就是你的命运!

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章