当前位置:首页 > pic单片机
  • pic单片机最强应用篇,采用pic单片机设计红外夜视仪

    pic单片机最强应用篇,采用pic单片机设计红外夜视仪

    pic单片机已是老生常谈的话题,对于pic单片机,大家也不再陌生。为增进大家对pic单片机的认识,本文将为大家带来pic单片机的实际应用篇。本文中,主要在于讲解如何利用pic单片机实现红外夜视仪设计。如果你对本文内容具有兴趣,不妨继续往下阅读哦。 随着汽车市场的快速发展和安防意识的日益强化,人们对汽车安全保障技术的要求越来越高,而现有汽车照明系统在雪夜、雪天或大雾等能见度较低情况下视距不远、效果不佳的弊病成为汽车行驶的安全隐患之一。更严重的是在夜晚行车时,驾驶员通常会被对方车辆的灯光干扰出现盲区,容易发生车祸。夜视系统却可以在黑暗中帮助驾驶员导航,使驾驶员在有灯光和黑暗两种情况下都能看清驾驶环境。因此开发一种结构简单、性能稳定、可靠性好、适用性强的汽车红外夜视系统,具有重要的市场应用前景。 1 系统总体设计 1)系统原理 根据工作原理的不同,红外夜视系统分为被动红外夜视系统和主动红外夜视系统。主动红外夜视系统利用其所携带的红外光源主动照射目标,由光学系统的物镜接收目标反射回来的红外辐射,并在红外变像管的光阴极面上形成目标辐射的红外图象。变像管对目标的红外图像进行光谱转换和亮度增强,最后在荧光屏上显示出目标的可见光图像,人眼可通过目镜观察增强了的目标图像。考虑到使用的耐久性、经济的合理性、器件的通用性等等,大多选择主动式红外夜视系统作为车载系统。 根据功能目标和设计要求,本系统主要由红外照射灯、CCD摄像机、视频处理系统及车载显示器组成。 2)硬件设计 (1)摄像机选定 摄像机又称摄像头或CCD,它能够将光线变为电荷并可将电荷储存及转移,也可将储存的电荷取出使电压发生变化,是理想的摄像元件。其工作原理为:被摄像体反射光线,传播到镜头,经镜头聚焦到CCD芯片上,CCD根据光的强弱积聚相应的电荷,经周期性放电,产生表示一幅幅画面的电信号,经过滤波、放大处理,通过摄像头的输出端子输出一个标准的复合视频信号。此处选择WAT-902H2型摄像头作为摄像机。它具有摄像效果好、易检修、经济实惠的优点。 (2)红外照射部分的设计 选用远红外激光器作为光线发射器。它是一种单色性好、光束集中,体积小、寿命长、电光转换效率高的激光发射器。由光纤耦合半导体激光器、驱动电路、温控电路和光束整形镜头组成。核心部分为驱动电路设计。选用DD312作为驱动芯片,它是一款专为大功率LED所设计的单通道恒流驱动芯片,为电流吸人式架构,可提供最大1A的恒流输出,并支持使能端开关功能,单片机指令信号通过光耦加到DD312的使能端,控制激光器的开关。驱动电路见图1。 (3)电源模块的设计 系统中显示器、单片机、MAX487通信芯片、CCD摄像机、激光发射器驱动电路都需要电源供电。其中单片机、DD312驱动芯片要求电源电压比较稳定、纹波小、电磁干扰小。采用LM2576模块为单片机以及DD312驱动芯片提供稳压电源(图2)。MAX4877芯片工作电压比较高,范围比较宽,采用NW1-05S05S功率变换模块为之提供电源。 (4)控制系统的设计 采用PIC16F877A、PIC16F876A两种单片机作为系统的控制芯片,整个控制系统也即为一个小型的传动系统。其中PIC16F877A单片机作为传动系统的初始端,负责数据采集和“记忆”按键;MAX487芯片为通信芯片,负责接收和传递信号。PIC 16F876A单片机作为传动系统的接收端,控制电机的转动。 ①初端 该部分核心是PIC16F877A单片机。它是由美国Microchip公司生产的8位单片机,具有独特的RISC结构,数据总线和指令总线分离的哈佛总线结构。它连接各个终端设备,响应主控机发送来的查询命令,并将被测设备的状态信息回送给主控机。单片机的I/O口与被测设备的终端相连,以获取所需状态信息。电路分为三部分:数据采集电路(图3)、LED显示电路、按键电路。 单片机2脚外接温度传感器,将系统实时温度变化信号传递给单片机;3~7脚外接LED显示电路,引脚低电平信号接通时,相应的LED变亮;8、9脚外接激光器驱动电路,对激光器状态进行检测;19脚外接半导体制冷器,搜集信息,并决定是否触发半导体制冷器工作;22、25、26脚接通信电路,向主控芯片传递信号;27~40脚为云台和镜头按键检测信号,当操作人员按面板上的按键时,单片机通过这些端口接收到按键信号,通过通信电路将这些信息发送到主控芯片,主控芯片收到信号后进行分析、控制,执行相应的命令。 ②通信电路 通信电路连接传动系统的初始端和接收端,主要功能是实现信号的接收与传递。采用MAX487芯片,它是一款用于通信的低功率半双工收发器件,内部集成了一个驱动器和接收器。初始端首先对信号进行编码,接收端对信号进行解码,同时为了消除干扰,采用光耦对电路进行了隔离。见图4。 ③末端 末端控制芯片采用PIC 16F876A单片机。RA0-RA5、RC0、RC1引脚分别为检测云台上到位、下到位、左到位、右到位、上复位、下复位、左复位、右复位的八个信号输入端口;RB0-RB7为控制镜头焦距、放大、云台上下左右转动的八个端口,外接继电器电路控制电机转动。如图5所示。 3)软件设计 整个系统软件分为主控机PIC 16F876A端和从控机PIC16F877A端。除了通信接口部分的软件以外,主控机端软件还包括用户界面、数据处理等。从控机端软件包括数据采集和MAX487通信程序。从控机端通信接口软件流程如图6所示。 2 实验结果 图7为高速公路拍摄到的图片。其中a为不使用夜视系统时的图片,b为使用夜视系统时的图片。实验结果证明:此系统能使司机在黑暗中准确辨认前方的道路,减少交通事故。 3 结束语 本文利用PIC单片机,设计了一整套红外夜视系统,具有结构简单,可靠性高等优点。特别适用于长途车驾驶,可以有效减少交通事故,具有十分良好的社会效益。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对如何采用pic单片机设计红外夜视仪具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-09-22 关键词: pic单片机 指数 红外夜视仪

  • 帮你搞定pic单片机难点,pic单片机硬件死锁问题探讨

    帮你搞定pic单片机难点,pic单片机硬件死锁问题探讨

    pic单片机如火如荼,因此学习pic单片机的朋友越来越多。但随着pic单片机的使用,大家可能会遇到各种各样的pic单片机相关问题。为帮助大家解决pic单片机应用难点,本文将对pic单片机硬件死锁问题予以讲解。如果你对pic单片机具有兴趣,不妨继续往下阅读哦。 1、频繁插拔电时,PIC单片机容易死机。用一个10K电阻并在LM7805的5V输出端到地。 2、单片机的复位端的电容不能太大。 使用PIC单片机去设计工控电路,最头痛的问题,就是 PIC 单片机在受干扰后经常硬件死锁,大部份人归咎于“CMOS的可控硅效应” 因而产生死锁现象,一般都认为“死锁后硬件复位都是无效的,只有断电”。但是一个成熟的商品,那须要你去断电呢? 就好像一台电冰箱,压缩机一启动,产生干扰, CPU 受干扰因而‘硬件死锁’,死机在那儿,假如发现了,可以马上拔掉电源插头,隔几秒再插回,如此的动作可以接受吗?假如死机时没发现,死机几十天,你猜它会如何呢? 应该是供给CPU电源的稳压IC烧毁了。 PIC单片机为什么会硬件死锁,PIC单片机在受干扰后经常硬件死锁,那么PIC要‘看门狗’有何用,有没有人深入去探讨其原因,在各 PIC 单片机论坛也提得很多,各有各的观点,总具体的原因不外是“CMOS的可控硅效应”而产生死锁现象, 依我各人的观点,应与 “CMOS的可控硅效应”无关,但很多大虾皆认为是“CMOS的可控硅效应”所引起的,所以一直以来我也不方便提出,说不定是我的观点错误,提出来反而误了大家,但至今,针对PIC 单片机产生死锁现象,都还没有详细的原因说明及对应之道,在别的PIC 单片机论坛也还在提此问题,我就将本人找寻PIC ‘死锁现象’的经过提供大家参考。 许久年前,PIC16C5x刚出产一两年,(PICxxxx 原先只有165x,属于NMOS结构,大量用于通用-GI的选台器、有线电视解锁器,后来改为CMOS结构,更名为16C5x),当时只有 16C54、55、56、57 四个型号,仿真器只有顶尖公司制造的 16C5x DOS版仿真器(第一代),它也是 Microchip 第一个OEM仿真器厂。16C5x 当年为最省电的OTP、QTP 单片机,价格又比其它的单片机便宜,只是它很容易受干扰死机,很多大厂不敢使用它。有一天,有位朋友要我兼差帮他们公司设计汽车防盗器,当时市场上的汽车防盗器都还用CD40xx的逻辑电路去设计,各个时控都须一组RC电路,电路板上十几个IC(加上遥控解码IC),至少有7~8个VR,调整时非常复杂,当时我就以一个16C55+一个ULN2003+一个解码IC (当时技术未成熟,还没用PIC程序解码,后期的已将解码IC省略),总计三个IC就解决,电路方面有某些是依书本上的电路移植过来(重置电路也由一本 PIC 应用的书本移植过来),样品出来后,当时对方存着很多疑问,电路怎么这样简单,同时间内有4、5个‘计时器’在计时,又要做那么多的I/O侦测工作,时控能准确吗? 性能如何呢? 稳定性?总体而言, CPU所设计的电路, 对于功能-绝对是比逻辑电路所设计的好太多了,时控的准确性-我为它保证所有的时控误差在1%之内, 至于稳定性----当时的样品时常当机、死机,CPU 发烫,也就是大家所谈的PIC的硬件死锁。 为了此问题(大家最怕的问题),找遍所有的资料,都毫无所获,在PIC的书上都没有看到类似讯息,只好自己单打独斗的去奋斗、去找原因。我花了几天的时间,模拟了各种状况,做了各式各样的实验,制造各种干扰,用示波器测量各点所发生的异常波形。 其中一个简单的实验,(/MCLR 的接脚上,接一个提升电阻至 V+,接一个 0.1uf至地,接一个按键开关至地),让我得到一个我所需要的答案,实验时我多次的按按键开关,应该只是重置而已,但很容易进入所谓的‘硬件死锁’,连续测试,都会重覆发生,机率非常高,最后得到一个答案,PIC晶片的MCLR硬件设计有问题,与其他I/O脚无关联,不是 I/O 脚受干扰, 而是/MCLR 在重置或受干扰时,/MCLR 脚会产生一个振荡信号,当/MCLR 脚的外部接有电容时,它就永在发振,而PIC晶片内部某种硬件原因,导致于VDD与VSS之间产生很大的电流,所以VDD与VSS像短路一样,CPU因而发烫,当把电容移开后, CPU就重新工作,耗电流也就恢复正常了,所以我就认为PIC它不是硬件死锁,它没CMOS的可控硅效应,可能是大家还没找出原因,而怀疑是PIC内部CMOS的可控硅效应。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机硬件死锁问题的解决方法具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-09-22 关键词: 死锁 pic单片机 指数

  • 深入理解pic单片机,pic单片机PAGE、BANK讲解

    深入理解pic单片机,pic单片机PAGE、BANK讲解

    pic单片机在现实中使用很多,诸多应用都是基于pic单片机设计完成。电子相关专业的朋友对于pic单片机自然十分熟悉,为增进大家对pic单片机的认识,本文将继续为大家介绍pic单片机。本文中,小编将对pic单片机的PAGE和BANK予以阐述。如果你对pic单片机具有兴趣,不妨继续往下阅读哦。 从PIC单片机的指令结构上来分析一下为什么PIC中要有BANK和PAGE的设置吧。先来看一下为什么PIC中要把RAM区划分多个BANK。 仔细观察PIC单片机汇编语言指令的格式,一条完整的汇编语言指令语句通常是这样的:标号操作码助记符操作数1,操作数2;注释。其中,主体部分是‘操作码助记符操作数1,操作数2’。 例如: 指令:MOVF 33,1 操作码助记符:MOVF ; 操作数1:33 ; 操作数2:1 ; 而在程序被编译时指令语句的主体部分会被转换为代码的形式,通常是:指令代码操作数2 操作数1。 例如在指令位数为14位的中档PIC单片机中: 指令:MOVF 33,1 转换后代码:00 1000 1 011 0011 其中指令代码为:00 1000(MOVF f,d=00 1000 dfff ffff); 操作数2:1 (d = 1); 操作数1:011 0011 (f = 33H) ; 可以看到,由于指令代码占用了6位,再加上操作数2占用的1位,分配给操作数1的只有7位了。也就是说操作数1最大只能是‘111 1111’(7FH),因此‘MOVF’直接的寻址范围只能是00H~7FH之间。其它的对寄存器操作的指令情况基本相同,因此指令位数为14位的PIC单片机将每125个(00H~7FH,80H~FFH……依此类推)寄存器划分为一个BANK,并且将STATUS寄存器的RP1、RP0为定为BANK设置位。在编写程序时,要对某个寄存器进行操作就首先要对BANK的设置位进行设置,从而切换到该寄存器所在的BANK。 例如PIC16F877单片机的EECON1寄存器(地址18CH)就要通过设置BANK的形式来寻址了,这时寻址的地址数据是这样组成的‘BANK值+操作数1’,其中‘BANK值’=‘RP1 RP0’。 举个例子来说: 指令:BSF EECON1,1 ; 指令转换后代码:0101 001 000 1100 ; 这时如果‘BANK值’=3,寻址的地址数据就会是‘11 +000 1110’(18CH);而此时如果BANK值为0,则寻址的地址数据就会是‘00 +000 1110’(0CH),这样就出现了错误。 用同样的方法我们可以分析PIC单片机的PAGE的设置。举个例子,PIC16C5X的一个页面是512条指令。它的‘GOTO’指令是这样的:‘101 k kkkk kkkk’(‘GOTO’指令没有操作数2)。我们看到该指令的操作数1最大只能是‘1 1111 1111’(1FFH),因此在指令位数为12位的PIC16C5X 芯片中‘GOTO’指令只能在512条指令(000H~1FFH,200H~3FFH,……)的范围内直接跳转。同样的理由,PIC16C5X的‘CALL’指令(‘1011 kkkk kkkk’)只能调用256条指令(000H~0FFH,200H~2FFH,……)范围内的子程序,因此在进行PIC16C5X单片机的编程时要将供调用子程序的入口放在前半页面。 而在指令位数为14位的PIC16F87X单片机中‘GOTO’指令代码是‘101 kkk kkkk kkkk’,而‘CALL’的指令代码是‘100 kkk kkkk kkkk’,它们的寻址范围都是‘111 1111 1111’(3FFH)。因此在PIC16F87X单片机中,一个页面长度就是3FFH=2048条指令(2K)。而且在使用中,使用‘CALL’指令时就不需要将子程序入口放在上半页面了。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机的PAGE、BANK具备初步的认识。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-09-22 关键词: 单片机 pic单片机 指数

  • pic单片机实际应用,基于pic单片机实现IC卡读写器(下)

    pic单片机实际应用,基于pic单片机实现IC卡读写器(下)

    对于pic单片机,大家都很熟悉,pic单片机是诸多类型单片机中最为受用的一款。本文是《pic单片机实际应用,基于pic单片机实现IC卡读写器(上)》的余下内容。如果你对pic单片机具有兴趣,抑或对pic单片机的应用充满好奇,不妨继续往下阅读哦。 1. IC卡 IC卡是集成电路卡(Integrated Circuit Card)的简称,有些国家和地址称其为智能卡(Smart Card)、芯片卡(Chip Card)。国际标准化组织(ISO)在ISO7816标准中规定,IC卡是指在由聚氯乙烯(PVC)或聚氯乙烯酸脂(PVCA)材料制成的塑料卡内嵌入式处理器和存储器等IC芯片的数据卡。近年来,由于导半体技术的进步,集成化程度和存储器容量有了很大提高,并使CPU和存储器集成在一个芯片上,从而提高了数据的安全性。 在本设计中,IC卡采用的是AT45DB041B-SC芯片,该芯片的特点如一下: *单一的2.7V~3.6V电源; *串行接口结构; *页面编程操作,单一的循环重复编程(擦除和编程,2048页(每页264字节)主存; *两个264字节的SRAM数据缓存,允许在重编程非易失性存储器时接收数据; *内置的编程和控制定时器; *低功耗,4mA有源读取电流,2μA CMOS备用电流; *15MHz的最大时钟频率; *串行外围接口方式(SPI)——模式0和3; *CMOS的TTL兼容的输入和输出; *5.0V可承受的输入,SI、SCK、CS(低电平有效)、RESET(低电平有效)。 在本设计的调试过程中,曾测试过IC卡的输入输出电平,结果证明这种IC卡的输入电平与TTL兼容,而输出电平与TTL不兼容。 2. IC卡的电源提供电路 在本设计中,由于IC卡的电源电压范围为+2.7~+3.6V,而PIC单片机需要的电源为+5V,而且稳压源提供的电压也是+5V,因此,要设计一个稳压模块,给IC卡提供+3V左右的电压。设计电路如图3所示。 该电路的主要元件为LM317芯片,它是三端可调集成稳压器,输出电压为1.25~37V范围内可调。当其Vin端的输入电压在2~40V范围内变化时,电路均能正常工作,输出端Vout和调整端ADJ间的电压等于基准电压1.25V。该芯片内的基电路的工作电流IREF很小,约为50μA,由一个恒流性很好的恒流源提供,所以它的大小不受供电电压的影响,非常稳定。在图3中,B点为电压输出端,为IC卡提供电压。A点为控制端,与单片机的一个端口引脚相连,当该引脚为低电平时,三极管Q1不工作,B点输出电压约为3.15V;当该引脚为高电平时,三极管Q1工作,B点输出电压约为1.25V。在程序中查询IC卡插座中是否有IC卡,当有IC卡时,将A点所连的单片机引脚设置为低电平,从而为IC卡提供电源;当没有IC卡或对IC卡的操作结束时,将A点连的单片机引脚设置为高电平,从而不给IC卡提供电源。 IC卡的上电和下电程序如下。 IC卡上电子程序 IC卡下电子程序 POWERON POWEROOF BSF STATUS,RP0 BSFSTATUS,RP0 BCF TRISE,0 BCF TRISE,0 BCF RTISE,1 BCF TRISE,1 BCF STATUS,RP0 BCF STATUS,RP0 BCF PORTE,0 BSF PORTE,0 BCF PORTE,1 BSF PORTE,1 CALL DLYTIM CALL DLYTIM RETURN RETURN 在本设计中,单片机与IC卡通信的主程序流程图如图4所示。 3. 与PC机的通信 在本设计中,有PIC单片机与PC机串行通信的功能。由于本设计所用的单片机PIC16F877有USART方式,该方式可将C口的RC5和RC7设置成异步串行通信模式,因而在本设计中,与PC机的通信模块电路就比较简单。将单片机C口的RC6和RC7设置为异步串行通信模式,经过MAX232A芯片进行电平转换后,将TTL电平转换为RS232电平,再与DB9接口相连,即可实现通信。在PC机端,可以用VC等编程工具根据通信协议编写软件来控制对IC卡的读写操作。 4. 结论 经过调试,本设计能够在脱离在线仿真器的情况下,上电后独立的运行程序,并能在PC机软件的控制下,实现对IC卡中任意位置的读写,其中读写的起始地址、读写数据的个数以及数据内容可以在PC机端输入或选择。 本设计已在实际应用中测试过,具有实用价值。由于本设计中所使用的PIC单片机的程序存储器较大(8KB),因而可以编写较大的程序,实现多合一该卡器并由PC机控制读写哪种芯片的IC卡。另外,由于本设计所使用单片机的程序存储器是Flash存储器,因而可以方便地实现程序的下载和升级。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对本文的设计具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-08-17 关键词: ic卡读写器 pic单片机 指数

  • pic单片机实际应用,基于pic单片机实现IC卡读写器(上)

    pic单片机实际应用,基于pic单片机实现IC卡读写器(上)

    采用pic单片机,我们可以实现诸多应用。往期中,小编对pic单片机的诸多基础知识以及pic单片机的一些应用均有所介绍。为帮助大家增进对pic单片机的认识,本文将介绍如何基于pic单片机实现IC卡读写器。本文仅为上篇,剩余内容请翻阅下篇。 0. 引言 本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。 图1是本设计的电路图,图中电源变换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通信数据线的保护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,从而保证数据线上的电压在0V~+5V之间,保护单片机和IC卡不受损坏。图中单片机的15脚和23脚分别与IC卡的输出引脚3和4相连。由于IC卡的输出电压为CMOS电平,而单片机能够正确的识别IC卡的输出信号,需要加上拉电阻。 1. SPI工作方式 串行外围设备接口SPI(Serial Peripheral Interface)总线技术是Motrola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件能力很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其它事务,因此得到广泛应用。 SPI模式允许8位数据同步发送和接收,支持SPI的所有四种方式。SPI模式传输数据需要四根信号线:串行数据输出(SDO)线、串行数据输入(SDI)线、串行时钟(SCK)和从选择(SS)。其中,从选择线只用于从属模式。 1.1 SPI主模式 由于控制时钟SCK的输出,主模式可以在任何时候开始传输数据。主模式通过软件协议控制从模式的数据输出。 在主模式中,一旦SSPUF寄存器写入,数据就会发送或接收。在接收数据时,SSPSR寄存器按照时钟速率移位,一旦接收到一个字节,数据就传输到SSPBUF,同时中断标志位和状态标志位置位。 时钟的极性可以通过编程改变。在主模式中,时钟SCK的频率可以设置为:fosc/4(即Tcy)、fosc/16(即4Tcy)、fosc/64(即16Tcy)和定时器2(TImer2)输出的二分频等四种。在芯片时钟为20MHz时,SCK的最大频率为5.0MHz。 在本设计中,使用的就是SPI主模式,由单片机控制时钟SCK的输出。当向IC卡中写数据时,随时可以发送数据;当读IC卡内的数据时,先要发送任意一个数据(此时IC卡不处于写入状态,不会接收该数据),给IC卡提供输出数据的时钟,然后再接收IC卡发出的数据。其时序如图2所示。(发送和接惦的数据均为6FH) 如果要连续发送数据,那么每次将数据送到SSPBUF寄存器后,都要判断是否已经发送完该数据,即判断PIR1寄存器的SSPIF位是否为1。如果SSPIF位为1,则表明数据已经发送完毕,可以继续发送下一个数据。但此时还不能立即发送下一个数据,因为SSPIF位必须在程序中由软件清零,只有将SSPIF位软件清零后,才能继续发送下一个数据。 1.2 SPI从模式 在SPI从模式,数据的发送和接收领先SCK引脚上输入的外时钟脉冲,当最后一位被锁存后,中断标志位SSPIF(PIR1的D3)位。在休眠模式,从模式仍可发送和接收数据,一旦接收到数据,芯片就从休眠中唤醒。如果采用SS控制的从模式,当SS引脚接到VDD时,SPI模式复位;如果 彩CKE=1控制的从模式,必须开放SS引脚控制。 在本设计中,由于IC卡是存储器卡,不能提供时钟信号,因此不能采用从模式,只能采用主模式,由单片机控制时钟信号。 单片机的SPI方式初始化程序如下: MOVLW20H ;将20H送到累加器 MOVWF SSPCON ;将累加器中的数送到SSPCON寄存器 BSF STATUS,RP0 ;将定RAM区的第1页 BCF SSPSTAT,SMP ;将SSPSTAT寄存器的SMP位置0 BSF SSPSTAT,CKE ;将SSPSTAT寄存器的CLK位置1 BCF TRISC,3 ;将端口C的第3位设置为输出 BCF TRISC,5 ;将端口C的第5位设置为输出 其中,上述第1、2行程序是配置控制寄存器,将SPI方式配置为主控模式,时钟频率为单片机时钟频率的1/4,并将时钟的高电平设置为空闲状态。第3行程序为换页指令,将指针转到第1页。因为PIC16F877单片机的数据存储器是分页的,而所要操作的寄存器在第1页,因此要用换页指令将指针到第1页。第4、5行程序是配置状态寄存器,将SPI方式设置为数据输出时钟的中间采样,时钟SCK的上升沿触发。第6、7行程序则是将RC口的RC3和RC5设置为输出。 2. USART方式 通用同步异步接收发送模块(USART)是两个串行通信接口之一,USART又称为SCI(Serial CommunicaTIon Interface)。USART可以设置为全双工异步串行通信系统,这种方式可以与个人计算机PC或串行接口CRT等外围设备进行串行通信:也可以设置为半双工异步串行通信系统,与串行接口的A/D或D/A集成电路、串行EEPROM等器件连接。USART是二线制串行通信接口,它可以被定义如下三种工作方式:全双工异步方式、半双工同步主控方式、半双工同步从动方式。 为了把RC6和RC7分别设置成串行通信接口的发送/时钟(TX/CK)线和接收/数据(TX/DT)线,必须首先把SPEN位(TCSTAT的RD7)和方向寄存器TRISC的D7:D6置1。 USART功能模块含有两个8位可读/写的状态/控制寄存器,它们是发送状态/控制寄存器TXSTA和接收状态/控制寄存器TCSTA。 USART带有一个8位波特率发生器BRG(Baud Rato Generator),这个BRG支持USART的同步和异步工作方式。用SPBRG寄存器控制一个独立的8位定时器的周期。在异步方式下,发送状态/控制寄存器TXSTA的BRGH位(即D2)也被用来控制波特率(在同步方式下忽略BRGH位)。 向波特率寄存器SPBRG写入一个新的初值时,都会使BRG定时器复位清零,由此可以保证BRG不需要等到定时器溢出后就可以输出新的波特率。 对USART方式进行初始化的程序如下: BSF STATUS,RP0 ;将指针指向数据存储器的第1页 MOVLW 0x19 MOVWF SPBRG ;设置波特率为9600 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 CLRF RCSTA ;将接收控制和状态寄存器清零 BSF RCSTA,SPEN ;串口允许 CLRF PIR1 ;清除中断标志 BSF STATUS,RP0 ;将指针指向数据存储器的第1页 CLRF TXSTA ;将发送控制和状态寄存器清零 BSF TXSTA,BRGH ;设置为异步、高速波特率 BSF TXSTA,TXEN ;允许发送 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 BSF RCSTA,CREN ;允许接收 初始化完成后,即可发送或接收数据。在发送或接收数据时,通过查询发送/接收中断标志位即可判断是否发送完一个数据/接收到一个数据。发送/接收中断标地不需要也不有用软件复位。 在异步串行发送的过程中,只要TXREG寄存器为空,中断标志TXIF就置位。因此,TXIF为1并不是发送完毕的标志,但仍可以用TXIF标志来判断。因此当TXREG为空时,将数据送入后,数据会保留在TXREG寄存器中,直到前一个数据从发送移位寄存器中移出,即前一个数据发送完。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对介绍的知识具备一定的了解,本文剩余内容参考下篇。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-08-17 关键词: ic卡读写器 pic单片机 指数

  • 一步步搞定pic单片机,pic单片机开发环境介绍

    一步步搞定pic单片机,pic单片机开发环境介绍

    pic单片机的使用十分广泛,pic单片机无论在校内还是职场,都十分受用。对于pic单片机,小编于往期文章中做过诸多介绍。为增进大家对pic单片机的了解,本文将对pic单片机开发环境以及pic单片机的引脚3状态予以讲解。如果你对pic单片机具有兴趣,不妨继续往下阅读哦。 一、pic单片机开发环境 1.pic单片机的开发环境常用的是MPLAB, MPLAB可以从微芯公司网站上下载;这个开发环境自带的是汇编程序的编译器,如果想用C语言做开发,那么需要下载相应的C语言编译器并安装,配套的C语言编译器为 MPLAB-C18, 可以从微芯公司网站上下载。 2.首先下载好MPLAB和MPLAB-C18两个软件并解压。 首先安装MPLAB,解压好的MPLAB如下图所示: 双击setup,前半部分直接点击next即可,到中间部分会出现如下图所示的选择框: 这里可以选择是,后面的点击next即可。MPLAB安装完成之后,重启系统(这一步很重要)。 接着安装 MPLAB-C18 ,解压之后的文件夹里面会有一个 图标,双击运行这个文件,前面点击next即可,尽量不要修改安装路径(否则可能出现不必要的麻烦),到下面这幅图片所示的位置按图片上的选择: 点击next会到下面的界面,按下图勾选: 然后继续点击next直至完成。 MPLAB-C18 安装完成之后需要检测一下,检测的方法是打开MPLAB--》project--》set language Tool Locations--》microchip C18 Toolsuite--》展开此项--》出现executables--》展开executables检查下图所示的后三项的路径是否正确,鼠标点击到相应的项之后路径会在下方的locaTIon方框中列出来。 如果都确定无误,那么C18安装成功。 3.建立一个PIC的工程 1)新建工程:project--》project wizard.。。--》下一步--》选择芯片型号--》下一步--》AcTIve Toolsuiite--》选择为Microchip C18 Toolsuites--》下一步(有一个项目前面是一个红色的叉,点击下一步会弹出对话框,可以在刚出来的默认选项中(也就是MPASM Toolsuite下)将路径复制粘贴到下面即可)--》下一步--》点击browse选择一个已经存在的文件夹打开这个文件夹--》填写工程名(mcp作为后缀,尽量不要包含中文路径)--》下一步--》不用添加文件到工程直接接着点下一步--》完成。 2)新建一个file,然后保存为.c文件。 3)点击view--》project即可显示出来工程的相关文件夹。 4)点击source文件夹右键添加:将刚才保存的.c文件添加到这个文件夹。 5)点击Linker文件夹右键添加:c18安装文件夹lkr文件夹--》单片机型号(如果程序编好用来icd2调试单片机型号+i,不用icd2来调试不要加i,直接单片机名就行)。 6)配置位的设置(configure--》select bits):将ConfiguraTIon前面的勾去掉,如果不去掉勾的话(可以再程序中写语句完成等这个配置),第一项(时钟)4M是分界点,高于4M选择HS,等于4M中间XT,低于4m选择LP;第二项上电TImer:enable;电源电压降低(disable);看门狗定时器(disable);低电压编程:disable。然后确定即可。 二、pic单片机引脚的三种状态 pic单片机的引脚有三种状态:接地、接高电平和悬空。最近做编码时试验了pic的这个功能,相对51来说方便很多,可以不用类似PT2262这样的编码芯片。要识别引脚的状态,只要对某个引脚先写高电平然后读取引脚值,再写低电平然后再次读取引脚值就可以了,根据两次读出的结果就可以判断引脚状态了。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机的开发环境以及pic单片机的引脚3状态具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-08-17 关键词: 开发环境 pic单片机 指数

  • PIC单片机之通信协议

    PIC单片机之通信协议

      当人们晚上迷失在野外手上只有一个手电筒,此时有直升机飞过。人们用手电筒发出三短三长三短的光线。用这个国际通用的SOS求救信号,告诉飞行员来救你。人们规定的三短三长三短的光线,代表SOS就是一种通讯协议。   单片机处理通讯协议的方法其实也类似。只不过用的不是光线而是电平。比如我们完全可以模仿SOS求救信号的方法。来创造属于自己的通讯协议。   例如:我们模仿SOS ,用高电平代替亮,用低电平代替暗。10MS(毫秒)为短,20MS为长。A单片机从一个I/O输出如下的电平。可以看出单片机输出了三短三长三短的的高电平。 B单片机从一个I/O接收如下的电平。当B单片机接收到信号的后,就可以根据程序做任何事,这个信号的代表什么,可以是SOS,可以开启一些设备,可以是一切的意思。A单片机可以运用这个协议,命令B单片机做任何事情。只要我们自己编程前先确定好就行。   所以说协议本身是很随意的,只要发送和接收双方事先规定好就行了。但是如果每家公司,每个人都定一个通信协议。这样协议就太多太乱。所以规定了几种通用的协议如USART,I2C,SPI,这样通信协议就能规范了。   我们稍稍讲解下关于通信协议的几个专业术语:   串行通讯和并行通讯。   如果我们手上有8个苹果,我们想丢给另一个人。你可以一个个丢,丢完一个再丢另一个,这就是串行通讯。你可以8个一起丢,这就是并行通讯。只是对于单片机丢的不是苹果而是位(bit)。   串行通讯只用一个数据(Data)线,发送数据所以只能一个个位的发送。   并行通讯要同时传递多少个位的数据,则用多少个数据线。   全双工通讯和半双工通讯。   简单的来说:比如两个人聊天,如果A说话,B只能听,B说话,A只能听。A 和B两个人不能同时说话,只能一方发出信息,另一方接收信息。双方不能同时发出信息这就是半双工。   如果两个人聊天,两个人可以同时说话,可以同时听。双方都以同时接收和发送这就是全双工。   异步和同步。   对于单片机而言,如果在同一个时钟下,动作和步调都是一致同步的。   如果不在同一个时钟下,动作和步调是不一致的是异步的。   如果想让两个单片机,进行同步通讯,就必须工作在同一个时钟下。所以它们之间连接着时钟线。如果它们之间没有时钟线连接,则说明是异步通讯。

    时间:2020-08-05 关键词: 通信协议 pic单片机

  • 基于PIC32单片机的经典设计汇总

    基于PIC32单片机的经典设计汇总

    PIC单片机是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统,应用十分广泛,本文就为大家介绍基于PIC32位单片机的经典应用汇总,供大家参考。 基于PIC32的无线自助点菜系统的实现,包含原理图及电路图 本设计目的是为餐饮服务业提供一款基于PIC32的自助点菜系统——一种不需要服务员的点菜系统;除此之外,本系统还为顾客提供催菜、缓菜、查看账单和呼叫服务员等服务。该点菜系统一方面能减轻服务员的任务,减少服务员的人数,为商家降低人力成本;另一方面也能为顾客提供更全面和及时的服务,提高顾客消费的便利性、舒适性。 PIC32单片机在气相色谱仪中应用方案,软硬件协同 本文设计一种基于Microchip 的PIC32系列单片机,通过移植ucos嵌入式操作系统设计一个控温、恒温、线性升温等指标能达到国外先进产品水平的气相色谱仪方案。使该气相色谱仪能实现了8阶以上线性控温,升温曲线上冲小,小于200摄氏度时误差可低于+_0.1°C之内,大于200摄氏度时误差可在+_0.1°C范围内。 基于PIC32的太阳能热水器恒温混水装置 本文通过PIC32单片机,设计出能自动调节,稳定出水,水温恒定的数字混水阀,让太阳能热水器的使用更加便利舒适,同时还能减少水资源的浪费。 基于PIC32嵌入式USB工业U盘系统设计 针对现在U盘无法脱离PC机使用的局限性,工业现场许多嵌入式系统没有提供USB接口和文件系统操作功能,本模块使用PIC32 Starter KitsⅡ通过RS232接口实现现有嵌入式系统对U盘的操作。包括数据文件的写入、读取以及文件目录的创建和删除等。 基于PIC32的嵌入式Web服务器的物联网实现 本文实现一个基于PIC32位单片机的可移植并且高度可配置嵌入式Web服务器。嵌入式Web服务器可用于现在流行的物联网的各个方面,例如,传感器网络监控,工业机器监控,小型Web服务器,远程信息交互等应用领域。 基于PIC32的高性能扫频调谐频谱分析仪设计方案 本文涉及的扫描调谐频谱分析仪基本结构类似超外差式接收器,工作原理是输入信号经衰减器直接外加到混频器,可调变的本振信号经混频器与输入信号混频降频后的中频信号(IF)再放大后经AD采样显示。 基于PIC32的医院新生婴儿防盗系统设计 本项目主要是完成具有防错抱、防被偷及门禁功能的新生婴儿防盗系统研究与实现,实现与医院网络连接,并和医院的包围中心进行联动;加入电子温度感应,对新生婴儿进行体温测量,防止婴儿发烧或者低烧,发现较晚引起不良的结果。 基于PIC32单片机的新型LED点阵显示控制系统设计 本系统借助PIC32系列单片机的强大功能,在控制模块内部集成字符生成LED点阵代码软件,按照自己规定的简明字符对照表,由键盘输入任意字符标号,系统识别后实时生成对应该字符的LED点阵显示代码,并将代码存储后用于显示。 基于PIC32上实现的TCP/IP网络协议和zigbee无线传感器网络的智能家居系统 在项目设计中我们将智能家居内部的传感器网络连接至控制核心PIC32,PIC32通过控制网络模块,按照TCP/IP协议来实现PIC32的Web服务器功能,使得可以通过手机、电脑的浏览器来远程访问该web服务器,并以点击链接的形式,控制用电器。 DIY之乐:基于PIC32的以太网音箱设计案例,硬件框图、器件选型、数据结构、软件流程 本项目使用PIC32 Ethernet Starter Kit,利用PIC32 Starter Board PIM Adapter外接DA驱动底板。利用以太网通信传输MP3码流和基于PIC32的高性能软解码MP3文件,利用SPI接口驱动DA输出模拟信号,实现了高效、高质量、低成本的以太网音箱。 基于PIC32的铁路隧道监测系统 本系统采用PIC32处理器构建铁路隧道监测系统,具有集成度高、处理速度快、实时监测等优势。PIC32处理器工作频率高达80MHZ,具有32位处理宽度、32K RAM、并带有10位、500ksps A/D等性能,能够减少产品的外围器件,增强系统稳定性,降低系统成本。

    时间:2020-07-29 关键词: pic32 pic单片机

  • 如何选用pic单片机?pic单片机或运算符如何使用?

    如何选用pic单片机?pic单片机或运算符如何使用?

    pic单片机对于大家早已不再是琢磨不透的大山,随着pic单片机的使用,大家对pic单片机的认识逐步增加。为进一步增进大家对pic单片机的了解,本文将基于两点对pic单片机予以阐述:1.如何挑选合适的pic单片机,2.pic单片机或运算符运用。如果你对本文内容具有一定兴趣,不妨继续往下阅读哦。 一、pic单片机挑选 刚开始使用pic单片机的开发人员,建议使用PIC16F系列的芯片,该芯片已经存在了十多年,并且仍然很受欢迎。因此,该家族拥有Internet上最大的代码库,这意味着许多基本代码已经编写并且可以轻松下载。 尤其是PIC16F877,在网上有大量的代码和原理图,可以为学生、老师以及众多的专业设计师用于许多“入门”课程教学。但是,这款MCU由于比较老的关系,教学足矣,但不建议在新的单片机方案中使用。而且就成本上来说,新的单片机方案开发,可替代的国产单片机也有不少。 事实上,PIC16F系列很多单片机仍可与PIC16F887一起使用,PIC16F887的引脚布局和外设选项几乎相同。可使用PIC16F887运行相同的代码,最多只做少量修改,而且软件开发工具比价便宜。此外,PIC16F887具有256字节EEPROM数据存储器、自编程、ICD、2比较器、11路10位模拟数字(A/D)转换器,仍然可以用于汽车、工业、家电或消费类应用中的A/D应用。 二、pic单片机或运算应用 pic单片机的大多数寄存器,包括RAM数据存储器的每个存储单元都能实现移位、清位、位测试等系列复杂操作功能。然而,协调它们运行的(应用最广泛的基本级、中级)精简指令集中,却没有对寄存器的某“位”进行“取反”运作的现成指令,而在实际应用中对某些“位”进行取反运作是很需要的。 如下图所示。单片机PIC16C622的端口RB作为输出端口的8个引脚,分别控制着8个不同的电器设备。按动按钮AN一下,继电器J吸合,再按一下J释放,即按动AN一下,端口RB3引脚的输出状态改变一下,而RB口的其它7个引脚输出保持原有状态不变。在这种情况下最好的方法是按动一下AN,对PORTB(3)“取反一次”——这对于MCS-51系列单片机来讲是极容易的。只要写一条(如CPL P3?3)位取反指令就可以了。而PIC16C622只有对字节取反指令,却没有对位取反的直接指令。小编运用了“W和f相异或”的指令,也轻易地解决了位取反问题。实例: MOVLW 0x08;将常数0x08送至W XORWF 6,1  ;W和F6相异或结 果存F6 这样就实现了对F6(3)即RB3脚的“取反”运作。假如当时寄存器F6的状态为“B01101001”则经过上述指令运作后,有 异或前 W   00001000 F6 ?01101001 异或后 F6  01100001 结果寄存器F6的内容为“B01100001”。可见除了F6(3)由“1”取反为“0”外,其它位保持不变,实现了预期的目的。这种方法,可以对寄存器其中的1位、2位……几位同时“取反”——只要对工作寄存器W送常数时,常数的相应“位”上为逻辑“1”就可以了。 还有像两个数据比较一类程序的编写,通常人们是用“减法”指令来完成的。运用“异或运算”指令同样可以解决问题,而且更为简洁(它只影响状态寄存器中的零标志位“Z”,对其它概不影响)。如建立时钟程序,当秒计数寄存器计数至60秒时,应向分计数寄存器“进1”,若设秒计数寄存器为F20,分计数寄存器是F21,则定时器中断子程序为: INTSUB1: … INCF 20,1   ;秒计数寄存器F20          ;“增1” MOVLW 0x3C  ;把常数D‘60’置入W XORWF 20,0   ;寄存器F20计数是 ;否等于60秒 BTFSS STATUS,2 ;若F20的计数等于           ;60(零标志位Z=1) GOTO INTSUB2 ;则跳 INCF 21,1   ;分计数寄存器F21;“增1” … INTSUB2  RETFIE ;中断返回 从上述例子中可以看到,异或运算指令XORWF跟pic中的其它指令一样,只要灵活运用其功能是非常强大的。 以上便是此次小编带来的””pic单片机相关内容,通过本文,希望大家对如何选用pic单片机和pic单片机的或运算符的应用具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-30 关键词: 或运算符 pic单片机 指数

  • pic单片机效率探讨,打包pic单片机A/D转换数据

    pic单片机效率探讨,打包pic单片机A/D转换数据

    pic单片机作用宽泛,对于pic单片机,大家已不再像若干年前一样一无所知。随着对pic单片机的使用,大家的pic单片机应用技能逐渐增强、熟练度逐步提高。但是,大家仍会碰到一些pic单片机相关问题。本文中,小编将介绍如何将pic单片机A/D转换数据打包,以达到减少空间、提高效率的目的。如果你对本文内容具有一定兴趣,不妨继续往下阅读哦。 一、引言 PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。 在由单片机和PC 机构成的检测系统中, 通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。PIC 单片机A/D 转换后的结果大多是8 位或10 位的, 8 位的A/D转换不涉及该问题。以10 位的数据为例, 在单片机内进行存储时需要占用2 个8 位的字节, 低8 位和高2位分别存储在2 个字节中, 但是用于存储高位数据的8 位宽的RAM 单元中仅有2 位是有效数据。 单片机的存储空间有限, 以单片机为例, RAM 数据存储器按功能分为通用寄存器和特殊功能寄存器两个部分, 除去特殊功能寄存器外, 仅有368 个8 位宽的RAM 单元, 单片机能够存储的数据量很有限。假设将每次A/D 转换的数据直接存储, 每个数据都要占用2 个字节, 理想状态下也只能存储184 个数据; 假设需要存储100 个A/D 转换的数据, 就要占用200 个字节的单元, 这样的存储方式并未将单片机的存储空间充分利用, 同时, 如果将A/D 转换后的数据通过串口直接上传, 串口就要向上传送200 帧的数据, 有效传输速率比较低, 没有充分利用数据帧中的数据位。为此,本文提出如下方法将A/D 转换后的数据先进行处理后再存储或上传。 二、程序设计思路 以10 位的A/D 转换为例, 可以将A/D 转换的结果暂存在a[size] 中, 然后把数组a 中的数据一位一位地取出, 把低8 位和高8 位拆开分别存放, 低8 位存放在数组b 中, 高8 位存放在数组c 中, 由于高8 位的数据中只有2 位是有效数据, 我们可以把有效数据取出组合成一个新的数据存放, 当上传数据后再用相反的方法解码, 把数据恢复到原先的状态。这样对于10 位的A/D 转换来说可以节省3/8 的空间, 需要向上位机传送的数据也会比较少, 数据传输时间仅为原来的5/8。 三、采用C 语言编写的程序 本文采用PIC16F877 单片机进行试验。其中定义i、h、j、n、m 为int8, a[size] 为int16 的数组, 用于暂存A/D 转换的结果; b[number]、c[number]、d[number] 是int8 的数组。程序原文如下: void convert () { h= j; for ( i= 0 ; i< size ; i+ + ) { b[h+i]= a[i]; c[i] = (a[i]>> 8)&0x03; j++ ; } m= n; for ( i= 0 ; i< size/4 ; i+ + ) { d[m+i]= (c[4*i]<< 2) |c[4*i+ 1 ]; d[m+i]= (d[m+i]<< 4) |(c[4*i+ 2 ]<< 2) ; d[m+i]= d[m+i]|c[4*i+3]; n++ ; } } 程序首先利用一个for 循环将A/D 转换后的数据拆开, 将低8 位存放在数组b 中, 高2 位暂时存放在数组c 中。由于数组c 中的8 位二进制数据都是仅有低2 位是有效数据, 所以第二个for 循环将c[i]、c[i+1]、c[i+2]、c[i+3]中的2 位有效数据取出, 按照由低到高的顺序重新组合成一个8 位的二进制数,放入数组d, 构成一个新的数组。这样A/D 转换结果由原来用数组a 表示变成了由数组b 表示低8 位、数组d 表示高2 位的状态。 程序中的h、j、n、m 用于记录最后转换的数据存储在数组的位置, 在下一次转换的时候, 数据可以接在上一次的数据后面, n 和j 在主程序中convert ( ) 被调用之前首先被赋值为0。 四、结论 根据以上程序, 我们可以按照类似的方法把12 位的A/D 转化结果进行组合, 将12 位的A/D 转换结果拆成低8 位和高4 位, 再将2 个高4 位重新组合成一个8 位的二进制数存储, 这样对于12 位的A/D 转化结果可以节省1/4 存储空间, 缩短1/4 传输时间。 该程序的执行时间仅为990us, 相对于数据的传输时间是很小的。在单片机空间小的情况下, 以程序的执行时间来换取单片机的存储空间是值得的。同时又能有效地缩短数据的上传时间, 提高有效数据的传输速率。但是在数据量较少的时候, 比如只有1 个A/D 转换的数据, 这样做反而会耗费时间、降低效率。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对如何将pic单片机A/D转换数据进行打包具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-30 关键词: ad转换数据 pic单片机 指数

  • 搞定pic单片机难点,pic单片机异步串行口实现

    搞定pic单片机难点,pic单片机异步串行口实现

    pic单片机是实际使用较多,很多朋友从大学开始便接触pic单片机。在pic单片机使用过程中,我们可能会遇到各种问题。为帮助大家排除pic单片机使用难点,本文将对pic单片机软件异步串行口实现方法加以介绍。如果你对本文内容具有兴趣,不妨继续往下阅读哦。 在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART,一些低端廉价的PIC单片机甚至还不带硬件UART。为了提高系统的性能价格比,就要求设计工程师用软件增加实现一路或多路异步串行通信。很多工程师对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是看软件采用何种方式来实现可靠的UART功能。 在讨论具体实现方式前,我们先来简单回顾一下异步串行通信的格式定义。发送一个完整的字节信息,必须有“起始位”、“若干数据位”、“奇偶校验位”和“停止位”;必须定义每位信息的时间宽度——每秒发送的信息位个数,即为“波特率”。单片机系统中常用的波特率从300~19 200 b/s。当波特率为1200b/s时,每个信息位的时间宽度为 1/1200≈833μs;无数据通信时,数据线空闲状态应该是高电平,“起始位”为低电平,数据位低位先发且后跟奇偶校验位(若有),“停止位”为高电平,如图1所示。 图1 按图1最基本的异步串行通信时序,软件实现UART在不同架构的单片机上有多种方法。其中数据接收是关键,因异步通信没有可参照的时钟信号,发送方随时都可能发送数据,任何时刻串行数据到来时,系统都应该及时准确地接收。比较而言,本机发送串行数据相对容易,只要对发送出去的电平做持续时间的定时即可。按不同的接收技巧并针对PIC单片机的特点,这里介绍两种常用且十分可靠的方法。 1 三倍速采样法 三倍速采样法顾名思义就是以三倍于波特率的频率对接收引脚Rx进行采样,保证检测到“起始位”,又可以调整采样的时间间隔;将有效数据位的采样点控制在码元的中间1/3处,最大限度地减少误码,提高接收的准确性。我们把图1的起始位和部分数据位放大,如图2所示,把每个信息位分成三等份,每等份的时间宽度设为ts,以方便分析。 图2 以三倍频对信息位进行采样时,每个信息位都将可能被采样到三次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,虽然每次具体的采样点会在此S0阴影区随机变化。检测到起始位低电平后,间隔4×ts时间,正好是第一位数据位的中间1/3处(图2中Ds阴影区)。此后的数据位、校验位和停止位的采样间隔都是3×ts,所有采样点均落在码元的中间1/3处,采样数据最可靠。 PIC单片机采用此法实现软件UART时,硬件上只要任意定义两个I/O引脚,分别初始化成输入(串行数据接收)和输出(串行数据发送)即可;软件上只要实现定时采样,定时时间间隔在中档以上有中断机制的单片机上可以用不同的定时器(TMR0、TMR1、TMR2等)通过定时中断实现,在低档无中断的PIC单片机上可以控制每次主循环所耗的时间来实现。对于1200 b/s波特率,码元宽度为833μs,采样时间间隔即为278μs。整个串行接收或发送是一个过程控制问题,用状态机方式实现最为高效简易。图3给出了串行接收的参考状态机转移过程。 图3 本刊网络补充版中,介绍了简单的C语言参考源程序。此段程序实现1200b/s全双工串行通信,1位起始位,8位数据位,无校验位,1位停止位,没有帧错误等判别。编译环境为HITECH-PICC编译器V8.00PL4或更高版。 在网络补充版的程序中,关键部分是TMR0的中断服务。TMR0每隔278μs左右中断一次,TMR0的中断响应即为软件UART接收和发送全双工通信过程的实现。通过Hitech-PICC高效的代码编译后,约有150条单字指令代码,整个中断服务平均用约35个指令周期,即实现一路软件UART在4 MHz工作频率下占用MCU约12%的运行带宽。理论上,只要保证MCU留有足够的运行带宽给其它任务,在此中断服务程序内把接收和发送的代码再复制一份或多份(数据结构独立),即可实现多路软件UART。当然,如果每路的波特率不同,采样频率必须是最高波特率的三倍。不同波特率的采样点间隔独立调整。 此法最大的好处是软硬件配置极其灵活:接收发送的引脚可以任意定义;采样定时可以用不同的定时器实现;利用同一个定时采样可以方便地实现多路软件UART等。缺点是:不管有无数据通信,始终占用MCU运行带宽;串行通信的波特率不能太高,4 MHz工作的PIC单片机一般能实现2400bps的全双工通信。当然,可以通过提高MCU的振荡频率来实现高波特率通信,当PIC单片机工作在20 MHz时,实现9600b/s绰绰有余。 2 起始位中断捕捉、定时采样法 实现此法的硬件条件是PIC单片机有外部脉冲下降沿中断触发功能,在中档以上PIC单片机中有RB0/INT外部中断脚,CCP1/CCP2脉冲沿捕捉脚,PORTB的第4/5/6/7电平变化中断脚等都可以满足。另外需配备一个定时器,以定时中断方式对接收码元正确采样,或发送串行数据流。其关键的异步接收工作原理简介如图4所示。 图4 设串行数据位宽度为td。起始位到来时刻(图4 A点)的下降沿触发一个中断并立即响应该中断。在此中断服务中立即关闭本中断使能位(后续的数据流变化无需触发中断),开启定时器,使其在 1.5td后产生定时中断,用于采样第一个数据位(确保S0采样点落在数据位的中心位置处);在处理下降沿中断服务的最后,再检测接收端是否还是0电平,以区分窄脉冲干扰。在S0点采样到第一个数据位后的所有采样间隔都是1td,直到收到停止位后,关闭定时器中断,重新开放下降沿捕捉中断,准备接收下一个字节。 异步数据接收和发送的状态机控制流程,除了起始位判断和定时时间参数设置与前述方式不同外,其它几乎一样,此处不再重复。 此法的好处是可以实现较高的通信波特率。对于通信不是很频繁的系统,此软件UART几乎不耗MCU运行带宽,9600b/s接收或发送在4 MHz运行的PIC单片机上即可轻松实现;另外,由于下降沿中断可以唤醒处于睡眠的单片机,故极易实现通信唤醒的功能。缺点是不能全双工通信(除非另外单独用一个定时器实现发送定时),异步接收的引脚必须有下降沿触发中断的能力。 上面介绍的两种方法在实际产品设计中都得到了很好的验证,最典型的是红外线自动抄表系统。该系统要求收发均为38 kHz红外调制,串行数据1 200bps半双工通讯。用软件实现此UART,并充分利用PIC单片机CCP模块的脉宽调制PWM输出38 kHz载波时,在单片机外除了一个一体化红外接收头和一个红外发射二极管,无需其它任何外围器件,即可完成所有设计要求,最大程度地减化了硬件设计,降低了成本,提高了系统的可靠性和性能价格比。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机异步串行口的实现具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-30 关键词: 异步串行口 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 关键词: ups电源 pic单片机 指数

  • 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单片机 指数

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

技术子站

更多

项目外包