当前位置:首页 > pic单片机
  • 一点点学pic单片机,pic单片机之8位单片机组成

    一点点学pic单片机,pic单片机之8位单片机组成

    pic单片机在实际应用和学习中都扮演着重要角色,对于pic单片机,小编在往期文章中做过介绍,如pic单片机的8大优势、pic单片机中断原理、pic单片机I/O操作等。为增进大家对pic单片机的认识,本文将对pic 8位单片机的基本组成加以介绍。如果你对本文即将涉及的内容存在兴趣,不妨继续往下阅读哦。 一、pic 8位单片机组成 PIC系列8位单片机为适应各种不同的用途,有多种型号可供选用。但是,尽管PIC单片机有不同的档次和型号,但其最基本的组成则大同小异。因此,在这里先从型号PIC16F84的单片机入手,讨论其基本组成。PIC16F84是双列直插式(DIP)塑料封装,最大时钟频率可达4MHz。 PIC16F84单片机的引脚排列可参阅本期本版的16F8X系列简介一文。本文的附图是该器件的主要组成部分。PIC16F84虽然体积不大,但仍然是一个完整的计算机,它有一个中央处理器(CPU)、程序存储器(ROM)、数据寄存器(RAM)和两个输入/输出口(I/O口)。 和其它品种的单片机一样,CPU是此单片机的“首脑”,它从程序存储器中读取和执行指令。在取指和执行时,还可同时对数据寄存器进行取数(前已介绍PIC16F84采用哈佛结构)。由附图可明显看出,程序存储器和数据存储器各有一条总线与CPU相连。有些CPU将CPU内部的寄存器与其外部的RAM是分开管理的,但PIC单片机不是这样,它的通用数据RAM也归为寄存器,称为File寄存器。在PC16F84中,有68个字节的通用RAM,其地址为0CH~4FH。 除了通用数据寄存器外,还有一些专用寄存器,其中最常用的工作寄存器为“W寄存器”。CPU将工作数据存放在W寄存器中。寄存器W的作用与其它单片机中的“累加器A”相似。此外,还有几个专用寄存器,它们分别以某种方式控制PIC的运作。 PIC16F84的程序存储器是由Flash(闪速)EPROM构成,它可用电来记录和擦除,而在断电时,仍可保留其内容。PIC单片机有些型号的程序存储器用的是EPROM,需要用紫外线来擦除;还有一些型号是一次性可编程(OTP)的产品(一经编程便不能再擦除)。 PIC16F84有两个输入/输出口,即A口和B口。每个口的每个引脚可单独设定为输入或输出。各个口的位是从0开始编号的。当A口为输出方式时,其第4位(即RA4)为开路集电极(或开路漏极)输出,而B口及A口其它各位为常规的全CMOS驱动电路。这些功能必须注意,否则会在编程时出错。CPU对每个端口都按一个字节8位来处理,但A口只有5位引脚。 PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。 PIC16F84还有一些其它功能,如用来长期存放数据的EEPROM、定时器/计数器模块等,这里也暂不讨论。 二、Pic单片机的两大优势 1、PIC单片机外围接口十分丰富,能满足绝大部分应用系统的需求;比如PIC16F877A包含8路ADC,1个CCP、PWM、USART、SSP、I2C/SPI,3个定时/计数器,1个硬件WDT等接口,8K FLASH程序存储器、256字节EEPROM,能满足较复杂测控系统的要求;有的还集成了LCD驱动器、CAN控制器和无线收发模块,还有专门针对电机控制的芯片,内含多路高精度PWM,非常适合对电机进行调压调频控制。 2、PIC单片机产品型号非常丰富,引脚数从8-128,外围接口配置合理,对应不同用途可非常方便地找到匹配的型号,绝不会造成资源浪费。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic8位单片机的基本组成具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-25 关键词: 单片机 pic单片机 指数

  • 一点点学pic单片机,如何设计pic单片机中断程序

    一点点学pic单片机,如何设计pic单片机中断程序

    pic单片机使用很多,但pic单片机的学习存在一定难度。为帮助大家稳步提高对pic单片机的认识,本文将对pic单片机引脚中断程序设计技巧加以介绍。如果你正在学习pic单片机,或对本文即将讲解的内容存在兴趣,都不妨继续往下阅读哦。 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。 引脚中断程序设计 在主程序里先设置有关的寄存器。 ◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态; ◇如果需要弱上拉,通过OPTION_REG的第7位设置; ◇RBIF=O; ◇RBIE=1; ◇GIF=1。 响应状态变化后的中断服务程序。 ◇检查RBIF是否为l,为l则是引脚变化引起的中断; ◇调用延时程序,延时20~30 ms,目的是为了按键去抖; ◇判断是引脚出现上升沿还是下降沿引起的中断; ◇调用按键处理程序; ◇读PORTB口的值,取消状态变化的硬件信号; ◇清除RBIF标志。 小编认为上面程序设计最大的问题是在中断程序里调用延时程序。大家知道,中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。 下面给出小编设计程序时的思路。 当引脚状态变化引起中断时,在中断子程序里首先判断引起中断的原因是不是我们需要的变化引起的中断。如果是,不要在这里延时,而是设置一个标志位,接着清除中断标志,退出中断。中断程序如下: else if((RBIE&RBlF)==1){ //如果引脚变化引起中断 if(RB4==0){ //RB4上的按钮接地 key=1; //按键标志位置位 } RBIF=0; //清除引脚中断标志位 } 其中,if(RB4==0)语句相当于读取了PORTB端口数据寄存器,取消了状态变化的硬件信号。 下面详细介绍怎么样进行按键去抖。 首先,在定时器中断里设置一个lms的时间基准标志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下: unsigned char count; if((ToIE&TOIF)==1){ //定时器中断 TMRO+=0x09; //每250μs中断一次 if(count==4){ count=0; SYSlms=l; //系统时间标志 couot++; } T0IF=0; //清除时钟中断标志位 } 有了这个时间基准,便可以在主程序里进行按键去抖处理了。为了更好地利用这个时间基准,定义一个消息标志SYSTIme,小编把它称作时间消息。为了让这个消息有自我发布和自我消失的功能.定义了如下一个宏: bit SYSTIme; #defincTImeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;) 可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失.如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序; void seaakey(){ unsigned char KeyTime,KeyTask;//定义任务时间参数、 //任务参数 switch(KeyTask){ case0:if(key){ KeyTime=30; //准备延时30 ms KeyTask++; //准备好下一个任务 kcy=0; } break; case I:KeyTime--; //延时30 ms if(KeyTime==0)Key+ask++; break; case2;if(RB4==o){ //调按键处理程序 KeyTask=0; } else KeyTask=0;//退出任务 break; } } 在主程序的死循环中这样用: while(1){ TimeEnable(); If(SYSTime==1){scankey();) //在此可以添加其他程序 只有有时问消息的时候才执行按键扫描程序。可以看到,进入扫描程序执行第一次的时候,程序首先判断按键标志位有没有置位,置位的话(也就是有按键按下的话),任务时间参数(KeyTime)赋值为30,这是延时30ms,去抖,当然你也可以设置为其他的时间值;同时任务参数 (KeyTask)加1。1ms后,再进入扫描程序,这个时候扫描程序执行casel的语句,这样30次后(延时了30ms),任务参数(KeyTask)加1,值为2。lms后,再进入扫描程序,将执行case 2的语句,首先在这里再次判断是不是按键还在按下,如果是就调按键的处理程序,如果不是。就退出按键扫描程序。在这里,还可以加入按键是否抬起的判断程序。 这样设计的引脚变化程序,CPU开销小,效率高,不会出现堆浅溢出的问题,提高了系统的实时性。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机的中断程序设计技巧具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-25 关键词: 中断 pic单片机 指数

  • pic单片机全讲解,pic单片机之pic8位单片机分类

    pic单片机全讲解,pic单片机之pic8位单片机分类

    pic单片机为常聊问题,因为pic单片机在生活中的使用较多。对于pic单片机,大家可能有所耳闻。为增进大家对pic单片机的了解,本文pic 8位单片机予以介绍。如果你对pic单片机存在兴趣,不妨继续往下阅读哦。 由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机产业的新趋势。现在PIC系列单片机在世界单片机市场的份额排名中已逐年升位,尤其在8位单片机市场,据称已从1990年的第20位上升到目前的第二位。PIC单片机从覆盖市场出发,已有三种(又称三层次)系列多种型号的产品问世,所以在全球都可以看到PIC单片机从电脑的外设、家电控制、电讯通信、智能仪器、汽车电子到金融电子各个领域的广泛应用。现今的PIC单片机已经是世界上最有影响力的嵌入式微控制器之一。 PIC 8位单片机产品共有三个系列,即基本级、中级和高级。 1.基本级系列 该级产品的特点是低价位,如PIC16C5X,适用于各种对成本要求严格的家电产品选用。又如PIC12C5XX是世界第一个8脚的低价位单片机,因其体积很小,完全可以应用在以前不能使用单片机的家电产品的空间。 2.中级系列 该级产品是PIC最丰富的品种系列。它是在基本级产品上进行了改进,并保持了很高的兼容性。外部结构也是多种的,从8引脚到68引脚的各种封装,如PIC12C6XX。该级产品其性能很高,如内部带有A/D变换器、E2PROM数据存储器、比较器输出、PWM输出、I2C和SPI等接口。PIC中级系列产品适用于各种高、中和低档的电子产品的设计中。 3.高级系列 该系列产品如PIC17CXX单片机,其特点是速度快,所以适用于高速数字运算的应用场合中,加之它具备一个指令周期内(160ns)可以完成8×8(位)二进制乘法运算能力,所以可取代某些DSP产品。再有PIC17CXX单片机具有丰富的I/O控制功能,并可外接扩展EPROM和RAM,使它成为目前8位单片机中性能最高的机种之一。所以很适用于高、中档的电子设备中使用。 PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。 1.双总线结构 具有CISC结构的单片机均在同一存储空间取指令和数据,片内只有一种总线。这种总线既要传送指令又要传送数据,因此,它不可能同时对程序存储器和数据存储器进行访问。因与CPU直接相连的总线只有一种,要求数据和指令同时通过,显然“乱套”,这正如一个“瓶颈”,瓶内的数据和指令要一起倒出来,往往就被瓶颈卡住了。所以具有这种结构的单片机,只能先取出指令,再执行指令(在此过程中往往要取数),然后,待这条指令执行完毕,再取出另一条指令,继续执行下一条。这种结构通常称为冯·诺依曼结构,又称普林斯顿结构。 在这里PIC系列单片机采用了一种双总线结构,即所谓哈佛结构。这种结构有两种总线,即程序总线和数据总线。这两种总线可以采用不同的字长,如PIC系列单片机是八位机,所以其数据总线当然是八位。但低档、中档和高档的PIC系列单片机分别有12位、14位和16位的指令总线。这样,取指令时则经指令总线,取数据时则经数据总线,互不冲突。这种结构如图1-b所示。 指令总线为什么不用八位,而要增加位数呢?这是因为指令的位数多,则每条指令包含的信息量就大,这种指令的功能就强。一条12位、14位或16位的指令可能会具有两条八位指令的功能。因此PIC系列单片机的指令与CISC结构的单片机指令相比,前者的指令总数要少得多(即RISC指令集)。 2.两级指令流水线结构 由于PIC单片机采用了指令空间和数据空间分开的哈佛结构,用了两种位数不同的总线。因此,取指令和取数据有可能同时交叠进行,所以在PIC单片机中取指令和执行指令就采用指令流水线结构(如图2所示)。当第一条指令被取出后,随即进入执行阶段,这时可能会从某寄存器取数而送至另一寄存器,或从一端口向寄存器传送数等,但数据不会流经程序总线,而只是在数据总线中流动,因此,在这段时间内,程序总线有空,可以同时取出第二条指令。当第一条指令执行完毕,就可执行第二条指令,同时取出第3条指令,……如此等等。这样,除了第一条指令的取出,其余各条指令的执行和下一条指令的取出是同时进行的,使得在每个时钟周期可以获得最高效率。 在大多数微控制器中,取指令和指令执行都是顺序进行的,但在PIC单片机指令流水线结构中,取指令和执行指令在时间上是相互重叠的,所以PIC系列单片机才可能实现单周期指令。 只有涉及到改变程序计数器PC值的程序分支指令(例如GOTO、CALL)等才需要两个周期。 此外,PIC单片机的结构特点还体现在寄存器组上,如寄存器I/O口、定时器和程序寄存器等都是采用了RAM结构形式,而且都只需要一个周期就可以完成访问和操作。而其它单片机常需要两个或两个以上的周期才能改变寄存器的内容。上述各项,就是PIC单片机能做到指令总数少,且大都为单周期指令的重要原因。 以上便是此次小编带来的”pic单片机”相关内容,通过本文,希望大家对pic8位单片机具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-25 关键词: 单片机 pic单片机 指数

  • 大佬讲解pic单片机经验,pic单片机应用设计技巧

    大佬讲解pic单片机经验,pic单片机应用设计技巧

    pic单片机的应用无处不在,对于pic单片机,小编曾做诸多介绍。不论是pic单片机理论知识,还是pic单片机的实际应用,大家都可从往期文章有所了解。本文对于pic单片机的介绍,主要在于传授pic单片机的应用设计技巧。如果你对本文的内容存在一定兴趣,不妨继续往下阅读哦。 PIC 8位单片机内已经包含运算器、存储器、A/D、PWM、输入和输出I/O(灌电流可达25mA)、通信等常用接口,自由灵活的定义功能可以适应不同的控制要求。而不必增加额外的IC芯片。这样电路结构很简单,开发周期将大为缩短。 PICl6系列单片机属于PIC8位单片机的中级型产品,采用14位的RISC指令系统。小编使用PICl6F716单片机设计了一个电动机保护器,在设计过程中遇到很多问题,通过多方查找资料以及向Microchip公司技术人员寻求支持,问题一一得到解决。现将部分问题记录如下,与大家一起探讨。 一、ICD2作为程序烧写的使用 1.1 ICD2简介 MPLAB ICD2在线调试器是一款低价位的PIC开发工具。它利用Flash工艺芯片的程序区自读写功能来实现仿真器调试功能;使用的软件平台是Microchip的MPLAB IDE(集成开发环境软件包),兼容Windows NT、Windows 2000和Windlows XP等操作系统。其通信接口方式可以是USB(最高可达2Mb/s)或RS-232串行接口方式;工作电压范围为2.O~5.5V,可支持最低2.0V的低压调试。 MPLABICD2可以支持大部分Flash工艺的芯片。它不仅可以用作调试器,同时还可以作为开发型的烧写器使用。 1.2 ICD2作为烧写器时的配置 烧写芯片的方式有两种:普通烧写和在线烧写。在线烧写是适合大批量生产方式的烧写办法。使用在线烧写时通常用户都已经把芯片焊到了板上,此时就要求用户板上有预留的烧写接口。用户板上的接口是通过一条6芯的扁平电缆与ICD2主机上同样的接口一一对应连接的。图1显示了MPLAB ICD2与目标板上模块连接插座的互连状况。 ICD连接插座有6个引脚,但只使用了其中的5个引脚,分别是VDD(电源)、VSS(地)、VPP(编程电压)、PGC(同步时钟)和PGD(数据)。 1.3 ICD2作为烧写器时容易出现的问题及解决方法 尽管MPLAG ICD2与目标板的互连非常简单,但是一不小心就会出现问题,基本上每一个PIC的入门者都会碰到类似的问题。下面就一些常见问题作简要叙述。 如图l所示,在VPP与VDD之间通常要串接一个上拉电阻(通常约为lOkΩ),这样VPP线可置为低电平来手动复位PICmicro单片机。但是对一般设计者来说,都是采用上电自动复位。如果在这里采用集成器件DMP809,那么就会导致连接不上,程序没有办法烧入。 对于PGC、PGD两根线,由于在ICD2内部已经进行了上拉,所以在外围设计中,不要冉进行上拉,否则会造成分压。对于PGC、PGD和VPP三根线,不要对地接电容.因为电容会阻碍在数据和时钟线上电平的快速转换,从而影响ICD2与目标板的连接。同样对于PGC、PGD,由于数据或时钟都是双向传输的,这时如果在中间串一个二极管,则会影响ICD2与单片机的双向通信。 但是,对PGC和PGD来说,在单片机上同时复用为普通I/O口,而有些使用上必须要接对地电容或者是串接二极管。对于这种情况,唯一的处理方式就是在烧写时从芯片的PGC和PGD端口直接跳线到程序烧写口。 二、A/D转换通道切换问题 小编所设计的电动机保护器需要进行很多A/D转换,比如三相电流转换、零序电流转换以及各种定位器等。但是小编所采用的PIC16F716单片机只有5路A/D转换通道,因此附加了一个多位选择开关对一个A/D通道进行复用。而在调试中发现这样一个问题,就是A/D转换值不准确,甚至有点乱,但从程序流程以及代码角度均查不出任何问题。后查明PICl6F716单片机进行A/D转换通道切换时,需要一定的延时,延时时间是毫秒级。解决办法是:在通道问切换时,当第一个通道转换完成后,先转到另一个通道;然后延时1ms左右,再进行A/D转换。而对同一个通道信号切换时,要在第一个信号转换完成后,禁止信号输入,延时1ms左右;然后输人信号,再进行A/D转换。 这种做法比较麻烦,也很占用时间,并且从调试结果来看,问题并没有解决。在反复进行调试中,最后得到的优化解决办法是:对于通道间转换以及同一通道信号转换,要对每一个信号至少进行两次A/D转换;第一次的转换结果,舍弃不予处理,只取第二次A/D转换的结果。从调试结果来看,很好地解决了这一问题。 三、软件开发小技巧 PIC单片机采用精简指令集,例如对于PICl6F716单片机,只有35条单字节指令。要用这么少的指令实现复杂的控制或计算,显然要在软件设计上多下功夫,并且PIC的指令系统与51系列单片机有很大不同,这让PIC初学者很不适应。下面小编就自己的体会,谈一些软件设计需要注意的问题。 3.1 指令的大小写问题 编写PIC单片机的源程序,除了源程序的开始处需要严格的列表指令外,还须注意源程序中字母符号的大小写规则,否则在PC机上汇编程序时不会成功。在源程序中都会使用伪指令INCLUDE。这条指令将列表中指定的单片机文件(在MPLAB中)读入源程序作为源程序的一部分,所以凡是MPLAB中有关该单片机已有的寄存器在源程序中无需再用赋值指令(EQU)赋值,这就使所建立的源程序大为简化。 此外,由于有了伪指令INCLUDE,所以根据MPLAB软件中的格式,在源程序中的操作数凡是涉及MPLAB已规定的寄存器名称的,其字母一律只能大写,不能小写。其余操作码、符号字母可任意大小写,但0x中的x应小写。否则汇编不会成功。鉴于上述原因,为了书写方便,在使用MPLAB软件时,PIC单片机的源程序均用大写字母为宜(0x例外)。 3.2 振荡器的配置以及时序的计算 PIC系列单片机可以工作于以下4种不同的振荡器方式:LP(低功耗晶体振荡器)、XT(晶体谐振器)、HS(高速晶体谐振器)和RC(阻容振荡器)。用户可以根据其系统设计的需要,通过对配置位(FOSC1和F0SC2)编程,选择其中一种工作模式。 而一旦振荡器配置完成,那么根据用户的配置,可以轻松地计算出程序运行的时间以及A/D转换所占用的时间,这样就会很轻松地安排好单片机的时序。例如,如果采用4 MHz的HS振荡模式,那么单片机的时钟频率为FOSC/4,也就是说执行一条指令需要1μs;对于需要两个指令周期的指令,需要2μs。而对于A/D转换,如果A/D转换时钟位选择为FOSC/8,那么A/D转换模块转换一个位的时间Tad就为2μs。对一个8位的转换来说,需要的时间为9.5Tad,也就是完成一次A/D转换的时间为19μs。这样只需要查看源程序的行数并作简要分析,就可以计算出程序运行的时间。 3.3 存储体的选择 PIC单片机的数据存储器通常分为两个存储体,即存储体O(Bank0)和存储体1(Bankl)。每个存储体都是由专用寄存器和通用寄存器两部分组成的。两个存储体中的一毡寄存器单元实际上是同一个寄存器单元,却又具有不同的地址。 不同型号的PIC单片机,其数据存储器的组成(即功能)是不完全相同的,所以设计人员一旦选用了某个PIC单片机的型号后,就要查找该单片机的数据存储器资料,以便编程使用。 小编所采用的PICl6F716单片机的存储区,是通过STATUS寄存器的RPl位和RP0位来选择的。当配置为00时,表示选择存储区0;当配置为01时,表示选择存储区1。因为存储区的改变只须改变RP0位,所以通常在程序编写时,只改变RP0位来选择存储区。但是这样容易造成程序的混乱,因此,小编建议在每次更换存储区时,要分别对RPO和RPl进行置位。在程序初始化时,最好将寄存器的初始化分为两部分:第一部分为存储区O;第二部分为存储区1。然后将每个需要初始化的寄存器分别在对应的存储区进行初始化即可。 3.4 GOTO和CALL指令的不同使用 在PIC的汇编程序中,CALL与GOT0指令使用的场台不同。CALL是用来调用子程序的,在调用完子程序后返回到调用前的程序;而GOTO是无条件转移,即由此状态进入另外一个状态而不需要返回。 为了使程序更加具有可读性,使流程更加清晰、合理,通常程序都采用模块化程序设计,即将程序按照功能分成不同的子程序,而主程序则相当简洁,只须采用CALL指令对子程序进行调用。 由于PIC单片机的堆栈有限,在程序中不能无止境地使用GOTO指令,否则会使堆栈溢出,程序无法正常运行。但是在有些时候,例如当程序出现分支时,则不得不使用GOTO指令。对于PICl6F7x系列单片机,程序出现分支时只能通过STATUS寄存器的Z位或C位进行判断。这时在两种情况的前一种情况下,必须使用GOTO指令进行转移;否则在执行完第一种情况后,紧接着又执行第二种情况。程序如下: BTFSS STATUS,Z GOTO A GOTO B 在跳转到A时,必须使用GOTO指令;否则执行完这条语句以后,紧接着执行GOTO B。这样无论Z为何值,程序都将跳转到B。而对于GOT0 B,则可以不必使用GOTO指令。 在上面这种情况下,由于GOTO只在子程序内部进行跳转,小程序内部循环占用堆栈的级数不多,因此使用GOTO指令是可行的。但是在大的程序中使用GOTO指令,将有可能无法返回到调用前的下一条指令。 因此,小编建议,在使用汇编语言进行程序设计时,应该将程序分解成一级级的子程序;然后在程序之间进行调用,尽量将GOTO指令跳转的范围缩小。 3.5 对芯片的重复烧写 对没有硬件仿真器的设计者来说,总是选用带有EPROM的芯片来调试程序,通过反复的修改来观看运行结果,以便对程序进行调试。每更改一次程序.都是将原来的内容先擦除,再编程,浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程较前一次,仅是对应的机器码字节的相同位由1变为0,那么就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。 在程序调试 过程中,经常遇到常数的调整。如果常数的改变能保证对应位由1变0,则都可在原片内容的基础上继续编程。另外,由于指令NOP对应的机器码为00,调试过程中指令的删除,可先用NOP指令替代,编译后也可在原片内容上继续编程。 以上便是此次小编带来的“pic单片机”相关内容,希望大家对本文的内容具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-03 关键词: 应用设计 pic单片机 指数

  • 了解pic单片机UPS电源吗?pic单片机有哪些优势和应用?

    了解pic单片机UPS电源吗?pic单片机有哪些优势和应用?

    对于pic单片机,很多朋友存在浓厚兴趣,为增进大家对pic单片机的了解,本文将从3方面介绍pic单片机:1.pic单片机UPS电源,2.pic单片机优势介绍,3.pic单片机应用。如果你是pic单片机的学习者,不妨一起来了解下吧。 一、PIC单片机UPS电源 PIC单片机(微控制器)常用于生产现场作控制电路。生产现场,若突然断电,有时会使PIC单片机运行数据消失,为此这里给出一种简单实用的PIC单片机UPS电源,如图所示。 UPS电源又称不间断电源,或后备电源,即电网供电突然停止时,UPS电源会自动给设备需要的部件供电。 图示电路的特点:电网有电时,该电路给PIC单片机提供+5V电源;停电时,由电池(+9V)自动给电路供电,PIC单片机仍有+5V电源;停电时,电路自动进行切换(不用继电器),完成后备供电。 电路工作原理 有交流电时,电源220V经变压器B降压、D1~D4整流、C1滤波。整流后的电压经二极管D5后分成两路,一路通过TR1到IC1,完成稳压输出+5V电压,供PIC单片机所需的电源。另一路通过R1对镍镉电池9V进行充电,充电电流选择约40mA。如果停电,电解电容器C1放电为0V,这时,电池通过D6、TR1到IC1向电路供电,使输出端仍有+5V电压,完成后备电源的功能。 二极管D5起隔离作用,使停电时,阻止电池电流流向整流桥。稳压管D7(5.6V)的作用,是防止电池E(+9V)过放电,即当电池放电下降到约6V时,因D7作用,TR1截止,电池放电停止。所以该电路的设计是完全符合电路各方面要求的。 二、PIC系列单片机有什么优势 1) PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。 该型号有512字节ROM、25字节RAM、一个8位定时器、一根输入线、5根I/O线,市面售价在3-6元人人民币。这样一款单片机在象摩托车点 火器这样的应用无疑是非常适合。PIC的高档型号,如PIC16C74(尚不是最高档型号)有40个引脚,其内部资源为ROM共4K、192字节RAM、 8路A/D、3个8位定时器、2个CCP模块、三个串行口、1个并行口、11个中断源、33个I/O脚。这样一个型号可以和其它品牌的高档型号媲美。 2) 精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。 3) 产品上市零等待(Zero time to market)。采用PIC的低价OTP型芯片,可使单片机在其应用程序开发完成后立刻使该产品上市。 4) PIC有优越开发环境。OTP单片机开发系统的实时性是一个重要的指标,象普通51单片机的开发系统大都 采用高档型号仿真低档型号,其实时性不尽理想。PIC在推出一款新型号的同时推出相应的仿真芯片,所有的开发系统由专用的仿真芯片支持,实时性非常好。就 我个人的经验看,还没有出现过仿真结果与实际运行结果不同的情况。 5) 其引脚具有防瞬态能力,通过限流电阻可以接至220V交流电源,可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。 6) 彻底的保密性。PIC以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,别人再也无法读出,除非恢复熔丝。目前,PIC采用熔丝深埋工艺,恢复熔丝的可能性极小。 7) 自带看门狗定时器,可以用来提高程序运行的可靠性。 8) 睡眠和低功耗模式。虽然PIC在这方面已不能与新型的TI-MSP430相比,但在大多数应用场合还是能满足需要的。 三、PIC单片机与MCS-51系列单片机的区别 应该说有三个主要特点: (1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能 同时进行;而PIC单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高 了数据吞吐率。正因为在PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位 的,但指令总线位数分别位12、14、16位。 (2)流水线结构:MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。 (3)寄存器组:PIC单片机的所有寄存器,包括I/O口,定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51单片机需要两个或两个以上的周期才能改变寄存器的内容。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机UPS电源和pic单片机的优势和应用具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-03 关键词: pic单片机 ups电源 指数

  • pic单片机程序格式,探讨pic单片机开发问题

    pic单片机程序格式,探讨pic单片机开发问题

    pic单片机每天都在被使用,了解pic单片机显得尤为必要。本文对于pic单片机的介绍,将基于两大方面:1.阐述pic单片机程序设计基础格式,2.探讨pic单片机开发的几个问题。如果你对本文即将探讨的内容存在一定兴趣,不妨继续往下阅读哦。 一、PIC单片机程序设计基础格式 为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。 建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84?INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。 TITLE“This is……”;程序标题 ;程序说明 LIST P="16F84",F=1NHX8M ; include -config_RC_Qsc &_WDT_0FF… ;资源定义和变量定义 STATUS EQU 03 FSR EQU 04 PORTA EQU 05 PORTB EQU 06 J EQU 01F K EQU 01E ;………………… ORG 0000 ; goto MAIN ;跳过中断矢量 ORG 0004 goto INTSRV;子程序入口地址 ;…………………………………… MAIN ;从0005H开始放主程序 call Initports ;端口初始化 call InitTImers;定时器初始化 … INTSRV …     ;中断服务程序区 SVBRTH…      ;子程序区 END      ;程序结束符 当然,在编写程序时可根据实际情况加以调整。下面是一份实际程序清单,要求将数据88H写入PIC16F84内部EEPROM的20H单元,而后再从20H单元将其读出。 LIST P="16F84",F=INHX8M ;…………………………… STATUS EQU  03  ;定义寄存器 EEDATA EQU  08 EEADR EQU  09 INTCON EQU  0BH EECON1 EQU  88H EECON2 EQU  89H ;………………………… RD    EQU  0    ;定义位 WR  EQU  1 RP0   EQU  5 GIE  EQU  7 ;………………………… ORG  0 GOTO WRSTART ;…………………………… ORG  10H WRSTART         ;写入操作开始 CLRW      ;清W,使W=0 BCF STATUS,RP0 ;选BANK0 MOVLW 20H MOVWF EEADR   ;地址→EEADR MOVLW 88H MOVWF EEDATA  ;写入数据→ ;EEDATA BSF STATUS,RP0 ;选BANK1 BSF EECON1,2 ;写操作使能允许 BCF INTCON,GIE ;关闭所有的中断 MOVLW 0X55 MOVWF EECON2  ;55H→EECON2 MOVLW 0XAA MOVWF EECON2  ;AAH→EECON2 BSF EECON1,WR ;启动写操作 BSF INTCON,GIE ;恢复开中断 RDSTART          ;读出操作开始 BCF STATUS,RP0 MOVLW 20H MOVWF EEADR   ;地址→EEADR BSF STATUS,RP0 BSF EECON1,RD ;启动读操作 BCF STATUS,RP0 MOVF EEDATA,W ;将EEPROM ;数据读入W END 二、PIC单片机开发的几个问题 1 怎样进一步降低功耗 功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C&TImes;&TImes;系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C&TImes;&TImes;在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情况下,当单片机的振荡方式采用RC电路形式时,可以采用中途提高工作频率的办法来解决。 具体做法是在闲置的一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。需进行快速运算时先置RB1= 1,由于充电时,电容电压上升得快,工作频率增高,运算时间减少,运算结束又置RB1=0,进入低速、低功耗状态。工作频率的变化量依R1的阻值而定(注意R1不能选得太小,以防振荡电路不起振,一般选取大于5kΩ)。 另外,进一步降低功耗可充分利用“sleep”指令。执行“sleep”指令,机器处于睡眠状态,功耗为几个微安。程序不仅可在待命状态使用 “sleep”指令来等待事件,也可在延时程序里使用(见例1、例2)。在延时程序中使用“sleep”指令降低功耗是一个方面,同时,即使是关中断状态,Port B端口电平的变化可唤醒“sleep”,提前结束延时程序。这一点在一些应用场合特别有用。同时注意在使用“sleep”时要处理好与WDT、中断的关系。 例1(用Mplab-C编写) 例2(用Masm编写) Delay() Delay { ;此行可加开关中断指令 /*此行可加开关中断指令*/ movlw.10 for (i=0; i《=10; i ) movwf Counter SLEEP(); Loop1 } Sleep decfsz Counter goto Loop1 return 2 注意INTCON中的RBIF位 INTCON中的各中断允许位对中断状态位并无影响。当PORT B配置成输入方式时,RB《7:4》引脚输入在每个读操作周期被抽样并与旧的锁存值比较,一旦不同就产生一个高电平,置RBIF=1。在开 RB中断前,也许RBIF已置“1”,所以在开RB中断时应先清RBIF位,以免受RBIF原值的影响,同时在中断处理完成后最好是清RBIF位。 三、用Mplab-C高级语言写PIC单片机程序时要注意的问题 3.1 程序中嵌入汇编指令时注意书写格式 见例3。 例3 ………… while(1) {#asmwhile(1) { …… #asm /*应另起一行*/ #endasm …… }/*不能正确编译*/ #endasm …… }/*编译通过*/ …… 当内嵌汇编指令时,从“#asm”到“endasm”每条指令都必须各占一行,否则编译时会出错。 以上便是此次小编带来的“pic单片机”相关内容,希望大家对本文介绍的两大方面内容具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-03 关键词: 单片机 pic单片机 指数

  • pic单片机扫雷,pic单片机程序编写+动作标志位解析

    pic单片机扫雷,pic单片机程序编写+动作标志位解析

    pic单片机的应用在生活中随处可见,对于pic单片机的理论知识以及pic单片机相关问题,小编已做诸多介绍。本文中,小编将对pic单片机程序编写和动作标志位使用方法加以介绍。如果你对pic单片机存在一定兴趣,一定要往下阅读哦。 控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: listP=16c73 calllefthandup callrighthandup LOcallreadinsignal bdsscsl_v,1efthandlIGBTs calllefthandstop btfsccsl_v,righthandlight4 gotoL0 callrighthandstop L1callreadinsignal btfsccsl_v,lefthandlight3 gotoL1 calllefthandstop lefthandlight表示光电开关,由此判断是否到相应的位置。1表示在手臂最下面的位置;2表示在手臂的握手位置;3表示在手臂的鼓掌位置;4表示在手臂的高举手位置。上面程序描写左手臂上升到举手位置和右手臂上升到鼓掌位置并停止的过程。先判断左手到达否,到达则左手停止,接着看右手是否到达举手位,到达则停止,否则循环上述的检测,直到左手到达鼓掌位,右手到达举手位。 注意,这里的3,4表示的就是鼓掌位,举手位。经过循环检测可以让手臂停在各位上,然而机械动作是有惯性的,机械停止位可能在该位的上一点或下一点,这就影响下面动作的进行,可能在若干动作后机械动作出现失常,也就是程序没法正常的运行。在此情况下,需要修改程序的编写方式,采用标志位来控制动作的进行。如果采用控制标志位,一定要在动作子函数中对标志位置零。程序如下: listp=16c73 : actlonstopflagequOx6e;位定义 lefthandfla8cqu0x0;0表示停止左手动作 rightbandflagequOxl;O表示停止右手动作 : MOV lwOx03 MOV Wfactionstopflag calllefthanduo callrighthandup L2callreadinsignal btfsscsl_v,lefthandhght3 calllefthatldotop btfsscsl_v,righthandlight4 callrighthandstop MOV lwOx00 subwfacTIonstopflag,w btfssstatus,z gotoL2 继续下面的程序 acTIonstopflag表示动作标志位参数,给动作标志位赋值,动作停止函数中将清零标志位的值。上述程序和前面所述程序的功能一样,实现两支手臂的动作。上面程序描写左手是否到达鼓掌位,到达停止,右手是否到达举手位,到达停止。看动作标志位是否为零,不是,不断地循环检测;是,执行下面的程序。 2、GOTO,CALL指令的不同使用 在PIC的汇编程序中,CALL与GOT0指冷使用的场合不同。一般情况下,在于程序与主程序之间大多用CALL指令;而状态转换模块之间大多用GOTO指令,即由此状态进入另一种状态不需返回。由于PIC 单片机 的堆栈有限,在程序中,不能无止境地使用GOTO语句,这样会使堆栈溢出,程序无法正常运行。各个小程序内部循环占用堆栈的级数不多,使用GOTO指令是可行的,但在大的程序中用GOTO则无法返回到调用前程序的下一条指令。CALL指令完成调用完子程序后返回到调用前的程序。程序如下: listD=16c76 start:ca11setcpu callautomatlsn、statel L3callreadinsignal btfsccs2_v,ultrasonicdetectl gotoL3 gotoautonatlsmstate2 : automatlsmstate2: return auatomaTIsmstatel、automaTIsmstate2表示两种状态,uhrasonicdetectl表示一个输入超声检测信号。上面程序描写调用automatistmstate1状态,执行完后进行下面的检测ultrasonicdetect],没有触发就一直循环检测,触发就进入autornatismstate2状态,执行完也不再回到下面的程序。 3、状态标志位Z、C的不同使用情况 在进行判断标志位时,Z(零标志)、C(借位标志)是不同的。Z为l时,表示上面的结果为0,Z为0时,则结果不为0。C为l时,借位,C为0时,没有借位。在使用定时器的时候,一般使用C标志位,这是由于当完成某一动作去检查定时器时,时间可能没到,或是正好,或是已经超过时间,只要到了或超过时间,都要按照要求关闭定时器,如下面程序所述。如果用Z标志位,等于0时可能没有检测到,无法判断停止的状态,而用z可以很好地控制时间定时。进行一般的计算时大多用Z,如前面的动作标志位中就是如此使用的。 listD=16c76 callopentimerO L4 MOV lwd’30’ subwft0_v2,W btfssstatus,c gotoL4 cauclosetimer0 程序检测时间是否到达1.5s,没有则循环等待,到了或检测时间过了就关闭定时器,执行下面的程序。 总之,在PIC单片机的编程中采用合适的方法,可以使整个程序运行稳定,而且程序空间的使用也将有所减小,避免了调试中的Bug。这是笔者在实际中的一点体会,还有许多不足或没有考虑到的问题,希望在和大家的探讨中不断学习PIC单片机的精髓。 以上便是此次小编带来的“pic单片机”相关内容,如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-11 关键词: pic单片机 指数 程序编写 动作标志位

  • pic单片机解惑篇,6个pic单片机问题解疑(下)

    pic单片机解惑篇,6个pic单片机问题解疑(下)

    pic单片机的应用,使得诸多控制系统变为现实。因此,pic单片机具备很强的现实意义。上篇pic单片机文章中,小编为大家解读了6个pic单片机问题。本文中,小编将继续为大家讲解另外6个pic单片机问题,一起来看一下吧。 1、PIC16C7XX的A/D片内RC振荡器能否用于计数器? 16C71A/D转换器片内RC振荡器的作用是让MCU处于睡眠时(此时主振停振)能有一个时钟源来进行A/D转换。此RC振荡器因其内部设计的限制不能被其他电路使用。A/D转换器内部RC振荡器钟频典型值为250K,但会随着环境温度,工作电压,产品批号等不同而有相当的变动。定时器的时钟源可以选择内部的振荡频率,也可以是外部的脉冲输入信号。若你能选择后者,那就能方便地做到MCU的主频很高而时钟的溢出率较低。不然,除了用软件来计数分频,好象也没有其它招数。另一种选择是用其它型号的MCU,其内部至少还另有一个TIMER1,因为TIMER1可以有独立的一颗晶体作为时钟振荡的基准,你可以方便地选用频率低的晶体来完成你的设计。 2、为何使用PICSTAR-PLUS烧写16CE625-04/P有时无法把保密位烧成"保密"? 使用PICSTAR-PLUS对芯片编程时,程序代码是放在计算机的RAM中,每次写程序时通过串口把数据下载到烧写器中去编程,所以可能会出错。我不怀疑你操作有问题,但是请注意的PICSTAR-PLUS是用于开发用途的编程器,不推荐用于规模生产。你能计算出出错概率为1%,看来你是用它来作大规模生产了。为保证烧写可靠,推荐你使用高奇公司生产的PICKIT编程器。 3、为什么PIC单片机应用中,有时出现上电工作正常,而进入睡眠后唤醒不了?(PIC单片机应用中晶体选择的注意事项?) 对于一个高可靠性的系统设计,晶体的选择非常重要。在振荡回路中,晶体既不能过激励(容易振到高次谐波上),也不能欠激励(不容易起振)。尤其在设计带有睡眠唤醒(往往用低电压以求低功耗)的系统中,若还是随手拿一颗晶体就用,你的系统可能会出问题。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因是上电时电路有足够的扰动,很容易建立振荡。在睡眠唤醒时,电路的扰动要比上电时小得多得多,起振变得很不容易。 有人评价PIC单片机对晶体的要求怎么这么高?用51好象从来就没有这么麻烦,手里抓到什么就用什么,也不见有问题呀?且慢,这样比较前提并不一样,同样在睡眠时,有谁见过51系列不用复位而仅靠内部或外部事件唤醒吗?若你并不需要这么高级的设计技术,PIC也大可以让你逮到什么晶体就用什么。 评价振荡电路是否工作在最佳点的简单方法时用示波器看OSC2脚上的波形(必须考虑示波器接入电容!)最好的情形是看到非常干净漂亮的正弦波,没有任何波形畸变,而且要满幅(接近VCC和GND)晶体的选择至少必须考虑:谐振频点、负载电容、激励功率、温度特性、长期稳定性。 4、PIC单片机型号的温度级如何识别? 以16C54-04X / P为例: X =没有,商业级,温度范围是0-70℃; X= I,工业级,-40-85℃; X = E,汽车级,-40-125℃; 例如:PIC16C54C-04/P 商业级 PIC16C54C-04I/P 工业级 PIC16C54C-04E/P 汽车级。 5、PIC单片机的各种中断有没有优先级之分? 中档PIC单片机的中断入口只有一个,硬件不分优先级,但可用软件查询的方式决定其优先级高低:先查先做,优先级为高。高档的17和18系列,包括即将推出的16位dsPIC,中断有硬件优先级。 6、PIC单片机型号中,后缀A/B/C分别代表什么? PIC单片机型号中,后缀A/B/C表示的是芯片生产的工艺不同。从A到C是工艺不断更新,硅片圆盘(Wafer)的直径变大,线宽变窄,线距变密,在同一个圆盘上可以制作出更多的芯片,从而降低了生产成本。从功能角度来看,三者是一样的。当然,新版本的芯片中会把现有版本中存在的一些问题作些修正,功能会得到扩充。从性能指标上来讲,三者有些差距,一个明显的表现是在电源电压的承受范围,制作线宽越细,所能承受的电压越低。例如,PIC16C57的最高电源电压指标为6V,而57C的指标为5.5V。绝大多数情况下新版的片子可直接替换旧版。从目前发现的问题来看,主要出在晶体振荡电路部分。原因是新版芯片振荡电路内部的反向放大器的增益要比旧的高出许多。若晶体选择的不合理,可能会振荡到高次谐波上去。。有些客户也提出新版的片子抗干扰的性能不比旧版的片子。 其实,我们公布的技术指标在这方面并没有任何牺牲,只是工艺上的原因,我们留的余量减少了。请大家注意不要认为PIC的片子抗干扰能力强,在电路设计时就一点不考虑应有的抗干扰措施。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对上面的6个pic单片机问题已具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-11 关键词: 单片机 问题 pic单片机 指数

  • pic单片机解惑篇,6个pic单片机问题解疑(上)

    pic单片机解惑篇,6个pic单片机问题解疑(上)

    pic单片机具备很多应用,对于pic单片机,想必大家并不陌生。往期文章中,小编对pic单片机做过诸多介绍。本文中,小编将为大家带来6个pic单片机问题,并予以解答。而在之后的pic单片机文章中,小编将带来另外6个问题。如果你对本次即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。 1、PIC单片机振荡电路中如何选择晶体? 对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑:谐振频点、负载电容、激励功率、温度特性、长期稳定性。 2、如何判断电路中晶振是否被过分驱动? 电阻RS常用来防止晶振被过分驱动。过分驱动晶振会渐渐损耗减少晶振的接触电镀,这将引起频率的上升。可用一台示波器检测OSC输出脚,如果检测一非常清晰的正弦波,且正弦波的上限值和下限值都符合时钟输入需要,则晶振未被过分驱动;相反,如果正弦波形的波峰,波谷两端被削平,而使波形成为方形,则晶振被过分驱动。这时就需要用电阻RS来防止晶振被过分驱动。判断电阻RS值大小的最简单的方法就是串联一个5k或10k的微调电阻,从0开始慢慢调高,一直到正弦波不再被削平为止。通过此办法就可以找到最接近的电阻RS值 3、晶振电路中如何选择电容C1,C2? (1)因为每一种晶振都有各自的特性,所以最好按制造厂商所提供的数值选择外部元器件。 (2)在许可范围内,C1、C2值越低越好。C值偏大虽有利于振荡器的稳定,但将会增加起振时间。 (3)应使C2值大于C1值,这样可使上电时,加快晶振起振。 PIC系列单片机的任意一条I/O管脚都有很强的带负载能力(至少可提供或灌入25mA的电流)。因此,在某些场合,这些管脚可作为可控的电源。举个例子,在一些低功耗的设计中,希望一些周围的器件在系统待命时不耗电或尽量少耗电。此时可考虑这些器件的电源供电由一条I/O脚负责提供,在工作时MCU在该条管脚上输出高电平(接近VDD)带几个mA的负载绝对不成问题。若要进入低功耗模式MCU就在该管脚输出低电平(接近0),被控器件没有了电源也就不会耗电。比如LCD显示电路、信号调制电路等都非常适合此类控制。 5、为何系统在外界磁场和电场的干扰时不能正常工作? 如果在主控电路中没有滤波电路,您用的芯片在/MCLR端应接一个能保证滤去该端口上的窄脉冲电路。因/MCLR上加的低电平宽度应大于2US,系统才能复位,而小于2US的低电平将会干扰系统的正常工作。 6、使用带A/D的PIC芯片时,怎样才能提高A/D转换的精度? (1)保证您的系统的时钟应是适合的。如果您关闭/打开A/D模块,应等待一段时间,该段时间是采样时间;如果您改变输入通道,同样也需等待这段时间,和最后的TAD(TAD为完成每位A/D转换所需的时间)。TAD可以在ADCON0中(ADCS1、ADCS0)中选择,它应在2US-6US之间。如果TAD太小,在转换过程结束时,没有完全被转换;如果TAD太长,在全部转换结束之前,采样电容上的电压已经下降。对该时间的选择的具体细节请参照有关的数据手册或应用公式。 (2)通常模拟信号的输入端的电阻太高(大于10Kohms)会使采样电流下降从而影响转换精度。若输入信号不能很快的改变,建议在输入通道口用0.1UF的电容, 它将改变模拟通道的采样电压,由于电流的补给,内在的保持电容为51.2PF。 (3)若没有把所有的A/D通道用完,最好少用AN0端。因它的下一个脚与OSC1紧靠在一起会对A/D转换造成影响。 (4)最后,在系统中,若芯片的频率较低,A/D转换的时钟首选的是芯片的振荡。这将在很大范围内降低数字转换噪音的影响。同时,在系统中,在A/D转换开始后,进入SLEEP状态,必须选择片内的RC振荡作为A/D转换的时钟信号。该方法将提高转换的精度。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对文中提及的6个单片机问题已不再迷惑。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-11 关键词: pic 单片机 pic单片机 指数

  • pic单片机实例篇,基于pic单片机设计测试评估板

    pic单片机实例篇,基于pic单片机设计测试评估板

    pic单片机是单片机系列中的佼佼者,对于pic单片机,想必大家均有一定了解。在现实中,pic单片机的应用更是随处可见。本文对于pic单片机的讲解,将为大家介绍基于pic单片机的评估板设计。 近年来,由于数据通信需求的推动,加上半导体、计算机等相关电子技术领域的快速发展,短距离无线与移动通信技术也经历了一个快速发展的阶段。短距离无线通信通常指的是l00m到200m以内的通信。 它被广泛应用于无线数据采集、无线水表、煤气表、电力表抄表、工业遥控、遥测、工业数据采集、楼宇自动化、安防、机房设备无线监控、家庭自动化数据网络组网等领域。 IAI系列无线芯片具有集成度高,外围元件少,功耗低,性能稳定可靠,芯片内部集成了FSK无线收发必需的全部功能模块,包括多边带PLL合成器、PA、LNA、混频器、基带滤波器、中频放大器、信号强度指示RSSI、数据质量侦测DQD、电池电压侦测、AFC和微控制器等,非常适合用于短距离无线通讯产品。本文介绍了采用IA4421芯片开发的两种无线通讯模块PHY和EV-IA4421-433M-3(如图1,图2)。PHY模块是不带MCU而向外提供一个SPI接口;EV-IA4421模块是带MCU并向外提供一个串口。这样可以方便用户使用和开发。 图1 PHY 图2 EV-IA4421 针对这两种模块,我们设计了一个适用这两种模块的测试评估板。该 测试板 可以对这两个模块进行设置(主要对IAI4421寄存器设置),这样方便客户评估,测试IA系列产品的的性能。 基本概述: 该测试板的组成采用PIC单片机PIC16F777作为主控芯片;一个LCD1602作为显示器件;4个轻触按键作为作为用户输入;一个可以连接电脑的串口;还有连接两通讯模块的接口。用户可以通过按键和LCD可以很直观地对IAI4421芯片寄存器、通讯速率等进行设置,还可以通过LCD监控数据传输过程的正确性和完整性。 本文主要介绍该测试板的一些主要功能和原理以及其使用的方法,以便大家对其有一个初步的了解。 主要功能: 可设置4位的发射地址码:用户可以通过菜单设置4位的地址即0~F,并与从机地址设置对应,这样就可以不受其他模块的干扰,可以多个模块同时工作。 可设置模块的工作频段:由于IAI系列芯片支持3频段分别为433MHz、868MHZ、915MHZ,通过设置不同的频段可以适应使用不同频段的硬件。 可设置模块的发送速率:芯片支持不同的发射速率,用户可以根据需要进行调整; 可设置发送数据的时间间隔和发送的次数; 可以设置串口波特率(与硬件连接相对应); 可显示接收数据的内容和接收数据的次数,当前通讯速率等信息; 硬件组成框架: 各部分硬件接口: LCD1602接口(图3) LCD1602采用8数据线接口(data0-data7),有利于快速刷新需要显示的数据,RS、RW、E三线控制。 图3 LCD电路接口 串口电路(图4) 串口电路采用MAX232作为电平转换芯片,与电脑连接,接收电脑 的输入命令。TX串行数据输出(无线接收到的 数据),CRX串行数据输入(要发送的数据)。 图4 串口电路接口 EV-IA4421-433M-3模块接口电路(图5) EV-IA4421-433M-3是已经带有一个PIC16F690的模块。VCC使用5V电源供电;TX、RS作为一个标准的波特率可选的串口作为与测试板之间的通讯,所有对模块的操作都使用这个串口完成;/PD待机控制,/PD=0时,模块进入待机状态,/PD=1,模块正常工作;RSSI无线信号强度输出,输出电压和信号强度成正比,是一个模拟信号,测试板通过AD转换对其捕捉。 图5 EV-IA4421接口电路 PHY模块接口电路(图6) PHY只需使用5个I/O口即可工作,它采用SPI兼容的控制接口作为数据通讯接口。我们测试板也正是使用这种方式与PHY模块进行谅解的。各个接口功能如下:SCK:SPI串口时钟输入;SDI:SPI串口数据输入;NSEL:SPI片选输入(低电平有效);SDO:SPI串口数据输出;NIRQ:中断请求输出(低电平有效)。 图6 PHY模块接口电路 按键电路(图7) 四个轻触按键作为用户的输入,用户按键的输入判断是采用普通的I/O方式。具体每个按键定义为:UP键用于上移菜单;DOWN键用于下移菜 单;ENTER键用于确认选择;SEND用于启动发送数据。 图7 按键电路 电源部分: 考虑到使用的方便性,再电源供电上采用了两种供电方式:一种直流9V~12V 电源适配器的输入;另一种是用9V的纽扣电池供电。用户可采用其中的一种。 以上是该 测试板 的硬件的主要组成部分,每个部分都只是作了比较简单的介绍。 软件组成框架: 软件流程如图8所示,软件系统在MCU中执行,分为系统初始化、主循环流程与中断服务程序。下面对其作一个简单的介绍: MCU初始化函数,主要是对MCU定时器设置、串口、中断设置和各个端口的输入输出设置等等; 按键事件管理函数,它定时检测按键板上的按键输入,设置和保存相应的标志位,并把按键对应信息映射成相应的驱动事件; 主循环函数是整个软件系统的一个核心部分,各种事件的触发和各个用户接口管理都由这个函数完成,每个子程序管理着不同功能。 图8 软件流程 主循环是软件的基本控制部分,它是一个无限时间的循环,当中包含了许多子程序,诸 如:Check if it’s time to execute events(定时器时间事件处理)、Mode Handler(模式识别处理)、Key SCANHandler(电源管理)、OSD Event Handler(菜单事件处理——当中也包含了按键处理)、Debug Handler(调试处理)。通过这一系列的管理函数,不断的检测事件的发生并执行相应的功能操作。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对如何基于pic单片机设计测试评估板具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-02-03 关键词: 单片机 pic单片机 测试评估板

  • pic单片机应用实例,采用pic单片机设计多回路温度控制系统

    pic单片机应用实例,采用pic单片机设计多回路温度控制系统

    pic单片机应用较多,生活中许多控制系统均基于pic单片机设计得到。对于pic单片机,小编曾带来诸多介绍。本文中,将为大家带来pic单片机实例,以增进大家对于pic单片机的认知。如果你对基于pic单片机设计的多回路温度控制系统存在一定兴趣,请继续往下阅读哦。 1.引言 对于塑料制瓶工艺,塑料加热处于溶融状态, 经高压注射成为管胚, 短时间冷却以后,经过高压空气的吹胀, 在制瓶模具中成型。其工艺特点之一是:溶融状态下的塑料定时流动; 成为管胚之后, 将与外部空气接触 2 秒钟时间左右, 产品质量不可避免地受到环境温度的影响。 制瓶工艺要求在不同的制瓶过程中, 恒定在不同的温度下, 其温度控制是制瓶的关键技术之一。目前这种设备的温度控制装置通常采用单回路的通用温度控制仪表, 温度控制无法与工艺过程直接产生联系, 使得温度控制达不到最优状态, 而且受到环境温度的影响, 必须随环境温度的变化调整温度控制参数, 否则产品质量受到影响。另一方面, 单回路的通用温度控制仪表价格也比较高, 且多采用线性模型及PID控制等经典控制方法往往很难达到理想的控制效果, 而采用模糊控制, 它具有不依赖对象的数学模型, 鲁棒性强, 算法简单容易实现。因此, 我们研制了采用 PIC16F877 单片机进行控制的低成本、 高性能、与工艺过程直接产生联系的, 不受环境温度影响的折叠开放式多回路温度控制装置。 2.系统硬件设计 2.1 硬件系统的构成 本系统被设计为8个温度检测回路, 每一个回路将热电偶产生的对温度的微弱信号, 经过温度变送单元转换成0~5V的标准电压信号,送入PIC单片机进行A/D转换后作为模糊控制的输入, PIC单片机根据输入数据通过模糊控制计算出控制输出量, 转化为PWM信号的占空比, 由RD口引脚输出相应的高低电平控制固态继电器的动作从而实现对系统温度的控制, 并通过C8051F020单片机控制SED1335, 从而控制液晶显示器对结果进行显示。对于多回路温度检测系统的硬件配置, 本设计采用折叠开放式结构能够保证温度控制回路配置的灵活性和低成本。 系统硬件框图如图 1 所示。 整个系统由数据采集模块、 主控模块、 控制量输出模块和人机通讯模块四部分组成。 2.2 硬件的模块化设计 2.2.1 数据采集模块 本设计的 8 路温度检测电路选用现代工业生产过程中使用极为广泛的热电偶为温敏元件进行温度的测量, 根据热电偶的测温原理及其特点, 为了使环境温度的变化不会影响温度检测和控制效果, 在整个制瓶工艺过程中采用了多点多回路检测和非常实用的冷端温度补偿电路, 使输出接近线性化, 在实验过程中我们发现该电路的热电动势与被测温度基本上成单值函数关系。热电偶经过冷端温度补偿后,输出得到很微弱的模拟信号, 经过放大才适合 PIC16F877 单片机集成的 A/D转换器转换成单片机能够识别的数字信号, 并转化为对应温度值。 2.2.2 主控制模块 本系统的控制核心是 PIC单片机。PIC单片机是近几年出现的一种新型的采用 CMOS工艺的 8 位单片机, 所选用的 PIC16F877 单片机的内部集成有 8 路 10 位 A/D 转换器, 内置 8k× 14 位的 Flash 程序存储器, 可多次修改程序, 便于系统升级。 以 PIC16F877 为核心的温度控制装置, 无须扩展 I/O芯片和 A/D 转换器, 大大地提高了系统的可靠性和抗干扰性, 并通过通讯口实现与其它单片机的通讯, 从而获得工艺过程的数据参数, 使得温度控制与工艺过程发生直接联系, 提高温度控制的精度和产品的质量。而模糊控制的运用可以避免控制对象 传递函数的不精确性和非线性所带来的误差, 提高温度控制的精度。由于系统具有大惯性的特点(需要有热传导和热平衡的过程) , 为了提高系统的快速性和模糊控制的精度, 具体控制算法采用了分段控制的方法, 即在对被控对象的温度特性有一定的经验知识并进行粗略的实验的基础上, 把温度控制过程划分为前段和后段分别进行处理, 在此不作赘述。PIC单片机作为控制核心与其余各模块相连接, 处理各种数据, 发出各种控制信号。 2.2.3 控制量输出模块 本设计输出模块是通过 PIC16F877 单片机 RD 口输出主控模块的决策信号, 控制对应固态继电器(简称SSR)的通断来达到控制加热器工作的目的。选用固态继电器而没有使用普通的继电器与其良好的特性是密切相关的, 且其价格并不贵。它是用半导体器件代替传统点接点作为切换装置的具有继电器特性的无触点开关器件, 单相SSR 为四端有源器件, 其中两个输入控制端, 两个输出端, 输入输出之间光电隔离, 输入端加上直流或脉冲信号到一定电流值后, 输出端就能从断态转变成通态。具体地说, 就是将每隔一定时间采样进来的信号经过A/D处理并通过模糊控制计算出控制输出量, 转化为 PWM信号的占空比, 由 RD引脚输出相应的高低电平控制固态继电器, 如果所测得的温度值比给定温度值小, 那么固态继电器转变成通态进行加热升温处理, 反之则转变成断态暂停加热。 2.2.4 人机通讯模块 在温度检测系统中, 常常需要设计良好的人机交换界面。设计者可以在人机交换界面中获得必要的信息, 同时要把自己想要达到的目的(即把温度控制在设定温度值)直观地显示出来。为此, 我们将检测所得数据和设定温度值向 C8051F020 单片机传输并通过点阵液晶显示器( LCD)显示。 要使 PIC16F877 单片机与 C8051F020 单片机实现数据传输, 则必须在它们之间建立准确的通讯。由于它们在选择晶体振荡器时各不一样, 因此在计算系统异步串行通讯波特率时, 由于存在不同的波特率误差, 往往导致通讯失败。研究表明, 应用软件插值, 调整串口波特率, 并降低波特率误差, 可以保证通讯的准确性; 本设计中采用的液晶显示技术在实际生活中得到了广泛应用。 液晶显示模块以其微功耗、 体积小、 显示内容丰富、 模块化以及接口电路简单等诸多优点在科研、 生产和产品设计等领域发挥着越来越重要的作用。我们选用 SED1335 作为液晶显示器控制器。根据C8051F020 单片机和 SED1335 的性能特点, 直接通过 C8051F020 单片机 I/O 口控制SED1335, 从而达到控制液晶显示器显示检测数据的目的; 对于系统允许测控的最大、 最小和最终需要达到的温度值以及翻页、 跳转(浮动光标)功能都通过键盘的操作来实现。 3.系统的软件设计 本系统的软件设计采用模块化程序设计, 分别由主程序、 初始化子程序、 显示子程序、 键处理子程序、 AD转换子程序等模块构成。 主程序主要包括键扫描、 显示和处理子程序。 按照香农定理, 按周期定时采样。延时结束启动 AD转换, 转换结束后通过模糊控制进行制。 4.结语 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对如何采用pic单片机设计多回路温度控制系统具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-02-03 关键词: 单片机 pic单片机 温度控制系统

  • pic单片机实例篇,pic单片机AD转换实例

    pic单片机实例篇,pic单片机AD转换实例

    pic单片机功能较强,现实中的诸多器件均可借助pic单片机完成。由此可见,pic单片机的使用意义较大。关注本网站的朋友都知道,小编曾带来诸多pic单片机相关文章。如果你对pic单片机比较感兴趣,可在阅读完本文后翻阅往期文章。本文对于pic单片机的讲解,将为大家带来pic单片机的AD转换实例,一起来了解下吧。 AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。 一、PIC单片机如何表示电压 PIC用十位二进制位的数来表示电压,也就是数值0~1023来表示电压。那比如现在这个数值是400那这代表多少的电压?这就要根据参考电压来确定了。 比如我们设置正参考电压为3.3V ,当输入的电压为0时,数值就为0。当输入的电压为3.3V时,数值就是1023. 那如果输入的电压是1.2V代表多少电压。 首先,先算出一个数值代表多少的电压 3.3V除以1023 约等于 0.003V 。 然后,1.2V除以0.003V 等于400. 这就得出了400代表的是1.2V。 见下图我们可以看AN0~AN7.这些都是可以配置成模拟输入的端口。只有这些引脚才能做为AD转换的端口。 二、实例讲解 例如:下面的原理图,从RA0/AN0脚输入个模拟量如果电压大于1.2v则LED亮否则LED灭。 AD的设置步骤 1.设置端口 将RA0口设置为输入 TRISA = 0x01; 将RA0口设置为模拟 ANSELA = 0x01; 2.配置ADC模块 选择ADC的转换时钟。 如何选择转换时钟呢 要根据现在的时钟频率进行选择。可以根据数据手册中的表格进行选择 。 我们设置单片机的时钟频率为32MHZ ,选择ADC周期关键不要选择阴影部分,在32MHz 这一列 我们随意选择了ADC时钟周期1us,对应的时钟源为Fosc/32.,AD控制寄存器1 ADCON1的ADCS《2:0》=010注:ADCS《2:0》代表的意思就是 ADCS的0到2位。 配置参考电压 我们这里选择右对齐,所以AD控制寄存器1 ADCON1的 ADFM=1 上面将有关ADCON1寄存器的配置说完了。下面来讲解ADCON0 选择ADC输入通道 AD转换模块只有一个,而AD输入通道有8个AN0~AN7.所以不可能同时进行AD转换,那个需要用我们就分配给那个,根据硬件我们将AD转换模块分配给AN0. 所以 ADCON0 的CHS《4:0》=0000; 开启ADC模块 ADC模块开启,ADCON0的ADON=1,只是单纯的启用ADC模块。并不开始AD转换。如果不用ADC模块时候建议关闭。可以省点电哦!!! 开始AD转换 ADCON0的GO/DONE=1开启AD转换。 4 等待AD转换结束 5 读取结果 一般情况下我们并不取一次的AD转换的值。而是取多次之后算平均值。这样来确保转换的准确性。 配置ADC模块,有许多地方并没有讲解为什么这么配置,因为许多配置其实是比较随意的。并不是那么的绝对的。一定非要选择哪一个。当然实际的配置还是要根据你项目需求。 //开发环境MPLAB X IDE ,单片机PIC16LF1823. #include 《pic.h》 __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON &CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去 __CONFIG(PLLEN_OFF&LVP_OFF) ; #define ADC_NUM 8 //转换的次数 #define LED LATA1 void init_GPIO(void) { TRISA = 0x01;//端口设置为输入 ANSELA = 0x01;//设置为模拟输入 PORTA = 0x00; LATA = 0x00; } void init_fosc(void) { OSCCON = 0xF0;//32MHZ } void init_AD(void) { ADCON1= 0xA0;//右对齐,AD时钟为Fosc/32,参考电压为电源电压, ADCON0= 0x00;//选择通道AN0 ADCON0bits.ADON = 1;//开启模块 } unsigned int ADC_BAT_ONE(void)//转换一次 { unsigned int value; value=0; ADCON0bits.CHS =0;//选择通道AN0 ADCON0bits.ADGO=1;//开始转换 while(ADCON0bits.GO==1);//等待转换结束 value=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。 value= value《《8;// 将高两位左移8位 value += ADRESL;//低八位加入ADRESL的值。 return value; } unsigned int ADC_BAT_contiue(void) { unsigned int ADV_MCU[ADC_NUM],ADV_CNT,ADV_ALL; ADV_ALL=0; for(ADV_CNT=0;ADV_CNT《ADC_NUM;ADV_CNT++)//进行多次AD转换 { ADV_MCU[ADV_CNT]=ADC_BAT_ONE(); } for(ADV_CNT=0;ADV_CNT《ADC_NUM;ADV_CNT++)//计算多次AD转换的平均值 { ADV_ALL += ADV_MCU[ADV_CNT]; } ADV_ALL= ADV_ALL/ADC_NUM; return ADV_ALL;//得到结果返回 } /* * */ int main(int argc, char** argv) { init_fosc();//设置时钟 init_AD();//设置AD while(1) { if( ADC_BAT_contiue()》400)//判断输入电压是否大于1.2V { LED=1;//灯亮 } else { LED=0;//灯灭 } } } 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机的AD转换过程具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-02-03 关键词: 单片机 pic单片机 ad转换

  • pic单片机高手篇,pic单片机多路ad切换程序+循环程序介绍

    pic单片机高手篇,pic单片机多路ad切换程序+循环程序介绍

    pic单片机是最重要的单片机种类之一,对于pic单片机,小编曾带来诸多介绍,如pic单片机的优势、pic单片机选型等。而在本文中,小编将为大家介绍两种pic单片机程序:一是pic单片机多路ad切换程序,二是pic单片机循环程序。如果你对这两类程序存在一定兴趣,不妨继续往下阅读。 一、pic单片机简介 pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型。但是它们的最高操作频率大约都在20MHz左右,存储器容量用做写程序的大约1K—4K字节。时钟频率与扫描程序的时间和执行程序指令的时间有关系。但不能仅以时钟频率来判断程序处理能力,它还随处理装置的体系结构改变。如果是同样的体系结构,时钟频率较高的处理能力会较强。 二、AD转换介绍 所谓模拟量很好理解就是模拟量是指变量在一定范围连续变化的量;也就是在一定范围(定义域)内可以取任意值(在值域内)。数字量是分立量,而不是连续变化量,只能取几个分立值,如 三位进制数字变量只能取7个整数值0.1.2.3.4.5.6.7。 而不是经过AD通道的话,经过的是普通的IO口,那么模拟信号只会在引脚上出现两种数字结果,一个是1一个是0,而不能比较准确的描述出模拟量的数值,模拟量信号是一种变量信号,比如果0V--10V,或50MA到100MA,开关信号是一种通断信号,比如家里的灯开关,数字信号是一种连续的开关信号或高低电平信号,比如1101----高高低高。一连串的信号代表数字信号。 再继续说一下AD精度的问题,8位AD精度的话就是将这个满电压值分成2^8=256份,比方说51单片机采集的电压范围是0-5v 那么0v对应的是 0 5v对应的是255. 三、pic单片机多路ad切换程序 void ad_init (void) { ADIF=0X00; ADCON1=0x80;// ADCON0=0X81; //十位结果必须高为8位 TRISA=0X0FF;//默认为AD输入 PORTA=0X00; TRISE0=1; TRISE1=1; TRISE2=1; ADON=1; } void delay(unsigned int x) { unsigned int a,b; a=(2*x/8); for(a;a》0;a--); for(b=5;b》0;b--); } unsigned int read_ADresult(unsigned char channel) { channel &= 0x07; // 此处语法相当于channel=channel&0x07 联系自反加语法! ADCON0 &= 0x85; // 清当前通道 ADCON0 |= (channel《《3); //10 xxx 001 delay(30); ADGO=1; while(ADGO) conTInue; return (ADRESH《《8)+(ADRESL); // return ADRESL; } unsigned int ad_res[8];//存放AD转换值 for(j=0;j《8;j++) { ad_res[j]=read_ADresult(j); } 四、pic单片机循环程序实例 下面小编将为大家介绍一种定时程序,说明循环程序在PIC单片机上的应用。小编此次以PIC16F84单片机为例建立其定时源程序清单。该定时器源程序只需改变一条指令的常数设置,即可使定时时间从分钟级到3?8小时的连续变化(4MHz晶振条件)。在该源程序上再多设置一次循环,可使定时时间长达1月以上。 该PIC16F84单片机定时源程序可直接在MPLAB集成开发环境软件下进行汇编,其汇编后生成的HEX文件可在实验编程器1?01上对源程序进行固化并可在相应的实验板上直接观察实验的结果。PIC16F84单片机时的源程序清单如下(文件各可自定义): LIST    P=PIC16F84 #INCLUDE P16F84?INC COUNT1 EQU   0x1F COUNT2 EQU   0x1E COUNT3 EQU   0x1D COUNT4 EQU   0x1C ORG  0 START CLRW      ;与MOVLW 0等效 BSF    STATUS,5;选体1 MOVWF TRISB  ;设B口为输出 BCF    STATUS,5;STATUS复位当前体0 CLRF   PORTB ;定时启动功能 M1   BTFSS   PORTA,1 ;判断A口第D1位,D1=1间跳,D1=0顺 ;序执行 GOTO   M2 GOTO   M1 M2   MOVLW 0xAA  ;选B口定时位,LED亮开始定时 MOVWF PORTB  ;B口按0x10101010输出 DELY CLRW        ;与MOVLW 0等效 MOVLW 0xFF MVOWF COUNT1 MVOWF COUNT2 MVOWF COUNT3 MOVLW 0    ;与CLRW指令等效 MOVLW 0x02   ;0x02送W(最大定时为0xFF) MOVWF COUNT4 ;定时值控制(细调) LOOP DECFSZ COUNT1,1 ;CPUNT减1,为0间跳 GOTO LOOP DECFSZ COUNT2,1 ;同上特点,这里d=1可不用 GOTO   LOOP DECFSZ COUNT3,1 ;同上 GOTO LOOP DECFSZ COUNT4,1 ;同上,但COUNT4中值可自由选定 GOTO LOOP CLRW       ;与MOVLW 0相同 MOVLW 0x02  ;定时结束显示 MOVWF PORTB M3 GOTO M3 END         ;程序结束 说明:该源程序中常数设置可由读者任意改变,改变之后即可达到任意时间的设定。 以上便是此次小编带来“pic单片机”关内容,通过本文,希望大家对小编介绍的两类pic程序具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-30 关键词: pic单片机 循环程序 多路ad

  • 细数pic单片机,pic单片机与51/AVR单片机IO操作

    细数pic单片机,pic单片机与51/AVR单片机IO操作

    pic单片机使用较多,因此学习pic单片机的人数也相对较多。对于pic单片机,它的优点众所皆知。此文对pic单片机的讲解在于介绍pic单片机的IO口操作。但本文不仅仅局限于pic单片机,同样将对51单片、AVR单片机IO操作加以介绍,一起来了解下吧。 51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量,关联P2.0管脚。sbit是C51编译器特有的数据类型 int main(void) { unsigned char pv; //位操作,以P2口的第0位为例: bv=0;//直接对P2口的第0位管脚输出低电平 bv=1;// 直接对P2口的第0位管脚输出高电平 //总线操作输出数据,以P2口为例: P2=0xaa;//直接赋值,P2口输出数据0xaa //总线操作读取数据,以P2口为例: pv=P2;//直接读取P2口的数据放到pv变量 return 0; } 二.AVR单片机IO口的操作 AVR单片机IO口的结构比较复杂,每个IO由三个寄存器组成:IO口数据寄存器POTx、IO口方向寄存器DDRx和IO口输入引脚寄存器PINx。AVR单片机IO口操作相当麻烦,需要设置IO口的方向,而且只能进行总线操作,如果进行位操作还需要掌握编程技巧---通过逻辑运算来实现位操作。下例的运行坏境为ICCAVR软件,器件为ATMEGA16。 #i nclude int main(void) { unsigned char pv; //总线操作输出数据,以D口为例: DDRD=0xff;//先设置D口的方向为输出方式(相应位设0为输入,设1为输出) PORTD=0xaa;//赋值,D口输出数据0xaa //总线操作读取数据,以D口为例: DDRD=0x00//先设置D口的方向为输入方式(相应位设0为输入,设1为输出) PORTD=0xff;//再设置D口为带上拉电阻(相应位设0为无上拉,设1为有上拉),才能准确读取数据 pv=PIND;//读取D口的PIND寄存器的数据放到pv变量 //位操作,以D口的第0位为例: DDRD|=0x01;//先设置D口第0位的方向为输出方式,其他位的方向不变 PORTD|=0x01;//D口的第0位输出高电平,技巧:使用位或运算,其他位不变 PORTD&=~0x01;//D口的第0位输出低电平,技巧:使用取反位与运算,其他位不变 return 0; } 三.PIC单片机IO口的操作 PIC单片机IO口的结构也比较复杂,每个IO由两个寄存器组成:IO口数据寄存器PORTx、和IO口方向寄存器TRISx。操作起来比AVR单片机简单一些,同样需要设置IO的方向,可以进行总线操作也可以进行位操作。下例的运行坏境为MPLAB IDE软件,器件为PIC16F877。 #i nclude __CONFIG(0x3B32); int main(void) { unsigned char pv; //总线操作输出数据,以B口为例: TRISB=0x00;//先设置B口的方向为输出方式(相应位设0为输出,设1为输入) PORTB=0xaa;//赋值,B口输出数据0xaa //总线操作读取数据,以B口为例: TRISB=0xff;//先设置B口的方向为输入方式(相应位设0为输出,设1为输入) pv=PORTB;//读取B口的数据放到pv变量 //位操作,以B口的第0位为例: TRISB=0xfe;//先设置B口的第0位(RB0)的方向为输出方式(相应位设0为输出,设1为输入) RB0=1;//B口的第0位输出高电平 RB0=0;//B口的第0位输出低电平 return 0; } 经过比较这三种单片机IO口的操作,我们知道,51单片机IO口结构简单,操作简单,但没有高电平大电流驱动能力;AVR和PIC单片机IO 口结构复杂,操作麻烦,但具备高电平大电流驱动能力。换句话说,单片机的IO口的功能越强大结构越复杂操作越繁琐。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机、51单片机以及AVR单片机的IO口操作具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-30 关键词: pic单片机 avr单片机 io操作

  • pic单片机解惑篇,pic单片机、51单片机,谁更易于上手

    pic单片机解惑篇,pic单片机、51单片机,谁更易于上手

    pic单片机是学单片机人士必须掌握的一款单片机,对于pic单片机,小编层带来诸多介绍。如果你对pic单片机很感兴趣,不妨翻阅往期文章。本文对pic单片机的介绍内容为:pic单片机与51单片机,二者谁更易于学习,一起来了解下吧。 一、概述 51好学一些,但是PIC也没比51难多少。首先,PIC比51多个配置位,这个基本上看看就懂了。然后,PIC的端口要配置成输入或者输出,51单片机则不用。PIC的中断没有优先级,需要软件判断。最后,PIC比51多许多寄存器,你要使用PIC的各种功能,都需要去初始化寄存器。 再说说PIC相比与51单片机有哪些优点: 1:相同的晶振情况下,PIC比51速度快,PIC4个时钟周期为一个指令周期,51是12个。 2:PIC比51功能强大许多,比如自带AD转换,自带PWM,内置弱上拉(需设置)LCD接口等。。这样,你在用到许多功能的时候就很方便啦,不用去接很多外围电路。 3:PIC的驱动能力比51强,PIC可直接驱动数码管,51有些吃力哦。 4:PIC的抗干扰能力比51好,这个我们公司做过试验的。 综合上述,小编建议学习PIC。 二、51单片机详述 51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flashrom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 51单片机的主要功能 ·8位CPU·4kbytes程序存储器(ROM)(52为8K) ·256bytes的数据存储器(RAM)(52有384bytes的RAM) ·21个专用寄存器 ·2个可编程定时/计数器·5个中断源,2个优先级(52有6个) ·一个全双工串行通信口 ·外部数据存储器寻址空间为64kB ·外部程序存储器寻址空间为64kB ·逻辑操作位寻址功能·双列直插40PinDIP封装 ·单一+5V电源供电 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据; ROM:用以存放程序、一些原始数据和表格; I/O口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式; 五个中断源的中断控制系统; 一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信; 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。 三、PIC单片机特点或优势 1)PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界上最小的单片机。 该型号有512字节ROM、25字节RAM、一个8位定时器、一根输入线、5根I/O线,市面售价在3-6元人人民币。这样一款单片机在象摩托车点火器这样的应用无疑是非常适合。PIC的高档型号,如PIC16C74(尚不是最高档型号)有40个引脚,其内部资源为ROM共4K、192字节RAM、8路A/D、3个8位定时器、2个CCP模块、三个串行口、1个并行口、11个中断源、33个I/O脚。这样一个型号可以和其它品牌的高档型号媲美。 2)精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。 3)产品上市零等待(Zerotimetomarket)。采用PIC的低价OTP型芯片,可使单片机在其应用程序开发完成后立刻使该产品上市。 4)PIC有优越开发环境。OTP单片机开发系统的实时性是一个重要的指标,象普通51单片机的开发系统大都采用高档型号仿真低档型号,其实时性不尽理想。PIC在推出一款新型号的同时推出相应的仿真芯片,所有的开发系统由专用的仿真芯片支持,实时性非常好。就我个人的经验看,还没有出现过仿真结果与实际运行结果不同的情况。 5)其引脚具有防瞬态能力,通过限流电阻可以接至220V交流电源,可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。 6)彻底的保密性。PIC以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,别人再也无法读出,除非恢复熔丝。目前,PIC采用熔丝深埋工艺,恢复熔丝的可能性极小。 7)自带看门狗定时器,可以用来提高程序运行的可靠性。 8)睡眠和低功耗模式。虽然PIC在这方面已不能与新型的TI-MSP430相比,但在大多数应用场合还是能满足需要的。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家pic单片机、51单片机的优点有所了解,并对二者谁更易于学习具备一个自己的答案。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-30 关键词: 单片机 51单片机 pic单片机

  • 如何学习PIC单片机

    如何学习PIC单片机

    据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。现在单片机的应用越来越广泛,但是你真的了解单片机吗?本文就让我们一起来了解一下单片机吧。 什么是单片机? 单片机,全称单片微型计算机,是把中央处理器、存储器、定时/计数器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。其主要应用于功能较为单一的物件中。 绝大多数的单片机都是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计数器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口——所有这些都被集成在单个集成电路芯片上。说单片机与通用型中央处理单元芯片不同,是因为前者一般很容易配合最小型的外部支持芯片制成工作计算机。这样就可以很容易的把单片机系统植入装置内部来控制装置了。近年来为了在指令和数据上使用不同的字宽,并提高处理器流水线速度,哈佛结构在微控制器和数字信号处理器也逐渐得到了广泛的应用。 PIC单片机有什么优势? 1) PIC 最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。 2) 精简指令使其执行效率大为提高。PIC 系列 8 位 CMOS 单片机具有独特 的 RISC 结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于 8 位的数据位数,这与传统的采用 CISC 结构的 8 位单片机相比,可以达到 2:1 的代码压缩,速度提高4倍。 3) 产品上市零等待(Zero time to market)。采用 PIC 的低价 OTP 型芯片,可使单片机在其应用程序开发完成后立刻使该产品上市。 4) PIC 有优越开发环境。OTP 单片机开发系统的实时性是一个重要的指标,普通 51 单片机的开发系统大都采用高档型号仿真低档型号,其实时性不尽理想。PIC 在推出一款新型号的同时推出相应的仿真芯片,所有的开发系统由专用的仿真芯片支持,实时性非常好。就我个人的经验看,还没有出现过仿真结果与实际运行结果不同的情况。 5) 其引脚具有防瞬态能力,通过限流电阻可以接至 220V 交流电源,可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。 6) 彻底的保密性。PIC 以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,别人再也无法读出,除非恢复熔丝。目前,PIC 采用熔丝深埋工艺,恢复熔丝的可能性极小。 7) 自带看门狗定时器,可以用来提高程序运行的可靠性。 8) 睡眠和低功耗模式。 PIC单片机与51系列单片机的区别 PIC单片机的型号繁多,对初学者来说实在不好应付,容易混淆,以下作一简单分类,希望有助于初学者学习: 初档8位单片机:PIC12C5XXX/16C5X系列  PIC16C5X系列是最早在市场上得到发展的系列,因其价格较低,且有较完善的开发手段,因此在国内应用最为广泛;而PIC12C5XX是世界第一个八脚低价位单片机可用于简单的智能控制等一些对单片机体积要求较高的地方,前景十分广阔。  中档8位单片机:PIC12C6XX/PIC16CXXX系列  PIC中档产品是Microchip近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到200ns,带A/D,内部E2PROM数据存储器,双时钟工作,比较输出,捕捉输入,PWM输出,I2C和SPI接口,异步串行通讯(USART),模拟电压比较器及LCD驱动等等,其封装从8脚到68脚,可用于高、中、低档的电子产品设计中,价格适中,广泛应用在各类电子产品中。  高档8位单片机:PIC17CXX系列  PIC17CXX是适合高级复杂系统开发的系列产品,其性能在中档位单片机的基础上增加了硬件乘法器,指令周期可达成160ns,它是目前世界上8位单片机中性价比最高的机种,可用于高、中档产品的开发,如马达控制、音调合成。  应该说有三个主要区别:  (1)总线结构:MCS-51的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在PIC系列单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位12、14、16位。  (2)流水线结构:MCS-51的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。  (3)寄存器组:PIC的所有寄存器,包括I/O口,定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51需要两个或两个以上的周期才能改变寄存器的内容。 如何选择单片机产品? 当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。 属于CISC结构的单片机有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)W78系列、荷兰Pilips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通讯产品、工业控制系统应采用CISC单片机。不过,RISC单片机的迅速完善,使其佼佼者在控制关系复杂的场合也毫不逊色。 今天的有关单片机的知识的分享就到这里啦,希望能对工程师们有帮助。

    时间:2019-11-27 关键词: pic单片机 51系列单片机

  • pic单片机高手实用篇,pic单片机程序设计

    pic单片机高手实用篇,pic单片机程序设计

    pic单片机在学习和工作中均扮演着重要角色,在往期文章中,小编曾对pic单片机汇编指令加以介绍,以帮助大家更好掌握pic单片机。而在本文中,将介绍pic单片机程序设计内容,以助大家写出更为优美的pic单片机程序,主要内容如下。 1、PIC单片机程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。 TITLE This is …… ;程序标题 ;-------------------------------------- ;名称定义和变量定义 ;-------------------------------------- F0    EQU  0 RTCC   EQU  1 PC    EQU  2 STATUS  EQU  3 FSR   EQU  4 RA    EQU  5 RB    EQU  6 RC    EQU  7 ┋ PIC16C54 EQU 1FFH ;芯片复位地址 PIC16C56 EQU 3FFH PIC16C57 EQU 7FFH ;----------------------------------------- ORG PIC16C54 GOTO MAIN   ;在复位地址处转入主程序 ORG   0          ;在0000H开始存放程序 ;----------------------------------------- ;子程序区 ;----------------------------------------- DELAY MOVLW 255 ┋ RETLW 0 ;------------------------------------------ ;主程序区 ;------------------------------------------ MAIN MOVLW B‘00000000’ TRIS RB       ;RB已由伪指令定义为6,即B口 ┋ LOOP BSF RB,7 CALL DELAY BCF RB,7 CALL DELAY ┋ GO TO LOOP ;------------------------------------------- END       ;程序结束 注:MAIN标号一定要处在0页面内。 2、PIC单片机程序设计基础 1) 设置 I/O 口的输入/输出方向 PIC16C5X单片机的I/O 口皆为双向可编程,即每一根I/O 端线都可分别单独地由程序设置为输入或输出。这个过程由写I/O 控制寄存器TRIS f来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。 MOVLW 0FH  ;0000 1111(0FH) 输入 输出 TRIS 6    ;将W中的0FH写入B口控制器, ;B口高4位为输出,低4位为输入。 MOVLW 0C0H ; 11 000000(0C0H) RB4,RB5输出0 RB6,RB7输出1 2) 检查寄存器是否为零 如果要判断一个寄存器内容是否为零,很简单,现以寄存器F10为例: MOVF 10,1      ;F10→F10,结果影响零标记状态位Z BTFSS STATUS,Z    ;F10为零则跳 GOTO NZ        ;Z=0即F10不为零转入标号NZ处程序 ┋          ;Z=1即F10=0处理程序 3) 比较二个寄存器的大小 要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位C来判断。注意,相减的结果放入W,则不会影响二寄存器原有的值。 例如F8和F9二个寄存器要比较大小: MOVF 8,0       ;F8→W SUBWF 9,0      ;F9—W(F8)→W BTFSC STATUS,Z   ;判断F8=F9否 GO TO F8=F9 BTFSC STATUS,C    ;C=0则跳 GO TO F9>F8       ;C=1相减结果为正,F9>F8 GOTO F9< F9       ;C=0相减结果为负,F9  ┋ PIC单片机的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据放入W返回到主程序。下面程序以F10放表头地址。 MOVLW  TABLE     ;表头地址→F10 MOVWF  10 ┋ MOVLW  1        ;1→W,准备取“1”的线段值 ADDWF  10,1      ;F10+W =“1”的数据地址 CALL  CONVERT MOVWF  6        ;线段值置到B口,点亮LED ┋ CONVERT MOVWF  2        ;W→PC TABLE RETLW  0C0H      ;“0”线段值 RETLW  0F9H      ;“1”线段值 ┋ RETLW  90H       ;“9”线段值 9)“READ……DATA,RESTORE”格式程序 “READ……DATA”程序是每次读取数据表的一个数据,然后将数据指针加1,准备取下一个数据。下例程序中以F10为数据表起始地址,F11做数据指针。 POINTER  EQU  11   ;定义F11名称为POINTER ┋ MOVLW   DATA MOVWF   10     ;数据表头地址→F10 CLRF   POINTER   ;数据指针清零 ┋ MOVF   POINTER,0 ADDWF 10,0      ;W =F10+POINTER ┋ INCF    POINTER,1  ;指针加1 CALL CONVERT      ;调子程序,取表格数据 ┋ CONVERT MOVWF   2    ;数据地址→PC DATA  RETLW   20H    ;数据 ┋ RETLW 15H      ;数据 如果要执行“RESTORE”,只要执行一条“CLRF POINTER”即可。 10) PIC单片机 延时程序 如果延时时间较短,可以让程序简单地连续执行几条空操作指令“NOP”。如果延时时间长,可以用循环来实现。下例以F10计算,使循环重复执行100次。 MOVLW D‘100’ MOVWF 10 LOOP  DECFSZ 10,1   ;F10—1→F10,结果为零则跳 GOTO LOOP ┋ 延时程序中计算指令执行的时间和即为延时时间。如果使用4MHz振荡,则每个指令周期为1μS。所以单周期指令时间为1μS,双周期指令时间为2μS。在上例的LOOP循环延时时间即为:(1+2)*100+2=302(μS)。在循环中插入空操作指令即可延长延时时间: MOVLW  D‘100’ MOVWF  10 LOOP   NOP NOP NOP DECFSZ 10,1 GOTO LOOP ┋ 延时时间=(1+1+1+1+2)*100+2=602(μS)。 用几个循环嵌套的方式可以大大延长延时时间。下例用2个循环来做延时: MOVLW   D‘100’ MOVWF   10 LOOP  MOVLW   D‘16’ MOVWF   11 LOOP1  DECFSZ   11,1 GOTO    LOOP1 DECFSZ   10,1 GOTO LOOP ┋ 延时时间=1+1+[1+1+(1+2)*16-1+1+2]*100-1=5201(μS) 以上便是小编此次带来的全部内容,希望大家喜欢。

    时间:2019-11-25 关键词: 程序设计 单片机 pic单片机

  • pic单片机编程串烧,pic单片机汇编语言讲解下篇

    pic单片机编程串烧,pic单片机汇编语言讲解下篇

    看到这篇文章的朋友,想必大家对pic单片机均具备一定兴趣,或对pic单片机具备一定使用需求。前文中,小编曾对pic单片机汇编语言进行过部分讲解。本文中,将对pic单片机的清零等指令加以讲解,以帮助大家更好掌握pic单片机编程。 一、清零指令 1.寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2.看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器) 说明:WDT是英语Watchdog Timer的缩写字母。CLR见上述说明。注意该两条指令无操作数。 3.寄存器f清零指令。指令格式:CLRF f 实例:CLRF TMRO;对TMRO清零 说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00~Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。 4.位清零指令。指令格式 BCF f,b 实例:BCF REG1,2;把寄存器REG1的D2位清零 说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为0~7或D0~D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。 通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。 二、面向字节、常数与控制操作的指令 1.传送立即数至工作寄存器W指令 指令格式:MOVLW k;k表示常数、立即数和标号 说明:MOVLW是Move Literal to w的缩写 实例:MOVL 0x1E;常数30送W 2.I/O口控制寄存器TRIS设置指令 指令格式;TRIS f 说明;TRIS f是Load TRIS Register的缩写。其功能是把工作寄存器W的内容送入I/O口控制寄存器f。当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。 实例:MOVLW 0x00 ;把00H送入W TRIS RA ;置PIC RA口为输出 MOVLW 0xFF ;把FFH送入W TRIS RB ;置PIC RB口为输入 说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里是RA口和RB口)为输入或输出的语句。可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。 3.W寄存器内容送寄存器f(W内容保持不变)指令 指令格式:MOVWF f 说明:MOVWF是Move W to f的缩写 实例:MOVLW 0x0B;送0BH送W MOVWF 6 ;送W内容到RB口 说明:第一条指令0x0B(常数11)送工作寄存器W,第二条指令,把W内容常数11送到寄存器F6中,查表F6即为RB口,所以PORT_B(B口)=0BH=D11 4.寄存器f传送指令 指令格式:MOVF f,d 说明:MOVF是Move f的缩写。F代表PIC中的某个寄存器。指令中的d规定:d=0时,f内容送W;d=1时,f内容送寄存器。 实例:MOVF 6,0 ;RB口内容送W MOVWF 8  ;RB口内容送f8 说明:第一条指令中的6代表寄存器f=6,查寄存器表f=6为RB口;0代表d=0,代表选择的目标为寄存器W。第二条指令中的8代表寄存器f=8。所以两条指令结果是把RB口的内容送f8。至于f8内容是多少?还应在汇编语言开始时附加指令,这里从略。 5.空操作指令 指令格式:NOP 说明:NOP是英语No OperaTIon的缩写。NOP无操作数,所以称为空操作。执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。 实例:MOVLW 0xOF;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP      ;空操作 MOVF PORT_B,W ;读操作 说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。 6.无条件跳转指令 指令格式:GOTO k 说明:执行该条指令时,将指令转移到指定的地址(跳转)。指令中的k,常与程序中的标号联系起来。 实例:见第9条指令中 7.寄存器内容减1,结果为零的间跳指令 指令格式:DECFSZ f,d 说明:DECFSZ是英语Decrement f,Skip of not 0的缩写。符号f,d代表的意义,前述已作说明。该条指令是指寄存器的内容减1存入W(d=0)或f(d=1)中。若指令执行结果减1不为零,指令顺序执行;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令NOP),实际指令中,当d=1时,该项常被略去。 8.寄存器内容加1,结果为零间跳指令 指令格式:INCFSZ f,d 说明:INCFSZ是英语Increment f,Skip of 0的缩写。该条指令与上一条(7)指令差别仅在于“1”上,即执行这条指令时,寄存器f内容加1,若结果不为零,则指令顺序执行;为零则指令间跳执行。执行这条指令的其它逻辑关系与上条相同。 9.子程序返回指令 指令格式:RETLW k 说明:RETLW是Return Literal to W的缩写。该指令代表子程序返回,返回前先把8位立即数送W。 以上便是小编此次想和大家分享的内容,希望大家喜欢。

    时间:2019-11-25 关键词: 指令 汇编语言 pic单片机

  • pic单片机编程串烧,pic单片机汇编语言讲解上篇

    pic单片机编程串烧,pic单片机汇编语言讲解上篇

    pic单片机为最常用单片机之一,许多程序均基于pic单片机进行开发。因此,熟练pic单片机编程尤为重要。为保证大家能准确、熟练掌握pic单片机的使用,本文特带来pic单片机的各种汇编语言指令的讲解上篇,下篇将在后期文章中予以讲解。如果你对本文即将讲解的内容充满兴趣,不妨继续往下阅读哦。 一、pic的指令系统 pic8位单片机共有三个级别,有相对应的指令集。基本级pic系列芯片共有指令33条,每条指令是12位字长;中级pic系列芯片共有指令35条,每条指令是14位字长;高级pic系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 二、pic汇编语言指令格式 pic系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号 操作码助记符 操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1.标号 与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2.操作码助记符 该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3.操作数 由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4.注释 用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 以上便是小编此次带来的“pic单片机”的相关内容,通过本文,希望大家对pic单片机的汇编语言的使用具备一个初步的认识。在后期文章中,小编将为大家带来本文的下篇,如果大家对汇编内容存在一定兴趣,请一定要关注哦。

    时间:2019-11-25 关键词: 单片机 汇编语言 pic单片机

  • pic单片机之大佬分享,三分钟了解pic单片机内部硬件资源

    pic单片机之大佬分享,三分钟了解pic单片机内部硬件资源

    pic单片机是这个时代的宠儿,而在往期pic单片机相关文章中,小编曾对pic单片机的I/O接口进行过阐述,但I/O并非pic单片机内部硬件资源的全部内容。因此在本文中,将对pic单片机的各种内部硬件资源加以介绍,以帮助大家全面掌握pic单片机打下夯实基础。 数据存储器在单片机PIC16F84中,除了有存放程序的程序存储器外,还有数据存储器。单片机在执行程序过程中,往往需要随时向单片机输入一些数据,而且有些数据还可能随时改变。在这种情况下就需用数据存储器。由于数据存储器不但要能随时读取存放在其各个单元内的数据,而且还需随时写进新的数据,或改写原来的数据。因此,数据存储器需由随机存储器RAM构成。RAM存储器在断电时,所存数据随即丢失,这在实际应用中有时会带来不便。但是,在16F84单片机中有64×8位E2PROM数据存储器。存放在E2PROM中的数据在断电时不会丢失。 16F84单片机中的RAM数据存储器如表1所示,该RAM分为两个存储体:即存储体0(Bank0)和存储体1(Bank1)。每个存储体均可以直接用内部总线传送信息,所以它们都是以寄存器方式工作和寻址。这些八位寄存器,又可分为通用寄存器和专用寄存器两个部分。通用寄存器存放数据,专用寄存器存放控制单片机运作的信息。每个存储体最大可扩展到7FH(128个字节)。在每个存储体中,专用寄存器被安排在低位地址空间,通用寄存器被安排在高位地址空间。 通用寄存器用法单一,但专用寄存器却各有各的用处,现将较基本的专用寄存器作一简单介绍。 (1)程序计数器(PCL、PCLATH)。程序计数器PC是对程序进行管理的计数器。PIC16F84的程序计数器为13位宽,最大可寻址的存储空间为8k×14位。实际上16F84只使用前1k×14位(0000~03FFH)存储空间。因程序计数器有13位宽,而专用寄存器只有8位。因此PC由两个专用寄存器构成。其低八位PCL是一个可读/写寄存器(地址为02H或82H),而高字节PCH(有效位5位)不能直接进行读/写操作,它是通过一个8位的保持寄存器PCLATH(地址为0A或8AH)把高5位地址传送给程序计数器的高字节。当执行CALL、GOTO指写PCL时,PC值的高字节就从PCLATH寄存器中装入。 (2)状态寄存器STATUS。状态寄存器STATUS含有算术逻辑单元ALU运算结果的状态(如有无进位等)、复位状态及数据存储体选择位。有关位位的设定如表2所示,功能如下: 1)第0位。进位/借位位C。执行加、减运算指令表2IRP RP1 RP0 TO PD Z DC C后,若结果有进位或借位,则C被置1,否则置0。在执行移位指令时,也要用到这一位。 2)第1位。辅助进位/借位位DC。执行加、减运算指令后,若结果的低四位向高四位有进位或借位,则DC置1,否则置0。 3)第2位。零标志位运算结果为零,Z被置1;运算结果不为零,Z被清零。 4)第3位。低功耗标志位PD。上电复位或执行CLRWDT指令后置1,执行SLEEP指令后被清零。 5)第4位。定时时间到标志位TO。上电复位或执行CLRWDT、SLEEP指令后被置1,监视定时器的定时时间到被清零。 6)第5位和第6位(RP0、RP1)。这两位是用于直接寻址时的寄存器体选择位。即00——选中Bank0(00H~7FH);01——选中Bank1(80H~FFH),16F84只有两个存储体。故10、11不用。 7)第7位IRP。这是间接寻址的寄存体选择位。0——选中Bank0、1(00H~FFH),1——选中Bank2、3。16F84只有Bank0、1,所以此IRP位应被置为0。 (3)间接寻址INDF和FSR寄存器INDF寄存器不是一个物理寄存器,而是一个逻辑功能的寄存器(地址为00H或80H),当对INDF寄存器进行寻址时,实际上是访问FSR寄存器内容所指的单元,即把FSR寄存器作为间接寄存器使用。FSR称为“寄存器选择”寄存器,地址为(04H或84H)。对INDF寄存器本身进行间接寻址访问,将读出FSR寄存器的内容,例如当FSR=00H时,间接寻址读出INDF的数据将为00H。用间接寻址方式写入INDF寄存器时,虽然写入操作可能会影响STATUS中的状态字,但写入的数据是无效的。 以上便是小编此次为大家带来的“pic单片机”相关内容,希望大家通过本文可对pic单片机的内部硬件资源有所了解。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-11-07 关键词: 寄存器 pic单片机 内部硬件资源

首页  上一页  1 2 3 4 5 6 7 8 下一页 尾页
发布文章

技术子站

更多

项目外包