您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > PIC单片机开发的若干问题
1PIC单片机开发应用的若干问题朱铭(福建信息职业技术学院,福州350003)摘要:PIC系列单片机在电子设备中应用日趋广泛,本人在应用MicrochipPIC系列单片机开发过程中小结了一些软、硬件设计的经验、技巧。关键词:Microchip单片机功耗MPLAB-C高级语言编程中图分类号:TP文献标识码:ASomequestionsonthedevelopmentofPICingle-chipZhuming(FujianCollegeofInformationTechnology,fuzhou350003)Abstract:PICseriessingle-chipsarebecomingwidelyusedinelectronicdevices.DuringtheresearchingprocessontheapplicationofMicrochipPICseries,combiningsoftwareandhardwaredesigningexperienceandskills,someconclusionsaredrawn.Keywords:Microchip;single-chip;powerconsuming;MPLAB-Cadvancedlanguage;programming由美国Microchip公司生产的PIC系列单片机,由于其超小型、低功耗、低成本、多品种等特点,已广泛应用于工业控制、仪器、仪表、通信、家电、玩具等领域,本文总结了我在PIC单片机开发与教学过程中的一些经验、技巧,供大家参考。一、怎样进一步降低单片机的功耗功耗,在电池供电的电子设备中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V电源电压,4MHz振荡时钟工作电流不超过2mA,在睡眠模式下耗电可以低到1uA以下。)为了进一步降低功耗,在保证满足工作要求的前提下可以采取以下方法:首先可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情况下,当单片机的振荡方式采用RC电路形式时,可以采用程序运行的中途提高工作频率的办法来解决。具体做法是在闲置的一个I/O脚(如RB0)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB0=0,需进行快速运算时先置RB1=1,即RB0输出低电平时其RC振荡器的RC常数变大,当RB0输出高电平时其RC常数变小,充放电速度变快,工作频率增高,运算时间减少,运算结束又置RB1=0,进入低速、低功耗状态。工作频率的变化量依R1的阻值而定(注意R1不能选得太小,以防振荡电路不起振,一般选取大于5kΩ)。第二,进一步降低功耗可充分利用“SLEEP”指令。执行“SLEEP”指令,机器处于睡眠状态,功耗为几个微安。程序不仅可在待命状态使用“SLEEP”指令来等待事件,也可在延时程序里使用(见例1、例2)。在延时程序中使用“SLEEP”指令降低功耗是一个方面,同时,即使是关中断状态,端口B的电平变化可唤醒“SLEEP”,提前结束延时程序。这一点在一些应用场合特别有用。同时注意在使用“SLEEP”时要处理好与WDT、中断的关系。例1(用MPLAB-C编写)Delay(){/*此行可加开关中断指令*/for(i=0;i=10;i++)SLEEP();}例2(用MASM编写)Delay;此行可加开关中断指令MOVLW.10MOVWF20HLOOPSLEEPDECFSZ20H,1GOTOLOOP图1提高工作频率的方法2第三,为了在睡眠模式下使整机功耗在进一步的降低,在进入睡眠模式之前,把所有的I/O端口根据具体电路情况设置为高电平或低电平,并且不能让外电路从I/O端口汲取电流;关闭外部相关电路的工作时钟;禁止ADC模块的工作;对高阻输入的I/O引脚,应该在外部上拉成高电平或下拉成低电平,以免悬空状态下的干扰信号进入引起开关电流;将定时器/计数器TMR0的外部信号输入端T0CKI脚接高电平或低电平;此外还应考虑启用端口RB内部弱上拉功能,以利于降低功耗。第四,在PIC单片机的实际应用中,在芯片进入睡眠状态(低功耗模式)后,其振荡器外接引脚(OSC1与OSC2)处于悬空状态,这使芯片的睡眠功耗上升,因此可以在振荡器外接引脚OSC1和Vss(地)之间接一个10M的电阻如图2所示,可防止在系统时钟停止振荡时OSC1进入悬空状态,并且不会影响振荡器的正常工作。二、注意INTCON(中断控制寄存器)中的RBIF位(端口B电平变化中断屏蔽)INTCON中的各中断允许位对中断状态位并无影响。当端口B配置成输入方式时,RB4-RB7引脚输入在每个读操作周期被抽样并与旧的锁存值比较,一旦不同就产生一个高电平,置RBIF=1。在开RB中断前,也许RBIF已置“1”,所以在开RB中断时应先清RBIF位,以免受RBIF原值的影响,同时在中断处理完成后最好是清RBIF位。三、用MPLAB-C高级语言写PIC单片机程序时要注意的问题程序中嵌入汇编指令时注意书写格式见例3。图2降低睡眠模式功耗的方法例3-----------while(1){#asm---------#endasm}/*不能正确编译*/----------while(1){#asm/*应另起一行*/----------#endasm}/*编译通过*/3当内嵌汇编指令时,从“#asm”到“endasm”每条指令都必须各占一行,否则编译时会出错。2.加法、乘法的最安全的表示方法见例4例4#include16c71.h#includemath.hunsignedinta,b;unsignedlongc;voidmain(){a=200;b=2;c=a*b;}/*得不到正确的结果c=400*/由于MPLAB-C是以8×8位乘法方式来编译c=a*b,返回单字节结果给c,结果的溢出被忽略。改上例中的“c=a*b;”表达式为“c=a;c=c*b;”,最为安全(对加法的处理同上)。3.了解乘除法函数对寄存器的占用由于PIC片内RAM仅几十个字节,空间特别宝贵,而MPLAB-C编译器对RAM地址具有不释放性,即一个变量使用的地址不能再分配给其它变量。如RAM空间不能满足太多变量的要求,一些变量只能由用户强制分配相同的RAM空间交替使用。而MPLAB-C中的乘除法函数需借用RAM空间来存放中间结果,所以如果乘除法函数占用的RAM与用户变量的地址重叠时,就会导致出现不可预测的结果。如果C程序中用到乘除法运算,最好先通过程序机器码的反汇编代码(包含在生成的LST文件中)查看乘除法占用地址是否与其它变量地址有冲突,以免程序跑飞。MPLAB-C手册并没有给出其乘除法函数对具体RAM地址的占用情况。例5是乘法函数对0X13、0X14、0X19、0X1A地址占用情况。例5部分反汇编代码#includepic16c7101A7081FMOVF1F,W#includemath.h01A80093MOVWF13;借用unsignedlongValue@0x101A90820MOVF20,WcharXm@0x2d;01AA0094MOVWF14;借用4voidmain()01AB082DMOVF2D,W{Value=20;01AC0099MOVWF19;借用Xm=40;01AD019ACLRF1A;借用Value=Value*Xm01AE235FCALL035Fh;调用乘法函数……01AF1283BCF03,5}01B0009FMOVWF1F;返回结果低字节01B10804MOVF04,W01B200A0MOVWF20;返回结果高字节四、对芯片重复编程对无硬件仿真器的用户,总是选用带EPROM的芯片来调试程序。每更改一次程序,都是将原来的内容先擦除,再编程,其过程浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程的结果较前一次,仅是对应的机器码字节的相同位由“1”变成“0”,就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。在程序的调试过程中,经常遇到常数的调整,如常数的改变能保证对应位由“1”变“0”,都可在原片内容的基础继续编程。另外,由于指令“NOP”对应的机器码为“00”,调试过程中指令的删除,先用“NOP”指令替代,编译后也可在原片内容上继续编程。另外,在对带EPROM的芯片编程时,特别注意程序保密状态位。厂家对新一代带EPROM芯片的保密状态位已由原来的EPROM可擦型改为了熔丝型,一旦程序代码保密熔丝编程为“0”,可重复编程的EPROM芯片就无法再次编程了。使用时应注意这点,以免造成不必要的浪费。参考文献1.李学海.PIC单片机实用教程,2002.22.MicrochipInc.PIC16C7XDATASHEET,19953.MicrochipTechnicalLibraryCD-ROM,20035薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆螅羅膁蒈蚁羅芄蚄罿羄莆蒇袅羃蒈蚂螁羂膈蒅蚇肁芀蚁薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆螅羅膁蒈蚁羅芄蚄罿羄莆蒇袅羃蒈蚂螁羂膈蒅蚇肁芀蚁薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆
本文标题:PIC单片机开发的若干问题
链接地址:https://www.777doc.com/doc-2886924 .html