介绍了一款指纹识别模块,适合于单片机的系统开发,提供了许多的指令,无需指纹识别的专业知识,就能使用,功能很强大
上传时间: 2014-12-26
上传用户:yeluorag
概述:数字通信和自动化控制等领域的高速度发展和世界范围的高技术竞争对数字系统提出了越来越高的要求,特别是需要设计具有实时信号处理能力的专用集成电路,要求把包括多个CPU内核在内的整个电子系统综合到一个芯片(SOC)上。集成电路制造工艺的发展;知识产权核(IP)的重复利用;硬件描述语言(HDL)的大规模使用;
上传时间: 2013-10-28
上传用户:pol123
C51原理及相关基础入门知识 第一章:C51 流程控制语句一、分类条件语句、循环语句和开关语句。下面将对这些语句作详细介绍。(1) 条件语句条件语句的一般形式为:if(表达式)语句 1;else语句 2;上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语句1 从语句2 后开始继续向下执行; 如果表达式的值为 0(FALSE)即假, 则跳过语句1 而执行语句2。所谓表达式是指关系表达式和逻辑表达式的结合式。注意:1. 条件执行语句中"else 语句2;"部分是选择项, 可以缺省, 此时条件语句变成:if(表达式) 语句1;表示若表达式的值为非 0 则执行语句1 , 否则跳过语句1 继续执行。2. 如果语句1 或语句2 有多于一条语句要执行时, 必须使用"{"和"}" 把这些语句包括在其中, 此时条件语句形式为:if(表达式){语句体 1;}else{语句体 2;}3. 条件语句可以嵌套, 这种情况经常碰到, 但条件嵌套语句容易出错, 其原因主要是不知道哪个if 对应哪个else。例如:if(x>20||x<-10)if(y<=100&&y>x)printf("Good");elseprintf("Bad");对于上述情况,规定: else 语句与最近的一个if 语句匹配, 上例中的 else 与 if(y<=100&&y>x) 相匹配。为了使 else 与if(x>20||x<-10) 相匹配, 必须用花括号。如下所示:if(x>20||x<-10){if(y<=100&&y>x)printf("Good");}
上传时间: 2013-10-24
上传用户:Sophie
单片机入门基础知识大全免费下载 单片机第八课(寻址方式与指令系统) 通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051的指令部份。 一、概述 1、指令的格式 我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。 2、汇编 我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。 二、寻址 让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH这些指令都是将一些数据送到相应的位置中去,为什么要送数据呢?第一个因为送入的数可以让灯全灭掉,第二个是为了要实现延时,从这里我们可以看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。下面我们就从数据传递类指令开始吧。 分析一下MOV P1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。 这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们可以明确地知道,P1中的值是0FFH,但是并不是任何时候都可以直接给出数本身的。例如,在我们前面给出的延时程序例是这样写的: MAIN: SETB P1.0 ;(1) LCALL DELAY ;(2) CLR P1.0 ;(3) LCALL DELAY ;(4) AJMP MAIN ;(5) ;以下子程序 DELAY: MOV R7,#250 ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END ;(11) 表1 MAIN: SETB P1.0 ;(1) MOV 30H,#255 LCALL DELAY ; CLR P1.0 ;(3) MOV 30H,#200 LCALL DELAY ;(4) AJMP MAIN ;(5) ;以下子程序 DELAY: MOV R7,30H ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END ;(11) 表2 这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序还能满足要求吗?不能,怎么办?我们可以把延时程序改成这样(见表2):调用则见表2中的主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元中传过来的数确定。这样就可以满足要求。 从这里我们可以得出结论,在数据传递中要找到被传递的数,很多时候,这个数并不能直接给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作数所在单元的地址称之为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。除了这种方法之外,还有一种,如果我们把数放在工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOV A,R0就是将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H,和MOV A,R0不就没什么区别了吗?为什么要加以区分呢?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8h)就可以了。 这么斤斤计较!不就差了一个周期吗,如果是12M的晶振的话,也就1个微秒时间了,一个字节又能有多少? 不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上1000次,就是1毫秒,如果要执行1000000万次,就是1S的误差,这就很可观了,单片机做的是实时控制的事,所以必须如此“斤斤计较”。字节数同样如此。 再来提一个问题,现在我们已知,寻找操作数可以通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗? 看这个问题,要求从30H单元开始,取20个数,分别送入A累加器。 就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?是31H单元的,怎么取呢?还是只能用MOV A,31H,那么20个数,不是得20条指令才能写完吗?这里只有20个数,如果要送200个或2000个数,那岂不要写上200条或2000条命令?这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的值是30H,那么就到30H单元中去取,如果是31H就到31H单元中去取,就可以解决这个问题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就可以通过一定的方法让这里面的值发生变化,比如取完一个数后,将这个寄存器单元中的值加1,还是执行同一条指令,可是取数的对象却不一样了,不是吗。通过例子来说明吧。 MOV R7,#20 MOV R0,#30H LOOP:MOV A,@R0 INC R0 DJNZ R7,LOOP 这个例子中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。 这也是一种寻找数据的方法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,在间址寻址中,只能用R0或R1存放等寻找的数据。 二、指令 数据传递类指令 1) 以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 2)以寄存器Rn为目的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
上传时间: 2013-10-13
上传用户:3294322651
Keil C51 使用技巧及实战:到你的程序中这本书将教你充分使用你的工具如果你只有8051 的汇编程序你也可以学习该书和使用这些例子但是你必须把C 语言的程序装入你的汇编程序中这对懂得C 语言和8051汇编程序指令的人来说并不是一件困难的事如果你有C 编译器的话那恭喜你使用C 语言进行开发是一个好的决定你会发现使用C 进行开发将使你的工程开发和维护的时间大大减少如果你已经拥有Keil C51 那你已经选择了一个非常好的开发工具我发现Keil 软件包能够提供最好的支持本书支持Keil C 的扩展如果你有其它的开发工具像Archimedes 和Avocet 这本书也能很好地为你服务但你必须根据你所用的开发工具改变一些Keil 的特殊指令在书的一些地方有硬件图实例程序在这些硬件上运行这些图绘制地不是很详细主要是方框图但足以使读者明白软件和硬件之间的接口读者应该把这本书看成工具书而不是用来学习各种系统设计通过本书你可以了解给定一定的硬件和软件设计之后8051 的各种性能希望你能从本书中获取灵感并有助于你的设计使你豁然开朗当然我希望你也能够从本书中学到有用的知识使之能够提升你的设计。
上传时间: 2013-10-27
上传用户:Jerry_Chow
ICCAVR中文使用说明:ICCAVR 介绍1 ImageCraft 的ICCAVR 介绍ImageCraft 的ICCAVR 是一种使用符合ANSI 标准的C 语言来开发微控制器MCU程序的一个工具它有以下几个主要特点ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境IDE 其可在WINDOWS9X/NT 下工作源文件全部被组织到工程之中文件的编辑和工程的构筑也在这个环境中完成编译错误显示在状态窗口中并且当你用鼠标单击编译错误时光标会自动跳转到编辑窗口中引起错误的那一行这个工程管理器还能直接产生您希望得到的可以直接使用的INTELHEX 格式文件INTEL HEX 格式文件可被大多数的编程器所支持用于下载程序到芯片中去ICCAVR 是一个32 位的程序支持长文件名出于篇幅考虑本说明书并不介绍通用的C 语言语法知识仅介绍使用ICC AVR 所必须具备的知识因此要求读者在阅读本说明书之前应对C 语言有了一定程度的理解2 ICCAVR 中的文件类型及其扩展名文件类型是由它们的扩展名决定的IDE 和编译器可以使用以下几种类型的文件输入文件.c 扩展名----表示是C 语言源文件.s 扩展名----表示是汇编语言源文件.h 扩展名----表示是C 语言的头文件.prj 扩展名----表示是工程文件这个文件保存由IDE 所创建和修改的一个工程的有关信息.a 扩展名----库文件它可以由几个库封装在一起libcavr.a 是一个包含了标准C 的库和AVR 特殊程序调用的基本库如果库被引用链接器会将其链接到您的模块或文件中您也可以创建或修改一个符合你需要的库输出文件.s 对应每个C 语言源文件由编译器在编译时产生的汇编输出文件.o 由汇编文件汇编产生的目标文件多个目标文件可以链接成一个可执行文件.hex INTEL HEX 格式文件其中包含了程序的机器代码.eep INTEL HEX 格式文件包含了EEPROM 的初始化数据.cof COFF 格式输出文件用于在ATMEL 的AvrStudio 环境下进行程序调试.lst 列表文件在这个文件中列举出了目标代码对应的最终地址.mp 内存映象文件它包含了您程序中有关符号及其所占内存大小的信息.cmd NoICE 2.xx 调试命令文件.noi NoICE 3.xx 调试命令文件.dbg ImageCraft 调试命令文件
上传时间: 2013-10-29
上传用户:truth12
同轴电缆知识介绍一、概述1、基带同轴电缆同轴电缆以硬铜线为芯,外包一层绝缘材料。这层绝缘材料用密织的网状导体环绕,网外又覆盖一层保护性材料。有两种广泛使用的同轴电缆。一种是50欧姆电缆,用于数字传输,由于多用于基带传输,也叫基带同轴电缆;另一种是75欧姆电缆,用于模拟传输,即下一节要讲的宽带同轴电缆。这种区别是由历史原因造成的,而不是由于技术原因或生产厂家。同轴电缆的这种结构,使它具有高带宽和极好的噪声抑制特性。同轴电缆的带宽取决于电缆长度。1km的电缆可以达到1Gb/s~2Gb/s的数据传输速率。还可以使用更长的电缆,但是传输率要降低或使用中间放大器。目前,同轴电缆大量被光纤取代,但仍广泛应用于有线电视和某些局域网。2、宽带同轴电缆使用有限电视电缆进行模拟信号传输的同轴电缆系统被称为宽带同轴电缆。“宽带”这个词来源于电话业,指比4kHz宽的频带。然而在计算机网络中,“宽带电缆”却指任何使用模拟信号进行传输的电缆网。由于宽带网使用标准的有线电视技术,可使用的频带高达300MHz(常常到450MHz);由于使用模拟信号,需要在接口处安放一个电子设备,用以把进入网络的比特流转换为模拟信号,并把网络输出的信号再转换成比特流。宽带系统又分为多个信道,电视广播通常占用6MHz信道。每个信道可用于模拟电视、CD质量声音(1.4Mb/s)或3Mb/s的数字比特流。电视和数据可在一条电缆上混合传输。宽带系统和基带系统的一个主要区别是:宽带系统由于覆盖的区域广,因此,需要模拟放大器周期性地加强信号。这些放大器仅能单向传输信号,因此,如果计算机间有放大器,则报文分组就不能在计算机间逆向传输。为了解决这个问题,人们已经开发了两种类型的宽带系统:双缆系统和单缆系统。 1)双缆系统双缆系统有两条并排铺设的完全相同的电缆。为了传输数据,计算机通过电缆1将数据传输到电缆数根部的设备,即顶端器(head-end),随后顶端器通过电缆2将信号沿电缆数往下传输。所有的计算机都通过电缆1发送,通过电缆2接收。2)单缆系统另一种方案是在每根电缆上为内、外通信分配不同的频段。低频段用于计算机到顶端器的通信,顶端器收到的信号移到高频段,向计算机广播。在子分段(subsplit)系统中,5MHz~30MHz频段用于内向通信,40MHz~300MHz频段用于外向通信。在中分(midsplit)系统中,内向频段是5MHz~116MHz,而外向频段为168MHz~300MHz。这一选择是由历史的原因造成的。3)宽带系统有很多种使用方式在一对计算机间可以分配专用的永久性信道;另一些计算机可以通过控制信道,申请建立一个临时信道,然后切换到申请到的信道频率;还可以让所有的计算机共用一条或一组信道。从技术上讲,宽带电缆在发送数字数据上比基带(即单一信道)电缆差,但它的优点是已被广泛安装。
标签: 同轴电缆
上传时间: 2013-10-18
上传用户:段璇琮*
《万用电表使用技巧60例》分为两章:第1章介绍万用电表基本知识,用7个小标题介绍了目前流行使用的模拟万用电表、数字万用电表、双显万用电表的技术特性、操作面板、读数装置以及万用电表的选择和使用须知。第2章介绍万用电表使用技巧与实例,通过60个小标题介绍了怎样使用万用电表测试电路参数、检查电路故障、检测电器元件等,资料翔实,非常实用。
上传时间: 2014-12-31
上传用户:786334970
电脑知识
标签: 工控机
上传时间: 2013-11-04
上传用户:爱死爱死
对于电子初学者,建议使用指针式万用表,因为它对我们熟悉一些电子知识原理很有帮助。下面我们介绍一些机械指针式万用表的原理和使用方法。
标签: 指针式万用表
上传时间: 2013-10-31
上传用户:oooool