虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

有符号数

  • 基于单片机实现的有源功率因数校正

    摘要:本文给出了一种基于单片机AT90PWM2B的BOOST升压型临界电流模式有源功率因数校正的实现方法。在70W可调光荧光灯电子镇流器上的实用结果验证了该方法的可行性和有效性。该方法可以推广到电子镇流器和开关电源等对功率因数要求较高的电力电子产品。关键词:有源功率因数校正;BOOST升压;临界电流模式;AT90PWM2B;PSC

    标签: 单片机 有源功率因数校正

    上传时间: 2013-11-12

    上传用户:Vici

  • 单片机应用编程技巧(FAQ)

    1.C语言和汇编语言在开发单片机时各有哪些优缺点?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。对于目前普遍使用的RISC架构的8bitMCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。如果对单片机C语言有兴趣,HOLTEK的单片机就有提供C编译器,可以到HOLTEK的网站(www.holtek.com.cn)免费下载使用。

    标签: FAQ 单片机应用 编程技巧

    上传时间: 2013-10-24

    上传用户:qb1993225

  • 几种有特色的单片机

    本讲重点:了解单片机发展的现状;掌握AT89C系列1051,2051,4051特点与应用;对P89LPC932会用实验装置,会编程应用;熟悉ADC832的特性,会编程下载;对本讲重点介绍的其他几种单片机有了解.

    标签: 单片机

    上传时间: 2013-10-08

    上传用户:xaijhqx

  • C语言的标识符和关键字

    标识符是用来标识源程序中某个对象的名字的.这些对象可以是语句、数据类型、函数、变量、常量、数组等。一个标识符由字符串、数字和下划线等组成.第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的.因此在编写c语言源程序时一般不要使用以下划线开头的标识符.而将下划线用作分段符。C51编译器规定标识符最长可达255个字符.但只有前面32个字符在编译时有效.因此在编写源程序时标识符的长度不要超过32个字符.这对于一般应用程序来说已经足够了c语言是大小字敏感的一种高级语言,如果我们要定义一个时间。秒”标识符.可以写做“sec”.如果程序中有“SEC”.那么这两个是完全不同定义的标识符。

    标签: C语言 标识符

    上传时间: 2013-11-01

    上传用户:1595690

  • PIC特殊指令助记符

    PIC特殊指令助记符

    标签: PIC 特殊指令 助记符

    上传时间: 2014-12-27

    上传用户:天空说我在

  • 单片机入门基础知识大全免费下载

    单片机入门基础知识大全免费下载 单片机第八课(寻址方式与指令系统) 通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习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

  • 单片机应用编程技巧百问

    单片机应用编程技巧100问1.C语言和汇编语言在开发单片机时各有哪些优缺点?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。2.C或汇编语言可以用于单片机,C++能吗?答:在单片机开发中,主要是汇编和C,没有用C++的。3.搞单片机开发,一定要会C吗?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。

    标签: 单片机应用 编程技巧

    上传时间: 2013-12-10

    上传用户:busterman

  • 8051单片机指令系统,计算机的指令系统

    计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统。MCS—51单片机的指令系统是一个具有255种代码的集合,绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或数据所存放的地址。MCS—51指令系统中所有程序指令是以机器语言形式表示,可分为单字节、双字节、三字节3种格式。用二进制编码表示的机器语言由于阅读困难,且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS—51指令系统就是以汇编语言来描述的。 一条汇编语言指令中最多包含4个区段,如下所示: 标号: 操作码目的操作数,源源操作数;注释 标号与操作码之间“:”隔开; 操作码与操作数之间用“空格”隔开; 目的操作数和源源操作数之间有“,”分隔; 操作数与注释之间用“;”隔开。 标号是由用户定义的符号组成,必须用英文大写字母开始。标号可有可无,若一条指令中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。 操作码是指令的功能部分,不能缺省。MCS—51指令系统中共有42种助记符,代表了33种不同的功能。例如MOV是数据传送的助记符。 操作数是指令要操作的数据信息。根据指令的不同功能,操作数的个数有3、2、1或没有操作数。例如MOV A,#20H,包含了两个操作数A和#20H,它们之间用“,”隔开。注释可有可无,加入注释主要为了便于阅读,程序设计者对指令或程序段作简要的功能说明,在阅读程序或调试程序时将会带来很多方便。

    标签: 8051 指令系统 单片机 计算机

    上传时间: 2013-11-04

    上传用户:kr770906

  • 现代微机原理与接口技术

    掌握先进微处理器芯片结构、微型计算机实现技术、计算机主板构成、各种接口技术原理及其应用编程方法;掌握汇编语言程序的编写方法,尤其掌握接口访问的方法。了解微机技术新的发展趋势,系统科学地获得分析问题和解决问题的训练;提高分析和设计接口的能力。不仅要学习微机各种接口电路的原理与作用,熟悉PC系列机接口电路,而且还要掌握常用接口的设计与分析方法,学会使用汇编语言和C语言对接口进行编程,并具有一定的动手实验能力和接口应用程序的编写能力,为微机的深入应用和嵌入式系统SOC设计等的学习与实践打下良好基础。同时有兴趣的同学自学Windows 2000/XP驱动程序的编写方法。一定要下载和打印或复印电子讲义,课堂上注意听讲并及时记录教师课堂上补充的内容,认真独立完成作业,做好课程实验和自修实验、做好课前预习和课后复习。1)抓住IBM PC/XT机基本结构这条主线,分析其基本结构,掌握各接口电路及可编程接口芯片的应用。2)进一步扩展和延伸CPU—从8086~Core 2 Duo,从实模式~保护模式;汇编语言-CPU及接口直接控制,16位~32位汇编;总线—PCI,USB等; 中断—从实模式下的中断向量~保护模式下的中断描述符;从传统中断~PCI中断~串行中断 芯片组—从中大规模集成电路(8237、8254、8255、8259等)~ 超大规模集成电路(82815EP、82801BA)。第1章—CPU与整机:CPU的信号与工作模式、PC结构第11章--软件如何控制CPU和接口:指令系统和汇编编程(在教师讲授重点的基础上,通过预习、实验与练习自学)  第2章--CPU如何与MEM或I/O设备通信:I/O接口与译码  第3章--总线如何工作:总线标准(PCI、USB)  第4章--I/O接口直接和MEM通信:DMA(8237,全自学)  第5章--I/O接口如何主动与CPU通信:中断技术(8259)  第6章--I/O接口的定时与计数功能:(8254)  第7章--I/O接口的并行通信:8255与打印机接口标准  第8章--I/O接口的串行通信:串行通信协议与8250  第10章--I/O软接口技术:保护模式存储,WDM驱动程序编写(全自学)

    标签: 现代微机原理 接口技术

    上传时间: 2014-01-21

    上传用户:徐孺

  • 51单片机浮点子程序库

    子程序库的使用方法如下:1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。 2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。MCS-51 浮点运算子程序库及其使用说明本浮点子程序库有三个不同层次的版本,以便适应不同的应用场合: 1.小型库(FQ51A.ASM):只包含浮点加、减、乘、除子程序。 2.中型库(FQ51B.ASM):在小型库的基础上再增加绝对值、倒数、比较、平方、开平方、 数制转换等子程序。 3.大型库(FQ51.ASM):包含本说明书中的全部子程序。 为便于读者使用本程序库,先将有关约定说明如下: 1.双字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数 据,地址小的单元存放高字节。如果[R0]=1234H,若(R0)=30H,则(30H)=12H,(31H)=34H。 2.二进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为 阶码(补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节 纯小数(原码)来表示。

    标签: 51单片机 浮点 程序库

    上传时间: 2013-10-15

    上传用户:wmwai1314