EDN首页   博客首页

最新日志

发表于:2008-8-8 15:43:52
标签:无标签

1

Keil C 编译器常见警告与错误信息的解决方法

1. Warning 280:’i’:unreferenced local variable
说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告

2 Warning 206:’Music3’:missing function-prototype
说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用
解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告

3 Compling :C:\8051\MANN.C
Error:318:can’t open file ‘beep.h’
说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#include “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中

4 Compling:C:\8051\LED.C
Error 237:’LedOn’:function already has a body
说明LedOn( )函数名称重复定义即有两个以上一样的函数名称
解决方法修正其中的一个函数名称使得函数名称都是独立的

5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DELAYX1MS?DELAY
说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译

6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP
FROM : 0025H
TO: 0025H
说明外部资料ROM 的0025H 重复定义地址
解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它

7 WARNING 206:’DelayX1ms’: missing function-prototype
C:\8051\INPUT.C
Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C
说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告
解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用

8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
ADDRESS:0018H
说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接
解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去

9 ***ERROR 107:ADDESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GOUP_
LENGTH: 0018H
***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL: VOLUME
MODULE: C:\8051\OSDM.OBJ (OSDM)
ADDRESS: 4036H
说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存
储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会
以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象
解决方法将以data 型别定义的公共变量修改为idata 型别的定义

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(295)
发表于:2008-6-6 21:41:49
标签:无标签

2

EKSTM32F ad程序的部分解释 希望大家共同讨论

/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
* File Name          : main.c
* Author             : MCD Application Team
* Version            : V1.0
* Date               : 10/08/2007
* Description        : Main program body
********************************************************************************
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include "lcd.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define ADC1_DR_Address    ((u32)0x4001244C)

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
vu16 ADC_ConvertedValue;
ErrorStatus HSEStartUpStatus;

/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void SysTick_Config(void);
void LcdShow_Init(void);

/* Private functions ---------------------------------------------------------*/
void delay(void);
void delay()
{
int i,j;
for (i=0; i<0xfffff; i++) j++;
}

char display[4]={0,0};
/*******************************************************************************
* Function Name  : main
* Description    : Main program
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
#ifdef DEBUG
  debug();
#endif

  /* System clocks configuration ---------------------------------------------*/
  RCC_Configuration();

  /* NVIC configuration ------------------------------------------------------*/
  NVIC_Configuration();

  /* GPIO configuration ------------------------------------------------------*/
  GPIO_Configuration();

  /* Configure the systick */
  SysTick_Config();
  LcdShow_Init();

  /* DMA channel1 configuration ----------------------------------------------*/
  DMA_DeInit(DMA_Channel1);//复位DMA_Channel1
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//外围设备 地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//memory 地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外围设备 做为源
  DMA_InitStructure.DMA_BufferSize = 1;//数据单元尺寸
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外围地址是否自动增长 disable不增长
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//memory 是否自动增长
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外围设备寄存器尺寸 16位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//memory 尺寸 16位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//dma 循环模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//dma 通道优先级
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//memory- to-memory转换
  DMA_Init(DMA_Channel1, &DMA_InitStructure);//初始化dma通道1

  /* Enable DMA channel1 */
  DMA_Cmd(DMA_Channel1, ENABLE);//使能dma通道1

  /* ADC1 configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//adc 工作模式 adc1 adc2 单独工作
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//是否使能多通道搜索 或单通道
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//是否 启动 连续转换模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//非外部触发启动转换 软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ad转换结果右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;//adc规则转换通道数量
  ADC_Init(ADC1, &ADC_InitStructure);//

  /* ADC1 regular channel10 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);//配置转换规则
                         //通道adc1 adc通道 规则转换序列号 转换频率
  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);//使能adc1 dma

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);//外围adc1 使能转换

  /* Enable ADC1 reset calibaration register */
  ADC_ResetCalibration(ADC1);//复位adc1 校准
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));//等待复位完成

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);//开始adc1 校准转换
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));//等待转换完成

  /* Start ADC1 Software Conversion */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);//软件使能adc转换

#if 1
    while(1)
  {
    vu16 value = ADC_ConvertedValue;

    u8 num1 = value&0xf;
    u8 num2 = (value&0xff)>>4;
    u8 num3= (value&0xfff)>>8;
    u8 num4 = value>>12;
    if (num1>9)
      display[3]=num1+(65-10);
    else
      display[3]=num1+(48-0);

    if (num2>9)
      display[2]=num2+(65-10);
    else
      display[2]=num2+(48-0);

    if (num3>9)
      display[1]=num3+(65-10);
    else
      display[1]=num3+(48-0);

    if (num4>9)
      display[0]=num4+(65-10);
    else
      display[0]=num4+(48-0);

    write_string(display);
    delay();
  }
#endif
}

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();//rcc复位

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);//使能hse 外部时钟External High Speed oscillator (HSE).

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待HSE启动

  if(HSEStartUpStatus == SUCCESS)//启动成功
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能flash 时钟欲分频器

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);//flash code潜伏周期 latency FLASH_Latency_2Two Latency cycles.

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置ahb时钟

    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);//Configures the High Speed APB clock (PCLK2).

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);//Configures the Low Speed APB clock (PCLK1).

    /* ADCCLK = PCLK2/4 */
    RCC_ADCCLKConfig(RCC_PCLK2_Div4);//Configures the ADC clock (ADCCLK).

    /* PLLCLK = 4MHz * 14 = 56 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_14);//Configures the PLL clock source and multiplication factor.

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);//使能pll

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)//等待pllready
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)//0x08: PLL used as system clock
    {
    }
  }

/* Enable peripheral clocks --------------------------------------------------*/
  /* Enable DMA clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);//使能dma 时钟

  /* Enable ADC1 and GPIOC clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);//使能adc1 时钟

  /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
         | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);//

  /* TIM2 clocks enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//
}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : Configures the different GPIO ports.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure PC.00 (ADC Channel10) as analog input -------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//端口0
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

  // for LCD display
  /* Configure PE.00 -- PE.15 as Output push-pull : SEG0~15 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* Configure PC.04 -- PC.11 as Output push-pull  : COM1~4 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures Vector Table base location.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

    /* Configure the Priority Group to 2 bits */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  /* enabling interrupt */
  NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN_RX0_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* enabling interrupt */
  NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* Configure the SysTick handler priority */
  NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 2, 0);
}


void SysTick_Config(void)
{
  /* Configure HCLK clock as SysTick clock source */
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//

  /* SysTick interrupt each 100 Hz with HCLK equal to 72MHz */
  SysTick_SetReload(720000);

  /* Enable the SysTick Interrupt */
  SysTick_ITConfig(ENABLE);

  /* Enable the SysTick Counter */
  SysTick_CounterCmd(SysTick_Counter_Enable);
}

void LcdShow_Init(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 8000;
  TIM_TimeBaseStructure.TIM_Prescaler = 17;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_ARRPreloadConfig(TIM2,DISABLE);
  /* only counter overflow/underflow generate U interrupt */
  TIM_UpdateRequestConfig(TIM2,TIM_UpdateSource_Regular);

  /* Output Compare Timing Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
  TIM_OCInitStructure.TIM_Pulse = 4000;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInit(TIM2, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);

  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_Update, ENABLE);

  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
}

#ifdef  DEBUG
/*******************************************************************************
* Function Name  : assert_failed
* Description    : Reports the name of the source file and the source line number
*                  where the assert_param error has occurred.
* Input          : - file: pointer to the source file name
*                  - line: assert_param error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(487)
发表于:2008-6-2 11:20:29
标签:无标签

1

C51启动文件STARTUP.A51

C51启动文件STARTUP.A51
启动文件STARTUP.A51中包含目标板启动代码,可在每个project中加入这个文件,只要复位,则该文件立即执行,其功能包括:
l 定义内部RAM大小、外部RAM大小、可重入堆栈位置
l 清除内部、外部或者以此页为单元的外部存储器
l 按存储模式初使化重入堆栈及堆栈指针
l 初始化8051硬件堆栈指针
l 向main( )函数交权

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 整理

评论(0) | 阅读(330)
发表于:2008-5-28 20:25:35
标签:无标签

1

51单片机 c语言初步

1)C忌讳绝对定位。
常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作
用域,编译器就把一个固定地址给这个变量。怎么取得这个变量的地址?要用指针。比如unsigned char data x;后,x的地址就是&x,
你只要查看这个参数,就可以在程序中知道具体的地址了。所以俺一看见要使用绝对定位的人,第一印象就是:这大概是个初学者。
2)设置SP的问题。
原因和1差不对,编译器在把所有变量和缓冲区赋予地址后,自动把最后一个字节开始的地方,作为SP的开始位置,所以初学者是不必
要去理会的。这体现C的优越性,很多事情C编译时候做了。
3)用C的主程序结构:
#include <reg52.h>
void main(void)
{
while(1);
}
这是个最小的成功的C程序,包括头部文件和程序主体。
头部文件的名词解释:引用的外部资源文件,这个文件包括了硬件信息和外部模块提供的可使用的函数和变量的说明。可以用文本方
式打开reg52.h,仔细研究下,会有一些写程序的体会。
4)这样构成一个C项目
在C中,常用项目来管理。项目一般分为两大块:C文件块和头部文件块。
我们常把不同功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到可以烧录的HEX文件或BIN文件。
这些C文件中,有且只有唯一一个包括main()函数,和3)中一样的C文件。
用头部文件把各个不同的C互相连接起来。一个C文件基本上要对应有一个H头部文件,这个H文件就包含本C文件中可以提供给外面使
用的变量和函数,没有在H文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。
例子:a.C:
unsigned char i;
unsigned char mWork;
void Test1(void)
{
mWork++;
}
void Test2(void)
{
i++;
}
a.h文件中:
extern unsigned char i;
extern void Test1(void);
这样主程序M.c中:
#include <reg52.h> /*C编译器内部自带的H文件,使用<>*/
#include "a.h" /*自定义的H文件,一般用""*/
void main(void)
{
Test1(); /*使用a.c模块文件中的函数*/
while(1){
i++; /*使用a.c模块文件中的变量*/
}
}
5)51家族
核心都是基于8031的,有很多在此核心上进行扩展,有的把程序存储器放在内部:89c(S)51..,有的增加了RAM:89c(S)52..,有的增加
了一些专用硬件80C552...,有的改变时钟时序W77E58...。市面上现在常用的主要有ATMEL公司的AT89X系列,PHILIPS的P87(89)x,台
湾WINBOND的w77(78)x系列,Cygnal的C8051Fx系列。
6)51单片机结构的C描述
这里不讲51的具体结构,只是引导初学者快速理解51单片机的物理结构。寄存器和IO及其它硬件设备的地址名称,在相应的C头部文件
中可以找到。51为reg51.h,52为reg52.h,以次类推,比如winbond的78E58就为w78e58.h这些H文件中的描述:
srf,定义一个8位的设备。
srf16,定义一个16位的设备。
sbit,定义一个位的设备。
用这些语句定义后,就可以在C中象汇编一样使用这些硬件设备,这是单片机应用比标准C特殊的地方,其它差别很少。
7)在51系列中data,idata,xdata,pdata的区别
data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式
访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,
建议少用。但也有他的优点,具体用法属于中级问题,这里不提。
8)startup.a51的作用
和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char
data xxx="100";,那startup.a51中就会有相关的赋值。如果没有=100,startup.a51就会把他清0。(startup.a51==变量的初始化)。
这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。
有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量,
但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。,
为什么还要去改?
可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(399)
发表于:2008-5-26 16:51:54
标签:无标签

0

三极管参数

1.        VCEO,基极开路,集电极-发射极反向击穿电压。
2.        VCBO,发射极开路,集电极-基极反向击穿电压。
3.        VEBO,J集电极开路,发射结反向击穿电压。
4.        VDSO, 漏源击穿电压。
5.        ICM,集电极最大允许电流。
6.        IDSM,最大漏源电流。
7.        PCM,集电极最大耗散功率。
8.        PDM,漏极最大耗散功率。
9.        IC,集电极电流。
10.        ID,漏极电流。
11.        hFE,共发射极静态放大倍数。
12.        gm,低频跨导,场效应管栅极电压对漏极电流的控制能力。
13.        fT,特征频率。
14.        td,延迟时间。
15.        tf,下降时间。

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类: 无分类    |    来源: 整理

评论(0) | 阅读(289)
发表于:2008-5-26 16:23:53
标签:无标签

1

封装

我来说说吧:
1、BGA(ball grid array)
球形触点陈列,表面贴装型封装之一。在印刷基板的背面按陈列方式制作出球形凸点用以
代替引脚,在印刷基板的正面装配LSI 芯片,然后用模压树脂或灌封方法进行密封。也称为凸
点陈列载体(PAC)。引脚可超过200,是多引脚LSI 用的一种封装。
封装本体也可做得比QFP(四侧引脚扁平封装)小。例如,引脚中心距为1.5mm 的360 引脚
BGA 仅为31mm 见方;而引脚中心距为0.5mm 的304 引脚QFP 为40mm 见方。而且BGA 不
用担心QFP 那样的引脚变形问题。
该封装是美国Motorola 公司开发的,首先在便携式电话等设备中被采用,今后在美国有可
能在个人计算机中普及。最初,BGA 的引脚(凸点)中心距为1.5mm,引脚数为225。现在也有
一些LSI 厂家正在开发500 引脚的BGA。
BGA 的问题是回流焊后的外观检查。现在尚不清楚是否有效的外观检查方法。有的认为,
由于焊接的中心距较大,连接可以看作是稳定的,只能通过功能检查来处理。
美国Motorola 公司把用模压树脂密封的封装称为OMPAC,而把灌封方法密封的封装称为
GPAC(见OMPAC 和GPAC)。


2、BQFP(quad flat package with bumper)
带缓冲垫的四侧引脚扁平封装。QFP 封装之一,在封装本体的四个角设置突起(缓冲垫)以
防止在运送过程中引脚发生弯曲变形。美国半导体厂家主要在微处理器和ASIC 等电路中采用
此封装。引脚中心距0.635mm,引脚数从84 到196 左右(见QFP)。


3、碰焊PGA(butt joint pin grid array)
表面贴装型PGA 的别称(见表面贴装型PGA)。


4、C-(ceramic)
表示陶瓷封装的记号。例如,CDIP 表示的是陶瓷DIP。是在实际中经常使用的记号。


5、Cerdip
用玻璃密封的陶瓷双列直插式封装,用于ECL RAM,DSP(数字信号处理器)等电路。带有
玻璃窗口的Cerdip 用于紫外线擦除型EPROM 以及内部带有EPROM 的微机电路等。引脚中心
距2.54mm,引脚数从8 到42。在日本,此封装表示为DIP-G(G 即玻璃密封的意思)。


6、Cerquad
表面贴装型封装之一,即用下密封的陶瓷QFP,用于封装DSP 等的逻辑LSI 电路。带有窗
口的Cerquad 用于封装EPROM 电路。散热性比塑料QFP 好,在自然空冷条件下可容许1.5~
2W 的功率。但封装成本比塑料QFP 高3~5 倍。引脚中心距有1.27mm、0.8mm、0.65mm、0.5mm、
0.4mm 等多种规格。引脚数从32 到368。


7、CLCC(ceramic leaded chip carrier)
带引脚的陶瓷芯片载体,表面贴装型封装之一,引脚从封装的四个侧面引出,呈丁字形。
带有窗口的用于封装紫外线擦除型EPROM 以及带有EPROM 的微机电路等。此封装也称为
QFJ、QFJ-G(见QFJ)。


8、COB(chip on board)
板上芯片封装,是裸芯片贴装技术之一,半导体芯片交接贴装在印刷线路板上,芯片与基
板的电气连接用引线缝合方法实现,芯片与基板的电气连接用引线缝合方法实现,并用树脂覆
盖以确保可靠性。虽然COB 是最简单的裸芯片贴装技术,但它的封装密度远不如TAB 和倒片
焊技术。


9、DFP(dual flat package)
双侧引脚扁平封装。是SOP 的别称(见SOP)。以前曾有此称法,现在已基本上不用。


10、DIC(dual in-line ceramic package)
陶瓷DIP(含玻璃密封)的别称(见DIP).


11、DIL(dual in-line)
DIP 的别称(见DIP)。欧洲半导体厂家多用此名称。


12、DIP(dual in-line package)
双列直插式封装。插装型封装之一,引脚从封装两侧引出,封装材料有塑料和陶瓷两种。
DIP 是最普及的插装型封装,应用范围包括标准逻辑IC,存贮器LSI,微机电路等。
引脚中心距2.54mm,引脚数从6 到64。封装宽度通常为15.2mm。有的把宽度为7.52mm
和10.16mm 的封装分别称为skinny DIP 和slim DIP(窄体型DIP)。但多数情况下并不加区分,
只简单地统称为DIP。另外,用低熔点玻璃密封的陶瓷DIP 也称为cerdip(见cerdip)。


13、DSO(dual small out-lint)
双侧引脚小外形封装。SOP 的别称(见SOP)。部分半导体厂家采用此名称。


14、DICP(dual tape carrier package)
双侧引脚带载封装。TCP(带载封装)之一。引脚制作在绝缘带上并从封装两侧引出。由于利
用的是TAB(自动带载焊接)技术,封装外形非常薄。常用于液晶显示驱动LSI,但多数为定制品。
另外,0.5mm 厚的存储器LSI 簿形封装正处于开发阶段。在日本,按照EIAJ(日本电子机械工
业)会标准规定,将DICP 命名为DTP。


15、DIP(dual tape carrier package)
同上。日本电子机械工业会标准对DTCP 的命名(见DTCP)。


16、FP(flat package)
扁平封装。表面贴装型封装之一。QFP 或SOP(见QFP 和SOP)的别称。部分半导体厂家采
用此名称。


17、flip-chip
倒焊芯片。裸芯片封装技术之一,在LSI 芯片的电极区制作好金属凸点,然后把金属凸点
与印刷基板上的电极区进行压焊连接。封装的占有面积基本上与芯片尺寸相同。是所有封装技
术中体积最小、最薄的一种。
但如果基板的热膨胀系数与LSI 芯片不同,就会在接合处产生反应,从而影响连接的可靠
性。因此必须用树脂来加固LSI 芯片,并使用热膨胀系数基本相同的基板材料。


18、FQFP(fine pitch quad flat package)
小引脚中心距QFP。通常指引脚中心距小于0.65mm 的QFP(见QFP)。部分导导体厂家采
用此名称。


19、CPAC(globe top pad array carrier)
美国Motorola 公司对BGA 的别称(见BGA)。


20、CQFP(quad fiat package with guard ring)
带保护环的四侧引脚扁平封装。塑料QFP 之一,引脚用树脂保护环掩蔽,以防止弯曲变形。
在把LSI 组装在印刷基板上之前,从保护环处切断引脚并使其成为海鸥翼状(L 形状)。这种封装
在美国Motorola 公司已批量生产。引脚中心距0.5mm,引脚数最多为208 左右。


21、H-(with heat sink)
表示带散热器的标记。例如,HSOP 表示带散热器的SOP。


22、pin grid array(surface mount type)
表面贴装型PGA。通常PGA 为插装型封装,引脚长约3.4mm。表面贴装型PGA 在封装的
底面有陈列状的引脚,其长度从1.5mm 到2.0mm。贴装采用与印刷基板碰焊的方法,因而也称
为碰焊PGA。因为引脚中心距只有1.27mm,比插装型PGA 小一半,所以封装本体可制作得不
怎么大,而引脚数比插装型多(250~528),是大规模逻辑LSI 用的封装。封装的基材有多层陶
瓷基板和玻璃环氧树脂印刷基数。以多层陶瓷基材制作封装已经实用化。


23、JLCC(J-leaded chip carrier)
J 形引脚芯片载体。指带窗口CLCC 和带窗口的陶瓷QFJ 的别称(见CLCC 和QFJ)。部分半
导体厂家采用的名称。


24、LCC(Leadless chip carrier)
无引脚芯片载体。指陶瓷基板的四个侧面只有电极接触而无引脚的表面贴装型封装。是高
速和高频IC 用封装,也称为陶瓷QFN 或QFN-C(见QFN)。


25、LGA(land grid array)
触点陈列封装。即在底面制作有阵列状态坦电极触点的封装。装配时插入插座即可。现已
实用的有227 触点(1.27mm 中心距)和447 触点(2.54mm 中心距)的陶瓷LGA,应用于高速逻辑
LSI 电路。
LGA 与QFP 相比,能够以比较小的封装容纳更多的输入输出引脚。另外,由于引线的阻抗
小,对于高速LSI 是很适用的。但由于插座制作复杂,成本高,现在基本上不怎么使用。预计
今后对其需求会有所增加。


26、LOC(lead on chip)
芯片上引线封装。LSI 封装技术之一,引线框架的前端处于芯片上方的一种结构,芯片的
中心附近制作有凸焊点,用引线缝合进行电气连接。与原来把引线框架布置在芯片侧面附近的
结构相比,在相同大小的封装中容纳的芯片达1mm 左右宽度。


27、LQFP(low profile quad flat package)
薄型QFP。指封装本体厚度为1.4mm 的QFP,是日本电子机械工业会根据制定的新QFP
外形规格所用的名称。


28、L-QUAD
陶瓷QFP 之一。封装基板用氮化铝,基导热率比氧化铝高7~8 倍,具有较好的散热性。
封装的框架用氧化铝,芯片用灌封法密封,从而抑制了成本。是为逻辑LSI 开发的一种封装,
在自然空冷条件下可容许W3的功率。现已开发出了208 引脚(0.5mm 中心距)和160 引脚(0.65mm
中心距)的LSI 逻辑用封装,并于1993 年10 月开始投入批量生产。


29、MCM(multi-chip module)
多芯片组件。将多块半导体裸芯片组装在一块布线基板上的一种封装。根据基板材料可分
为MCM-L,MCM-C 和MCM-D 三大类。
MCM-L 是使用通常的玻璃环氧树脂多层印刷基板的组件。布线密度不怎么高,成本较低。
MCM-C 是用厚膜技术形成多层布线,以陶瓷(氧化铝或玻璃陶瓷)作为基板的组件,与使
用多层陶瓷基板的厚膜混合IC 类似。两者无明显差别。布线密度高于MCM-L。
MCM-D 是用薄膜技术形成多层布线,以陶瓷(氧化铝或氮化铝)或Si、Al 作为基板的组件。
布线密谋在三种组件中是最高的,但成本也高。


30、MFP(mini flat package)
小形扁平封装。塑料SOP 或SSOP 的别称(见SOP 和SSOP)。部分半导体厂家采用的名称。


31、MQFP(metric quad flat package)

按照JEDEC(美国联合电子设备委员会)标准对QFP 进行的一种分类。指引脚中心距为
0.65mm、本体厚度为3.8mm~2.0mm 的标准QFP(见QFP)。


32、MQUAD(metal quad)
美国Olin 公司开发的一种QFP 封装。基板与封盖均采用铝材,用粘合剂密封。在自然空冷
条件下可容许2.5W~2.8W 的功率。日本新光电气工业公司于1993 年获得特许开始生产。


33、MSP(mini square package)
QFI 的别称(见QFI),在开发初期多称为MSP。QFI 是日本电子机械工业会规定的名称。


34、OPMAC(over molded pad array carrier)
模压树脂密封凸点陈列载体。美国Motorola 公司对模压树脂密封BGA 采用的名称(见
BGA)。


35、P-(plastic)
表示塑料封装的记号。如PDIP 表示塑料DIP。


36、PAC(pad array carrier)
凸点陈列载体,BGA 的别称(见BGA)。


37、PCLP(printed circuit board leadless package)
印刷电路板无引线封装。日本富士通公司对塑料QFN(塑料LCC)采用的名称(见QFN)。引
脚中心距有0.55mm 和0.4mm 两种规格。目前正处于开发阶段。


38、PFPF(plastic flat package)
塑料扁平封装。塑料QFP 的别称(见QFP)。部分LSI 厂家采用的名称。


39、PGA(pin grid array)
陈列引脚封装。插装型封装之一,其底面的垂直引脚呈陈列状排列。封装基材基本上都采
用多层陶瓷基板。在未专门表示出材料名称的情况下,多数为陶瓷PGA,用于高速大规模逻辑
LSI 电路。成本较高。引脚中心距通常为2.54mm,引脚数从64 到447 左右。
了为降低成本,封装基材可用玻璃环氧树脂印刷基板代替。也有64~256 引脚的塑料PGA。
另外,还有一种引脚中心距为1.27mm 的短引脚表面贴装型PGA(碰焊PGA)。(见表面贴装
型PGA)。

40、piggy back
驮载封装。指配有插座的陶瓷封装,形关与DIP、QFP、QFN 相似。在开发带有微机的设
备时用于评价程序确认操作。例如,将EPROM 插入插座进行调试。这种封装基本上都是定制
品,市场上不怎么流通。


41、PLCC(plastic leaded chip carrier)
带引线的塑料芯片载体。表面贴装型封装之一。引脚从封装的四个侧面引出,呈丁字形,
是塑料制品。美国德克萨斯仪器公司首先在64k 位DRAM 和256kDRAM 中采用,现在已经普
及用于逻辑LSI、DLD(或程逻辑器件)等电路。引脚中心距1.27mm,引脚数从18 到84。
J 形引脚不易变形,比QFP 容易操作,但焊接后的外观检查较为困难。
PLCC 与LCC(也称QFN)相似。以前,两者的区别仅在于前者用塑料,后者用陶瓷。但现
在已经出现用陶瓷制作的J 形引脚封装和用塑料制作的无引脚封装(标记为塑料LCC、PCLP、P
-LCC 等),已经无法分辨。为此,日本电子机械工业会于1988 年决定,把从四侧引出J 形引
脚的封装称为QFJ,把在四侧带有电极凸点的封装称为QFN(见QFJ 和QFN)。


42、P-LCC(plastic teadless chip carrier)(plastic leaded chip currier)
有时候是塑料QFJ 的别称,有时候是QFN(塑料LCC)的别称(见QFJ 和QFN)。部分
LSI 厂家用PLCC 表示带引线封装,用P-LCC 表示无引线封装,以示区别。


43、QFH(quad flat high package)
四侧引脚厚体扁平封装。塑料QFP 的一种,为了防止封装本体断裂,QFP 本体制作得
较厚(见QFP)。部分半导体厂家采用的名称。


44、QFI(quad flat I-leaded packgac)
四侧I 形引脚扁平封装。表面贴装型封装之一。引脚从封装四个侧面引出,向下呈I 字。
也称为MSP(见MSP)。贴装与印刷基板进行碰焊连接。由于引脚无突出部分,贴装占有面积小
于QFP。
日立制作所为视频模拟IC 开发并使用了这种封装。此外,日本的Motorola 公司的PLL IC
也采用了此种封装。引脚中心距1.27mm,引脚数从18 于68。


45、QFJ(quad flat J-leaded package)
四侧J 形引脚扁平封装。表面贴装封装之一。引脚从封装四个侧面引出,向下呈J 字形。
是日本电子机械工业会规定的名称。引脚中心距1.27mm。
材料有塑料和陶瓷两种。塑料QFJ 多数情况称为PLCC(见PLCC),用于微机、门陈列、
DRAM、ASSP、OTP 等电路。引脚数从18 至84。
陶瓷QFJ 也称为CLCC、JLCC(见CLCC)。带窗口的封装用于紫外线擦除型EPROM 以及
带有EPROM 的微机芯片电路。引脚数从32 至84。


46、QFN(quad flat non-leaded package)
四侧无引脚扁平封装。表面贴装型封装之一。现在多称为LCC。QFN 是日本电子机械工业
会规定的名称。封装四侧配置有电极触点,由于无引脚,贴装占有面积比QFP 小,高度比QFP
低。但是,当印刷基板与封装之间产生应力时,在电极接触处就不能得到缓解。因此电极触点
难于作到QFP 的引脚那样多,一般从14 到100 左右。
材料有陶瓷和塑料两种。当有LCC 标记时基本上都是陶瓷QFN。电极触点中心距1.27mm。
塑料QFN 是以玻璃环氧树脂印刷基板基材的一种低成本封装。电极触点中心距除1.27mm 外,
还有0.65mm 和0.5mm 两种。这种封装也称为塑料LCC、PCLC、P-LCC 等。


47、QFP(quad flat package)
四侧引脚扁平封装。表面贴装型封装之一,引脚从四个侧面引出呈海鸥翼(L)型。基材有陶
瓷、金属和塑料三种。从数量上看,塑料封装占绝大部分。当没有特别表示出材料时,多数情
况为塑料QFP。塑料QFP 是最普及的多引脚LSI 封装。不仅用于微处理器,门陈列等数字逻辑LSI 电路,而且也用于VTR 信号处理、音响信号处理等模拟LSI 电路。引脚中心距有1.0mm、0.8mm、
0.65mm、0.5mm、0.4mm、0.3mm 等多种规格。0.65mm 中心距规格中最多引脚数为304。
日本将引脚中心距小于0.65mm 的QFP 称为QFP(FP)。但现在日本电子机械工业会对QFP
的外形规格进行了重新评价。在引脚中心距上不加区别,而是根据封装本体厚度分为
QFP(2.0mm~3.6mm 厚)、LQFP(1.4mm 厚)和TQFP(1.0mm 厚)三种。
另外,有的LSI 厂家把引脚中心距为0.5mm 的QFP 专门称为收缩型QFP 或SQFP、VQFP。
但有的厂家把引脚中心距为0.65mm 及0.4mm 的QFP 也称为SQFP,至使名称稍有一些混乱。
QFP 的缺点是,当引脚中心距小于0.65mm 时,引脚容易弯曲。为了防止引脚变形,现已
出现了几种改进的QFP 品种。如封装的四个角带有树指缓冲垫的BQFP(见BQFP);带树脂保护
环覆盖引脚前端的GQFP(见GQFP);在封装本体里设置测试凸点、放在防止引脚变形的专用夹
具里就可进行测试的TPQFP(见TPQFP)。
在逻辑LSI 方面,不少开发品和高可靠品都封装在多层陶瓷QFP 里。引脚中心距最小为
0.4mm、引脚数最多为348 的产品也已问世。此外,也有用玻璃密封的陶瓷QFP(见Gerqad)。


48、QFP(FP)(QFP fine pitch)
小中心距QFP。日本电子机械工业会标准所规定的名称。指引脚中心距为0.55mm、0.4mm、
0.3mm 等小于0.65mm 的QFP(见QFP)。


49、QIC(quad in-line ceramic package)
陶瓷QFP 的别称。部分半导体厂家采用的名称(见QFP、Cerquad)。


50、QIP(quad in-line plastic package)
塑料QFP 的别称。部分半导体厂家采用的名称(见QFP)。


51、QTCP(quad tape carrier package)
四侧引脚带载封装。TCP 封装之一,在绝缘带上形成引脚并从封装四个侧面引出。是利用
TAB 技术的薄型封装(见TAB、TCP)。


52、QTP(quad tape carrier package)
四侧引脚带载封装。日本电子机械工业会于1993 年4 月对QTCP 所制定的外形规格所用的
名称(见TCP)。


53、QUIL(quad in-line)
QUIP 的别称(见QUIP)。


54、QUIP(quad in-line package)
四列引脚直插式封装。引脚从封装两个侧面引出,每隔一根交错向下弯曲成四列。引脚中
心距1.27mm,当插入印刷基板时,插入中心距就变成2.5mm。因此可用于标准印刷线路板。是
比标准DIP 更小的一种封装。日本电气公司在台式计算机和家电产品等的微机芯片中采用了些
种封装。材料有陶瓷和塑料两种。引脚数64。


55、SDIP (shrink dual in-line package)
收缩型DIP。插装型封装之一,形状与DIP 相同,但引脚中心距(1.778mm)小于DIP(2.54mm),
因而得此称呼。引脚数从14 到90。也有称为SH-DIP 的。材料有陶瓷和塑料两种。


56、SH-DIP(shrink dual in-line package)
同SDIP。部分半导体厂家采用的名称。


57、SIL(single in-line)
SIP 的别称(见SIP)。欧洲半导体厂家多采用SIL 这个名称。


58、SIMM(single in-line memory module)
单列存贮器组件。只在印刷基板的一个侧面附近配有电极的存贮器组件。通常指插入插座
的组件。标准SIMM 有中心距为2.54mm 的30 电极和中心距为1.27mm 的72 电极两种规格。
在印刷基板的单面或双面装有用SOJ 封装的1 兆位及4 兆位DRAM 的SIMM 已经在个人
计算机、工作站等设备中获得广泛应用。至少有30~40%的DRAM 都装配在SIMM 里。


59、SIP(single in-line package)
单列直插式封装。引脚从封装一个侧面引出,排列成一条直线。当装配到印刷基板上时封
装呈侧立状。引脚中心距通常为2.54mm,引脚数从2 至23,多数为定制产品。封装的形状各
异。也有的把形状与ZIP 相同的封装称为SIP。


60、SK-DIP(skinny dual in-line package)
DIP 的一种。指宽度为7.62mm、引脚中心距为2.54mm 的窄体DIP。通常统称为DIP(见
DIP)。


61、SL-DIP(slim dual in-line package)
DIP 的一种。指宽度为10.16mm,引脚中心距为2.54mm 的窄体DIP。通常统称为DIP。


62、SMD(surface mount devices)
表面贴装器件。偶而,有的半导体厂家把SOP 归为SMD(见SOP)。


63、SO(small out-line)
SOP 的别称。世界上很多半导体厂家都采用此别称。(见SOP)。


64、SOI(small out-line I-leaded package)
I 形引脚小外型封装。表面贴装型封装之一。引脚从封装双侧引出向下呈I 字形,中心距
1.27mm。贴装占有面积小于SOP。日立公司在模拟IC(电机驱动用IC)中采用了此封装。引脚数
26。


65、SOIC(small out-line integrated circuit)
SOP 的别称(见SOP)。国外有许多半导体厂家采用此名称。


66、SOJ(Small Out-Line J-Leaded Package)
J 形引脚小外型封装。表面贴装型封装之一。引脚从封装两侧引出向下呈J 字形,故此得名。
通常为塑料制品,多数用于DRAM 和SRAM 等存储器LSI 电路,但绝大部分是DRAM。用SOJ
封装的DRAM 器件很多都装配在SIMM 上。引脚中心距1.27mm,引脚数从20 至40(见SIMM)。


67、SQL(Small Out-Line L-leaded package)
按照JEDEC(美国联合电子设备工程委员会)标准对SOP 所采用的名称(见SOP)。


68、SONF(Small Out-Line Non-Fin)
无散热片的SOP。与通常的SOP 相同。为了在功率IC 封装中表示无散热片的区别,有意
增添了NF(non-fin)标记。部分半导体厂家采用的名称(见SOP)。

69、SOF(small Out-Line package)
小外形封装。表面贴装型封装之一,引脚从封装两侧引出呈海鸥翼状(L 字形)。材料有塑料
和陶瓷两种。另外也叫SOL 和DFP。
SOP 除了用于存储器LSI 外,也广泛用于规模不太大的ASSP 等电路。在输入输出端子不
超过10~40 的领域,SOP 是普及最广的表面贴装封装。引脚中心距1.27mm,引脚数从8~44。
另外,引脚中心距小于1.27mm 的SOP 也称为SSOP;装配高度不到1.27mm 的SOP 也称为
TSOP(见SSOP、TSOP)。还有一种带有散热片的SOP。


70、SOW (Small Outline Package(Wide-Jype))
宽体SOP。部分半导体厂家采用的名称。

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类: 无分类    |    来源: 整理

评论(1) | 阅读(229)
发表于:2008-5-26 14:52:44
标签:无标签

0

动态分配

准备:动态内存分配
一、为什么用动态内存分配
但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组:
float score[30];
但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?
在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把数组定义得足够大。这样,你的程序在运行时就申请了固定大小的你认为足够大的内存空间。即使你知道该班级的学生数,但是如果因为某种特殊原因人数有增加或者减少,你又必须重新去修改程序,扩大数组的存储范围。这种分配固定大小的内存分配方法称之为静态内存分配。但是这种内存分配的方法存在比较严重的缺陷,特别是处理某些问题时:在大多数情况下会浪费大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。
那么有没有其它的方法来解决这样的外呢体呢?有,那就是动态内存分配。
所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于景泰内存分配的特点:
1、不需要预先分配存储空间;
2、分配的空间可以根据程序的需要扩大或缩小。
二、如何实现动态内存分配及其管理
要实现根据程序的需要动态分配存储空间,就必须用到以下几个函数
1、malloc函数
malloc函数的原型为:
void *malloc (unsigned int size)
其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
下例是一个动态分配的程序:
#include 
#include 
main()
{
int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/
if((array(int *) malloc(10*sizeof(int)))==NULL)
{
printf("不能成功分配存储空间。");
exit(1);
}
for (count=0;count〈10;count++) /*给数组赋值*/
array[count]=count;
for(count=0;count〈10;count++) /*打印数组元素*/
printf("%2d",array[count]);
}
上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array(int *) malloc(10*sizeof(int)))==NULL)语句可以分为以下几步:
1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针
2)把此整型指针地址赋给array
3)检测返回值是否为NULL
2、free函数
由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用。这时我们就要用到free函数。
其函数原型是:
void free(void *p)
作用是释放指针p所指向的内存区。
其参数p必须是先前调用malloc函数或calloc函数(另一个动态分配存储区域的函数)时返回的指针。给free函数传递其它的值很可能造成死机或其它灾难性的后果。
注意:这里重要的是指针的值,而不是用来申请动态内存的指针本身。例:
int *p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p2) /*或者free(p2)*/
malloc返回值赋给p1,又把p1的值赋给p2,所以此时p1,p2都可作为free函数的参数。
malloc函数是对存储区域进行分配的。
free函数是释放已经不用的内存区域的。
所以由这两个函数就可以实现对内存区域进行动态分配并进行简单的管理了。

http://topic.csdn.net/u/20071214/21/f257c532-9ed7-4160-8017-b135434140b1.html?990462278

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(181)
发表于:2008-5-26 14:51:07
标签:无标签

0

FS 在仪表中的意义

FS代表全量程,重复性指产品测试过程中在单位量程中几次测试的
  最大差值;迟滞是指在加压过程的平均值,和卸压过程的平均值中
  的最大差值

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(409)
发表于:2008-5-21 16:25:20
标签:无标签

0

轨对轨的运放

rail to rail

rail-to-rail,只是一个概念,其实就是正负电源(±V)供电运算放大器。
运算放大器供电方式:
1,±V
2,+V和GND。
这两种供电方式,各有各的特点。
1,±V
用三极管的截止失真来说,这种方式输入,不要加入直流输入成分,它的“静态工作点”电压是0V,所以动态范围非常大,接近电源。
优点:失真小,态范围非常大(振幅接近V)
缺点:双电源输入,电路变得复杂。
2,+V和GND。
还拿用三极管的截止失真来说,这种方式输入,如果在输入端不加入直流成分(1/2V),那么在输入信号电压很大时,信号的负半周期,就是出现截止失真。设计方案,在输入端加入直流成分(稍稍大于1/2V),它的“静态工作点”电压是1/2V左右。这样所以动态范围也可以非常大,接近电源1/2V左右。
优点:单电源输入,电路简单
缺点:不接入直流成分,失真大;如果作为高音质声音放大,会引起左右分离度降低等情况。
综上情况,在高性能运算放大器电路中,采用rail-to-rail设计方案比较好

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(172)
发表于:2008-5-15 0:00:00
标签:无标签

1

74、74HC、74LS系列芯片资料

74、74HC、74LS系列芯片资料,从网上下的,集合了一下
系列    电平      典型传输延迟ns    最大驱动电流(-Ioh/Lol)mA
AHC     CMOS          8.5                -8/8
AHCT    COMS/TTL      8.5                -8/8
HC      COMS          25                 -8/8
HCT     COMS/TTL      25                 -8/8
ACT     COMS/TTL      10                 -24/24
F       TTL           6.5                -15/64
ALS     TTL           10                 -15/64
LS      TTL           18                 -15/24

注:同型号的74系列、74HC系列、74LS系列芯片,逻辑功能上是一样的。
74LSxx的使用说明如果找不到的话,可参阅74xx或74HCxx的使用说明。
有些资料里包含了几种芯片,如74HC161资料里包含了74HC160、74HC161、
74HC162、74HC163四种芯片的资料。找不到某种芯片的资料时,
可试着查看一下临近型号的芯片资料。

7400 QUAD 2-INPUT NAND GATES      与非门
7401 QUAD 2-INPUT NAND GATES OC    与非门
7402 QUAD 2-INPUT NOR GATES      或非门
7403 QUAD 2-INPUT NAND GATES      与非门
7404 HEX INVERTING GATES        反向器
7406 HEX INVERTING GATES HV   高输出反向器
7408 QUAD 2-INPUT AND GATE        与门
7409 QUAD 2-INPUT AND GATES OC      与门
7410 TRIPLE 3-INPUT NAND GATES     与非门
7411 TRIPLE 3-INPUT AND GATES      与门
74121 ONE-SHOT WITH CLEAR       单稳态
74132 SCHMITT TRIGGER NAND GATES 触发器与非门
7414 SCHMITT TRIGGER INVERTERS  触发器反向器
74153 4-LINE TO 1 LINE SELECTOR    四选一
74155 2-LINE TO 4-LINE DECODER     译码器
74180 PARITY GENERATOR/CHECKER  奇偶发生检验
74191 4-BIT BINARY COUNTER UP/DOWN   计数器
7420 DUAL 4-INPUT NAND GATES  双四输入与非门
7426 QUAD 2-INPUT NAND GATES      与非门
7427 TRIPLE 3-INPUT NOR GATES  三输入或非门
7430 8-INPUT NAND GATES    八输入端与非门
7432 QUAD 2-INPUT OR GATES     二输入或门
7438 2-INPUT NAND GATE BUFFER  与非门缓冲器
7445 BCD-DECIMAL DECODER/DRIVER BCD译码驱动器
7474 D-TYPE FLIP-FLOP        D型触发器
7475 QUAD LATCHES          双锁存器
7476 J-K FLIP-FLOP         J-K触发器
7485 4-BIT MAGNITUDE COMPARATOR  四位比较器
7486 2-INPUT EXCLUSIVE OR GATES  双端异或门
74HC00 QUAD 2-INPUT NAND GATES  双输入与非门
74HC02 QUAD 2-INPUT NOR GATES  双输入或非门
74HC03 2-INPUT OPEN-DRAIN NAND GATES  与非门
74HC04 HEX INVERTERS        六路反向器
74HC05 HEX INVERTERS OPEN DRAIN  六路反向器
74HC08 2-INPUT AND GATES      双输入与门
74HC107 J-K FLIP-FLOP WITH CLEAR  J-K触发器
74HC109A J-K FLIP-FLOP W/PRESET   J-K触发器
74HC11 TRIPLE 3-INPUT AND GATES  三输入与门
74HC112 DUAL J-K FLIP-FLOP    双J-K触发器
74HC113 DUAL J-K FLIP-FLOP PRESET 双JK触发器
74HC123A RETRIGGERABLE MONOSTAB 可重触发单稳
74HC125 TRI-STATE QUAD BUFFERS   四个三态门
74HC126 TRI-STATE QUAD BUFFERS    六三态门
74HC132 2-INPUT TRIGGER NAND 施密特触发与非门
74HC133 13-INPUT NAND GATES  十三输入与非门
74HC137 3-TO-8 DECODERS W/LATCHES 3-8线译码器
74HC138 3-8 LINE DECODER    3线至8线译码器
74HC139 2-4 LINE DECODER    2线至4线译码器
74HC14 TRIGGERED HEX INVERTER  六触发反向器
74HC147 10-4 LINE PRIORITY ENCODER 10-4编码器
74HC148 8-3 LINE PRIORITY ENCODER  8-3编码器
74HC149 8-8 LINE PRIORITY ENCODER  8-8编码器
74HC151 8-CHANNEL DIGITAL MUX   8通道多路器
74HC153 DUAL 4-INPUT MUX    双四输入多路器
74HC154 4-16 LINE DECODER   4线至16线译码器
74HC155 2-4 LINE DECODER    2线至4线译码器
74HC157 QUAD 2-INPUT MUX    四个双端多路器
74HC161 BINARY COUNTER      二进制计数器
74HC163 DECADE COUNTERS     十进制计数器
74HC164 SERIAL-PARALLEL SHIFT REG  串入并出
74HC165 PARALLEL-SERIAL SHIFT REG  并入串出
74HC166 SERIAL-PARALLEL SHIFT REG  串入并出
74HC173 TRI-STATE D FLIP-FLOP   三态D触发器
74HC174 HEX D FLIP-FLOP W/CLEAR   六D触发器
74HC175 HEX D FLIP-FLOP W/CLEAR   六D触发器
74HC181 ARITHMETIC LOGIC UNIT  算术逻辑单元
74HC182 LOOK AHEAD CARRYGENERATR  进位发生器
74HC190 BINARY UP/DN COUNTER 二进制加减计数器
74HC191 DECADE UP/DN COUNTER 十进制加减计数器
74HC192 DECADE UP/DN COUNTER 十进制加减计数器
74HC193 BINARY UP/DN COUNTER 二进制加减计数器
74HC194 4BIT BI-DIR SHIFT  4位双向移位寄存器
74HC195 4BIT PARALLEL SHIFT 4位并行移位寄存器
74HC20 QUAD 4-INPUT NAND GATE 四个四入与非门
74HC221A NON-RETRIG MONOSTAB  不可重触发单稳
74HC237 3-8 LINE DECODER 地址锁3线至8线译码器
74HC242/243 TRI-STAT TRANSCEIVER  三态收发器
74HC244 OCTAL 3-STATE BUFFER  八个三态缓冲门
74HC245 OCTAL 3-STATE TRANSCEIVER 三态收发器
74HC251 8-CH 3-STATE MUX     8路3态多路器
74HC253 DUAL 4-CH 3-STATE MUX  4路3态多路器
74HC257 QUAD 2-CH 3-STATE MUX  4路3态多路器
74HC258 2-CH 3-STATE MUX     2路3态多路器
74HC259 3-8 LINE DECODER  8位地址锁存译码器
74HC266A 2-INPUT EXCLUSIVE NOR GATE  异或非
74HC27 TRIPLE 3-INPUT NOR GATE三个3输入或非门
74HC273 OCTAL D FLIP-FLOP CLEAR  8路D触发器
74HC280 9BIT ODD/EVEN GENERATOR  奇偶发生器
74HC283 4BIT BINARY ADDER CARRY  四位加法器
74HC299 3-STATE UNIVERSAL SHIFT 三态移位寄存
74HC30 8-INPUT NAND GATE    8输入端与非门
74HC32 QUAD 2-INPUT OR GATE   四个双端或门
74HC34 NON-INVERTER         非反向器
74HC354 8-CH 3-STATE MUX     8路3态多路器
74HC356 8-CH 3-STATE MUX     8路3态多路器
74HC365 HEX 3-STATE BUFFER   六个三态缓冲门
74HC366 3-STATE BUFFER INVERTER  缓冲反向器
74HC367 3-STATE BUFFER INVERTER  缓冲反向器
74HC368 3-STATE BUFFER INVERTER  缓冲反向器
74HC373 3-STATE OCTAL D LATCHES 三态D型锁存器
74HC374 3-STATE OCTAL D FLIPFLOP 三态D触发器
74HC393 4-BIT BINARY COUNTER 4位二进制计数器
74HC4016 QUAD ANALOG SWITCH  四路模拟量开关
74HC4020 14-Stage Binary Counter 14输出计数器
74HC4017 Decade Counter/Divider with 10 Decoded Outputs
十进制计数器带10个译码输出端
74HC4040 12 Stage Binary Counter  12出计数器
74HC4046 PHASE LOCK LOOP    相位监测输出器
74HC4049 LEVEL DOWN CONVERTER   电平变低器
74HC4050 LEVEL DOWN CONVERTER   电平变低器
74HC4051 8-CH ANALOG MUX     8通道多路器
74HC4052 4-CH ANALOG MUX     4通道多路器
74HC4053 2-CH ANALOG MUX     2通道多路器
74HC4060 14-STAGE BINARY COUNTER 14阶BIN计数
74HC4066 QUAD ANALOG MUX     四通道多路器
74HC4075 TRIPLE 3-INPUT OR GATE   3输入或门
74HC42 BCD TO DECIMAL    BCD转十进制译码器
74HC423A RETRIGGERABLE MONOSTAB 可重触发单稳
74HC4511 BCD-7 SEG DRIVER/DECODER  7段译码器
74HC4514 4-16 LINE DECODER   4至16线译码器
74HC4538A RETRIGGERAB MONOSTAB  可重触发单稳
74HC4543 LCD BCD-7 SEG LCD用的BCD-7段译码驱动
74HC51 AND OR GATE INVERTER     与或非门
74HC521 8BIT MAGNITUDE COMPARATOR  判决定路
74HC533 3-STATE D LATCH      三态D锁存器
74HC534 3-STATE D FLIP-FLOP   三态D型触发器
74HC540 3-STATE BUFFER       三态缓冲器
74HC541 3-STATE BUFFER INVERTER三态缓冲反向器
74HC58 DUAL AND OR GATE        与或门
74HC589 3STATE 8BIT SHIFT 8位移位寄存三态输出
74HC594 8BIT SHIFT REG     8位移位寄存器
74HC595 8BIT SHIFT REG  8位移位寄存器出锁存
74HC597 8BIT SHIFT REG  8位移位寄存器入锁存
74HC620 3-STATE TRANSCEIVER   反向3态收发器
74HC623 3-STATE TRANSCEIVER  八路三态收发器
74HC640 3-STATE TRANSCEIVER   反向3态收发器
74HC643 3-STATE TRANSCEIVER  八路三态收发器
74HC646 NON-INVERT BUS TRANSCEIVER 总线收发器
74HC648 INVERT BUS TRANCIVER  反向总线收发器
74HC688 8BIT MAGNITUDE COMPARATOR 8位判决电路
74HC7266 2-INPUT EXCLUSIVE NOR GATE 异或非门
74HC73 DUAL J-K FLIP-FLOP W/CLEAR 双JK触发器
74HC74A PRESET/CLEAR D FLIP-FLOP  双D触发器
74HC75 4BIT BISTABLE LATCH   4位双稳锁存器
74HC76 PRESET/CLEAR JK FLIP-FLOP  双JK触发器
74HC85 4BIT MAGNITUDE COMPARATOR 4位判决电路
74HC86 2INPUT EXCLUSIVE OR GATE  2输入异或门
74HC942 BAUD MODEM    300BPS低速调制解调器
74HC943 300 BAUD MODEM  300BPS低速调制解调器
74LS00 QUAD 2-INPUT NAND GATES     与非门
74LS02 QUAD 2-INPUT NOR GATES     或非门
74LS03 QUAD 2-INPUT NAND GATES     与非门
74LS04 HEX INVERTING GATES       反向器
74LS05 HEX INVERTERS OPEN DRAIN  六路反向器
74LS08 QUAD 2-INPUT AND GATE       与门
74LS09 QUAD 2-INPUT AND GATES OC     与门
74LS10 TRIPLE 3-INPUT NAND GATES    与非门
 74LS109 QUAD 2-INPUT AND GATES OC    与门
74LS11 TRIPLE 3-INPUT AND GATES     与门
74LS112 DUAL J-K FLIP-FLOP    双J-K触发器
74LS113 DUAL J-K FLIP-FLOP PRESET 双JK触发器
74LS114 NEGATIVE J-K FLIP-FLOP 负沿J-K触发器
74LS122 Retriggerable Monostab  可重触发单稳
74LS123 Retriggerable Monostable 可重触发单稳
74LS125 TRI-STATE QUAD BUFFERS   四个三态门
74LS13 QUAL 4-in NAND TRIGGER 4输入与非触发器
74LS160 BCD DECADE 4BIT BIN COUNTERS  计数器
74LS136 QUADRUPLE 2-INPUT XOR GATE   异或门
74LS138 3-8 LINE DECODER    3线至8线译码器
74LS139 2-4 LINE DECODER    2线至4线译码器
74LS14 TRIGGERED HEX INVERTER  六触发反向器
74HC147 10-4 LINE PRIORITY ENCODER 10-4编码器
74HC148 8-3 LINE PRIORITY ENCODER  8-3编码器
74HC149 8-8 LINE PRIORITY ENCODER  8-8编码器
74LS151 8-CHANNEL DIGITAL MUX   8通道多路器
74LS153 DUAL 4-INPUT MUX    双四输入多路器
74LS155 2-4 LINE DECODER    2线至4线译码器
74LS156 2-4 LINE DECODER/DEMUX   2-4译码器
74LS157 QUAD 2-INPUT MUX    四个双端多路器
74LS158 2-1 LINE MUX       2-1线多路器
74LS160A BINARY COUNTER     二进制计数器
74LS161A BINARY COUNTER     二进制计数器
74LS162A BINARY COUNTER     二进制计数器
74LS163A DECADE COUNTERS     十进制计数器
74LS164 SERIAL-PARALLEL SHIFT REG  串入并出
74LS168 BI-DIRECT BCD TO DECADE  双向计数器
74LS169 4BIT UP/DN BIN COUNTER 四位加减计数器
74LS173 TRI-STATE D FLIP-FLOP   三态D触发器
74LS174 HEX D FLIP-FLOP W/CLEAR   六D触发器
74LS175 HEX D FLIP-FLOP W/CLEAR   六D触发器
74LS190 BINARY UP/DN COUNTER 二进制加减计数器
74LS191 DECADE UP/DN COUNTER 十进制加减计数器
74LS192 DECADE UP/DN COUNTER 十进制加减计数器
74LS193 BINARY UP/DN COUNTER 二进制加减计数器
74LS194A 4BIT BI-DIR SHIFT 4位双向移位寄存器
74LS195A 4BIT PARALLEL SHIFT4位并行移位寄存器
74LS20 QUAD 4-INPUT NAND GATE 四个四入与非门
74LS21 4-INPUT AND GATE     四输入端与门
74LS240 OCTAL 3-STATE BUFFER  八个三态缓冲门
74LS244 OCTAL 3-STATE BUFFER  八个三态缓冲门
74LS245 OCTAL 3-STATE TRANSCEIVER 三态收发器
74LS253 DUAL 4-CH 3-STATE MUX  4路3态多路器
74LS256 4BIT ADDRESS LATCH  四位可锁存锁存器
74LS257 QUAD 2-CH 3-STATE MUX  4路3态多路器
74LS258 2-CH 3-STATE MUX     2路3态多路器
74LS27 TRIPLE 3-INPUT NOR GATES 三输入或非门
74LS279 QUAD R-S LATCHES    四个RS非锁存器
74LS28 QUAD 2-INPUT NOR BUFFER 四双端或非缓冲
74LS283 4BIT BINARY ADDER CARRY  四位加法器
74LS30 8-INPUT NAND GATES   八输入端与非门
74LS32 QUAD 2-INPUT OR GATES    二输入或门
74LS352 4-1 LINE SELECTOR/MUX 4-1线选择多路器
74LS365 HEX 3-STATE BUFFER   六个三态缓冲门
74LS367 3-STATE BUFFER INVERTER  缓冲反向器
74LS368A 3-STATE BUFFER INVERTER  缓冲反向器
74LS373 OCT LATCH W/3-STATE OUT三态输出锁存器
74LS76 Dual JK Flip-Flop w/set  2个JK触发器
74LS379 QUAD PARALLEL REG   四个并行寄存器
74LS38 2-INPUT NAND GATE BUFFER 与非门缓冲器
74LS390 DUAL DECADE COUNTER  2个10进制计数器
74LS393 DUAL BINARY COUNTER  2个2进制计数器
74LS42 BCD TO DECIMAL    BCD转十进制译码器
74LS48 BCD-7 SEG        BCD-7段译码器
74LS49 BCD-7 SEG        BCD-7段译码器
74LS51 AND OR GATE INVERTER     与或非门
74LS540 OCT Buffer/Line Driver 8路缓冲驱动器
74LS541 OCT Buffer/LineDriver  8路缓冲驱动器
74LS74 D-TYPE FLIP-FLOP       D型触发器
74LS682 8BIT MAGNITUDE COMPARATOR  8路比较器
74LS684 8BIT MAGNITUDE COMPARATOR  8路比较器
74LS75 QUAD LATCHES         双锁存器
74LS83A 4BIT BINARY ADDER CARRY  四位加法器
74LS85 4BIT MAGNITUDE COMPARAT  4位判决电路
74LS86 2INPUT EXCLUSIVE OR GATE  2输入异或门
74LS90 DECADE/BINARY COUNTER 十/二进制计数器
74LS95B 4BIT RIGHT/LEFT SHIFT 4位左右移位寄存
74LS688 8BIT MAGNITUDE COMPARAT  8位判决电路
74LS136 2-INPUT XOR GATE     2输入异或门
74LS651 BUS TRANSCEIVERS      总线收发器
74LS653 BUS TRANSCEIVERS      总线收发器
74LS670 3-STATE 4-BY-4 REG    3态4-4寄存器
74LS73A DUAL J-K FLIP-FLOP W/CLEAR 双JK触发器

点击此处查看原文 >>

系统分类: 接口电路   |    用户分类: 无分类    |    来源: 整理

评论(0) | 阅读(721)
2下一页总共 , 当前 /