最新日志

发表于:2008-5-3 14:51:27
标签:无标签

0

开关集成电路TL494介绍及其应用

 TL494是美国德州仪器公司生产的一种电压驱动型脉宽调制控制集成电路,主要应用在各种开关电源中。本文介绍它与相应的输入、输出电路等一起构成一个单回路控制器。
开关集成电路TL494内部原理图:

1、TL494管脚配置及其功能
  TL494的内部电路由基准电压产生电路、振荡电路、间歇期调整电路、两个误差放大器、脉宽调制比较器以及输出电路等组成。图1是它的管脚图,其中1、2脚是误差放大器I的同相和反相输入端;3脚是相位校正和增益控制;4脚为间歇期调理,其上加0~3.3V电压时可使截止时间从2%线怀变化到100%;5、6脚分别用于外接振荡电阻和振荡电容;7脚为接地端;8、9脚和11、10脚分别为TL494内部两个末级输出三极管集电极和发射极;12脚为电源供电端;13脚为输出控制端,该脚接地时为并联单端输出方式,接14脚时为推挽输出方式;14脚为5V基准电压输出端,最大输出电流10mA;15、16脚是误差放大器II的反相和同相输入端。

2、回路控制器工作原理
  回路控制器的方框图如图2所示。被控制量(如压力、流量、温度等)通过传感器交换为0~5V的电信号,作为闭环回路的反馈信号,通过有源简单二阶低通滤波电路进行平滑、去除杂波干扰后送给TL494的误差放大器I的IN+同相输入端。设定输入信号是由TL494的5V基准电压源经一精密多圈电位器分压,由电位器动端通过有源简单二阶低通滤波电路接入TL494的误差放大器I的IN-反相输入端。反馈信号和设定信号通过TL494的误差放大器I进行比较放大,进而控制脉冲宽度,这个脉冲空度变化的输出又经过整流滤波电路及由集成运算放大器构成的隔离放大电路进行平滑和放大处理,输出一个与脉冲宽度成正比的、变化范围为0~10V的直流电压。这个电压就是所需要的输出控制电压,用它去控制执行电路,及时调整被控制量,使被控制量始终与设定值保持一致,形成闭环单回路控制。
  用TL494实现的单回路控制器的电路原理图如图3所示。
2.1 输入电路
   两个运算放大器IC1A、IC1B都接成有源简单二阶低通滤电路,分别作为反馈信号输入和设定信号输入的处理电路。在电路设计上,两个输入电路采取完全对称的形式。将有源简单二阶低通滤波电路的截止频率fp设计为4Hz,根据有源简单二阶低通滤波电路中fp=0.37f0(f0为该滤波器的特征频率)选取C1与C2为1μF,然后算得R1与R2为16kΩ。这样可以滤除由于传感器距离较远输入引线过长而带来的高频杂波干扰和平滑传感器信号本身的波动,使加入到TL494的管脚1即误差放大器I同相输入端IN+的信号尽可能地平滑和相对稳定。在有源简单二阶低通滤波电路与误差放大器I同相输入端IN+之间接有10kΩ的限流隔离电阻。把TL494的14脚输出的5V基准电压源,用一3.3kΩ精密多圈电位器W1分压作为设定输入信号,通过与处理传感器反馈信号相同的电路,送入TL494的管脚2,即误差放大器I的反相输入端IN-端。实验中发现,R19、R20这两个限流隔离电阻必不可少。否则,TL494误差放大器I的两个输入端的电位将相互影响。另外,实验数据还表明,TL494误差放大器的两个输入端在低电压时跟踪的线性不大好,故这里将两个输入运算放大器的放大倍数取为2,以改善反馈信号与设定信号的跟踪线性。
点击看大图
2.2 脉宽调制电路
  在本控制器中只用到了TL494的误差放大器I,故将误差放大器II的IN+(16脚)接地、IN-(15脚)接高电平。为保护TL494的输出三极管,经R13和R10分压,在4脚加接近0.3V的间歇调整电压。R9、R12和C5组成了相位校正和增益控制网络。经过实验,在本控制器中振荡电阻和振荡电容分别取200kΩ和0.1μF。输出采用并取方式,取自发射级。整机电源取12V单电源。
2.3 输出电路
  为了把脉宽变化的方波信号转换为大小变化的直流信号,通过开关二极管D1、电容C8进行整流滤波。R15作为整波滤波的输出负载,还在脉冲截止期间为C8提供放电回路,使C8上的电压与TL494输出的脉宽成正比。为使输出电压进一步平滑、提高带负载能力以及使输出电压在0~10V之间变化,又加入了一级压控电压源二阶低通滤波电路。在图中所示元件参数下,最大的直流输出电压是10V,IC3A输出端接的10V稳压二极管,是保证在意外的情况下,使输出电压不大于10V。
3、工作过程
  当反馈信号大于设定值时,通过TL494的脉宽调制作用,其9脚与10脚并联输出信号的脉宽减小,这个输出信号再经整流滤波电路及隔离与放大输出电路,使最后输出的直流控制信号的电压相应下降。直流控制信号通过控制电路经执行机构(如电动机、电热管等)使被控制量下降,再进而通过传感器使反馈信号降低,形成单回路闭环控制。当反馈信号小于设定值时,上述控制过程相反。另外,还可以根据被控制系统的具体情况,来调整输入二阶低通滤波器的电容大小,使控制过程及时、准确、稳定。再有,为使控制过程直观,还应加上设定量及被控制量的显示(指示)电路。可从两个输入端取出信号,然后分别通过隔离放大电路(如用运算放大器组成的电压跟随器)送到表头指示。表头可采用多功能数字式电子表头成品或直接用满量程5V的机械表示。
点击看大图
4、实测数据分析
  表1~表3的数据是在输出端接10KΩ负载电阻的开环条件下用DT9102A型数字万用表测得的。其中反馈信号及设定信号分别用精密多圈电位器对标准5V基准源分压来模拟,并且测量点取自IC1A及IC1B的输出端即IC1的1脚和7脚,输出取自IC3A的1脚。所有单位均为伏。
表1 开环的条件下实测数据组1

设定(V) 1.021 1.023 1.022 1.021 1.020 1.019 1.018 1.016 1.015 1.012 1.010
反馈(V) 1.252 1.240 1.227 1.027 1.186 1.162 1.137 1.113 1.090 1.064 1.008
输出(V) 0.01 1.08 1.99 3.01 4.00 5.00 6.09 7.00 8.00 9.00 9.96

点击此处查看原文 >>

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

评论(0) | 阅读(74)
发表于:2008-5-3 14:42:36
标签:无标签

0

压敏电阻的型号及选用方法

SJ1152-82部颁标准中压敏电阻器的型号命名分为四部分,各部分的含义见表1。
表1 压敏电阻器的型号命名及含义
点击看大图
第一部分用字母 “M” 表示主称为敏感电阻器。
第二部分用字母 “Y” 表示敏感电阻器为压敏电阻器。
第三部分用字母表示压敏电阻器的用途的特征。
第四部分用数字表示序号,有的在序号的后面还标有标称电压、通流容量或电阻体直径、电压误差、标称电压等。
例如:
MYL1-1(防雷用压敏电阻器)
MY31-270/3(270V/3kA普通压敏电阻器)
>M——敏感电阻器
M——敏感电阻器
Y——压敏电阻器
Y——压敏电阻器
L——防雷用
31——序号
1-1——序号
270——标称电压为270V
3——通流容量为3kA
压敏电阻是一种以氧化锌为主要成份的金属氧化物半导体非线性电阻元件;电阻对电压较敏感,当电压达到一定数值时,电阻迅速导通。由于压敏电阻具有良好的非线特性、通流量大、残压水平低、动作快和无续流等特点。被广泛应用于电子设备防雷。
主要参数
1、残压:压敏电阻在通过规定波形的大电流时其两端出现的最高峰值电压。
2、通流容量:按规定时间间隔与次数在压敏电阻上施加规定波形电流后,压敏电阻参考电压的变化率仍在规定范围内所能通过的最大电流幅值。
3、泄漏电流:在参考电压的作用下,压敏电阻中流过的电流。
4、额定工作电压:允许长期连续施加在压敏电阻两端的工频电压的有效值。而压敏电阻在吸收暂态过电压能量后自身温度升高,在此电压下能正常冷却,不会发热损坏。
  压敏电阻的不足:(1)寄生电容大 压敏电阻具有较大的寄生电容,一般在几百至几千微微法的范围。在高频信号系统中会引起高频信号传输畸变,从而引起系统正常运行。
(2)泄漏电流的存在 压敏电阻的泄漏电流指标既关系到被保护电子系统的正常运行,又关系到压敏电阻自身的老化和使用寿命。
压敏电阻的损坏形式:(1)当压敏电阻在抑制暂态过电压时能量超过其额定容量时,压敏电阻会因过热而损坏,主要表现为短路、开路。
MYL表示防雷型压敏电阻
MYE表示高负荷型压敏电阻,也有厂家用MYT表示通用型,MYL表示防雷型.
选用方法(一般情况)
1、压敏电压值应大于实际电路的电压峰值,一般为:
U1mA =K1×/K2×K3× UC
U1mA ---- 压敏电压
UC ---- 电路直流工作电压(交流时为有效值)
K1 ---- 电源电压波动系数,一般取1.2
K2 ---- 压敏电压误差,一般取0.85
K3 ---- 老化系数,一般取0.9
交流状态下,应将有效值变为峰值,即扩大√2倍,实际应用中可参考此公式通过实验来确定压敏电压值。
2、通流量
实际应用中,压敏电阻器所吸收的浪涌电流应小于压敏电阻的最大峰值电流,以延长产品的使用寿命。
压敏电阻的检测。用指针式万用表的R×1k挡测量压敏电阻两引脚之间的正、反向绝缘电阻,均为无穷大,否则,说明漏电流大。若所测电阻很小,说明压敏电阻已损坏,不能使用。

点击此处查看原文 >>

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

评论(0) | 阅读(44)
发表于:2008-4-30 19:56:31
标签:无标签

5

51单片机执行指令的过程【转贴】

 

为了加深初学者对51单片机指令的理解,现在把指令执行的过程在此详细说明,希望对你有启发!

单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为
74H E0H,该指令的功能是把操作数E0H送入累加器,

0000H单元中已存放74H0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:
1 程序计数器的内容(这时是0000H)送到地址寄存器;

2 程序计数器的内容自动加1(变为0001H);

3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

4 CPU使读控制线有效;

5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。

   由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC="0002H"PCCPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。

点击此处查看原文 >>

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

评论(0) | 阅读(94)
发表于:2008-4-30 19:52:21
标签:无标签

2

51单片机系统设计与实际应用

基本原则
质量是关键。没有人会对很差的工作感到满足。当完成高质量的工作时,你会为此而感到骄傲。不管你是否知道,你都会因为你的高质量工作而得到信誉。因此,要想为自己所做的事感到骄傲,就需要建立个人标准,并为达到这一标准而努力奋斗。在达到这些标准时,再提高标准并继续努力。挑战自己去完成更优良的工作,你将会为自己的成就而感到惊讶。
1.1 了解单片机的能力
【规则1】设计满足要求的最精简的系统。
 

正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有这样一个认识,即单片机的处理能力是非常强大的。早期的PC机,其CPU(8086)处理能力和8051 相当,却能处理相当复杂的任务。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。

1.2 系统可靠性至关重要

【规则2】使用看门狗。

看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机。当前有多种看门狗的芯片,如MAXIM 公司的MAX802,MAX813 等。而且,有好多种单片机中本身就集成有看门狗。一个外部的看门狗是最好的,因为它不依赖于单片机。如果可能的话,看门狗更新程序不应该放在中断或是子程序中,原则上应该放在主程序中。我曾经见过一个工程师,他所调试的程序在运行时偶而会引起看门狗的复位动作,于是他干脆在每10ms 就中断一次的时钟中断程序中清看门狗。我相信他也知道使看门狗失去作用,可他却没有不是去查明引起这个现象的真正原因。因此,我想提醒大家:不论什么理由,绝对不要忽略系统故障的真正原因。高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师。

【规则3】确定系统的复位信号可靠。

这是一个很容易忽略的问题。当你在设计单片机系统时,你脑中有这个概念吗?什么样的复位信号才是可靠的吗?你用示波器查看过你设计的产品的复位信号吗?不稳定的复位信号可能会产生什么样的后果?你有没有发现过你所设计的单片机系统,每次重新上电启动后,数据变得乱七八糟,并且每一次现象并不相同,找不出规律,或者有时候干脆不运行,或者有时候进入一种死机状态,有时候又一点事都没有正常运行?在这种情况下,你应该查一下你的系统的复位信号。一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC 寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。

【规则4】确定系统的初始化有效。

系统程序开始应延时一段时间。这是很多单片机程序设计中的常用方法,为什么呢?因为系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM 等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。

【规则5】上电时对系统进行检测。

上电时对系统中进行检测是单片机程序中的一个良好设计。在硬件设计时也应该细细考虑将各个使用到的芯片、接口设计成容易使用软件进行测试的模式。很多有经验的单片机设计者都会在系统上电时(特别是第一次上电时)进行全面的检测,或者更进一步,将系统的运行状态中分为测试模式和正常运行模式,通过加入测试模式对系统进行详细的检测,使得系统的批量检测更为方便容易。另外要注意的是,一个简单明了的故障显示界面也是颇要费得心思的。比如:系统的外部RAM(数据存储器)是单片机系统中常用的器件。外部RAM 如果存在问题,程序通常都会成为一匹脱缰的野马。因此,程序在启动时(至少在第一次上电启动时)一定要对外部RAM 进行检测。检测内容包括:1)检测RAM 中的单元。这主要通过写入和读出的数据保持一致。2)检测单片机与RAM 之间的地址数据总线。总线即没有互相短路,也没有连接到“地”上。另外,很多芯片,都提供了测试的方法。如串行通信芯片UART,都带环路测试的功能。

【规则6】按EMC 测试要求设计硬件。

EMC 测试要求已经成为产品的必需。有很多的文章关于这方面的。

1.3 软件编程和调试

【规则7】尽可能使用Small 模式编译

对比起Large模式和Compact 模式,Small 模式能生成更为紧凑的代码。在Small 模式下,C51 编译器将没有使用关键词,如idata、pdata、xdata特殊声明的变量通通放在data单元中。在编程中,对于在的数据区,可以指定放在外部存储器中。

【规则8】在仿真前做好充分的准备

单片机硬件仿真器给单片机开发者带来了极大的方便,同时也很容易造成人的依赖性。很多时候,没有仿真器却能促使工程师写出更高质量的程序。也许在硬件仿真调试之前,下面准备工作将会对你有用:

1)程序编完后,对代码仔细逐行检查。检查代码的错误,建立自己的代码检查表,对经常易错的地方进行检查。检查代码是否符合编程规范。 2)对各个子程序进行测试。测试的方法:用程序测试程序,编制一个调用该子程序的代码,建立要测试子程序的入口条件,再看看它是否按预期输出结果。

3)如果代码有修改,再次对代码进行检查。

4)有可能的话,进行软件仿真——Keil C 的软件仿真功能十分强大。软件仿真可以防止因硬件的错误,如器件损坏、线路断路或短路,而引起调试的错误。

5)开始硬件仿真。

【规则9】使用库函数

重用代码,尤其是是标准库的代码,而不是手工编写你自己的代码。这样更快、更容易也更安全。KeilC 中提供了多个库函数,这些库函数的用法在KeilC 的帮助文件中有详细的描述。

【规则10】使用const。

这一点在很多经典的关于C 和C++的书籍中是必谈的要点。在《Exceptional C++》一书中,对这点有很精彩的描述,现摘录如下:“没有正确的安全意识的枪手在世界上是不可能活的很长的。const 观念不正确的程序员也是一样和没有时间戴紧帽子的正确,没有时间检查带电电线的电工一样不会活的很长。”

在C 语言中,const 修饰符表示告诉编译器此函数将不会改变被修饰的变量的指向的任何值(除了强制类型转换)。当把指针作为参数传递时,总是合适地使用const,不仅可以防止你无意中错误的赋值,而且还可以防止在作为参数将指针传递给函数时可能会修改了本不想改变的指针所指向的对象的值。如: const int num = 7;

num = 9; file://有/可能得到编译器的警告。

const char *ptr,则表示该指针所指向的内容不会被改变,如果在程序中被发生对其赋值的操作,编译时将出错误提示。如:

const char *ptr = “hello”;

*ptr = ‘H’; file://错/误,所指内容不可改变也可将const 放在星号后面来声明指针本身不可改变。如:

char* const ptr;

ptr++; file://错/误,指针本身不可改变

也可同时禁止改变指针和它所引用的内容,其形式如下: const char* const ptr;

【规则11】使用static

static是一个能够减少命名冲突的有用工具。将只在一个模块文件中的变量和函数使用static 修饰,将不会和其他模块可能具有相同名称的函数和变量在模块连接时不会产生名称冲突。一般来说,只要不是提供给其它模块使用的函数,和非全局变量,均应使用static修饰。将子程序中的变量使用static 修饰时,表示这个变量在程序开始时分配内存,在程序结束时释放,它们在程序执行期间保持它们的值。如:

void func1(void)

{

static int time = 0;

time++

}

void func2(void)

{

static int time = 0;

time++;

}

两个子程序中的time 变量使用static 修饰,所以它们是静态变量,每调用一次time将进行加1,并保持这个值。它们的功能与下面程序相似:

int time1 = 0;

int time2 = 0;

void func1(void)

{

time1++

}

void func2(void)

{

time2++;

}

我们可以看出,使用static修饰后,模块中的全局变量减少,使得程序的更为简单。

【规则12】不要忽视编译器的警告。

编译器的给出的警告都是有的放矢,在没有查清引起警告的真正原因之前,不要忽视它。 【规则13】注意溢出问题,写安全的代码。

1.4 KeilC 编程

【规则14】深入了解你所用的工具。仔细查看KeilC 附带的帮助文件,你能找到你期待已久的东西。KeilC 是当前最好用的单片机开发软件。要充分利用该软件的功能,就必须对它深入的进行了解。

【规则15】不要使用语言的冷僻特性,并且记住,耍小聪明会贻害无穷。最重要的是编写你理解的代码,理解你编写的代码,你就可能会做得很好。

2 推荐书目

要成为一个优秀的单片机系统产品设计工程师,兴趣、热情、责任心至关重要。

2.1 单片机技术学习

《微机原理及应用(从16 位到32 位) 》戴梅萼等著清华大学出版社。学校教材,也是当年我学习单片机的启蒙书。

2.2 C51 编程学习

《单片机高级语言C51 Windows 环境编程与应用》作者:徐爱钧彭秀

华电子工业出版社。这本书几乎覆盖了C51 编程的方方面面,最新版本对当前使用最广的keilC 也有很详细的讲述。对于刚学C51 编程的同志,本书是上上之选,强力推荐。比起现今书市上的所谓什么“C51 编程圣经”之类的书强得多。


2.3 C 语言编程必读

《C 陷阱与缺陷》Andrew Koenig著

《C 专家编程》Peter Van Der Linden 著

C 语言开发技术经典之作,C 程序员必读之书,数十年来经久不衰。如果你想对C 语言全面的掌握,真正了解C 语言的精髓,这两本书是必读之作。由人民邮电出版社出版的中文译本也还不错。

2.4 程序设计技术方面

《数据结构》, 严蔚敏, 清华大学出版社。清华大学出版社的教材质量稳定,中规中矩,价格相对来说也便宜一点。

《程序设计实践》Brian W. Kernighan, Rob Pike著;《代码大全》(网上有下载)。这两本是能让你看后,感觉有大突破的那种书籍,千万别吝惜银子。

3 后记

从事单片机开发工作已经有差不多三年时间了,自己感觉积累了一些经验和体会。这篇文章就算是一个总结吧。本来想写的更为详细一些,加入C51中指针及uvision 软件仿真的一些使用体会,以及自己的一些开发实践,但一想,keilc中的说明书已经够详细了,而我的开发产品所有权又不属于我本人,因此,并没有深入下去。由于本人水平有限,这次也是抱着与各位交流学习的目的,非常欢迎各位与我联系交流,共同探讨。

点击此处查看原文 >>

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

评论(0) | 阅读(55)
发表于:2008-4-30 19:51:10
标签:无标签

2

C51的一些误区和注意事项

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) | 阅读(133)
发表于:2008-4-30 19:50:02
标签:无标签

1

C语言常用语法的简单摘要

 1、标识符
  可由字母,数字和下划线组成。标识符必须以字母或下划线开头。大,小写的字母分别认为是两个不同的字符。不同的系统对标识的字符的字符数有不同的规定,一般允许7个字符。

 2。常量

 可以使用:

 1整型常量

 十进制常数。

 八进制常数(以0开头的数字序列)。

 十六进制常数(以0X开头的数字序列)。

 长整型常数(在数字后加字符L或L)。

 2字符常量

 用单撇号括起来的一个字符,可以使用转义字符。

 3实型常量(浮点型常量)

 小数形式。

 指数形式。

 4字符串常量

 用双撇号括起来的字符序列。

3 表达式

(1)算术表达式

 整型表达式:参加运算的运算量是整型量,结果也是整型数。

 实型表达式:参加运算的运算是实型量,运算过程中先转换成double型,结果为double型。

(2)逻辑表达式

 用逻辑运算符连接的整型量,结果为一个整数0或1。逻辑表达式可以认为是整型表达式的一种特殊形式。

 (3)字位表达式

 用位运算符连接的整型量,结果为整数。字位表达式也可以认为是整型表达式的一种特殊形式。

 (4)强制类型转换表达式

  用“(类型)”运算符使表达式的类型进行强制转换。

 (5)逗号表达式(顺序表达式)

 形式为

 表达式1,表达式2 表达式n

 顺序求出表达式1,表达式2 表达式n的值。结果为表达式n的值。

 (6)赋值表达式

 将赋值号“=”右侧表达式的值赋值号左边的变量。赋值表达式的值为执行赋值后被赋值的变量的值。

 (7)条件表达式

 形式为

 逻辑表达式?表达式1:表达式2

 逻辑表达式的若为非零,则条件表达式的值等于表达式1的值;若逻辑表达式的值为零,则条件表达式的值等于表达式2的值。

 (8)指针表达式

对指针类型的数据进行运算。例如,p-2,p1-p2等(其中p,P1,P2均已定义为指向数组的指针变量,p1与p2指向同一数组中的元素),结果为指针类型。

以上各种表达式可以包含有关的运算符,也可以是不包含任何运算符的初等量(例如,常数是算术表达式的最简单的形式)。

4 数据定义

 对程序中用到的所有变量都需要进行定义。对数据要定义其数据类型,需要时要指定其存储类别。

 (1)类型标识符可用

  int

  short

  long

  unsigned

  char

  float

  double

 struct 结构体名

  union  共用体名

  enum   枚举型名

  用typedef定义的类型名

 结构体与共同体的定义形式为

  struct  结构体名

   {成员表列};

  union  共用体名

    {成员表列};

用typedef定义新类型名的形式为

 typedef  已有类型  新定义类型;

 如:

typedef int COUNT;//就是在有INT的地方都可以用COUNT代替

 (2)存储类别可用

  auto//一般默认
  static

  register

  extren

  (如不指定存储类别,作auto处理)

  变量的定义形式为

  存储类别  数据类型   变量表列;

  例如:

  static  float  a,b,c;

注意外部数据定义只能用extern或static,而不能用auto或register.

 5  函数定义

 形式为

 存储类别  数据类型  函数名(形参表列)

 函数体

 函数的存储类别只能用extern或static.函数体是用花括弧括起来的,可包括数据定义和语句.函数的定义举例如下:

  static  int  max (int,int y)

   { int z;

     z="x">y?x:y;

     return (z);

    }

 6 变量的初始化

  可以在定义时对变量或数组指定初始值.

   静态变量或外部变量如未初始化,系统自动使其初值为零或空.对自动变量或寄存器变量,若未初始化,则其初值为一不可预测的数据.

 7语句

 (1)表达式语句;

 (2)函数调用语句;

 (3)控制语句;

 (4)复合语句;

 (5)空语句.

 其中控制语句包括:

 (1)if(表达式)语句

 或

if(表达式)语句1

else 语句2

(2)while(表达式)语句

(3)do语句

 while(表达式);

(4)for(表达式1;表达式2;表达式3)

  语句

(5)switch(表达式)

    {case  常量表达式1:  语句1;

     case  常量表达式2:  语句2;

     case  常量表达式n:  语句n;

     default;语句n+1;

    }

  前缀case和default本身并不改变控制流程,它们只起标号作用,在执行上一个case所标志的语句后,继续顺序执行下一个case前缀所所标志的语句,除非上一个语句中最后用break语句使控制转出switch结构。

(6)break 语句

(7)continue  语句

(8)return  语句

(9)goto    语句

8  预处理命令

  # define 宏名   字符串

  # define 宏名(参数1,参数2……参数n)字符串

  # undef  宏名

  #include “文件名”(或〈文件名〉)

  #if       常量表达式

  #ifdef     宏名

  #ifndef    宏名

  #else

  #endif

点击此处查看原文 >>

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

评论(0) | 阅读(59)
发表于:2008-4-23 16:12:32
标签:无标签

1

关于电流,电压,电阻

关于电流,电压,电阻

电流:
定义,流过导体横截面的电量与其所用的时间的比值;单位国际制单位是安培,符号是A,其他单位有毫安mA、微安uA、千安kA等;单位换算为:1A=10的负3次方千安=10的3次方毫安=10的6次方微安。
电流:电流单位之间的换算.

1A=1000mA=1000000μA

电压:定义,导体两端的电势之差;国际制单位为伏特,简称伏,符号为V,其他单位有知伏KV,毫伏mV等,单位换算为:1V=10的负3次方千伏=10的3次方伏;在理论上有MV,即兆伏,但在实际中一般电压没有这样高,因此也一般没有人用。
电压:电压单位之间的换算.(电压单位有MV吗?不是小写m,是大写M)

1MV=1000KV=1000000V=1000000000mV=1000000000000μV

电阻:定义,导体对电流的阻碍作用,定义式R=U/I
国际制单位为欧姆,简称欧。

电阻:电阻单位之间的换算.

1KΩ=1000Ω


 

点击此处查看原文 >>

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

评论(0) | 阅读(110)
发表于:2008-4-23 15:53:19
标签:无标签

1

常用单位换算公式

 

常用单位换算公式

面 积 换 算

1平方公里(km2)=100公顷(ha)=247.1英亩(acre)=0.386平方英里(mile2)
1平方米(m2)=10.764平方英尺(ft2)
1平方英寸(in2)=6.452平方厘米(cm2)
1公顷(ha)=10000平方米(m2)=2.471英亩(acre)
1英亩(acre)=0.4047公顷(ha)=4.047×10-3平方公里(km2)=4047平方米(m2)
1英亩(acre)=0.4047公顷(ha)=4.047×10-3平方公里(km2)=4047平方米(m2)
1平方英尺(ft2)=0.093平方米(m2)
1平方米(m2)=10.764平方英尺(ft2)
1平方码(yd2)=0.8361平方米(m2)
1平方英里(mile2)=2.590平方公里(km2)


体 积 换 算

1美吉耳(gi)=0.118升(1) 1美品脱(pt)=0.473升(1)
1美夸脱(qt)=0.946升(1) 1美加仑(gal)=3.785升(1)
1桶(bbl)=0.159立方米(m3)=42美加仑(gal) 1英亩·英尺=1234立方米(m3)
1立方英寸(in3)=16.3871立方厘米(cm3) 1英加仑(gal)=4.546升(1)
10亿立方英尺(bcf)=2831.7万立方米(m3) 1万亿立方英尺(tcf)=283.17亿立方米(m3)
1百万立方英尺(MMcf)=2.8317万立方米(m3) 1千立方英尺(mcf)=28.317立方米(m3)
1立方英尺(ft3)=0.0283立方米(m3)=28.317升(liter)
1立方米(m3)=1000升(liter)=35.315立方英尺(ft3)=6.29桶(bbl)


长 度 换 算

1千米(km)=0.621英里(mile) 1米(m)=3.281英尺(ft)=1.094码(yd)
1厘米(cm)=0.394英寸(in) 1英寸(in)=2.54厘米(cm)
1海里(n mile)=1.852千米(km) 1英寸(fm)=1.829(m)
1码(yd)=3英尺(ft) 1杆(rad)=16.5英尺(ft)
1英里(mile)=1.609千米(km) 1英尺(ft)=12英寸(in)
1英里(mile)=5280英尺(ft) 1海里(n mile)=1.1516英里(mile)


质 量 换 算

1长吨(long ton)=1.016吨(t) 1千克(kg)=2.205磅(lb)
1磅(lb)=0.454千克(kg)[常衡] 1盎司(oz)=28.350克(g)
1短吨(sh.ton)=0.907吨(t)=2000磅(lb)
1吨(t)=1000千克(kg)=2205磅(lb)=1.102短吨(sh.ton)=0.984长吨(long ton)


密 度 换 算

1磅/英尺3(lb/ft3)=16.02千克/米3(kg/m3)
API度=141.5/15.5℃时的比重-131.5
1磅/英加仑(lb/gal)=99.776千克/米3(kg/m3)
1波美密度(B)=140/15.5℃时的比重-130
1磅/英寸3(lb/in3)=27679.9千克/米3(kg/m3)
1磅/美加仑(lb/gal)=119.826千克/米3(kg/m3)
1磅/(石油)桶(lb/bbl)=2.853千克/米3(kg/m3)
1千克/米3(kg/m3)=0.001克/厘米3(g/cm3)=0.0624磅/英尺3(lb/ft3)


力 换 算

1牛顿(N)=0.225磅力(lbf)=0.102千克力(kgf)
1千克力(kgf)=9.81牛(N)
1磅力(lbf)=4.45牛顿(N) 1达因(dyn)=10-5牛顿(N)


温 度 换 算

K=5/9(°F+459.67) K=℃+273.15
n℃=(5/9·n+32) °F n°F=[(n-32)×5/9]℃
1°F=5/9℃(温度差)


压 力 换 算

1巴(bar)=105帕(Pa) 1达因/厘米2(dyn/cm2)=0.1帕(Pa)
1托(Torr)=133.322帕(Pa) 1毫米汞柱(mmHg)=133.322帕(Pa)
1毫米水柱(mmH2O)=9.80665帕(Pa) 1工程大气压=98.0665千帕(kPa)
1千帕(kPa)=0.145磅力/英寸2(psi)=0.0102千克力/厘米2(kgf/cm2) =0.0098大气压(atm)
1磅力/英寸2(psi)=6.895千帕(kPa)=0.0703千克力/厘米2(kg/cm2)=0.0689巴(bar)=0.068大气压(atm)
1物理大气压(atm)=101.325千帕(kPa)=14.696磅/英寸2(psi)=1.0333巴(bar)

时间的单位换算

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns) 1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps) 1皮秒=1/1,000,000,000,000秒(s)

电容单位换算


这么简单的电容单位换算,搞得头晕了,统计如下:(法;毫;微;纳;皮)

1F(法拉)=1000mF(毫法) ,1(毫法) =1000uF(微法) ,1(微法) =1000nF(纳法) ,1(纳法)=1000pF(皮法)。

规则:单位省略表示为pF,例如

101(pF)=10 * 10^1 = 100pF = 0.1nF;

104(pF)=10 * 10^4 = 100000pF = 0.1uF;

105(pF)=10 * 10^5 = 1000000pF = 1uF。

电压单位换算

1KV=1000V,
1V=1000mV,
1mV=1000μV,
1μV=1000nV,
1nV=1000pV.
赫兹的单位换算

Hz(赫兹)
1赫兹=秒分之一


通常的定义是波形每秒钟变化或振动的次数。

kHz 1000次/s(秒) 1kHz=1000Hz

MHz 100万次/s(秒) 1MHz=1000kHz

GHz 10亿次/s(秒) 1GHz=1000MHz

 

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 整理

评论(0) | 阅读(147)
发表于:2008-4-23 15:30:01
标签:无标签

1

时间的单位换算

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns) 1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps) 1皮秒=1/1,000,000,000,000秒(s)

1/1000S=1ms
1/10000S=0.1ms

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 整理

评论(0) | 阅读(124)
发表于:2008-4-23 15:25:00
标签:无标签

1

电感的计算公式

电感的计算公式
加载其电感量按下式计算:线圈公式
阻抗(ohm) = 2 * 3.14159 * F(工作频率) * 电感量(mH),设定需用 360ohm 阻抗,因此:
电感量(mH) = 阻抗 (ohm) ÷ (2*3.14159) ÷ F (工作频率) = 360 ÷ (2*3.14159) ÷ 7.06 = 8.116mH
据此可以算出绕线圈数:
圈数 = [电感量* { ( 18*圈直径(吋)) + ( 40 * 圈长(吋))}] ÷ 圈直径 (吋)
圈数 = [8.116 * {(18*2.047) + (40*3.74)}] ÷ 2.047 = 19 圈

空心电感计算公式


空心电感计算公式:L(mH)=(0.08D.D.N.N)/(3D+9W+10H)
                            D------线圈直径
                            N------线圈匝数
                            d-----线径
                            H----线圈高度
                            W----线圈宽度
          
                           单位分别为毫米和mH。。
空心线圈电感量计算公式:

l=(0.01*D*N*N)/(L/D+0.44)

线圈电感量 l单位: 微亨
线圈直径 D单位: cm
线圈匝数 N单位: 匝
线圈长度 L单位: cm

频率电感电容计算公式:

l=25330.3/[(f0*f0)*c]

工作频率: f0 单位:MHZ 本题f0=125KHZ=0.125
谐振电容: c 单位:PF 本题建义c=500...1000pf 可自行先决定,或由Q
值决定
谐振电感: l 单位: 微亨
线圈电感的计算公式


 
 1。针对环行CORE,有以下公式可利用: (IRON)

L=N2.AL L= 电感值(H)
H-DC=0.4πNI / l N= 线圈匝数(圈)
AL= 感应系数
H-DC=直流磁化力 I= 通过电流(A)
l= 磁路长度(cm)
l及AL值大小,可参照Micrometal对照表。例如: 以T50-52材,线圈5圈半,其L值为T50-52(表示OD为0.5英吋),经查表其AL值约为33nH

L=33.(5.5)2=998.25nH≒1μH
当流过10A电流时,其L值变化可由l=3.74(查表)
H-DC=0.4πNI / l = 0.4×3.14×5.5×10 / 3.74 = 18.47 (查表后)
即可了解L值下降程度(μi%)

2。介绍一个经验公式
L=(k*μ0*μs*N2*S)/l
其中
μ0 为真空磁导率=4π*10(-7)。(10的负七次方)
μs 为线圈内部磁芯的相对磁导率,空心线圈时μs=1
N2 为线圈圈数的平方
S 线圈的截面积,单位为平方米
l 线圈的长度, 单位为米
k 系数,取决于线圈的半径(R)与长度(l)的比值。

计算出的电感量的单位为亨利。

k值表
2R/l                             k
0.1                            0.96
0.2                            0.92
0.3                            0.88
0.4                            0.85
0.6                           0.79
0.8                           0.74
1.0                           0.69
1.5                           0.6
2.0                           0.52
3.0                          0.43
4.0                          0.37
5.0                          0.32
10                          0.2
20                          0.12  

点击此处查看原文 >>

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

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