嵌入式系统原理与应用
嵌入式系统原理与应用
嵌入式系统是用来控制或者监视机器、装置、工厂等大规模系统的设备。嵌入式系统以应用为中心、以计算机技术为基础、软硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM 中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。所以,介入嵌入式系统行业,必须有一个正确的定位。例如Palm 之所以在PDA 领域占有70%以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理;而风河的Vxworks 之所以在火星车上得以应用,则是因为其高实时性和高可靠性。
嵌入式系统的出现最初是基于单片机的。70年代单片机的出现,使得汽车、家电、工业机器、通信装置以及成千上万种产品可以通过内嵌电子装置来获得更佳的使用性能:更容易使用、更快、更便宜。最早的单片机是Intel 公司的 8048,它出现在1976年。Motorola 同时推出了68HC05,Zilog 公司推出了Z80系列,这些早期的单片机均含有256字节的RAM 、4K 的ROM 、4 个8位并口、1个全双工串行口、两个16位定 时 器。之后在80年代初,Intel 又进一步完善了
8048,在它的基础上研制成功了8051,这在单片机的历史上是值得纪念的一页,51系列的单片机是较为成功的单片机芯片,在各种产品中有着非常广泛的应用。虽然51系列单片机应用广泛,但是功耗太大用于一些电池供电的设备则不适合。美国德州仪器TI 公司推出的MSP430系列的超低功耗16位混合信号处理器,集中多种领先技术于一体,以16位RISC 处理器、超低功耗、高性能模拟技术及丰富的片内外设、JTAG 仿真调试定义了新一代单片机的概念。
MSP430是1996年推出的超低功耗的混合信号处理器(之所以具有超低功耗是因为其在降低芯片的电源电压及灵活可控的运行时钟方面有独到之处)
特点:
超低功耗
强大的处理能力,单周期指令周期,并且自带硬件乘法器 高性能模拟技术及丰富的片上外围模块
高稳定性
方便、高效的集成开发环境
温度适应范围宽、抗干扰能力强
小巧、性价比高
在此次的实习中,我对430单片机有了深一步的了解。在超低功耗的方面,其处理器功耗:1.8~3.6V,0.1uA~400uA,250uA/MIPS。口线输入漏电流(最大50nA )在工业都是最低的,远低于其他系列产品。在运算性能上,其16位RISC 结构,使MSP430在8MHZ 晶振工
作时,指令速度可达8MPS 。同时,MSP430中采用了一般只有DSP 中才有的16位多功能硬件乘法器、硬件乘-加(积之和)功能、DMA 等一系列先进的体系结构。大大增强了它的数据处理和运算能力,可以有效地实现一些数字信号处理的算法。在系统整合方面,MSP430系列单片机结合TI 的高性能模拟技术,根据其不同产品,集成了多种功能模块,包括定时器、模拟比较器、多功能串行接口(SPI/IIC/UART)、LCD 驱动器、硬件乘法器、10/12位ADC 、12位DAC 、看门狗定时器(WDT )、I/O端口(P0~P6)、DMA 控制器、2~10KB的RAM 、以及丰富的中断功能。另外,大部分MSP430系列单片机采用Flash 技术,支持在心编程,并有保密熔丝。MSP430系列单片机均为工业级产品,性能稳定,可靠性高,可用于各种民用、工业产品。
通过对单片机的基本了解后,我开始学习对其进行编程,实现一些小的功能。例如:单片机做实时时钟、单片机测室温(不需要外围模块仅有单片机)。做实时时钟时,先选好了单片机型号MSP4304152。然后对具体型号的单片机更深入了解其编程规范。学习设置单片机内部时钟、晶振、中断等基本功能。因为430单片机需要选择内部时钟和外部时钟。需要运用编程语言实现时钟的选择。之后学习外围模块的芯片资料,用单片机去控制外围模块实现时钟的掉电不丢失功能。通过深入了解单片机,我知道了MSP430F149、MSP430F448、MSO430F449等一些型号中含有内嵌的温度传感器。在单片机刚刚上电工作的瞬间采集到的温度恒定等于室温。随着单片机的运行,温度会升高,之后所采集的温度就是单片机的温度。所以可以仅仅通过单片机的AD 转
换可以直接测量室温。而且工作的电流仅仅有5uA 左右。不仅实现了低功耗,还节约了外围模块的成本。可见430单片机的内部功能很广泛。这些都只是最基本的单片机变成能力。单片机能实现的功能远远超过于这些。例如应用于各种水表、热表和流量计。仅仅需要单片机内部功能在有的产品中就能减少一些逻辑器件。
这些年来掀起了嵌入式系统应用热潮的原因主要有几个方面:一是芯片技术的发展,使得单个芯片具有更强的处理能力,而且使集成多种接口已经成为可能,众多芯片生产厂商已经将注意力集中在这方面。另一方面的原因就是应用的需要,由于对产品可靠性、成本、更新换代要求的提高,使得嵌入式系统逐渐从纯硬件实现和使用通用计算机实现的应用中脱颖而出,成为近年来令人关注的焦点。现在单片机应用很广泛,几乎涉及到各个领域,单片机越来越深入于我们的生活。
附录:单片机测室温(无外围模块)
/*********内嵌温度传感器测量室温************/
#include
unsigned char i,j;
int result;
char Dis_buffer[10];
void convert(long int templong,int n);
void Display_Data(char *pData,char n);
extern void INIT_LCM_PORT(void);
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7); //降低功耗:端口置为输出,输出置为1
P2DIR |= (BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P3DIR |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P4DIR |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P5DIR |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P6DIR |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P1OUT |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P2OUT |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P3OUT |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P4OUT |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
P5OUT |= (BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P6OUT |= (BIT0 + BIT1 + BIT2 + BIT3 +BIT4 + BIT5 + BIT6 + BIT7);
void INIT_LCM_PORT(void)
{
LCDCTL = LCDON + LCD4MUX + LCDSG0_2; // LCD on, 4-Mux, segments S0-S27
BTCTL = BTDIV+BTIP1+BTIP2+ BT_fLCD_DIV64;
P5SEL = 0xFC; // Select P5.2-7 as Com and Rxx
}
for (i=0;i
{
LCDMEM[i]=0;
}
TACTL = TASSEL0 + TACLR + MC_1;
CCTL0 |= CCIE;
CCR0 = 32768;
_EINT();
while(1)
{
convert(result,1);
Display_Data(Dis_buffer,1);
LPM3;
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(j%30==0)
{
ADC12CTL0 &= ~ENC;
ADC12CTL0=ADC12ON+REFON+REF2_5V+SHT0_6; //采用内部2.5V 参考, 打开通道10REFON 自动打开
ADC12CTL1=SHP+ADC12SSEL_2; //上升沿采样,主时钟
ADC12MCTL0=INCH_10+SREF_1; //选择通道10,Vref+为参考电压,进行温度测量 ADC12IFG = 0x0000;
ADC12IE|=0X01;
ADC12CTL0|=ENC;
ADC12CTL0 |= ADC12SC;
while(!(ADC12IFG&0x0001));
result=ADC12MEM0;
result=(int)(((2.5*result)/4096-0.986)/0.000335);
ADC12CTL0 &= ~ENC;
ADC12CTL0 &= ~(ADC12ON + REFON);
ADC12CTL0 &= ~ADC12SC;
}
j++;
_BIC_SR_IRQ(LPM3_bits);
}