[b] 导言 [/b] MSP430单片机自从2000年面世以来,就以其功用完善、超低功耗、开发简洁的特色得到了许多规划人员的喜爱。MSP430与传统的51单片机在结构上有很大的差异。其间之一便是:在MSP430的外围接口电路中,没有供给像51那样操控外设读、写、地址锁存信号的硬件电路。与这种接口电路相适应,MSP430更倾向运用I2C总线以及ISP等依据串行接口的外围器材。另一方面,跟着I2C技能的开展和成熟,其硬件结构简略、高速传输、器材丰厚等特色使该类器材的运用越来越广泛。因而研讨新式单片机MSP430与I2C总线接口技能有着重要的含义。本文针对这一问题进行研讨,分析研讨了 MSP430与I2C总线接口的原理和办法,提出了高效的接口办法,介绍了优化的程序。 [b]1 MSP430单片机I/O端口操控特色 [/b]与8031单片机比较,MSP430的I/O端口的功用要强壮的多,其操控的办法也更为杂乱。MSP430的I/O端口能够完结双向的输入、输出;完结一些特别功用如:驱动LCD、A/D转化、捕获比较等;完结I/O各种中止。MSP430选用了传统的8位端口办法保证其兼容性,即每个I/O端口操控8个I/O引脚。为了完结对I/O端口每一个引脚的杂乱操控,MSP430中的每个I/O口都对应一组8位的操控寄存器(如图1)。寄存器中的每一位对应一个I/O引脚,完结对该引脚的独立操控。寄存器的功用和数目是由该I/O口所能完结的功用以及类型确认的。[2] 图1为MSP430的一个I/O端口的操控结构示意图。关于最根本的只能完结输入、输出功用的I/O端口其操控寄存器只要3个。其间,输入寄存器保存输入状况;输出寄存器保存输出的状况,方向寄存器操控对应引脚的输入、输出状况。本文中用来完结I2C总线接口的P6.6、P6.7都归于这类的端口。此外,有些I/O端口不光能够用作根本的输入输出,并且能够用作其他用处,比方能够作为LCD的驱动操控引脚。这类端口的操控功用寄存器完结引脚功用状况的切换。再者,有一类端口不光能够完结上述两种端口的功用,并且能够完结中止功用。该类端口具有图1中一切的寄存器,中止触发的办法以及中止的屏蔽性都能够经过相应的寄存器操控。本文中运用的P2.0就归于该类端口,运用它来接纳LM92宣布的中止。
经过上述的操控结构,MSP430的I/O端口能够完结很丰厚的功用。不仅如此,其间一些I/O口还能够与MSP430中的特别模块相结合完结更为杂乱的作业。如与捕获比较模块相结合能够完结串行通讯,与A/D模块结合完结A/D转化等。此外,MSP430 I/O端口的电器特性也十分杰出,简直一切的I/O口都有20mA的驱动才能,关于一般的LED、蜂鸣器能够直接驱动无需辅佐电路。许多端口内部都集成了上拉电阻,能够便利与外围器材的接口。 [b]2 MSP430与I2C总线器材接口 [/b]经过上述的介绍了解了MSP430中I/O口的一些操控特色。以下介绍怎么运用这些特色完结I2C总线的接口。如图2所示,运用41系列单片机的 P6.6发生I2C总线的时序同步信号;运用P6.7完结I2C总线的串行数据输入输出;运用P2.0接纳LM92发生的中止信号。依据I2C总线标准,经过对LM92的A0、A1和AT240的A0、A1、A2设定不同的器材地址,两个器材能够共用SCL、SDA。
[b] 2.1 I/O端口引脚操控 [/b]与8031不同,MSP430没有位空间,也没有专门履行位操作的操控电路。那么关于一个指定的I/O端它是怎么进行操控的呢?MSP430中有关位操作的指令都是经过逻辑运算完结的。[3]例如: BISB #01000010B,P1OUT ; 将P1.6和P1.1置位XORB #01000010B,P1OUT ; 逻辑或运算 该例中的置位指令BISB是用原操作数(01000010)与意图操作数(P1OUT)做逻辑或运算得到的。因而该指令与第二行的指令是等效的。尽管,这样的操控办法比起8031略显杂乱,但它的操控才能有所增强。从比如中不难看出,这种办法能够一起操控多个端口位。 [b]2.2 简化I2C接口的办法 [/b]众所周知,完结I2C总线协议主要是操控SDA、SCL使其发生协议所规则的各种时序。要操控P6.7、P6.6发生I2C总线要求的各种时序,就要频频运用到输入、输出以及方向寄存器。而要削减代码的量,简化接口操控,最直接的办法便是削减有关寄存器操作次数。要完结这一主意需求软硬件结合,充分运用I/O口的特色以及I2C总线协议的特色。
仔细观察图3的根本数据操作时序[1]能够发现:榜首,I2C总线在无数据传输时均处于高电平状况;第二,SDA引脚是数据的输入输出端,它的状况改变最为杂乱,操控它需求频频的运用P6IN、P6OUT、P6DIR三个寄存器。 图2中的R1、R2是上拉电阻,其阻值由选用的I2C总线器材的电器特性确认。在本文中这两个电阻不光起上拉的效果,还有助于处理榜首个问题。当 P6.6、P6.7处于接纳状况时,上拉电阻能够将该点的电平拉升为VCC,然后保证总线闲暇时有安稳的高电平。 连续以上的思路能够发现,方向寄存器相应位为输入时,就等于给I2C从器材发送了逻辑1。那么怎么发送逻辑0呢?将对应的方向操控位设为输出,然后输出寄存器相应方位为0就能够完结。再进一步,假如将输出寄存器对应为设为0,只操控方向寄存器的改变就能够发送两种逻辑电平。这样,在发送数据时只需求操控方向寄存器。关于SDA需求频频切换输入输出状况的特色,本办法能够削减15%左右的代码量,并使程序更明晰。这样就为第二个问题找到了很好的处理办法。 [b]3 I2C总线操控时序的完结 [/b]以上叙述了I2C总线最根本的操作时序。I2C总线中的各种操作都是由这些根本操作组合完结的。由于I2C总线器材的类型、功用、结构不尽相同,因而每一种器材详细操控时序有所差异。图4是AT2402读取指定字节数据操控时序。从图中能够看出一个读取操作中要运用到开始、发送字节、处理回应、接纳字节、中止这些根本操作。附录中的代码就完结了这个时序。关于AT2402还有其他操控的时序,如字节写时序、数据页读时序、地址读取时序等等[1]。附录中代码对根本操作别离编写为子程序。关于不同的功用时序,能够经过子程序的调用来完结。
LM92是一种高精度的温度传感器,它也选用I2C总线办法操控。图5是该器材读取温度数据的时序。由于它的功用和结构与AT2402有很大的差异,所以二者操控时序不尽相同。如图4和图5,尽管都是完结读取操作,可是二者时序不同很大,LM92的操控时序明显要杂乱的多。不过仔细分析能够看出这些时序也都是由一些根本操作组合完结的。这样就能够在上述办法的基础上完善LM92所需求的根本操作子程序,从而依据时序需求组织子程序完结对LM92的各种操控。
综上所述,要完结I2C总线的操控时序,需求仔细分析各种器材的时序要求及特色,构建一切的根本操作,并按时序要求合理组织根本操作。 [b]4结束语 [/b]运用上述的规划办法和电路,完结了MSP430与I2C总线器材的接口,很好的操控AT2402和LM92,达到了预期的方针。实践证明该办法对完结I2C总线器材操控十分有用,并且运用该办法编制的程序代码量小,履行效率高。该办法为MSP430与I2C总线接口供给了一种可行的计划。