• 串行接口键盘控制器SK5278及其在单片机系统中的应用

     摘要:SK5278是一种可管理16个按键的键盘控制器,该器件内部具有去抖动处理电路,可直接输出按键的键值编码,并采用串行方式与单片机或微处理器进行接口,使用该器件可简化单片机系统软硬件的键盘接口。文中给出了该器件的特点、管脚说明和使用方法,并以AT89C2051单片机为例给出了相应的接口电路及相应程序。     关键词:键盘控制 串行接口 单片机 SK5278 对于以单片机为核心构成的智能仪器、仪表、工控设备及家用电器而言,构成人机交互的键盘接口电路是必不可少的,而相应的键盘管理软硬件设计却比较麻烦。简单的矩阵键盘存在着占用CPU软硬件资源多、响应速度慢、监控软件编制复杂等问题,专用的键盘接口器件如INTE8279、HD7219又往往具有LED数码管显示电路,如果仅使用其键盘管理功能,则存在硬件资源浪费,接口电路复杂,造价较高等问题,SK5278即是为解决上述键盘管理问题而推出的一款键盘控制芯片。 1 特点及引脚功能 SK5278是福州贝能科技有限公司推出的采用PIC内核的键盘控制器。该芯片采用4线串行接口,可与任何种类的单片机接口;它具有按键有效指示输出,可用中断方式管理键盘;其行线X0~X3与列线Y0~Y3可构成4×4键盘矩阵;SK5278的16键键盘控制器内含去抖动处理电路,因而可直接输出键值;此外,该器件的工作电源电压范围宽达4~6V;SK5278采用18脚双列直插DIP封装形式。其管脚排列如图1所示,管脚说明如表1所列。表1 SK5278管脚说明 管脚号 管脚名称 管脚类型 功    能 1 DIO O 数据输出端,读取键盘数据时,此脚在CLK上升沿输出数据 2 KEY O 按键有效输出端,平时为低电平,当检测到有效按键时,此引脚变为高电平。读取键盘后,此引脚重新变为低电平 3,14 VDD   正电源 4 RST   复位端 5 VSS   电源地 6~9 X0~X3 I 矩阵键盘行线输入端 10~13 Y0~Y3 O 矩阵键盘列线输出端 15 OSCO O 振荡输出脚,输出频率为RC振荡频率四分之一 16 RC   外接振荡器连接端,R=3.3kΩ,C=20pF时,振荡频率为4MHz 17 CS I 片选端,该脚为低时,可芯片读取键盘数据 18 CLK I 时钟输入端,读取键盘数据时,此脚电平的上升沿表示数据有效 2 工作原理 SK5278可用行线X0~X3和列线Y0~Y3构成4×4矩阵键盘。同时在芯片内部可自动完成扫描、译码、去抖动处理等任务。当SK5278检测到有效的按键时,按键有效指示“KEY”引脚将从低电平变为高电平,并一直保持到按键代码被读取为止。在“KEY”为高电平期间,如果SK5278接收到“读键盘数据”命令,(即“CS”管脚变低),则输出当前按键的键盘代码,SK5278键盘代码的范围为00H-0FH。如果在接收到“读键盘数据”时没有按键按下,SK5278将输出FFH。在一次读键盘过程完成后,按键有效指示“KEY”将变为低电平。利用按键有效指示“KEY”与单片机的外部中断端相连,可完成具有中断的键盘监控功能,从而提高CPU的工作效率,减少按键响应时间。 SK5278工作时需要外接RC振荡电路以供系统工作,RC元件的典型值为R=3.3kΩ,C=20pF,此时的振荡频率约为4MHz,由于此振荡频率较高,故在印制电路板布线时,所有元件尤其是振荡电路的元件应尽量靠近芯片,并尽量使电路连线最短。 SK5278的RESET复位端在一般应用情况下,可以直接与正电源连接,在需要较高可靠性的情况下,可以连接外部RC复位电路,在上电或接收到RESET端的复位信号后,SK5278大约需要经过25ms的复位时间才会进入到正常工作状态。程序中应尽可能地减少CPU对SK5278的访问次数,以提高程序的效率。 值得注意的是,如果有2个键同时被按下,则SK5278只能给出其中一个按键的代码,因此SK5278不适合应用于需要2个或2个以上按键同时被按下的应用场合。如确实需要双键组合使用或组合增加键盘数量,可在单片机的某I/O脚接入一键与SK5278共同组双键键盘监控电路。 3 串行接口及时序 SK5278采用串行方式与单片机或微处理器接口,串行数据从“DIO”引脚输出,并由“CLK”端发出同步时钟脉冲。当SK5278检测到有键按下时,按键有效指示“KEY”变高,单片机检测到“KEY”信号变高后,便将片选端“CS”拉低,从而使得SK5278将取得的键盘数据在“CLK”引脚的上升沿从“DIO”脚依次送出。在单片机发出8个时钟脉冲后,即可从“DIO”端读取8位键值编码,该编码值的D7为最高位,D0为最低位,然后单片机再使片选“CS”变高,并使“KEY”端重新输出低电平,至此,读键值过程结束。SK5278的串行接口时序如图2所示。图中,T1表示从“CS”下降沿至第一个CLK上升沿的延时,典型值为15μs;T2为CLK脉冲宽度,典型值为10μs;T3为CLK脉冲时间间隔,典型值为10μs。4 应用电路 利用SK5278串行接口占用单片机口线少及无键按下时无须CPU干预的特点,可以很容易地构成单片机的键盘接口电路,图3所示是AT89C2051单片机与SK5278构成的键盘及接口电路。图中,AT89C2051的P1.2、P1.3、P1.4口线分别与SK5278的“CS”、“CLK”、“DIO”端相连。为了提高按键的响应速度并减少单片机的干预。本方案将SK5278的按键有效指示端“KEY”与AT89C2051的外中断端INT0相连,由于INT0为低电平中断,故而加入了一级非门以使“KEY”反相后与其相连。与图3电路对应的键盘处理程序如下: ;位定义 COUNT DATA 70H RXBUF DATA 20H ;I/O定义 DIO BIT P1.4 CS BIT P1.2 CLK BIT P1.3 ;主程序 MAIN:MOV SP,#50H MOV P1,#0FFH ;将P1口置为输入 SETB IT0 ;INT0为边沿触发 SETB PX0 ;INT0为高优先级中断 SETB EX0 ;开INT0中断 SETB EA ;CPU开中断 LCALL DL25ms ;延时25ms等待SK5278复位 ;INT0键盘中断程序 INT0:LCALL RECEIVE ;读键值 MOV A,RXBUF ;键值送A CJNE A,#00H,KEY-1 ;K0键未按下转下键 LJMP KEY0 ;K0键按下,转入相应键值处理子程序 KEY1:CJNE A,#01H,KEY-2; LJMP KEY1 ;K1键按下,转入相应键值处理子程序 KEY2:… …… KEY15:CJNE A,#0FH,KEYFH ;K15键未按下,中断返回 LJMP KEY15 ;KEY15键按下,转入相应键值处理程序 KEYFH:RET; 无键按下时中断返回读键盘值程序 RECEIVE:CLR CS ;读键盘数据有效 SETB DIO ;将DIO置为高电平输入状态 ACALL DL 15μs ;T1延时 MOV COUNT,#08H ;共八位数据 LOOP:SETB CLK ACALL DL 15μs ;T2延时 MOV A,RXBUF RL A ;数据左移一位 MOV RXBUF,A MOV C,DIO ;读取一位数据 MOV RXBUF.0,C CLR CLK ACALL DL 15μs ;T3延时 DJNZ COUNT,LOOP SETB DIO ;将DIO重置为高电平输入 ACALL DL 15μs SETB CS ;读键盘数据无效 RET5 结束语 应用SK5278键盘控制器可使单片机系统的人机交互键盘接口电路及监控程序变得简单容易,同时减少了对单片机软硬件资源的占用,因而该器件是构成少数单片机键盘接口电路的一种较好的选择方案。

    数字电源 串行 单片机 及其 应用 接口 控制器 电源技术解析 系统 键盘 sk5278

  • SPI总线在51系列单片机系统中的实现

    摘要:MCS51系列、MCS96系列等单片机由于都不带SPI串行总线接口而限制了其在SPI总线接口器件的使用。文中介绍了SPI串行总线的特征和时序,并以串行E2PROM为例,给出了在51系列单片机上利用I/O口线实现SPI串行总线接口的方法和软件设计程序。     关键词:单片机 SPI串行总线 总线接口 1 引言 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。由此可见,在MCS51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。 2 SPI总线的组成 利用SPI总线可在软件的控制下构成各种系统。如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。在大多数应用场合,可使用1个MCU作为控机来控制数据,并向1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。其数据的传输格式是高位(MSB)在前,低位(LSB)在后。SPI总线接口系统的典型结构如图1所示。 当一个主控机通过SPI与几种不同的串行I/O芯片相连时,必须使用每片的允许控制端,这可通过MCU的I/O端口输出线来实现。但应特别注意这些串行I/O芯片的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则MCU的MISO端只能连接1个输入芯片。其次是输出芯片的串行数据输入是否有允许控制端。因此只有在此芯片允许时,SCK脉冲才把串行数据移入该芯片;在禁止时,SCK对芯片无影响。若没有允许控制端,则应在外围用门电路对SCK进行控制,然后再加到芯片的时钟输入端;当然,也可以只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。 3 在MCS51系列单片机中的实现方法 对于不带SPI串行总线接口的MCS51系列单片机来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置为1,而在允许接口后再置P1.1为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至MCS51单片机的P1.3口(模拟MCU的MISO线),此后再置P1.1为1,使MCS51系列单片机从P1.0(模拟MCU的MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置P1.1为0,模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。 图2所示为MCS51系列单片机与存储器X25F008(E2PROM)的硬件连接图,图2中,P1.0模拟MCU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。下面介绍用MCS51单片机的汇编语言模拟SPI串行输入、串行输出和串行输入/输出的3个子程序,实际上,这些子程序也适用于在串行时钟的上升沿输入和下降沿输出的其它各种串行外围接口芯片(如A/D转换芯片、网络控制器芯片、LED显示驱动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低电平……,则这些子程序也同样适用。 3.1 MCU串行输入子程序SPIIN 从X25F008的SPISO线上接收8位数据并放入寄存器R0中的应用子程序如下: SPIIN:SETB P1.1 ;使P1.1(时钟)输出为1 CLR P1.2 ;选择从机 MOV R1,#08H ;置循环次数 SPIIN1:CLR P1.1 ;使P1.1(时钟)输出为0 NOP ;延时 NOP MOV C,P1.3 ;从机输出SPISO送进位C RLC A ;左移至累加器ACC SETB P1.1 ;使P1.0(时钟)输出为1 DJNZ R1,SPIIN1 ;判断是否循环8次(8位数据) MOV R0,A ;8位数据送R0 RET 3.2 MCU串行输出子程序SPIOUT 将MCS51单片机中R0寄存器的内容传送到X25F008的SPISI线上的程序如下: SPIOUT:SETB P1.1 ;使P1.1(时钟)输出为1 CLR P1.2 ;选择从机 MOV R1,#08H ;置循环次数 MOV A,R0 ;8位数据送累加器ACC SPIOUT1:CLR P1.1 ;使P1.1(时钟)输出为0 NOP ;延时 NOP RLC A ;左移至累加器ACC最高位至C MOV P1.0,C ;进位C送从机输入SPISI线上 SETB P1.1 ;使P1.1(时钟)输出为1 DJNZ R1,SPIOUT1 ;判是否循环8次(8位数据) RET 3.3 MCU串行输入/输出子程序SPIIO 将MCS51单片机R0寄存器的内容传送到X25F008的SPISI中,同时从X25F008的SPISO接收8位数据的程序如下: SPIIO:SETB P1.1 ;使P1.1(时钟)输出为1 CLR P1.2 ;选择从机 MOV R1,#08H ;置循环次数 MOV A,R0 ;8位数据送累加器ACC SPIIO1:CLR P1.1 ;使P1.1(时钟)输出为0 NOP ;延时 NOP MOV C,P1.3 ;从机输出SPISO送进位C RLC A ;左移至累加器ACC最高位至C MOV P1.0,C ;进位C送从机输入 SETB P1.1 ;使P1.1(时钟)输出为1 DJNZ R1,SPIIO1 ;判断是否循环8次(8位数据) RET 4 结束语 本文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用MCS51单片机汇编语言模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可以根据SPI串行总线的操作时序特点来在MCS96系列、ATMEL89系列等单片机上实现SPI总线的接口。

    数字电源 总线 spi 实现 系列 单片机 电源技术解析 系统

  • 单片机与DSP结合的dsPIC芯片

    摘要:介绍一款结合16位单片机控制特点和DSP高速运算优点的新型芯片——dsPIC,对比分析它与PIC16F87X系列单片机之间结构功能的差异。     关键词:单片机 PIC DSP dsPIC 微电子技术大规模甚至超大规模集成电路技术的发展日新月异,计算机芯片技术获得了高速发展。构成这样单片机,亦是不断更新换代,朝着高速化、通用化、不断专用化和提高性价比以及模拟/数字混合集成等方向发展。 熟悉单片机的用户,对于PIC已不再陌生了。由美国Microchip公司推出的PIC系列单片机产品,采用了RISC结构,不但解决了传统冯·诺依曼结构单片机的“瓶颈”问题,并以高速度、低电压、低功耗、大电流驱动能力和低价位OTP及Flash技术等特点,使其从众多同类单片机产品中脱颖而出,成为世界上8位微控制器中最有影响力的主流嵌入式控制器之一。 PIC系列单片机在市场逐渐站稳脚跟之后,Microchip公司又推出了性价比介于16位单片机、32位单片机及DSP中低档机之间的dsPIC芯片。 1 dsPIC的产生 目前,在自动检测、控制等领域正掀起应用DSP的热潮。DSP(Digital Signal Processor)即数字信号处理器,是在数字信号处理的各种理论和算法的基础上发展起来的,用于完成各种实时数字信息的处理。20世纪80年代初,随着微电子技术的展,DSP就应运而生了。DSP器件的出现,使得各种数字信号处理的算法得到了实现。DSP器件不但使数字信号处理得到了实际应用,而且还拓宽到了系统控制领域,从而诞生了一大批新型的电子产品。DSP技术的迅速普及,也为今天的信息高速公路建设奠定了基础。 DSP器件的数字信号处理大致有如下特点:①可程控,可以只设计一个硬件配置,然后设计各种软件来执行多样的信号处理任务;②稳定性好,没有时漂、温漂;③可重复性好,无论多少台计算机去计算同一序列的和,都会提供一模一样的结果;④易于实现自适应算法;⑤基于大规模的集成电路。 这样就不难看出,单片机和DSP各有特点。前者控制功能强,后者数字信号处理能力强,因而,将高性能16位单片机加上DSP功能,就产生了dsPIC芯片。DsPIC是一种将单片机的特征同数字信号处理器(DSP)的能力结构在一起的器件。它在异步事件处理能力、精密仿真、常见的开发环境以及外围部件等方面都表现出DSP强大的性能。 为了缩小单片机同DSP之间的性能差异,使客户能方便地将单片机的功能转移到DSP上,Microchip公司推出了dsPIC。目前推出的产品主要有dsPIC30FXXX系列。考虑到DSP和单片的内部区别,dsPIC器件将高性能16位单片机的控制特点和DSP高速运算的优点相结合,为嵌入式系统设计提供了适合的,单芯片、单指令流的解决方案。它消除了目前类似设计中所需求的额外组成部分,从而减小了印制板空间,也降低了系统成本dsPIC30FXXX高性能单片要同系列可以应用于非常广阔的范围,包括马达控制、因特网接入器件、汽车产品、功能电路、数字应答机、低速软件调制解调器、线卡、POS终端、自动售货机、生物测定安全装置、不间断电源、电源管理和自然语音输入/输出等等。 由于dsPIC兼容了单片机和DSP芯片这两类产品的优点,因此它具有下列特点: *丰富的外围部件; *完整的DSP引擎; *改进的中断能力; *Flash存储器,灵活的重编程能力; *强大的开发环境; *引脚数少; *使用优化的高级语言; *方便PIC系列单片机用户移植现有的代码; *熟悉的类似单片机的用户开发平台。 此外,dsPIC还可以支持4M×24位的可寻址Flash程序存储体,以及32K×16位的数据存储空间。相对于其它许多单片机的5V供电及DSP的3.3V供电,dsPIC的供电电压是2.5~5.5V。图1 dsPIC芯片内部结构图2 dsPIC30F与PIC16F87X的比较 dsPIC30F芯片采用16位(数据)改进型——非流水线的哈佛RISC结构,芯片具体结构如图1所示。程序计数器(PC)为24位宽,可以寻址4M×24位的程序存储器空间。而PIC16F87X系列单片机采用的是8位流水线哈佛结构,有一个13位宽的程序计数器PC,最大只可寻址8K的程序存储器空间。 DsPIC30F有16个16位的工作寄存器(W0~W15)。每个工作寄存器都可以作为数据、寻址或移位寄存器来操作。其中,第16个工作寄存器(即W15)作为中断和程序调用的堆栈指针。PIC16F87X系列同其它种类的PIC机一样,只含有一个用于ALU的8位W工作寄存器,相当于一般单片机的A累加器,是不可寻址的。 dsPIC30F指令字是24位的,其指令系统有很大的增强,最大特点就是包含了对DSP的支持。因为这种DSP引擎具有1个高速的16位与16位相乘的乘法器、1个40位的ALU、2个40位的饱和累加器(saturating accumulator)以及1个40位的双向移位器,因而能够明显提高芯片算法能力和周期。由此,这种芯片的指令系统就分成两大类——单片机类和DSP类。这种指令系统基于高效的C编译器,支持固有寻址(无操作数)、相对寻址、立刻寻址、存储器寻址、寄存器直接寻址、间接寻址和移动寻址7种方式。每条指令都同预先定义的寻址方式有关,而这些预定义的寻址方式是由特定功能需求决定的,且每条指令都支持这7种寻址方式。对于大多数指令,dsPIC30F芯片在每个指令周期能够执行数据(或程序数据)存储器读操作、工作寄存器(数据)读操作、数据存储器写操作以及程序(指令)存储器读操作。因此,它可以支持3操作数的指令,比如,在一个周期内可以完成A+B=C的操作。而PIC16F87X系列单片机每条指令长14位(其它系列指令字长也12位或16位的),整个指令系统共分成三类——字节操作类、位操作类以及立刻数操作和控制操作类,支持立即数寻址、寄存器间接寻址、直接寻址和位寻址四种寻址方式,但由于这样寻址种类的划分依据是操作数的来源,因此并非每条指令都可以支持这四种寻址方式,例如,位操作类的指令就只能采用位寻址方式。对PIC16F87X系列单片机,其指令的操作个数最多只能是两个,另外,再加上这种系列单片机不提供对DSP的支持,那么在数字信号处理速度方面,同dsPIC30F相比显然要慢很多。 dsPIC30F芯片的数据空间被一分为二,分别以X和Y数据存储器进行引用,可以作为32K字(word)或64KB(byte)进行寻址。每个存储器块都有自己独立的地址产生单元(AGU)。单片机类的指令仅单独通过X存储器的AGU单元进行操作,把整个存储器作为一个线性的数据空间进行寻址。而DSP类指令的乘法累加器(MAC)是通过X和Y的AGU共同操作的,这样就将数据地址空间分成相对独立的两部分。不过,这样的X和Y的数据空间边界是任意的,且是由芯片自身特性决定的。数据空间存储器高位的32KB,通过定义8位程序空间可见页面寄存器PSVPAG(Program Space Visibility Page),任意的16位程序字边界中随意地被映射到的程序空间低位(用户空间),这样就使得任何指令能够像访问数据空间一样访问程序空间。不过,采用这种方式访问的执行时间比一般的访问方式要多一个周期。而且,只有每条指令字的低16位才可以使用这种方法访问。PIC16F87X系列单片机的数据存储器分成多个存储区。每个存储区由通用寄存器和专用寄存器两部分组成。存储区之间的选择是通过定义状态寄存器STATUS的RP0和RP1位进行的,每个存储体最多只能达到128字节。 dsPIC芯片不支持多级指令流水线,而采用单级指令预取机制,就是在可利用的最大执行时间前的一个周期访问指令。因此,dsPIC芯片大多数指令是单周期的。此外,dsPIC30F芯片还有一个特征,就是含有由61个区分优先级的向量组成的矢量异常处理结构,这些异常情况包括复位(RESET)、6个捕捉以及54个中断。 结语 dsPIC器件的开发有助于缓解16位单片机和低端数字信号处理器(DSP之间的性能差,是传统16位单片机应用的理想解决方案。与此同时,随着控制技术日趋复杂化,越来越多的工业系统要使用DSP精确控制实时响应,以及现有产品要求增加更多功能,以增强I/O易用性和安全接入,dsPIC必将在高性能数字信号控制器市场占据重要一席之地。同时,随着多种dsPIC产品系列的不断迅速开发,以及愈加完善的开发工具、应用系统库、现场应用工程技术和综合技术等的产品,dsPIC一定会得到广大用户的青睐。

    数字电源 DSP 芯片 结合 dspic 单片机 电源技术解析

  • MSP430串行写入BOOTSTRAP与加密熔断功能

    摘要:BOOTSTRAP用于在MSP430设计开发及系统更新时对Flash存储器的编程。它可以用经串口协议的命令来激活,使得用户可以通过PC控制MSP430,并实现数据交换。烧断Flash的熔丝是用来保护用户在Flash中的程序代码。本文主要介绍我们制作的BOOTSTRAP这一开发工具的功能、软硬件结构以及熔断工具的制作方法。     关键词:MSP430 BOOTSTRAP 熔断 引 言   对于MSP430单片机的开发调试有多种技术方案,例如EPROM方式、OTP方式、仿真开发系统方式、JTAG和BOOTSTRAP方式。BOOTSTRAP(又名BootStrap Loader,简称BSL)可与另一种Flash仿真工具JTAG控制器配合使用。对于Flash型的MSP430单片机初期开发进行的仿真,只需要1台PC机和1个FET(Flash Emulator Tool)的JTAG控制器即可实现。进入产品级开发阶段,为了保护用户代码,烧断Flash的保护熔丝以后就无法再通过JTAG口访问单片机,这时用户对Flash中的程序再进行检查或更新就只能通过BOOTSTRAP进行。不用担心用户代码会泄露,BOOTSTRAP提供了32字节256位的密码保护,能完全确保代码的安全性。   BOOTSTRAP的硬件制作并不费力,只要与调试环境软件配合(TI网站提供免费下载限制功能的软件,不过用户可以轻松地制作完全功能软件),就能很方便地构建自己的开发环境。对于熔断的方法,从以前TI公布的资料看,只要在功能引脚上施加一个6.5V左右的电压数ms就可以了。当然,各类芯片熔断的方法也有一些差异。但是,除了11x系列的单片机有人用这种方法试验成功外,对其余系列的单片机无法实现,甚至有毁坏芯片的可能。现在,随着为TI公司的各类FET仿真器及BOOTSTRAP开发工具的相继推出,在一篇TI资料中,给出了MSP430熔断的方案和指令结构,这样,我们用DIY的完全功能开发调试系统就可以构建成功了。图1和图21 BOOTSTRAP的功能与启动   通过BOOTSTRAP可以访问单片机的全部存储器,包括程序Flash、ROM、RAM,并可对其进行擦除、读写。它能用于批量下载程序,监测程序使用情况和各个变量与寄存器的使用情况,并可对其进行修改。因此,使用BOOTSTRAP能够方便地进行软件升级。   用户烧断Flash熔丝的目的在于保护程序代码,通过BOOTSTRAP读取MSP430,需要32字节即256位的密码口令;但是,BOOTSTRAP又表现了其极大的灵活性,其功能分为需要密码保护的功能与不需要密码保护的功能。其中,受密码保护的操作有从MSP430的存储器中读数据、写数据、Flash段擦除和读取程序计数器;不受密码保护的操作就是接收密码口令与Flash全擦除,擦除之后32个字节的密码口令全为0xFFH。这样使得用户的程序代码受到完全的保护,而且芯片也能保持应用的灵活性。   对于MSP430系列Flash型单片机,依靠RST/NMI引脚与TCK引脚(有的型号如MSP430F11x1使用TEST引脚)和一定的时序就进入标准的复位过程,即使用地址0FFFEH处的RESET向量,然后进入正常的程序入口。改变RST/NMI引脚与TCK引脚的时序配合,就可以启动BOOTSTRAP,即地址0C00H处的BSL RESET向量用做程序入口,单片机执行BOOT ROM里的程序。MSP430F13x/14x的正常复位时序如图1所示,BSL复位时序如图2所示。   如果发生以下情况,则不能启动BSL:   ◇ 在RST/NMI引脚保持为低时,TCK引脚上出现的上升沿少于2个;   ◇ 当RST/NMI引脚电平从低跳变到高时,TCK引脚还是保持为高;   ◇ JTAG接口已控制了MSP430的资源;   ◇ 因Vcc下降引起POR(复位)。   退出BOOTSTRAP时,要释放单片机的程序计数器PC,有两种情况:一种是在BSL中使用加载PC命令,从指定的程序地址继续执行;另一种是用标准的RESET序列强制使MSP430用0FFFEH的向量地址开始执行程序。图32 BOOTSTRAP的软硬件结构 2.1 BOOTSTRAP的硬件结构   BOOTSTRAP硬件完成PC机和MSP430单片机通信的接口功能,主要由电源供电、信号接口和电平转换几个部分构成。   MSP430采用的是3.3 V电源,BOOTSTRAP可以采用外部给单片机供电再将电引到BOOTSTRAP板上,或直接利用PC机串口的电压再转换成3.3 V的方案。利用PC机串口电压的方案由于不需要外部供电,适用于批量下载、修改程序,使用方便。PC机通过串口和MSP430通信,串口用的是232电平,MSP430单片机用的是3.3 V的供电系统,因此存在一个电压转换的问题。对于电压转换,TI公司提供两个系列的电压调整芯片TPS770xx和TPS760xx系列。这两款芯片都能满足输入从 -0.3~13.5 V,稳定输出50 mA 电流1.2~5 V的要求。   BOOTSTRAP使用的信号线与串口信号线的对应情况如表1所列。信号线与MSP430系列引脚的对应情况如表2所列。表1  引脚名 全名(PC) BSL对应接口功能 RxD Receive data 发数据到PC TxD Transmit data 从PC收数据(负电压) DTR Data terminal ready 复位控制(正压) RTS Request to send TEST或TCK控制(正电压) GND Ground 地 表2  信号线 MSP430 11x(1)系列 F14x/F13x系列 F4xx系列 TXD P1.1 P1.1 P1.0 TCK 不连 TCK TCK RXD P2.2 P2.2 P1.1 RST RST/NMI RST/NMI TST/NMI TST Test   不连 2.2 BOOTSTRAP的软件结构   对于PC机来讲,主要就是解决通过串口与MSP430通信和可视化界面的问题,可以使用VC、VB、Delphi等各种软件开发工具,界面如图3所示。   对于MSP430来讲,与PC机进行串口通信,接收、发送数据与擦写Flash的程序是已经固化在BOOT ROM里的,所以必须根据MSP430的设置来编写上位机程序。启动BSL后,MSP430会首先关闭看门狗、关中断、定义基础时钟模块,由DCO(Digitally-Controlled Oscillator)产生系统主时钟脉冲MCLK和辅助时钟脉冲SMCLK,使最小时钟频率为1.5 MHz。用TIMER_A做软串口实现与PC机通信,建立软件异步通信协议,连续模式,时钟源为MCLK,DIV=1,CCR0用于比较,CCTL0用于查询CCIFG0标志。P1.1为TX发送端(设置为输出高),P2.2为RX接收端(设置为输入)。BSL初始化系统后,处于就绪状态,等待PC机的同步序列和第一个命令。BOOTSTRAP的串口设置如表3所列。表3  波特率/baud 9600 数据位/b 8 奇偶校验 偶校验 停止位 1   PC机设置好串口之后就可以发一个字节的同步信号给MSP430,MSP430正确接收后会返回一个ACK应答信号,PC机判断这个应答信号正确后就可以按照设定的帧格式发送、接收数据,MSP430每收到一帧,也会发一个应答信号以供PC机确认。其帧格式如图4所示。   BSL的程序代码在BOOT ROM中(0C00H…0FEFH),0FF0H…0FFFH保存有芯片的标识,其中BOOTSTRAP的版本信息就存储在地址为0FFAH的地方。BSL的初期版本(1.10及其以下)需要一些补丁来写Flash(参见TI有关资料Bug Ids:BSL2、BSL3和BSL4),其补丁也是MSP430的程序代码。先将其写到RAM中,使用LOAD PC的命令,将目标程序的起始地址装入程序计数器中,就可以执行补丁程序了。然后,在程序最后加一句跳转到0x0c00的语句就可以返回BOOTSTRAP了。通过这种方法,用户也可以自己对BOOTSRTAP做一些改动,以满足用户实际应用中的需要。3 熔断操作   MSP430Fxx的芯片中设置有保护熔丝。熔断需要在TDI引脚上加上一个6.5 V±0.5 V的电压再加上一定的时序才能进行,一般采用PC机发出时序。TI的开发工具中,串口JTAG编程器能熔断,但它不能在线仿真。用户可以自己制作一个全套的开发工具,使之具有TI所有开发工具的功能。   烧Flash的熔丝不能简单地以硬件给引脚加高电压实现,还需要用软件对MSP430发出指令来配合。以MSPF14x/13x为例,首先,通过IR_SHIFT指令使JTAG口控制MSP430单片机,通过DR_SHIFT_IN将TDO/TDI脚设置成TDI,发出指令IR_SHIFT(“IR_PREPARE_BLOW”)后等待1 ms,再将熔断电压Vpp加在TDI脚上,送IR_SHIFT(“IR_EX_BLOW”)后再等1 ms就可以将Vpp移开了。具体指令情况可以参见TI文档。 4 小 结   据了解,目前BSL的工具国外有SOFTBAUGH公司和GESLER公司制作的;国内也有杭州一家公司制作的BSL与熔断的综合工具,目前正在测试中。不过对于入门级的用户或个人,只要稍有一些软硬件制作能力,就完全可以花很短的时间来制作自己的开发工具,包括JTAG控制器、BSL和熔断器。

    数字电源 加密 MSP430 功能 熔断 bootstrap 写入 串行 电源技术解析

  • 基于凌阳单片机的语音信号实时采集

    摘要:语音信号采集是语音信号处理的基础。本文利用凌阳公司16位单片机——SPCE061A所具有的数字信号处理(DSP)功能及其所提供的音频压缩函数库来实现语音信号的实时采样与压缩;通过RS232接口,将采集到的语音信号实时上传到PC机中存储。     关键词:语音信号处理 RS232 串口通信 语音采样 语音压缩 引言 随着单片机集成化程度的不断提高,现代单片机已经具备了数字信号处理功能,使语音信号处理用单片机实现成为可能。台湾凌阳科技公司(SunPlus)推出的一款SPCE061A就是这样的产品。SPCE061A是以μ'nSP TM16位微控制器及信号处理器芯片为内核的16位单片机,采用模块式集成结构,片内集成了2KB RAM、32KB Flash、ADC、DAC、并行I/O等,特别适合语音信号处理。本文介绍如何实现用SPCE061A单片机采集语音信号,并传送到PC机中的方法。1 硬件系统结构 1.1 SPCE061A结构 SPCE061A的内部结构如图1,其特点如下: *16位μ'nSP TM微控制器; *工作电压:VDD为2.6~3.6V(CPU),VDDH为VDD~5.5V(I/O); *CPU时钟为0.32~49.152MHz; *内置存储器:SRAM为2KB,内存Flash为32KB; *可编程音频处理; *2个16位可编程定时器/计数器; *7通道10位ADC(内置麦克风放大和自动增益控制功能); *2个10位DAC; *32路可编程通用输入输出端口; *串行输入输出接口; *低电压监测/低电压复位功能; *14个中断源可来自定时器、外部时钟输入、键唤醒等; *内置在线仿真电路ICE。 1.2 SPCE061A开发方法 SPCE061A的开发是通过在线调试器PROBE实现的,如图2所示。它利用了SPCE061A内置的在线仿真电路ICE和凌阳公司的在线串行编程技术。如果读者想要使用该芯片及开发系统,可上网www.unsp.com.cn查询,并寻求大学计划的免费支持。 1.3 语音采集的硬件电路 语音采集的硬件电路如图3所示。MIC采用驻极体电容话筒,这种话筒具有灵敏度高、无方向性、重量轻、体积小、频率响应宽、保真度好等优点。 与PC机的串行通信用SPCE061A的UART接口,用MAX232芯片进行电平转换,即可实现RS232通信。2 软件设计与实现 2.1 语音信号的采集压缩与数据传输 (1)语音信号的采集压缩 语音信号处理的基础是对语音信号进行数字化,并采样存储。SRCE061A内置专门用于语音信号采集的自动增益控制放大器(AGC)的麦克风输入通道(MIC_IN)。语音信号经麦克转换成电信号,由隔离电容隔掉直流成分,然后输入至内部前置放大器。SPCE061A内部自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增器时,AGC电路自动减小放大器的增益;当输入信号减小时,AGC电路自动增大放大器的增益,以便使进入A/D的信号保持在最佳电平,又可使谐波减至最小。 ADC初始化程序如下: INT OFF; R1=0x0030; [P_TimerA_Ctrl]=R1; //时钟频率为CLKA的fosc/2 R1=0xfa00; [P_TimerA_Data]=R1; //采样率为16kHz R1=0x003d; [P_ADC_Ctrl]=R1; //设置AGC功能 R1=0x00A8; [P_DAC_Ctrl]=R1; //采用自动方式且通过MIC_IN通道输入,通过定时器A的溢出锁存数据,ADC为自动方式 R1=0x1000; [P_INT_Ctrl]=R1; //开中断IRQ1_TM INT IRQ;图3 语音采集的硬件连接图    采样后的数字语音信号数据量非常大,且由于语音信号采样点幅度分布的非均匀性和样本间的相关性等原因,使语音信号中含有大量的冗余信息。因此,在实际应用中采用各种信源编码技术来消除语音信号的冗余度。语音编码方法主要有波形编码、参数编码和混合编码。 *波形编码的基本原理是以波形逼近为原则,在时域上把幅度样本分层量化并用代码表示;特点是语音质量高、抗噪性强编码率高,适于语音及高保真音乐。 *参数编码是基于某种语音产生模型,在编程端分析出该模型参数选择适当的方式进行编码;特点是语音质量差、抗噪抗弱和编码率低。 *混合编码综合了波形和参数编码之优点。 凌阳SPCE061A提供了压缩算法库——SACMLIB(见表1),其处理的语音信号范围是200Hz~3.4kHz的电话语音,并将A/D、编/解码、存储及D/A做成相应的模块,对于每个模块都有其应用程序接口API。表1 SACM-LIB库中模块及其算法 模块名称 压缩算法 采样率/kHz 语音压缩编码率/Kb/s 用   途 SACM_A2000 子带编码 16 16、20、24 播放语音及高保真音乐 SACM_S480/S720 CELP混合编码 16 4.8、7.2 播音 SACM_S240 参数编码 24 2.4 播音 SACM_MS01 FM音乐合成 16 16、20、24 音乐合成 SACM_DVR 子带编码 16 16Kb/s的传输率,8Ksps的采样率 ADC信道录音和DAC放音 (2)语音数据的传输 SPCE061A的通用异步串口(UART)提供了一个8位全双工标准接口,用于完成SPCE061A与外设之间的串行通信。借助于IOB口的特殊功能和UART IRQ中断,可以同时完成UART接口的接收与发送数据的过程。根据应用需求,把UART设置为中断方式接收数据,以查询方式发送数据。 UART初始化程序InitUART()见网络补充版(http://www.dpj.com.cn)。 2.2 上位机控制和存储模块 目前,Mircosoft公司的VC++6.0是基于Windows程序设计的主流开发工具之一。VC++不仅秉承了C++简便、灵活及面向对象等优点,而且提供了功能强大的MFC类库,并能自动生成应用程序框架,提供标准化的程序结构和用户接口。特别需要指出的是,为了今后调用低层的音频处理API函数,对由下位上传的音频数据进一步进行语音识别方面的处理,我们使用VC来编写上位机的控制及存储程序。 在实验室和工业应用中,RS232串口是常用的计算机与外部串行设备(单片机)之间的数据传输通道,由于串行通信简单易用,所以应用广泛。通常在VC++中有三种方法可以实现串行通信: *使用VC++的标准通信函数_inp和_outp来实现串口通信; *把串口看成是一个特殊的设备文件,使用有关文件处理的API函数来实现串口通信; *使用ActiveX的串行通信控件MSComm来实现串口通信。 对于本实例来说,主要考虑的因素是实时语音数据存取,以及位机与下位机的配合。因此,采用了串行通信MSComm控件方法来实现串口通信。另外,可以采用二进制流文件Cfile类来存储声音文件。具体步骤见网络补充版。 结语 通过以上实例录制的语音数据,可以从PC机下载到SPCE061A中(或者作为资源文件放入工程中),使用SACM_A2000模块的函数播放验证,效果能够满足进一步语音信号处理需要。 用凌阳SPCE061A处理语音信号有如下独特之处: *硬件电路简单,因SPCE061A是一款专门为语音信号处理设计的,麦克和喇叭可直接接入,用户不必外接放大电路等; *软件编程容易,有相应的API函数,可直接调用。 *用ICE和图形界面编译软件,调试方便。

    数字电源 语音 信号 凌阳 采集 基于 实时 单片机 电源技术解析

  • 单片机控制的数字触发器

    摘要   介绍了8051单片机在晶阐管触发电路中的应用,同时有单片机与上位机进行串口通讯的软件设计。由软件控制可产生不同顺序的6组触发脉冲。 关键词   单片机  VB  晶阐管  数字触发器     电力电子技术研究的内容包括三个方面:电力电子器件、变流电路和控制电路。电力电子变流技术在工业化领域有着广泛的应用。家用电器节能灯、电子拖动、电炉控制系统中已采用相控整流技术。但多数触发装置普遍是模拟的,调节十分的不便,触发精度差、故障率高。采用单片机来控制晶阐管的触发,是晶阐管应用的发展趋势。本文介绍了一种由8051单片机组成的触发控制系统,可实现高分辨率的数字触发器。     1 系统硬件组成及其原理     系统硬件组成如图1,被控对象是三相全控桥整流电路。控制电路由8051单片机及其外围电路组成。外围电路主要是由键盘电路、同步脉冲形成电路、驱动输出电路等组成。     1.1 控制角θ     控制角θ是滞后自然换相点的电度角,在工频条件下,它和时间Tθ有如下关系:      Tθ=T/360*θ=(20*θ)/360=0.056ms    其中T是工频电源周期,θ是控制角。     由上式可知,只要知道控制角就可以算出定时时间Tθ,采用定时计数器来完成对控制角的定时。8051单片机有两个定时计数器,可由程序选择作为定时器用或作为计数器用,定时时间或计数值也可由程序设定。随便选择定时或计数方式,其实质都是一样的。     如果选择的是方式1的话,定时时间可由下式计算     Td=(65536-x)*Tcy      其中Tcy=1μS  因为采用的是12MHz的晶振,x是计数值。     分辨率为:φ=360/T*Tcy=0.018(度)     方式1是16位的定时器,其最大的定时角度为:     θmax=0.018*65536=1179.648(度)     从上面可知,不论是分辨率还是移相范围都能达到令人满意的结果。     1.2同步脉冲形成电路     由于触发脉冲的自然换相点要与三相电源的线电压的过零点同步,所以要由同步脉冲形成电路产生同步脉冲。     电路如图2所示,交流电经过降压后,由LM339过零比较器进等过零检测,然后经过光电隔离各微分电路输出脉冲信号,加到单片机外部中断引脚去作为同步信号。 同步脉冲形成电路主要由过零比较器、同步变压器及整形电路组成。三相交流电源经过变压器降压后从副边输出,然后送到过零比较器电路,在每一个电源周期的过零点将输出两个同步脉冲,一个周期内,三相电源将输出6个同步脉冲,这6个同步脉冲在相位上相差60度,在时间上就会相差3.333ms,它们就每隔3.33ms加到单片机的外部中断引脚INT0上。由于在三相桥式全控桥电路中,它的自 然换相点是线电压的过零,所以加在过零比较器电路的是线电压。     1.3  触发脉冲形成电路 根据三相桥式整流电路对触发脉冲的要求,必须对应导通的一对晶阐管同时加触发脉冲。常用的方法有两种:一种采用宽脉冲触发,它要求触发脉冲的宽度大于60度;另一种采用双脉冲触发,即触发一个晶阐管时向小一个序号的晶阐管发补脉冲。关系如下: 触发的晶阐管    V1      V2      V3       V4      V5      V6 补发的晶阐管    V6      V1      V2       V3      V4      V5 在本文中将采用双脉冲触发方式,因为60度的脉宽在单片机中所对应的定时是比较长的,所以此方法不佳。采用双脉冲触发是,就要在软件设计时用标志旗的方法来标注,特别是V1,因为它并不是V0,它是V6,其余的都是Vn和Vn-1。 1.4  驱动电路 驱动电路主要由光电隔离和脉冲变压器组成。 2软件设计 2.1单片机部分 软件设计的流程图如下:采用双脉冲触发是,就要在软件设计时用标志旗的方法来标注,特别是V1,因为它并不是V0,它是V6,其余的都是Vn和Vn-1。 流程图如下: 设控制角为α,为使可靠触发,触发脉冲脉宽为15度,那么每一个周期的第一个脉冲上升沿所对应的时间Tup=α*T/360,其下降沿时间Tlow=(α+15)*T/360。这样只要定时器定相对的时间,就可以得到准确的触发脉冲。在编程时可以用计数的方式,把定时方式改为计数,Cup 、Clow。. 程序片段: ;***********输出触发脉冲程序*************  ORG     0003H          AJMP    P_INT0          ORG     0030H P_INT0:          MOV  TMOD,#11H          MOV  TH0,#CUP_H    ;上升沿计数值高位          MOV  TL0,#CUP_L    ;上升沿计数值低位          MOV  TH1,#CLOW_H  ;下降沿计数值高位          MOV  TL1,#CLOW_L   ;下降沿计数值低位          MOV  IE, #8FH                  SETB  TRO                      SETB  TR1                  SJMP  $ ;********定时器0中断****************** ORG     00BH T0_SERVE:           SETB  P1.6           RETI ;********定时器1中断****************** ORG     001BH T1_SERVE:           CLR   P1.6           RETI 2.2 上位机部分 用VB打开一个窗口,上面建立一文本框,端口选择框,以及打开一个MSComm控件。用于上位机给下位机发触发角。 3外围电路 组合电路是从P1.6输出的同步脉冲与应该触发的晶阐管(P1.0~P1.5)脉冲相与,输出到驱动电路,这样就可以得到期满意的触发脉冲。 键盘显示电路是在无上位机的情况下,由自制键盘输入,并在LED上显示控制角。 采用单片机控制触发电路是未来晶阐管触发电路的趋势。但在环境恶烈的地方安全性不高。不过应用在实验室却是一种非常好的手段。  

    数字电源 数字 控制 触发器 单片机 电源技术解析

  • 单片机系统中的汉字显示

    摘要:需要显示的汉字较多时,单片机系统中的汉字编码非常繁琐。本文介绍一种直接利用PC机的汉字内码作为单片机系统的汉字编码,以简化系统的设计。     关键词:单片机 液晶显示器 29F040 汉字显示 引言 在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。针对这种情况,本文提出了一种十分简单的方式——直接利用PC机的汉字内码作为单片机系统的编码。下面以8031单片机系统为例阐述如下: 一、硬件组成 本系统中采用香港精电公司的内置T6963控制器[1]的240128T点阵图形液晶显示器。该显示器1行为240点,能容纳16×16点阵的汉字15个,总列数为128点,能显示8行汉字。为了使用MCU操作可使用1片512KB的存储器(如本系统中的29F040)用来存储全部的国标16×16点阵汉辽、8×16的ASCII码点阵数据以及汉字语句编码数据。为了降低成本和减小体积,对于速度要求不是很高的场合也可采用大容量的串行数据存储器,如AT45DB041B。具体的硬件控制电路如图1所示(与汉字显示无关的电路略)。 由于29F040的容量为512KB,而5031微控制器只能管理64KB的数据间,所以可将29F040分成16页,每页32KB,占单片机系统数据空间的8000H~0FFFFH(剩余32KB为单片机系统的其他存储器和外设)。页码由单片机的P1.0~P1.3选择。液晶显示器的地址为7FF8H~7FF9H。二、汉字显示原理及软件设计 UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。 在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。 例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。 在本单片机系统中,起始地址的高4位为页号,送P1口,低15位为数据区地址,送指针DPTR。利用“MOVX”指令连续取32个字节送LCD的相应位置,就能实现正确的汉字显示。 ASCII码的显示与汉字的显示基本原理相同。在文件ASC16中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,只是每个ASCII码在文本文件中只占1个字节且小于80H,而且ASCII码为8×16点阵,所以在ASCII16文件中,每个ASCII码的点阵也只占16个字节。 首先提取16×16的国标汉字点阵和8×16的ASCII码点阵(如UCDOS软件中的HZK16和ASC16)并将其直接写入29F040。其中HZK16(共256KB)点0~7页。为了便于编程,ASC16虽然只有4KB,也单独占用第8页。其余剩下的空间用来存储汉字语句的编码。 由于240×128点阵的LED显示器每个只能显示15个汉字(16×16点阵汉字),即30个字节。所以可将需要显示的语句按30个字节为1行进行编写,不足30个字符的则补空格。在PC机上进行录入时,每行30个字符再加上回车键和换行符,实占32个字符。所录入的语句以纯文本形式存盘,再将该文本文件以二进制的形式写入29F040的第9页。那么,以后根据需要显示的语句行号便可以进行正确的显示。此,作者推出荐使用DOS版本的WPS软件的“编辑非文收文件”功能,它能清楚地显示每行是否有30个字符。 根据以上原则,显示1行汉字的具体程序框图如图2所示。    为方便读者,将已经在实际应用中中通过的汇编子程序列出如下(关于LCD控制器T6963的用户法请见参考文献1)。 LCDCOM EQU 7FF9H LCDDAT EQU 7FF8H ;显示1行汉字子程序 ;汉字语句位置编号DPTR;行号:R6 PRHZ:MOV 24H,DPH MOV 25H,DPL PUSH DPH PUSH DPL MOV A,DPH ;计算页号 RR A RR A ADD A,#9;从第9区开始存放每行字符的机内码 ORL A,#0F0H MOV P1,A LCALL RL245 ;行号乘以32(每行32个字符) SETB 24H,7 ;数据地址位于8000H~0FFFFH MOV DPH,24H MOV DPL,25H MOV R0,#0E0H MOV R7,#30 ;连续取出30个字符至0E0H内部数据存储器 PRHZ3:MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R7,PRHZ3 MOV 1DH,#30 ;显示0E0H后的一行字符(共30个) MOV R5,#0 ;当前列R5 MOV R0,#0E0H MOV A,#7FH ;是否为ASCII码? CLR C SUBB A,@R0 JC DPHZ1 MOV 26H,@R0 INC R0 MOV 24H,R6 ;ASCII码显示 MOV 25H,R5 LCALL PRASCII SJMP PRHZ4 DPHZ1:MOV 24H,@R0 ;是汉字则将机内码送24H25H INC R0 MOV 25H,@R0 INC R0 MOV A,25H CLR C SUBB A,#0A1H ;机内码转换为二进制的区码和位码 MOV 25H,A MOV A,24H CLR C SUBB A,#0A1H LCALLDPONHZ ;显示1个汉字 DEC 1DH INC R5 PRHZ4:INC R5 DJNZ 1DH,PRHZ5 POP DPL POP DPH RET PR0:MOV DPTR,#LCDCOM ;读状态 MOVX A,@DPTR RET PR01:LCALLPR0 ;读、写一数据前 JNB ACC.0,PR01 JNB ACC.1,PR01 RET PR02:LCALL PR0 ;连续读前 JNB ACC.2,PR02 RET PR03:LCALL PR0 ;连续写前 JNB ACC.3,PR02 RET PR1:LCALL PR01 ;双字节参数R2,R3 MOV A,R2 LCALL PR14 PR11:LCALL PR01 ;单字节参数R3 MOV A,R3 LCALL PR14 PR12:LCALL PR01 ;无参数指令R4 MOV A,R4 SJMP PR15 PR14:MOV DPTR,#LCDDAT PR15:MOVX @DPTR,A RET RL245:MOV R7,#5 ;24H25H左移5 RLL1:CLR C MOV A,25H RLC A MOV 25H,A MOV A,24H RLC A MOV 24H,A DJNZ R7,RLL1 RET ;行位置R6(0~7),列位置R5(0~29),汉字区别24H,位码25H DPONHZ:MOV A,24H ;显示1个汉字 MOV B,#94 ;每区94个汉字 MUL AB ADD A,25H MOV 25H,A CLR A ADDC A,B MOV 24H,A RR A ;获得32KB为1页的页号 RR A ORL A,#0F0H MOV P1,A ;页号送P1口 LCALL RL245 ;汉字序号乘以32 SETB 24H,7 ;因为存储器位于单片机系统的7FFFH~0FFFFH MOV DPH,24H MOV DPL,25H MOV R2,#32 ;在该位置连续取出32个字节 MOV R1,#0C0H DPHZ2:MOVX A,@DPTR INC DPTR MOV @R1,A INC R1 DJNZ R2,DPHZ2 MOV R1,#0C0H MOV A,R6 ;根据行列位置计算LCD指针 MOV B,#16 MUL AB MUL B,#30 MUL AB ADD A,R5 MOV 25H,A MOV R2,A CLR A ADDC A,B MOV 24H,A MOV R3,A MOV 26H,#16 ;将取出的点阵送LCD显示 PRHZ6:MOV R4,#24H LCALL PR1 ;双字节参数R2,R3 MOV A,@R1 MOV R3,A INC R1 MOV R4,#0C0H LCALL PR11 ;单字节参数R3 MOV A,@R1 MOV R3,A INC R1 MOV R4,#0C0H LCALL PR11 MOV A,#30 ADD A,25H MOV R2,A CLR A ADDC A,24H MOV R3,A MOV 24H,A DJNZ 26H,PRHZ6 RET 注:由于以上程序直接引自下面的应用实例,调用以上程序时请让寄存器组位于第2区,即R0对应10H。 三、应用实例 我们应用本文介绍的方法成功地进行了某医疗仪器的设计。该设计要求具有完整的中、英文字符提示和汉字处方显示,并尽可能地为今后的功能扩展和处方修改留有余地。目前仪器中用到的汉字约1200个,语句行为1300行左右,而且用户认为利用工控PC机设计成本过高,要求尽可能地降低成本。显然,对于该系统利用传统的汉字处理方式进行设计虽然能节省一定的存储空间,但庞大的汉字和语句重新编码工作却让人望而生畏,而且当处方修改须要用到新的汉字时相当麻烦。我们利用8031单片机系统和本文介绍的方法进行设计,整个硬件电路和底层程序设计只用了1周的时间,大大地缩短了开周期。而且由于本系统可调用所有的ASCII码和全部汉字库,所以对于功能的扩展和处方的修改十分方便。

    数字电源 显示 汉字 单片机 电源技术解析 系统

  • 80C51便携式产品中的低功耗设计

    摘要:通过一个使用钮扣电池的PDA产品的设计实践,介绍80C51系列单片机的低功耗设计理论、原理和使用电池的便携式产品的低功耗设计方法及技巧。     关键词:单片机 80C51 PDA 功耗 液晶 前言 80C51单片机由于功能全面、开发工具较为完善、衍生产品丰富、大量的设计资源可以继承和共享,得到广泛的应用。我们设计的一款手持线PDA产品,也选择80C51单片机作为主、辅CPU,还具备点阵液晶显示屏、导电橡胶键盘、双IC卡接口、EEPROM存储器、实时时钟和串行通信口。由于使用80C51单片机开发,高级语言编程,大大降低了设计的技术风险,产品在较短的时间内就推向了市场。 但是,同一些低速的微控制器(如4位单片机)和高速的RISC处理器相比,80C51单片机在功耗上没有优势。为了在PDA类产品中发挥80C51单片机的上述特长,我们通过采取软、硬件配合的一系列措施,加强低电压、低功耗设计,取得了良好的效果。该机使用一颗3V钮扣式锂电池,开机时工作电池小于4mA,瞬间最大工作电流小于20mA,瞬间最大工作电流小于20mA,关机电流小于2μA。一颗电池可以使用较长的时间,达到满意的设计指标。 一、低电压低功耗设计理论 在一个器件中,功耗通常用电流消耗来表示。下式表明消耗的电池与器件特性之间的关系: Icc=C∫Vda≈ΔV·C·f    (1) 式中:Icc是器件消耗的电流;Δ是电压变化的幅值;C是器件电容和输出容性负载的大小;f是器件运行频率。 从公式(1)可以得到降低系统功耗的理论依据。将器件供电电压从5V降低3V,可以至少降低40%的功耗。降低器件的工作频率,也能成比例地降低功耗。 80C51的器件电流包括两部分:核心电流和I/O电流,即: Icc=ICORE+II/O    (2) 核心电流是内部晶体管开关和内部电容充放电所消耗的电流,占有器件电流的较大比例。 ICORE=Vcc·CEQ·f    (3) 式中:Vcc是器件工作电压;CEQ是内部结点和走线的电容,它是器件的固有属性,可由式(3)在一定的电流、电压和频率测试值下计算出来;f是核心工作频率。 I/O电流主要是地址/数据总线、RD、WR和ALE信号消耗的电流,在器件电流中占的比例较小,其数值有以下经验公式: II/O=IREAD·(0.8)+IWRITE·(0.2)+ICONTROL    (4) IREAD、IWRITE分别是读写状态的I/O电流;ICONTROL是控制信号RD、WR、ALE的电流。以写状态I/O电流为例: IWRITE=(V·C·f)·(1/n)·(X+Y)    (5) 式中:V=Vcc;C是每个引脚的负载电容和电路板的线路电容,大约2pF/in(in为英寸);f是CPU工作频率;n=24,每个总线周期所花费的机器周期数;X是寻址阶段变化的引脚数;Y是传输数据阶段变化引脚数。 二、PDA类产品中CPU的选择 近年来80C51衍生产品涌现出许多低电压、低功耗品种,各具特色。如:ATMEL公司AT89LV5X系列,程序存储器4KB~20KB;PHILIPS公司LPC系列,高速低耗,片内集成的多种低功耗功能,极有阶段,但程序存储器空间只有2KB或4KB;台湾华邦公司W78LE和W77LE系列,有8~64KB程序空间和普通/高速多种型号可以选择。选择合适的CPU还有与后介绍的各项低功耗设计技术的使用有关,与软件规划和正确编程有关。 在开发过程中,我们经过试用和比较,发现适合PDA类产品应用、性能价格比最高的选择是华邦公司的W78LE516。W78LE516是华邦公司2000年发由的新产品,它有以下特点适合PDA类产品: ·工作电压2.4~5.5V,适合便携式产品的供电方式; ·全静态设计,工作频率从0到最大40MHz,适合低功耗产品的特殊要求; ·64KB可多次编程的片内应用程序存储器,非常适合于较大的程序和高级语言编程; ·4KB片内引导程序存储器,用于实现应用程序的在线编程; ·比80C52多一倍的512字节片内RAM,其有256字节AUX RAM; ·PLCC和QFP封装比通常的80C51多4个I/O口,P4口具有多种功能; ·完善的低功耗模式,特别是中断能够唤醒掉电模式; ·可靠的加密编程,保护开发者的知识产权和劳动成果。 三、晶振频率是决定功耗的基本环节 在5V电压下运行于12MHz的80C51,工作电流达到十几mA,无论如何难以在电流供电环境中使用。从公式(3)和图1可以看出,工作电流与晶振频率成严格的线性关系,空闲、掉电模式的电流也有类似的线性关系。因此,尽可能地降低晶振频率能够有效地降低整机电流;但是,降低晶振频率往往会受到系统运行速度的制约,需要综合考虑各部分的工作速度和整机信息算是的速度,选择一个合适的最小晶振频率。例如,128X64点阵液晶采用并行总线访问时,整屏汉字显示刷新需要80C51单片机2MHz的时钟频率才不会感觉响应迟钝;如果采用串行方式,显示还会更慢;串行EEPROM是串行访问数据的,还有起始停止位、地址选择、应答位等开销,读写时间较长;复杂算法对系统运行速度也有较高要求。考虑到串行通信波特率精确计算,我们最终确定晶振频率为3.686MHz,最大通信波特率可达到19200bps。在这一时钟频率下,78LE516的运行电流大约为3mA。四.电压与CPU功耗成正比 从式(3)还可以看到,降低80C51的供电电压能够成比例地降低功耗。由图1可知,选择3V供电电压要比5V供电电压的功耗下降一半。随着低电压CPU的选择,其它部分也要选择低电压的型号。我们选择的器件全部可以工作到2.7V,最终确定工作电压为3V,由稳压电路提供稳定的输出。此外,值得一提的是,3.3V也是一个较好的选择,因为3.3V是W78LE516在线编程(ISP)的电压下降,ISP是一个很有价值的功能,并且3.3V电压一睥器件也较容易得到。 五、让空闲模式和掉电模式占用更多的时间 80C51有三种工作模式:运行模式、空闲模式和掉电模式。正确编程以便使80C51在较多的时间内工作在后面两种模式下,是PDA类产品降低功耗的有效途径。对于W78LE516,2.4V供电电压和12MHz时钟频率下,三种模式的电流消耗如表1所列。表1  模式 运行 空闲 掉电 电流(max) 3mA 1.5mA 20μA 低功耗的软件原则是让运行模式远比空闲、掉电模式少占用时间,尤如一个占空比很小的脉冲,消耗的能量较少。在开机状态下,靠中断唤醒CPU,在短暂的时间内工作在运行模式,处理相应的事件,然后进入空闲(或掉电)模式;在关机状态下,完全进入掉电模式。 PDA类产品的主要机时占用是显示和按键的交互操作。仅在较短的时间内有大量的计算,需全速运行,显示也是瞬间完成,大部分时间花在等待按键上。如果采用查询方式,CPU钭以运行模式等待按键,耗电较大;如果采用中断方式,则可以由中断唤醒CPU,让较长的等待按键时间,都处在空闲模式(或掉电模式)。 中断有两种实现方式:一种是键盘接到外部中断引脚,外部中断唤醒CPU;一种是采用定时器中断,定时唤醒CPU,完成键盘处理和其它工作后CPU又进入休眠状态。 令人耳目一新的是,通常的80C51从掉电模式唤醒到运行模式,只能靠硬件复位;而78LE516可以通过第二途径——中断INT0和INT1来唤醒,这对于PDA类产品权为有利。因为掉电模式的功耗,会比空闲模式小2~3个数量级,整机功耗将会进一步降低。类似的功能在PHILIPS公司的PLC系列低功耗单片机中也提供。 六、外围器件的合理使用 由于外围器件的使用不是很频繁,所以要选择带片选功能的外围器件, 不使用它们时进入低功耗模式。 减少外围器件的使用是PDA类产品降低功耗、减小体积的积极办法,但这要视系统可行性而定,并需要软件的配合。例如,使用78LE516内部64KB程序空间,对中等规模的系统已经足够,可以不使用外部程序存储器;使用好78LE516内部RAM,尤其是比80C52多出的内部256字节AUX RAM,可以节省外部RAM和寻址电路,这需要对软件很好地规划;78LE516的P4口可以义为指定外部地址的设备片选信号,可以节省外部地址译码电路。 不可小视CMOS器件未使用的输入口。一个悬空的输入端不但可能因为其高输入阻抗而感应电荷,损坏器件,而且可能造成不断唤醒CPU,不能进入掉电模式。假如输入口感应到较高频率的信号。增加的电流甚至高达20mA。这一结论从公式(1)的理论和开实践都可以验证。正确的处理办法是将未使用的输入接到Vcc或地。 七、关机后关断整机电源 对于钮扣电池供电的设备,关机态的电流消耗也是不可忽略的。10μm的关机电流累积一个月,就会消耗大于6%的电池容量。 关断整机电流的简单方法是用CMOS触发器控制一个晶体管做的电子开关,通常开关三极管的截止电流小于500mA。    图2是我们设计的智能电源控制电路,靠一个耗电极少的单片机PIC12LC508A控制晶体管电子开关和DC-DC变换器,可以实现单键开关机、自动关机、禁止关机、定时开机等功能。 现在,越来越多的电池变换芯片具有SHUT DOWN引脚和电流与负载断开的功能。采用这一特性实现的电路,使用与图2类似的原理,关机电流也可以达到1μA以下。

    电源DC/DC 产品 功耗 便携式 80c51 设计 电源技术解析

  • 分时操作系统思想在单片机编程中的实现

    摘要:提出基于分时系统思想的单片机系统设计方案,给出一具体应用的实例以及详细的实现方法。     关键词:分时操作系统 单片机系统 作业调度 指针 前言   作为嵌入式系统主控单元——单片机,其软件往往是一个微观的实时操作系统,且大部分是为某种应用而专门设计的。系统程序有实时过程控制或实时信息处理的能力,要求能够及时响应随机发生的外部事件并对该事件做出快速处理。而分时操作系统却是把CPU的时间划分成长短基本相同的时间区间,即“时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用。如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所“停顿”;但用户察觉不出来,好像整个系统全由它“独占”似的。分时操作系统主要具有以下3个特点:① 多路性。用户通过各自的终端,可以同时使用一个系统。② 及时性。用户提出的各种要求,能在较短或可容忍的时间内得到响应和处理。③ 独占性。在分时系统中,虽然允许多个用户同时使用一个CPU,但用户之间操作独立,互不干涉。   分时操作系统主要是针对小型机以上的计算机提出的。一般而言,微处理器(MPU)驱动的通用计算机,系统设计人员对每一台的最终具体应用都是不得而知的,因此,在价格允许的情况下,硬件设计务求CPU时钟尽可能的快;计算及管理能力尽可能的强;程序和数据存储器的容量尽可能的大;各种计算机外设的配接尽可能的详尽等等,特别是采用分时操作系统的机器,因为是一机多用户的管理系统,它的要求就更高了。相对而言,微控制器(MCU)俗称单片机,是一个单片集成系统,它将这些或那些计算机所需的外设,诸如程序和数据存储器、端口以及有关的子系统集成到一片芯片上。从硬件上,单片机系统与采用分时操作系统的计算机系统是无法比拟的。但是,在单片机系统的设计中,设计人员对其最终具体应用是一清二楚的,它的使用环境相对是单一固定的。所控制的过程的可预见性为分时系统思想的实现提供了可能性。具体一点就是:虽然单片机的CPU速度较低,但其任务是可预见的,这样作业调度将变得简单而无须占用很多的CPU时间,同时“时间片”的设计是具体而有针对性的,因此可变得很有效。 一、单片机分时系统的设计   单片机系统往往是一个嵌入式的控制系统,因此目前绝大部分的单片机系统还是一实时系统。能够真正体现分时系统的设计思想的往往是那些多路重复检测控制系统。即便是在这些多路重复检测控制系统中,它的实时性也是非常重要的。也就是说,在单片机系统中应用了分时系统设计思想,但其及时性应首先进行考虑。     1.对单片机分时系统硬件设计的建议   随着单片机性能的提高,单片机系统设计中的一些硬件功能软件化是大势所趋。但同时,一日千里的芯片技术也为低成本的硬件完成高性能的功能提供可能。让一种功能到底是通过硬件实现还是通过软件来实现不能一概而论,只能是通过系统设计让整个系统的性能价格比最高才是每个单片机系统设计者孜孜追求的目标。   在单片机分时系统的硬件设计中,由于对系统的及时性的要求不能降低,而大多数单片机的处理速度相对而言是较慢的。因此,在接口硬件的设计上应采用一些能将信息量保持的器件,如触发器、锁存器。同时要求这些器件应该是三态门输出,因为是多路分时系统,当CPU没有访问到时,器件输出呈现高阻,以利于总线对其他器件的访问。还有,一些用软件比较费时的操作应转给硬件完成。如LED动态显示,没有必要一定用intel 8155或intel 8255硬件接口让软件时时为显示数字而煞费苦心,完全可以用intel 8279或MAX7218及MAX7219这些可编程外围器件来完成,使显示既漂亮又简单。当然,到底哪些功能留给硬件完成,哪些功能留给软件完成,应根据系统的不同而具体设计。总之,应总体考虑,追求最高的性能价格比。     2.单片机分时系统的软件设计   为了合理实现单片机分时系统,还须有完善的调度机制。完善的调度机制主要由调度指针和调度表组成。系统的调度分成两级,一是“路”的调度,相当于指示程序横向进行:从第一路的某一作业到第二路的某一作业,从第二路的某一作业再到第三路的某一作业……从最后一路回到第一路,循环往复。“路”调度的调度指针变化规律是固定不变的,算法简单,即递增一或递减一,循环到头后,再返回到起始。相对应的“路”调度指针还应构造“路”调度表。“路”调度表每一项表示各“路”程序入口地址及跳转指令。以MCS-51单片机为例,采用AJMP addr11作为每一项的内容,则调度表的每一表项占2个字节;当程序较长超过2K字节,则采用LJMP addr16作为每一项内容,占3个字节。所设计的单片机系统共有多少“路”,该调度表就有多少项数。二是作业调度,即相当于指示程序纵向进行:从某一路的第一作业指向该路第二作业,第二作业指向第四作业……也有从第六作业指回第三作业的等等。因稍复杂任务的流向都不可能是单方向性的,从上一作业流到下一作业都要根据系统的检测或运算结果来决定,因此作业调度指针的变化是随机决定的。作业调度表的构成形式与“路”调度表相同,每一项表示各作业模块的程序入口地址及跳转指令。作业调度表指示出各作业执行的一般先后次序,表项数等于一路任务的最大作业数。为了分清每路的任务进程,单片机系统要控制多少路就必须有多少个作业调度指针及相应作业调度表。以上两级指针都为1个字节的整数变量。调度指针与调度表的联系是通过指令JMP @A+DPTR实现的。DPTR中是调度表的首地址。累加器A中的内容是调度指针的整数倍,若表项内容是AJMP addr11,则A的值为调度指针乘2;若表项内容是LJMP addr16,则A的值为调度指针乘3。   除了以上主程序的调度设计外,各个作业中共同的功能应放在中断中实现,主要是放在定时器中断。如计时功能应放在定时器定时中断中实现,定时参数的选择应考虑到系统各个作业中各种计时的要求,定时频率一般为最小计时频率的整数倍。任何软件延时都是不允许的。 实现分时控制的关键是在于合理地将系统的功能分解成各个作业模块。作业模块分得越细系统的实时性就越好。虽然单片机的时钟频率较低,在实际应用中当各个作业模块被细分成各个“动作”及简单的运算后,分时系统的实时性是能得到保证的。缺点就是各“路”的控制处理程序被分割得支离破碎,模块化得不到保证。 二、应用实例     1.系统硬件及工作原理   宾馆用的视频点播系统VOD(Video On Demand)中,从各个机定盒送出的上行信号用DTMF码通过电话线传输到机房的主控制柜中的上行信号采集卡中。为了能同时接受多个用户的点播操作,上行信号采集卡必须有接受多路电话传输信息的功能,为此,笔者设计了8路电话采集卡,可同时接受8路用户的点播操作,系统硬件框图如图1所示。  每路大致的主程序是:检测到振铃信号后(即为振铃检测脚变低并保持8ms以上),继电器吸合,同时马上给机定盒回一接通信号——#键(保持400ms)。然后等待机定盒发送点播信息:客房号、点播的节目号,共4位DTMF码;若1s内无DTMF码收到(收到表示为解码芯片的DV脚变高)表示操作有误,继电器断开,状态位复原,作业指针回0。收齐4位DTMF码后将其整理并带上该路的标志,转化成3字节送到串行发送缓冲区,在定时器中断服务程序中发送。等待视频服务器回送应答信息,根据应答信息不同向机定盒回送不同的信息;若超时无应答也向机定盒回送一码(发码时间都为100ms)。最后,继电器断开,状态标志复原,缓冲区清0,作业指针也回到0。一个过程完成。     2.作业流程   为了能实现8路分时工作,最主要的工作是将这一过程细分成一个个作业。笔者通过设计把它分成8个作业,各作业的流程如图2所示。 以上每一作业返回后,“路”指针自动加1,到8后回到0,以保证分时工作合理。    3.几点技巧   8路电话信息采集卡的编程中,为了使程序更精练,笔者应用以下3个技巧: ① 因为这8路的工作是相同的,程序可以共用,只须再构造1“路”地址表,每一表项含有本路的输入锁存器地址、输出锁存器地址、DTMF码存放RAM地址、计时单元地址。这样可以省掉“路”调度表,因为各路相同作业的入口地址是相同的。根据“路”指针的不同,带入该“路”的地址表项,即可用相同的程序对8路分别控制操作。 ② 定时器中断设置成4ms一次,这是因为电话振铃是25Hz,检测脚保持低电平的时间为10ms,它是最低的计时值。当振铃检测脚低电平保持时间少于8ms时可认为是干扰。每一路都有自己的计时单元,每次定时器中断后,在定时服务自程序中各路计时单元自动加1。在上一次作业中将计时单元请0,下一次作业读出计时单元的值,延时值即为该值乘以4ms。这样任何延时都不占用CPU机时。 ③ 串行数据的发送和接收是8路共有的操作,采用共同的模块。数据的链接是通过开辟缓冲区实现的,有发送缓冲区和接收缓冲区,采用4800baud的波特率。一般程序的串行数据发送时,都须要检测TI位的变化来判断1字节数据发送是否完成,由此决定可否发下一字节数据。应用到分时系统是行不通的,这要占用CPU机时,因为采用4800baud的波特率,则每一字节的发送时间少于4ms。当发送缓冲区有数据时,可在定时器中断服务自程序中发送。每一次定时中断中发送1字节数据,当下一次定时中断来时,上一字节数据必定已发送完毕,可发送下一字节数据。无须检测TI位,也不占用CPU机时。数据接收采用串行中断,接收到的数据存放到接收缓冲区供各路查询。 结论   将分时操作系统的思想引入单片机系统,提出了一个针对多路检测控制的单片机系统软件编程。大大减低了系统的设计成本,提高了系统的性能价格比,并在实际应用中获得成功。

    数字电源 操作系统 编程 实现 分时 思想 单片机 电源技术解析

  • 基于单片机的电力监控系统交流采样技术的实现

      摘要:系统采用8031单片机实现电力参数的交流采样,通过LED显示器显示频率、电压、电流的实时值,在过压30%、欠压30%时进行声光报警,并能定时打印电压、电流及频率值。实践证明,采用交流采样方法进行数据采集,通过算法运算后获得的电压、电流、有功功率、功率因数等电力参数有较好的精确度和稳定性。     关键词:单片机 交流采样 频率跟踪 电力监测 随着电力系统的快速发展,电网容量的扩大使其结构更加复杂,实时监控、调芳的自动化显得尤为重要;而在电力调度自动化系统中,电力参数的测量是最基本的功能。如何快速、准确地采集各种电力参数显得尤为重要。 在实现自动化的过程中,最关键的环节是数据采集。根据采集信号的不同,可分直流采样和交流采样两种。直流采样,顾名思义,采样对象为直流信号。它是把交流电压、电流信号经过各种变送器转化为0~5V的直流电压,再由各种装置和仪表采集。此方法软件设计简单,对采样值只需作一次比例变换即可得到被测量的数值。但直流采样仍有很大的局限性:无法实现实时信号的采集;变送器的精度和稳定性对测量精度有很大影响;设备复杂,维护难等。交流采样是将二次测得的电压、电流经高精度的CT、PT变成计算机可测量的交流小信号,然后再送入计算机进行处理。由于这种方法能够对被测量的瞬时值进行采样,因而实时性好,相位失真小。它用软件代替硬件的功能又使硬件的投资大大减小。随着微机技术的不断发展,交流采样必将以其优异的性能价格比,逐步取代传统的直流采样方法。 本系统采用8031单片机实现电力参数的交流采样。通过LED显示器显示频率、电压、电流的实时值,在过压30%、欠压30%时进行声光报警,并能定时打印电压、电流及频率值。实践证明,采用交流采样方法进行数据采集,通过算法运算后获得的电压、电流、有功功率、功率因数等电力参数有着较好的精确度和稳定性。 一、交流采样原理 若将电压有效值公式 离散化,以一个周期内有限个采样电压数字量来代替一个周期内连续变化的电压函数值,则 式中:ΔTm为相邻两次采样的时间间隔;um为第m-1个时间间隔的电压采样瞬时值;N为1个周期的采样点数。 若相邻两采样的时间间隔相等,即ΔTm为常数ΔT,考虑到N=(T/ΔT)+1,则有 式(1)就是根据一个周期各采样瞬时值及每周期采样点数计算电压信号有效值的公式。 同理,电流有效值计算公式如下: 计算一相有功功率的公式 离散化后为 式中:im、um为同一时刻的电流、电压采样值。功率因数可由下式求得: cosφ=P/UI 二、系统硬件组成 本系统的硬件部分由电源、主机、数据采集电路、键盘输入电路、显示器和打印机输出电路共6部分组成。系统总体框图如图1所示。 1.主机 主机由单片机8031、地址锁存器74LS373、外接4KB的程序存储器2732和8KB的数据存储器6264构成。 2.数据采集电路 系统数据采集电路如图2所示。 由图2可见,前向数据采集通道由传感器、双四选一多路开关4052、采样保持器LF398、八选一多路开关4051、模数转换器AD574、光隔及由电压比较器LM339、锁相环4046、分频器4020构成的频率跟踪电路和用于控制采样保持器的单稳触发器4528组成。 由于采集的对象为电压、电流等模拟量,所以必须经A/D转换器变成数字量以后,才能送入8031进行处理。本系统选用AD574,该芯片使用逐次逼近法将-5~+5V模拟电压转换为数字量。转换时间为25μs,非线性误差小于±0.5LSB。    系统的采样时间间隔为0.5s。采样时,在1个信号周期内对一相电压、电流等时间间隔准确采样16点并把结果存入片外数据存储器相应的存储页内(A相电压:DPH=80H,A相电流:DPH=83H;C相电压:DPH=84H,C相电流:DPH=85H)。三相全采完后,对采到的数据进行数字滤波。计算有效值后和上限、下限值进行比较,若有超标则进行声光报警。对频率的采样是将交流电信号经LM339电压比较器变成方波后送到8031的P3.2脚(外中断0),由8031计数器0(工作在方式1计数初值为0)在方波保持高电平的时间内对8031(采用12MHz晶振)的内部时钟进行计数。采样期间在每一相16点电压、电流采样完毕后,8031读入计数值存入相应的存储页(DPH=86H)内,数据处理阶段将其转换为频率值后送8279进行显示。 3.键盘和显示器电路 采用带字驱动和位驱动的LED显示器进行显示。键盘上共设置了8个键,其中:0键用于功能切换;1,2,3三键为双功能键,分别用于显示A,B,C三相电压或电流;4键用于随机打印。 4.打印机接口电路 8031直接带一个TPμP微型打印机,用软件能使其在规定时间自启动并按设计格式打印指定数据。三、软件设计 在系统的软件设计中,采用模块化设计方法,使得程序结构清晰,便于今后进一步扩展系统的功能。系统软件有以下模块构成:主程序、时钟中断服务程序、键盘中断服务程序、数据采集处理子程序、显示程序、打印程序等。主程序主要完成系统初始化,装置自检等任务。系统的初始化部分包括CPU各端口输入输出设置、中断设置、外围驱动、译码电路的初始化、数据RAM的初始化等。系统的数据采集处理子程序的功能是在定时中断服务程序中完成的。在定时中断服务程序中主要进行三相交流电压、电流的采集,数字滤波、采样数据存储,标度变换以及报判断与输出等操作。打印程序由定时中断服务程序团龄闰打印请求标志,主程序查询到该标志时,执行打印准备和启动程序,即将打印数据装配成ASCII字符标准格式存入到外部RAM的打印缓冲器中。由于篇幅所限,本处不再一一介绍。 数据采集子程序: SMP:MOV R0,#00H ;相数选择初始化 MOV R2,#80H ;u1存放页地址送R2 RET:MOV TL0,#00H MOV TH0,#00H SETB TR0 MOV A,R0 MOV P0,A ;选中三相中的一相进入4052 MOV R7,#00H ;采样点数寄存器初始化 MOV R1,21H ;当前采样点的页内地址指针 AD12:CLR P1.2 ;选通当前相的电压信号 SH:JNB 00H,SH ;查询S/H标志位 CLR 00H ;准备好,清标志 CLR P1.6 MOV P2,#DFH ;启动A/D转换 AD1:JB P1.7,AD1 ;未完,等待 SETB P1.6 ;R/C置位,准备读 LCALL DATA ;读入转换结果存入相应页 SETB P1.2 ;切换到电流信号 CLR P1.6 MOV P2,#DFH ;启动A/D转换 AD2:JB P1.7,AD2 ;未转换完,等待 INC R2 ;页地址+1,到存放该相电流的页面 SETB P1.6 LCALL DATA ;读入结果 INC R7 ;下一采样点 INC R1 INC R1 ;采样点存放单元地址 CJNE R7,#10H,AD12 ;该相未完,继续 LCALL FRQCY INC R0 ;置下一相采样标志 INC R2 ;下一相电压存储页 MOV R1,21H ;下一相存储页地址指针 CJNE R1,#03H,RTE ;三相未采完 ADD 21H,#1FH ;三相全采完,下次采样各页内地址指针 RET 另外,在电力系统的实际运行中,电网存在谐波,还会有各种瞬时干扰,如投切电容器和开关合闸、掉闸等都会产生干扰;而采用硬件滤波存在硬件电路复杂等诸多弊端,因此本系统求取电力参数采用数字滤波方法祛除干扰,用软件代替硬件,实践证明具有较好的滤波效果。此外,系统中还采用指令冗余、软件陷阱等抗干扰措施,以使系统具有良好的抗干扰性能。 结束语 本文提出的交流采样方法解决了直流采样硬件复杂、实时性差等问题。经实践证明交流采样方法能够快速、准确地采集各种电力参数,具有一定的应用价值。

    数字电源 电力 交流 技术 监控系统 实现 基于 采样 单片机 电源技术解析

  • 在VC++中用ActiveX控件实现与单片机的串行通信

    摘要:详细论述在VC++6.0中使用ActiveX控件通过串口与单片机进行二进制数据传输的具体方法。     关键词:VC++ ActiveX 串行通信 在单片机应用系统中,经常需要通过RS-232串行口与微机进行通信。目前在各种操作系统中,Microsoft的Windows较为常见,而且大多为Windows95/98等32位平台。以往在Windows平台上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。Microsoft推出的ActiveX技术提供了另外一种实现串行通信的方法。这种方法不仅相对较为简单,而且非常实用。尤其是Visual C++这种可视化面向对象的编程环境中,可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。下面详细讨论Microsoft提供的串行通信ActiveX控件的使用方法。该控件的相应文件是MSCOMM32.OCX,以下简称为MSCOMM控件。 一、MSCOMM控件 MSCOMM控件,即Microsoft Communication Control,是Microsoft为简化Windows下串行通信编程而提供的ActiveX控件。它提供了一系列标准通信命令的使用接口,利用它可以建立与串口的连接,并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。MSCOMM控件可用于创建电话拨号程序、串口通信程序和功能完备的终端程序。 MSCOMM控件提供了两种处理通信的方式: (1)事件驱动方式。当通信事件发生时,MSCOMM控件会触发OnComm事件,调用者可以捕获该事件,通过检查其CommEvent属性便可确认发生的是哪种事件或错误,从而进行相应的处理。这种方法的优点是响应及时、可靠性高。 (2)查询方式。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,这种方法可能更可取。例如,如果写一个简单的电话拨号程序,则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制解调器的"确定"响应。 在使用MSCOMM控件时,1个MSCOMM控件只能同时对应1个串口。如果应用程序需要访问和控件多个串口,那么必须使用多个MSCOMM控件。 在VC++中,MSCOMM控件只对应着1个C++类--CMSComm。由于MSCOMM控件本身没有提供方法,所以CMSComm类除了Create()成员函数外,其他的函数都是Get/Set函数对,用来获取或设置控件的属性。MSCOMM控件也只有1个OnComm事件,用来向调用者通知有通信事件发生。 MSCOMM控件有许多很重要的属性,限于篇幅只给出几个较为重要和常用的属性,如表1所列。表1 MSCOMM控件的重要属性 属  性 说      明 CommPort 通信端口号 Settings 以字符串形式表示的波特率、奇偶校验、数据位 PortOpen 通信端口的状态,打开或是关闭 Input 接收数据 Output 发送数据 InputMode 接收数据的类型:0为文本;1为二进制 二、编程实现 从表1可以看到,MSCOMM可以两种不同的形式接收数据,即以文本形式和以二进制形式。用MSCOMM控件进行字符数据传输的文献和资料可以找到很多,在Microsoft的MSDN(Microsoft Developer Network)中就可以找到这样的例子,即VCTERM。可是几乎所有以单片机为核心的测量系统所得到的原始数据都是二进制形式的,所以,以二进制形式传输数据将是最为直接而又简洁的办法。不仅如此,由于MSCOMM控件在文本形式下,其传输的是宽字符格式的字符,要想得到有用信息,还要额外处理。因此本文主要讨论在二进制形式下的使用方法。 在VC++6.0中,用APPWizard可以生成三种应用程序:单文档(SDI)、多文档(MDI)和基于对话框的应用程序。为了说明问题和省去不必要的细节,下面以基于对话框的应用程序为例。 1.创建一个基于对话框的应用程序 打开VC++6.0集成开发环境,选择菜单项File/New,在出现的对话框中选中Projects标签中的MFC AppWizard(exe),然后在Project Name框中填入MyCOMM(可根据需要命名),之后点OK按钮。在接着出现的对话框中选中Dialog Based项,然后点NEXT按钮。以下的各对话框都按照缺省设置,这样即可生成一个基于对话框的应用程序。在资源编程器中会出现其对话框模板。 2.插入MSCOMM控件 选择菜单项Project/Add to project/Components and Controls…,在弹出的对话框中选择Registered ActiveX Controls文件夹下的Microsoft Communications Control,version6.0,然后按下Insert按钮,接着会弹出一个对话框,提示生成的类名及文件名,按OK按钮即可实现控件的插入。这时在对话框的控件工具栏 上会多出一个电话机模样的控件图标,Workspace的Classview中也多了一个类CMSComm。 此时即可将MSCOMM控件加入到对话框模板,加入方法与其他控件一样。然后还要在对话框类中相应加入一个成员变量,此处我们将其命名为m_comm。加入方法为:首先,在对话框模板中,用鼠标右键点击该控件,选择ClassWizard,在出现的对话框的Member Variables标签的Control Ids项下,选中IDC_MSCOMM1。然后,按Add Variable…按钮,在出现的对话框的Member Variable Name项中输入m_comm。最后,按OK按钮即可。 3.设置属性 可以在两个地方对控件的属性进行设置: (1)对话框资源编辑器中。在对话框模板上,用右键单击MSCOMM控件,然后选择Properties…菜单项,最后便可设置各项属性。此处只对以下几处进行改动,其他接受缺省设置:Rthershold:1,InputLen:1,DTREnable:不选,InputMode:1-Binary。 (2)对话框类的OnInitDialog()函数中。下面是以上设置的函数实现: BOOL CMyCOMMDlg::OnlnitDialog() { CDialog::OnlnitDialog(); //此处为应用框架自动生成代码,不予列出 //TODO:Add extra initialization here m_comm.SetCommPort(1);//使用串口1 m_comm.SetSettings("9600,N,8,1"); //波特率为9600,无奇偶校验,8位数据位,1位停止位 m_comm.SetRThreshold(10); //每接收10个字符就触发1次接收事件 m_comm.SetSThreshold(0); //不触发发送事件 m_comm.SetInputLen(10); //每次读操作从缓冲区中取10个字符 m_comm.SetInputMode(1); //二进制数据传输形式 m_comm.SetPortOpen(TRUE); //打开串口 return TRUE;//return TRUE unless you set the focus to a control } 4.发送二进制数据 如果需要发送二进制数据,可将数据作如下处理。具体代码如下: CByteArray bytOutArr; bytOutArr.Add(0x0); //给数组赋值 bytOutArr.Add(0x1); bytOutArr.Add(0x2); bytOutArr.Add(0x3); bytOutArr.Add(0x4); COleVariant varOut; varOut=COleVariant(bytOutArr); //将数据转换为变体数据类型 m_comm.SetOutput (varOut); //发送数据 5.接收二进制数据 当需要接收大量的数据时,最好采用事件驱动方式进行编程。具体步骤如下: (1)响应OnComm事件。在对话框资源编程器中,双击对话框模板上的MSCOMM控件,在弹出的对话框中填入您所希望的事件响应函数名,此处将其命名为OnCommMscomm1()。 (2)在事件响应函数中接收和处理数据。接收来的数据为变体数据,所以需要做一些处理,具体代码如下: void CMyCOMMDlg::OnCommMscomm1() { COleVariant varRcv; CByteArray byt; int i; long num; switch (m_comm.GetCommEvent()) { cass 1://数据发送事件 break; case 2://数据接收事件 varRcv=m_comm.GetInput(); varRcv.ChangeType (VT_ARRAY |VT_UI1); BYTE HUGEP *pbstr; HRESULT hr; hr=SafeArrayAccessData (varRcv.parray,(void HUGEP*FAR*)&pbstr);//获取安全数组指针 if (FAILED (hr)){ AfxMessageBox("获取数组指针失败!"); break;} num=0; hr=SafeArrayGetUBound (varRcv.parray,1,&num);//获取数组上界 if (FAILED (hr)){ AfxMessageBox("获取数组上界失败!"); break;} for(i=0;i byt.Add(pbstr [i]); SafeArrayUnaccessData (varRcv.parray); //此时数据已保存在二进制数组byt中,可根据需要进行相关处理 break; default: break; } } 以上代码中的处理部分可以做成一个单独的函数,在此处调用即可。经过以上代码的处理,接收来的数据已存放在二进制数组byt中,可以根据自己的需要对其进行相关处理,如保存和显示等。 三、硬件接口 单片机与微机之间的硬件接口可以用1片MAX232或ICL232与几个电容即可实现,有许多文献讨论过,此处不再多述。 以上方法经过笔者在实践中的应用,感到非常简洁、方便,具有很强的实用意义。

    数字电源 通信 vc 实现 activex 控件 中用 串行 单片机 电源技术解析

  • P87LPC764单片机的I2C总线显示电路

    摘要:I2C总线是Philips公司推出的芯片间串行传输总线。目前,已有不少大电气公司半导体厂商推出了不少带有I2C总线接口的单片机。本文介绍一种利用Philips公司生产的P87LPC764单片机作为I2C总线控制器与I2C总线显示器件SAA1064构成的I2C显示电路,并给出相应的程序清单。     关键词:I2C总线 P87LPC764单片机 SAA1064 显示电路 I2C总线是Philips公司推出的芯片间串行传输总线。它以串行数据线(SDA)和串行时钟线(SCL)2根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。关于I2C总线的结构和工作原理详见参考文献1。 一、P87LPC764单片机I2C总线接口 P87LPC764是Philips公司生产的一种小封装、低成本、高性能的单片机(有关它的详细介绍见参考文献2)。它采用80C51加速处理器结构,片内带有支持I2C总线的硬件接口。当激活I2C总线时,P87LPC764端口1中的P1.2与P1.3分别作为SCL和SDA行使I2C总线功能。其I2C总线由3个特殊功能寄存器控制,这3个寄存器为I2C控制寄存器I2CON、I2C配置寄存器I2CFG和I2C数据寄存器I2DAT。各寄存器格式和位含义参见本刊第5期第36页。 二、I2C总线显示器件SAA1064 1.引脚功能 SAA1064是I2C总线系统中典型的LED驱动控制器件,为双极型集成电路,有2×8位输出驱动接口,可静态驱动2位或动态驱动4位8段LED显示器。SAA1064的器件地址为0111,其引脚地址端ADR按输入电平大小将A1A0编为4个不同的从地址,故在1个I2C总线系统中最多可以挂接4片SAA1064,实现16位LED显示。SAA1064为24脚双列直插封装,其引脚排列如图1所示。    ADR 寻址端,SAA1064通过对该脚输入不同的模拟电压,以确定其不同的地址。SAA1064规定输入该脚的电压值为VEE、(3/8)Vcc、(5/8)Vcc及Vcc时,分别对应十六地地址70H、72H、74H、76H(写操作)或71H、73H、75H、77H(读操作)。 CEXT 时钟振荡器的外接电容,典型值为2.7nF。 P1~P8 段驱动输出端口1。P1为最低位,P8为最高位。 P9~P16 段驱动输出端口2。P9为最低位,P16为最高位。 MX1、MX2 动态显示方式时的公共极驱动信号输出端,用以切换两对数码管轮流显示。 SDA、SCL I2C总线的数据线和时钟线。 2.数据操作格式 SAA1064除了与LED驱动控制相关的写操作外,还有能反映系统上电标志的读操作。SAA1064的读操作状态字节的读出操作,其状态字节仅最高位有意义,定义为PR。上电后PR为"1",在对其进行读状态字节操作后清零。因此,PR=1表示从上次读状态后出现过掉电和加电。利用这一功能,在系统中可作为冷热启动标志。 (1)数据的输入操作 SAA1064的显示驱动控制只需要I2C总线对其进行写入操作,即按照子地址(SUBADR)写入控制命令字节及显示器的段码数据即可,其数据操作格式如下: S SLAW A SUBADR A COM A data1 A data2 A data3 A data4 A P SLAW为SAA1064的地址。 SUBADR为SAA1064片内地址单元首址。 COM为SAA1064的控制命令。 data1~data4为动态显示方式的4个LED显示器的共阴极段选码。 (2)子地址单元 SAA1064片内有5个地址单元,占用了3位地址位(SC、SB、SA),分别用于装入控制字节和4个显示段码,具体地址分配如表1所列。由于SAA1064写操作具有地址自动加1功能,故在数据操作格式的写入顺序中,SUBADR应为00H。 0 0 0 0 SA SB SC 单元地址 功    能 0 0 0 0 0 0 0 00H 控制寄存器 0 0 1 01H 数字位1 0 1 0 02H 数字位2 0 1 1 03H 数字位3 1 0 0 04H 数字位4 1 0 1 05H 保留不用 1 1 0 06H 保留不用 1 1 1 07H 保留不用 (3)控制命令COM格式 SAA1064具有较强的控制功能,能实现亮度控制,显示器测试,动、静态及位亮、暗显示。这些控制命令集中设置在控制寄存器中。控制命令(COM)格式如下: - C6 C5 C4 C3 C2 C1 C0 C0 动态、静态显示选择,C0=1动态显示。 C1 数码管1、3亮灭选择,C1=1选择亮。 C2 数码管2、4亮灭选择,C2=1选择亮。 C3 测试位,C3=1时所有段点亮,正常工作时该位为0。 C4、C5、C6 输出电流控制位,为1时分别对应3mA、6mA、12mA。皆为1时输出电流最大为21mA。 三、显示电路实例 图2是P87LPC764与SAA1064的接口电路实例。P87LPC764单片机采用6MHz的内部RC振荡器,访问4片SAA1064,驱动16只数码管显示,每片SAA1064的接线如图2所示。    该应用电路是一个单主的I2C总线系统,不会出现总线竞争问题,而且数据传送操作只有主发送方式,因此,在编程过程中没有检测总线错误。在数据发送过程中,每发送1个字节,都检测应答信号,如无应答信号,建立标志位F0,程序重新开始发送数据。 以下是该I2C总线显示电路的程序清单,显示缓冲区为30H到3FH单元。 START:MOV R0,#30H ;显示缓冲区首地址 MOV R1,#17H ;SAA1064控制码 MOV R2,#70H ;SAA1064(1)的地址 MOV R3,#04H ;4片SAA1064 LOOP:ACALL DISP JB F0,START ;无应答信号重新开始 INC R2 ; INC R2 ; DJNZ R3,LOOP ; ┆ 以下是显示子程序 DISP:CLR F0 ;清除无应答标志 MOV I2CFG,#30H ;请求成为I2C总线主机 JNB MASTER,$ ;等待成为I2C总线主机 MOV I2CON,#1CH ;清除起动条件 MOV A,R2 ;取从设备地址 ACALL SEND ;发送从设备地址 JB F0,DISP2 ;无应答信号转移 MOV A,#0 ;SAA1064子地址 ACALL SEND ;发送子地址 JB F0,DISP2 ;无应答信号转移 MOV A,R1 ;取SAA1064控制码 ACALL SEND ;发送控制码 JB F0,DISP2 ;无应答信号转移 MOV R4,#04H ;四只数码管 DISP1:MOV A,@R0 ;取字形代码 ACALL SEND ;发送字形代码 JB F0,DISP2 ;无应答信号转移 INC R0 ;修正显示单元地址 DJNZ R4,DISP1 ; DISP2:ACALL SSTP ;发送停止位 RET ; ;发送1个字节 SEND:MOV R4,#8H ;设置数据格式为8位 SENDB:MOV I2DAT,A ;发送数据位 RL A ;取下一个数据位 JNB DRDY,$ ;等待数据准备好 DJNZ R4,SENDB ; MOV I2CON,#0A0H ;转换为接收模式 JNB ATN,$ ;等待应答信号 JNB RDAT,SENDE ;是应答位吗? SETB F0 ;建立无应答信号标志 SENDE:RET ; ;发送停止位 SSTP:CLR MASTRQ ;取消主机位置 MOV I2CON,#21H ;产生总线停止条件 JNB ATN,$ ;等待 MOV I2CON,#20H ;清除数据准备好标志 JNB ATN,$ ;等待发送停止条件 MOV I2C0N,#91H ;释放I2C总线 CLR TIRUN ;停止定时器I的运行 RET

    数字电源 i2c 总线 电路 显示 p87lpc764 单片机 电源技术解析

  • 利用VB实现PC机与多单片机通讯

    摘要:在Windows98下利用VB的串行通讯控件可实现PC机与多单片机之间的通讯。采用定时器控制大大加快了自动化进程,克服了往多“握手”协议造成的通讯速度缓慢的缺点。本文以PS1016单片机为例,详细介绍了PC机与单片机之间的串行通讯、数据的发送和接收。     关键词:通讯 属性 事件 前言 在采用以PC机为控制中心的数据采集自动化控制系统中,通常需要单片机采集数据,然后用异步串行通讯方式传给PC机,PC对单片机进行定时控制,需要多个单片机协同工作。如果系统不很复杂,可通过定时器控件控制收发过程,在必要的地方自动接收装置,使定时控制和通讯过程完美地结合起来。这样,可以免去“握手”协议的繁琐过程,简化编程,提高速度。VB具有面向对象的设计方法,友好的用户界面,简单方便的串行通讯和实用性强等优点,无论借用其他语言就可以开发出优秀的控制系统通讯软件。本文介绍在Windows 98环境下如何利用VB来实现PC机与多个PS1016单片机之间的串行通讯。 VB环境下通讯程序的设计 VB提供了串行端口控制Mscomm来为应用程序提供串行通讯。该控件屏蔽了通信过程中的底层操作,程序员可以设置、监视Mscomm控件的属性和事件,结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。Mscomm控件的主要属性如下: (1)Commport 设置并返回通讯端口号。端口号可以设置为1~16的任何数,如Mscomm.Commport=2表示设置当前通讯端口为COM2。 (2)Setting 设置并返回波特率、奇偶校验、数据位、停止位。格式为Mscomm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,O表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,1.5,2。Setting属性的缺省值为“9600,N,8,1”。 (3)Portopen 设置并返回通讯端口的状态,也可以打开和关闭端口。 (4)Input 从接收缓冲区返回和删除字符。该属性在运行时为只读。 (5)InputLen 设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。 (6)Output 向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。 (7)CommEvent 返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEvent属性中存有该错误或事件的数值代码。 Timer控件的主要属性如下: (1)Enabled 返回或设置一个值,该值用来确定一个窗体或控件否能够对用户产生的事件作出反应。通过把Enabled设置为“Galse”来使Timer控件成为无效,将取消由控件的Interval属性所建立的倒计时数。 (2)Interval 返回或设置对Timer控件的计时事件调用间的毫秒数。Timer控件的Enabled属性决定该控件是否对时间的推移作出响应。将Enabled设置为“False”会关闭Timer控件,设置为“True”则打开Timer控件。当Timer控件置为有效时,倒计时总是从其Interval属性设置值开始。创建Timer事件程序。可通知VB在每次Interval到时该做什么。Timer控件和Enabled属性设置为“True”时,VB将在Interval时间到后自动访问Timer_Timer过程。 为实现通讯程序,须在VB开发环境下设置一个用做控制通讯的窗体。窗体上主要有一个通讯控件Mscomml和两个Timer控件。VB的特点是事件驱动,定时器控件会定时触发相应事件的驱动程序。 1.发送单片机命令 为了使主机能够对整个检测过程进行实时控制,须要在发送命令以后设定等待的时间,也可以通过条件判断下一步是发达还是接收命令。对发送的命令,可能是文本方式或二进制代码。在发送二进制代码时,应特别注意发送的格式。 发送命令过程是一个带参过程,这样可使发送命令简便易行。具体程序如下: Sub发送单片机命令过程(command As Byte) Dim输出命令(1 To 1)As Byte DoEvents 输出命令(1)=command MSComm1.OutBufferCount=0 MSComm1.Output=输出命令 MSComm1.InBufferCount=0 End Sub 2.接收数据 接收数据是一个被动的过程,可以通过函数来实现,由定时器开启。在接收过程中,多数用特征字符,如“OK”、“#”等。这些需要在通讯协议中约定。 Function接收数据() Do DoEvents In_buffer $=In_buffer$&MSComm2.Input Loop Until InStr(_buffer$,“OK”)'从串行端口读“OK”响应' In_buffer=Left(In_buffer,len(In_buffer)-2) 接收数据=In_buffer$ End Function 3.Timer控件控制 通过Timer控件来控制通讯中的发送命令和接收数据过程,在通讯程序中设置两个Timer控件分别控制发送单片机命令和接收单片机数据。为了实现一台PC机和多单片机之间的通讯,可在一个Timer控件的过程中,在发送命令之前设定命令参数和要接收数据的单片机号,然后发送单片机命令;在另一个Timer控件的过程中,根据发送前设定的单片机号,接收不同单片机的数据。 Timer控件控制程序如下: '发送命令主控程序 Privata Sub TimerSend_Timer() TimerSend.Enabled=False Select Case command Case 1] Call发送单片机命令过程(任务1) TimerReceive.Enabled=False'启动自动接收 Case2 Call发送单片机命令过程(任务2) MSComm1.Rthreshold=0'关闭自动接收 TimerReceive.Interval=500 TimerReceive.Enabled=True'启动定时器接收机号=1 Case 3 Call发送单片机命令过程(任务3) MSComm1.Rthreshold=0'关闭自动接收 TimerReceive.lnterval=500 TimerReceive.Enabled=True'启动定时器接收 机号=2 Case 4 ┆ Case n … End Select End.Sub '接收数据主控程序 Private Sub TimerReceive_Timer() TimerReceive.Enabled=False Select Case机号 Case 1 In_buffer$=接收数据(机号) Call任务2 Case 2 In_buffer$=接收数据(机号) Call任务3 Case 3 ┆ Case n In_buffer$=接收数据(机号) Call任务n End Select End Sub 4.自动接收、监视总线状态和通讯错误的处理 自动接收、监视总线状态和通讯错误的处理可以通过OnComm事件实现。VB程序运行过程中只要设置MSComm1.Rthreshold=1,在接收事件发生时程序就会自动访问MSComm1.OnComm()过程。 由于外界干扰或电压波动等原因,PC机和单片机之间的通讯可能会出现错误,如接收缓冲区溢出、网络端口超速等。这些可能发生的事件都能在代码中引起运行错误。为了处理这些错误,须要将错误处理代码添加到程序中。通过控件中的OnComm事件可以捕捉和处理错误。在通讯过程中所发生的通讯错误是CommEvent属性返回的。当CommEvent属性值发生改变时,表明有通讯错误,就会产生OnComm事件。同时,可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。这样可以监视通讯线路状态,得到单片机和主机及单片机和单片机之间的通讯进程。通讯错误的处理程序如下: Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case ComReceive 'Receive data '自动数据接收、监视总线通信信息 Select Case In_buffer $ Call A Label.Enabled=“正在执行任务1” Call B … End Select Case comFrame 'Framing Error '通讯错误处理 X=MsgBox(“Framing Error!”,16) …'错误处理 Case comEventOverrun '数据丢失 X=MsgBox(“数据丢失!”,16) …'错误处理 End Select End Sub

    数字电源 通讯 pc 实现 利用 vb 单片机 电源技术解析

  • 用68HC908GP32单片机实现EPP增强并口的接口技术

    摘要:本文介绍了计算机并口的几种操作模式,给出了实现EPP接口设计的几种方案;着重介绍用Motorola公司的68HC908GP32单片机实现EPP接口设计,并给出了一个GP32单片机实现的数据采集系统的设计方案。     关键词:EPP 增强并口 单片机 68HC908GP32 一、计算机并口操作模式概述 1.SPP模式 SPP(Standard Parallel Port)模式即标准并口模式,是为打印输出而设计的。数据由计算机单向输出,不能用数据线进行数据输入,要做数据输入只能利用状态线。并口状态线只有5根,所以每个字节要分两次输入,再拼装为一个完整的字节。SPP模式速度较低,对硬件的要求不高,适用于低速的应用场合,如打印机、软件狗等。 2.PS/2模式 IBM公司引进了PS/2设计后开始支持并口的双向数据传输。PS/2模式和SPP模式兼容。它没有改变标准并口的信号定义,也没有改变并口接插件的引脚定义,而是通过一个方向控制位来设置并口的数据方向:如果设置为输出,PS/2模式就和SPP模式完全相同;如果设置为输入,则从并口数据线上每次可以读取一个字节的数据。同时,PS/2模式的总线控制功能提高了并口的速度。 无论是SPP模式还是PS/2模式,数据通信信度都不高。原因在于并口本身的I/O速度不高(只有100~400KB/s)。另一方面,每次数据传输都要通过I/O操作进行软件数据交换。通常情况下,一次互锁数据交换的数据传输至少需要5次I/O操作,才能保证进序的完整性。这两方面因素使SPP模式和PS/2模式只能用于速度较低的应用领域。 3.EPP模式 EPP(Enhanced Parallel Port)增强并口模式支持并口和外设间的双向数据交换,速度能够达到1~2MB/s。增强并口通过精密的逻辑界面和明确定义的电气参数保证了数据传输的速度和准确性。 4.ECP模式 ECP(Extended Capabilities Port)模式,即扩展功能和模式,其性能更高。ECP模式有16个字节的FIFO,并且支持DMA功能。在不降低系统性能的前提下减轻计算机CPU的负担,提高了应用系统的整体性能。更为重要的是,ECP模式把其他几种并口模式都纳入了ECP模式的定义中。ECP模式定义了ECR扩展控制寄存器,可以把并口的操作模式设置为SPP,PS/2,EPP或者ECP,从而构成一个完整的并口系统。 SPP模式、PS/2模式和EPP模式都是主从式结构,数据传输双方是一种不对等的关系。数据传输只能由计算机来启动,外设不能启动数据传输。如果外设要进行数据传输,它只能向计算机提出中断申请,然后由计算机启动数据传输。ECP模式则不是主从式结构,数据传输的双方都可以启动数据传输。ECP模式可以用于计算机之间的互联,而EPP模式则不能。 虽然ECP并口模式的性能比EPP高,但是ECP模式不太容易实现,大部分的设计者都采用了EPP模式来设计自己的应用系统。EPP模式比ECP模式更简洁,灵活,可靠,在工业界得到了更多的实际应用。 二、EPP增强并口的实现方案 1.EPP增益并口时序 EPP协议定义了4种并口周期:数据写周期、数据读周期、地址写周期和地址读周期。数据周期用于计算机和外设间传送数据;地址周期用于传送地址、通道、命令、控制和状态等辅助信息。图1是EPP数据写的时序图,图中的nIOW信号实际上在进行EPP数据写时并不会产生,只不过是表示所有的操作都发生在一个I/O周期内。在t1时刻,计算机检测nWAIT信号,如果nWAIT为低,则表明外设已经准备好,可以启动一个EPP周期了。在t2时刻,计算机把nWRITE信号置为低,表明是写周期,同时驱动数据线。在t3时刻,计算机把nDataStrobe信号置为低,表明是数据周期。外设在检测到nDataStrobe为低后读取数据并做相应的数据处理。在t4时刻把nWAIT置为高,表明已经读取数据,计算机可以结束该EPP周期。在t5和t6时刻,计算机把nDataStrobe和nWRITE置为高。这样,一个完整的EPP数据写周期就完成了。图1中的nDataStrobe信号如果换为nAddStrobe信号,就是EPP地址写周期。图2是EPP地址读周期。与EPP写周期类似,只不过是由外设来驱动数据线。 EPP时序还包括初始化、中断申请等,可以查阅参考文献1获得详细的时序图及时序说明。 2.EPP增益并口的逻辑界面 EPP增强并口模式使用与标准并口模式相同的基地址,定义了8个I/O地址。基地址+0是SPP数据口,基地址+1是SPP状态口,基地址+2是SPP控制口。这3个口实际上就是SPP模式下的数据、状态和控制口,这样保证了EPP模式和SPP模式的软硬件兼容性。 基地址+3是EPP地址口,向这个I/O口中写数据将产生一个连锁的EPP地址写周期,从这个I/O口中读数据将产生一个连锁的EPP地址读周期。在不同的EPP应用系统中,EPP地址口可以根据实际需要设计为设备选择、通道选择、控制寄存器、状态信息等,给EPP应用系统提供了极大的灵活性。 基地址+4是EPP数据口,向这个I/O口中写数据将产生一个连锁的EPP数据写周期,从这个I/O口读数据将产生一个连锁的EPP数据读周期。基地址+5~+7与基地址+4一起提供地EPP数据口的双字操作能力。EPP允许主机在1个时钟周期内写1个32位双字,EPP电路再把32位双字拆为4个字节依次从EPP数据口中送出去。也可以用16位字方式进行数据传送。 3.EPP增强并口外设的硬件实现方案 EPP增强并口的速度可以达到1~2MB/s,这对外设的接口设计提出了一个很高的要求。如果外设响应太慢,则系统的整体性能将大大下降。EPP接口设计方案是整个EPP应用系统整体性能的关键。 (1)门电路实现 这种实现方案可以实现基本的接口,但是无法对地址周期作出具体的处理。门电路实现方案的最大缺点是缺乏基本的灵活性,并且没有任何的保密措施。设计方案的任何改动都要重新设计整个接口系统。因此,不推荐使用这种实现方案。 (2)可编程逻辑器件实现 用户可编程逻辑器件如FPGA和CPLD可以实现EPP增强并口的接口设计。这种实现方案可以达到并口的速度极限,并且提供了很大的灵活性。FPGA容量大、功耗低、寄存器资源丰富,可以把EPP应用系统的其他复杂接口和控制都做在一个芯片中。缺点是每次使用前FPGA都需要配置,并且FPGA抗干扰能力差,在恶劣的环境中容易丢失配置信息。CPLD容量较小,功耗较大,寄存器资源匮乏,可以实现EPP接口及一些不太复杂的接口和控制功能。CPLD用EEPROM或者FLASH来保存配置信息,掉电不丢失。可编程逻辑器件是EPP应用系统优先选用的实现方案。 (3)DSP实现 DSP的指令周期短,CPU运行速度快,也可以用来实现EPP增强并口的接口设计。但是DSP本身是用来做运算的,接口控制指令的运行效率不高,接口速度不如可编程逻辑器件实现方案的速度。如果EPP应用系统要求有比较强的运算能力,用DSP来实现整个应用系统的接口和运算功能是一个比较合适的选择。 (4)单片机实现 用单片机来实现EPP接口似乎有些不可思议,因为单片机的速度比较慢,并且指令的执行是串行的,不能像CPLD或者FPGA那样把一个大任务分成几个独立的小任务并行处理。作者原来一直用可编程逻辑器件实现EPP接口设计,认为单片机不可能实现EPP接口设计。在了解了Motorola公司的68HC908GP32(简称GP32)单片机卓越的超频性能后才用GP32单片机实现EPP接口设计。实践表明,GP32单片机可以很好地完成EPP接口任务,性能完全能够满足计算机和外设双方的要求。GP32单片机丰富的外高和高效率的I/O指令系统弥补了速度慢的不足。如果考虑一个EPP应用系统的整体功能,用单片机来实现接口和控制功能是性价比最高的实现方案。 三、用68HC908GP32单片机实现EPP接口设计 1.68HC908GP32单片机功能概述 68HC908GP32是Motorola公司1999年推出的68HC08系列单片机。GP32采用68HC08CPU,其性能是68HC05CPU的5~10倍。GP32有32KB的FLASH闪速存储器,具有在线编程能力和超强的保密功能;有512字节的RAM、增强型串行通信口SCI、串行外设接口SPI;有两个16位双通道定时器接口,每个通道可以选择为输入捕获、输出比较或PWM,其定时时钟可为内部总线的1,2,4,8,16,32和64分频;有8路8位A/D转换器、8位键盘唤醒口、29根通用I/O引脚。系统保护特性为:计算机工作正常(COP)复位、低压检测复位、非法指令检测复位及非法地址检测复位。 2.GP32的时钟发生模块 GP32有时钟发生模块,利用32kHz晶振和片内PLL(锁相环)电路可以产生高达19.5MHz的工作频率。一般的单片机不能超频运行,否则会因为读代码错误、代码运行错误、芯片发热等因素导致芯片不能正常运行,频繁死机,甚至会烧毁芯片。GP32的CPU正常情况工作在8MHz频率下,但是在2.4倍额定频率下还能够稳定运行。作者做过一个实验,GP32工作在19.5MHz下,在实验室环境中稳定运行了90h,在电力系统动态模拟实验室的直流发电机电刷附近稳定运行了90min,运行过程中没有出现过意外的死机现象。实验表明,GP32单片机是可以长期超频工作的。 3.用GP32单片机实现EPP增强并口的接口设计 EPP增强并口定义了8根数据线、2根状态线和3根控制线。用GP32的双向I/O线可以直接和EPP的信号线相连,GP32单片机有足够的驱动能力来驱动并口信号。 软件设计是用GP32单片机实现EPP接口设计的关键。为了保证通信速度,必须对GP32单片机的指令进行优化,选择那些执行速度快的指令;同时采用合理的数据流控制方法,既要保证通信的快速性,又要保证通信数据的正确性。例如,以数据包的方式传送大批量的数据,并以数据包为单位处理数据。 在19.5MHz的工作频率下,GP32实现的EPP增强并口可以达到400KB/s的通信速度。如果降低GP32的工作频率,则通信速度成比例地降低,但是最低不能低于100B/s,否则会因外设响应太慢而导致通信失败。四、用GP32单片机实现的数据采集板 GP32单片机有8路8位的AD转换器,可以胜任一些要求低采样速度、低分辨率的应用场合。作者设计了一个采用GP32单片机实现的数据采集系统,电路图如图3所示。U1是GP32单片机,JAD是模拟信号输入接口,PARAPORT是并口,C1,C2,C3,X1,RB是Rs一起构成了GP32单片机锁相环电路。 通过计算机可以设置A/D转换的通道、启动条件,能够启动或者停止A/D采样。GP32有512字节的片内RAM,其中的384字节设定为A/D转换的缓冲器,其余的RAM用做堆栈和变量。如果A/D转换缓冲器已经满256字节,则GP32单片机向计算机发送一个中断,计算机用EPP并口协议读取A/D转换的数据。 计算机中由一个硬件驱动程序来处理并口的硬件中断。驱动程序在并口中断服务程序中通过EPP并口读取A/D转换的结果,并且向RING3的应用程序发送消息通知应用程序读取数据。应用程序对数据做进一步的分析和处理,如图形显示、数据文件的存取等。

    数字电源 技术 并口 实现 epp 增强 68hc908gp32 单片机 接口 电源技术解析

  • 单片机系统在测控领域的稳定性探讨

    近年来单片机系统在工业测控领域的应用越来越广泛,而对于环境恶劣的工业现场,这种新型的微控制器的可靠性,安全性就成为了一个大的问题。在实验室运行正常的程序到了工业现场却不能运行,或者出现运行不稳定经常死机等。在这里我们主要讨论一下如何通过软件技术来增强系统的稳定运行。 当系统的CPU部位受到干扰信号的作用时,将使系统失控。最典型的故障是破坏程序计数器PC的状态值。导致程序在地址空间内“乱飞”,或者陷入死循环。而我们对这种情况的处理主要有这么几种方法: 1、  指令冗余技术; 2、  软件陷阱技术; 3、  看门狗技术。 我们以MCS-51单片机来做以说明。 一、指令冗余技术 我们知道,指令由操作码和操作数组成,操作码指明CPU要完成什么样的操作,而操作数是操作码的对象。单字节指令只有操作码,隐含操作数;双字节指令,第一个字节是操作码,第二个字节是操作数;三字节指令第一个字节是操作码,后二个字节是操作数。CPU在取指令的时候是先取操作码再取操作数,如何判断是操作码还是操作数就是通过取指令的顺序。而取指令的顺序完全由指令计数器PC来控制,因此,一旦PC受干扰出现错误程序便会脱离正常轨道,出现“乱飞”,这样就会使得把操作数当作操作码,或者把操作码当作操作数的情况。但只要PC指针落在单字节指令上程序就可纳入正轨,所以为了快速的将程序纳入正轨,我们应该多用单字节指令,并在关键的地方人为的插入一些单字节指令NOP,或将有效的单字节指令重写,这就称之为指令冗余。 常用的方法就是在一些双字节,三字节指令后面插入两个单字节指令NOP,或在一些对程序的流向起决定作用的指令前面插入两条NOP指令。还可对一些重要的指令进行重复放置。 但采用指令冗余技术将程序纳入正轨的条件是:乱飞的PC必须指向程序运行区。 二、软件陷阱技术 当乱飞的程序进入非程序区的时候, 我们就可设定软件陷阱对乱飞的程序进行拦截从而将程序引向一个固定的位置。这样我们就可将捕获的程序重新纳入正轨。 软件陷阱主要就是把程序从新引入它的复位入口处,也就是说我们在适当的地方设置这样的指令: NOP NOP LJMP  0000H 对于软件陷阱的安排,我们主要安排在这样一些区域,未使用的中断区,未使用的EPROM空间及非EPROM空间。程序运行区,及中断服务程序区。在这里我们主要来看前三种: 1、  未使用的中断区 如果对于未使用的中断因干扰而开放的话,我们可以把中断服务程序这样来写: NOP NOP POP   D1    ;将原来的错误断点弹出 POP   D2    ;将原来的错误断点弹出 PUSH  00H PUSH  00H    ;将断点地址重写为0000H RETI 2、  未使用的EPROM区 假设我们用了一片2764,但并没有用完整个存储区。这时候就可在未用的区域里填充上020000数据,这样当程序飞入其中时就会很快的走入正轨。这条指令其实是“LJMP  0000H”的机器码。 3、  非EPROM空间 单片机系统的程序空间是64K,正常情况下我们所使用的EPROM不会占用所有的空间,假设我们现在的EPROM占用16K的空间那么剩下的48K空间就被闲置不用了。当乱飞的PC落入这些空间时,读入的数据将为FFH,这是 :MOV   R7,A  指令的机器码,将修改R7的内容。因此,当程序乱飞入非EPROM芯片区后,不仅无法导入正规,面且破坏了R7的内容。 我们知道,当CPU读程序存储器的时候,伴随着会产生一个PSEN信号,我们就可利用这个信号,再加上一个非EPROM区的地址译码信号,构成一个选通信号来起动一个空闲的中断,再用软件陷井的方法从中断程序中把程序导入正规。我们可看下面的一个图:   INT0 PSEN 非EPROM地址选通信号  我们也可通过硬件的方法用一个缓冲器直接给数据线写一个值,其原理与上述方法相同。 三、   软件看门狗技术 我们知道看门狗的作用就是防止程序发生死循环,或者说程序跑飞。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。 软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。 对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。

    数字电源 稳定性 领域 探讨 单片机 电源技术解析 系统

发布文章