博文
单片机主中断原理(2008-02-26 12:52:00)
摘要:有关中断的概念
什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。
仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。
第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。
第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断......
中断原理简介(2008-02-26 12:52:00)
摘要:摘要:本文主要介绍C语言中中断服务程序的编写、安装和使用。由于硬中断服务程序的编写涉及到硬件端口读写操作,使得用户直接和硬件打交道,在程序设计过程中要用到的数据(如硬件端口地址等)比较多,这就使程序员和计算机的硬件设备间缺少一种“缓冲”的作用,况且,用汇编语言来直接对硬件编程要方便得多。本文仅对软中断程序的编写作个介绍。
关键词:软中断、中断向量、中断向量表、TSR内存驻留、DOS重入、中断请求、段地址、偏移量、寄存器、BIOS、DOS、setvect ( )、getvect ( )、keep ( )、disable ( )、enable ( )、geninterrupt ( )、int86 ( )、interrupt
对于一般的C语言爱好者而言,就如何在C中使用中断例程这一问题应该已经非常熟悉,例如,我们可以通过int86 ( )函数调用13H号中断直接对磁盘物理扇区进行操作,也可以通过INT86 ( )函数调用33H号中断在屏幕上显示鼠标光标等。其实,13H号也好,33H号也好,它们只不过就是一些函数,这些函数的参数通过CPU的寄存器传递。中断号也只不过是间接地指向函数体的起始内存单元,说它是间接的,也就是说,函数的起始段地址和偏移量是由中断号通过一种方法算得的(具体如何操作,下面会作解释)。如此一来,程序员不必要用太多的时间去写操作硬件的程序了,只要在自己的程序中设置好参数,再调用BIOS或DOS提供的中断服务程序就可以了,大大减小了程序开发难度,缩短了程序开发周期。那么中断既然是函数,就可以由用户任意的调用、由用户任意地编写。
计算机内存的前1024个字节(偏移量00000H到003FFH)保存着256个中断向量,每个中断向量占4个字节,前两个字节保存着中断服务程序的入口地址偏移量,后两个字节保存着中断程序的入口段地址,使用时,只要将它们分别调入寄存器IP及CS中,就可以转入中断服务程序实现中断调用。每当中断发生时,CPU将中断号乘以4,在中断向量表中得到该中断向量地址,进而获得IP及CS值,从而转到中断服务程序的入口地址,调用中断。这就是中断服务程序通过中断号调用的基本过程。在计算机启动的时候,BIOS将基本的中断填入中断向量表,当DOS得到系统控制权后,它又要将......
如何掌控MCU?(2008-02-22 22:32:00)
摘要:不管是MCU还是ARM及DSP等程序控制类,从玩了20余年的经验来看,
最关键的当数IO,定时及中断.
只要很好地应用此三板斧,MCU基本就算结业并可谋生了~~~
IO基本由2类代表作,即51的准双向和其他MCU/ARM/DSP的真双向.
准双向的特点是高电平的驱动能力较弱,但其优点是控制方便,不需设定输入输出方式.更难得的是它模拟串行时序非常完美,几乎可以和任何串行接口匹配.
真双向的特点是高电平的驱动能力较强,优点是方向控制明确,但在模拟时序方面显然不如前者.
特别注意的是在方向可以变化时,如果外部接口的拉电流或灌电流较大时,该IO做输出高电平时就有很大的危险性,故有时需要加电阻限流或二极管隔离.
有时在模拟时序时,想要输出高电平时,要"曲线救国",既设置为输入方式!!!并且外部加上拉电阻(内部当然更好,像AVR的IO就很有特点),这样就利用上拉电阻"输出"了高电平!!!注意,输出低电平是真的!!!
定时器应该是不可缺少的~~~它可以很方便控制的延迟和OS的构成.这里就不多说了...
中断是控制的精华,可能没什么工控程序能离得开中断了,可以想象没有中断的PIC12C508的定时器有多倒塌呀~~~
当然中断也不是万能的,至少它的响应是需要时间的.而且有时要中断比有中断不用更难为情~~~
如键盘中断,当键盘压下进入中断服务程序后只能反映可能发生了键盘的跳变事件,但并不代表真的压下键盘!!!难道要在键盘中断里调用20mS软件延时程序来进行键盘消抖吗???真倒塌了~~~
当然要学的还很多,但先掌握此三板斧是很有必要的.........
AD7705的源程序(2008-02-22 22:25:00)
摘要:------------AD7705头文件开始-------------------
#ifndef _AD7705_H
#define _AD7705_H
//通讯寄存器地址定义
#define WR_SETUP_REG 0x10 //选中写设置寄存器
#define RD_SETUP_REG 0x18 //选中写设置寄存器
#define WR_CLOCK_REG 0x20 //选中写时钟寄存器
#define RD_DATA_REG 0x38 //选中数据寄存器读
#define WR_OFFSET_REG 0x60 //选中写offset寄存器
#define RD_OFFSET_REG 0x68 //选中读offset寄存器
#define WR_FULL_REG 0x70 //选中写full scale寄存器
#define RD_FULL_REG 0x78 //选中读full scale寄存器
#defi......
库函数使用要慎重(2008-02-14 12:54:00)
摘要:以前使用过Sprintf 觉得十分方便,今天遇到大问题。
环境:LPC2148 uCOS
void Task(viod *pd)
{
...........
sprintf((char *)(tmpbuf+3),"%0.5lf",curtime);
..........
}
结果发现出错,经仔细检查发现是Stack 溢出了。
到网上一搜sprintf的源码才发现sprintf 需要申请不小的内存。以后在使用的时候真的是要小心啊!......
几个硬件设计经验(2008-02-14 12:44:00)
摘要:
鸡毛蒜皮之一:成本节约
现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧
点评:市场上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其
成本分别比精度为20%的4.7K高4倍和2倍。20%精度的电阻阻值只有1、1.5、2.2、3.3、
4.7、6.8几个类别(含10的整数倍);类似地,20%精度的电容也只有以上几种值,如果选
了其它的值就必须使用更高的精度,成本就翻了几倍,却不能带来任何好处。
现象二:面板上的指示灯选什么颜色呢?我觉得蓝色比较特别,就选它吧
点评:其它红绿黄橙等颜色的不管大小(5MM以下)封装如何,都已成熟了几十年,价格一
般都在5毛钱以下,而蓝色却是近三四年才发明的东西,技术成熟度和供货稳定度都较差,
价格却要贵四五倍。目前蓝色指示灯只用在不能用其它颜色替代的场合,如显示视频信号
等。
现象三:这点逻辑用74XX的门电路搭也行,但太土,还是用CPLD吧,显得高档多了
点评:74XX的门电路只几毛钱,而CPLD至少也得几十块,(GAL/PAL虽然只几块钱,但公司
不推荐使用)。成本提高了N倍不说,还给生产、文档等工作增添数倍的工作。
现象四:我们的系统要求这么高,包括MEM、CPU、FPGA等所有的芯片都要选最快的
点评:在一个高速系统中并不是每一部分都工作在高速状态,而器件速度每提高一个等级,
价格差不多要翻倍,另外还给信号完整性问题带来极大的负面影响。
现象五:这板子的PCB设计要求不高,就用细一点的线,自动布吧
点评:自动布线必然要占用更大的PCB面积,同时产生比手动布线多好多倍的过孔,在批量
很大的产品中,PCB厂家降价所考虑的因素除了商务因素外,就是线宽和过孔数量,它们分
别影响到PCB的成品率和钻头的消耗数量,节约了供应商的成本,也就给降价找到了理由。
现象六:程序只要稳定就可以了,代码长一点,效率低一点不是关键
点评:CPU的速度和存储器的空间都是用钱买来的,如果写代码时多花几天时间提高一下程
序效率,那么从降低CPU主频和减少存储器容量所节约的成本绝对是划算的。CPLD/FPGA设计
也类似。
鸡毛蒜皮之二......
一个电阻的资料(2008-01-19 12:53:00)
摘要:目 录
一、 RJ金属膜电阻器:用于交、直流或脉冲及精度要求高的电路中
1、 RJ13型金属膜固定电阻器(低功率非绕线固定电阻器)SJ/T 10775-2000
2、 RJ14型金属膜固定电阻器(低功率非绕线固定电阻器) SJ/T 11113-96
3、 RJ15型金属膜固定电阻器(低功率非绕线固定电阻器) SJ/T 10872-2000
4、 RJ16型金属膜固定电阻器(低功率非绕线固定电阻器) SJ 2674-86
5、 RJ17型金属膜固定电阻器(低功率非绕线固定电阻器) SJ 2675-86
6、 RJ20型金属膜电阻器(低功率非绕线固定电阻器)-SJ 2868-88
7、 RJ73型精密金属膜固定电阻器(精密固定电阻器)SJ/T 10571-94
8、 RJ74型精密金属膜固定电阻器(精密固定电阻器)SJ/T 10572-94
9、 RJ75型精密金属膜固定电阻器(精密固定电阻器)SJ/T 10573-94
10、 RJ76型精密金属膜固定电阻器(精密固定电阻器)SJ/T 10574-94
二、 RY金属氧化膜电阻器:用于交、直流或脉冲电路(特别适用于电视机等功率较大的电路中)
1、 RYG1型金属氧化膜电阻器(功率型固定电阻器)-SJ/T 10618-95
2、 RYG2型金属氧化膜电阻器......
教你认识继电器(2008-01-18 12:58:00)
摘要:继电器:是根据接收到的某种信号,按控制要求自动开闭水电流控制器路的一类电器。
继电器是一种基本的电气设备,它用来打开或关闭一定数量互相独立的电路。这种操作是利用由电压控制的线圈绕组所产生的电磁场来实现的。
继电器电器(relay)也是一种电门,但与一般开关不同,继电器并非以机械方式控制,而是一种以电磁力来控制切换方向的电门。当线圈通电后,会使中心的软铁核心产生磁性,将横向的摆臂吸下,而臂的右侧则迫使电门接点相接,使两接点形成通路。
简单的单轴单切式继电器,一颗继电器也可以同时切换多组电门,一个双轴双切的继电器,它有八支接脚,排列方式如图上接脚编号。另外继电器规格除了电门接点数目不同,还要注意线圈的工作电压是直流或是交流电,使用的电压电流大小,切换电门耐电压程度等,继电器的规格有6v、9v、12v、24v、48v、100v、110v、200v、220v…等,例如一般工业界常用的继电器接点可以耐电压电流110vac-10a,线圈使用电压为24vdc,共有二组或三组接点。低电压的直流继电器可以直接用电晶体推动,使用极为方便。
一般继电器规格中它并不会说明继电器需要多少电流可以驱动线圈,在使用时可以量测线圈内的电阻值,就可以利用欧姆定律换算出耗电流,如果我们量测阻值为150w,线圈驱动电压24vdc,耗电流为24v/150w=0.16a,这样就可以知道电源供应器需要供应多大的电流,才能使继电器作动。
继电器是相当重要且常见的电子元件,在许多机械控制上都相当有用。
想要多一点了解继电器吗,你一定要收藏,我向你推荐的这几个网站。一是维库电子市场。二是IC37网,这两个网站是我从事以来给我很大的帮,我很成心的向你们推荐。如果想找更多的资料一定要去这两个网站,因为维库电子市场网的资料很齐全,一定能给你们一个学习的平台。 网站www.dzsc.com 。
......
细说ISP和IAP的区别(2008-01-15 19:19:00)
摘要:
#ISP:in system programming,
IAP: in applicatin programming
但两者的操作方式,结果和应用场合有什么区别
什么是ISP:
用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
什么是IAP:
在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验通过后再将下载区内容复制到2区,运行复位程序,则Iap完成;
应用场合:
1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;
2,IAP 如果有网管系统的话,用网管下载一切搞定,人不用跑来跑去,
这可能是他们的优点或应用吧
在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。 ISP和IAP很相似,都是不需要把芯片从板子上拔出来,就达到了用PC-MCU的编程接口(JTAG、串口、双绞线、SPI等)搞定新版本的升级的目的。MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录的,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如,ether网口),将用户指定的某个在PC上编译......
电磁继电器的参数和选用(2008-01-07 13:11:00)
摘要:电磁继电器是自动控制电路中常用的一种元件。实际上它是用较小电流控制较大电流的一种自动开关,广泛应用于电子设备中。电磁继电器一般由一个线圈、铁芯、一组或几组带触点的簧片组成。触点有动触点和静触点之分,在工作过程中能够动作的称之为动触点,不能动作的称为静触点。
继电器的主要特性参数
额定工作电压或额定工作电流:这是指继电器工作时线圈需要的电压或电流。一种型号的继电器的构造大体是相同的。为了适应不同的电压的电路应用,一种型号的继电器通常有多种额定工作电压或额定工作电流,并用规格型号加以区别。
直流电阻:这是指线圈的直流电阻。有些产品说明书中给出额定工作电压和直流电阻,这时可根据欧姆定律求出额定工作电流。若已知额定工作电流和直流电阻,亦可求出额定工作电压。
吸合电流:它是指继电器能够产生吸合动作的最小电流。在实际使用中,要使继电器可靠吸合,给定电压可以等于或略高于额定工作电压。一般不要大于额定工作电压的1.5倍,否则会烧毁线圈。
释放电流:它是指继电器产生释放动作的最大电流。减小处于吸合状态的继电器的电流,当电流减小到一定程度时,继电器恢复到未通电时的状态,这个过程称为继电器的释放动作。释放电流比吸合电流小得多。
请登陆:输配电设备网 浏览更多信息
触点负荷:它是指继电器触点允许的电压或电流。它决定了继电器能控制电压和电流的大小。应用时不能用触点负荷小的继电器去控制大电流或高电压。
继电器的电符号和触点形式
继电器线圈在电路中用一个长方框符号表示,如果继电器有两个线圈,就画两个并列的长方框同时在长方框内或长方框旁边标上继电器的文字符号“J”。继电器的触点有两种表示方法:一种是把它们直接画在长方框一侧,这种表示法较为直观。另一种是按照电路连接的需要,把各个触点分别画到各自的控制电路中,通常在同一继电器的触点与继圈旁分别标注上相同的文字符号,并将触点给编上号码,以示区别。继电器的触点有三种基本形式:
动合型(H型):线圈不通电时两触点是断开的,通电后,两个触点就闭合。以合字的拼音字头“H”表示。
动断型(D型):线圈不通电时两触点是闭合的,通电后两个触点就断开。用断字的拼音字头“D”表示......