关于PIC单片机的一些经验

发布者:乐基儿vos最新更新时间:2013-04-08 来源: 21ic关键字:PIC单片机  PIC16F616型  编程调试 手机看文章 扫描二维码
随时随地手机看文章

为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见.

2.PIC单片机的概述

PIC16F616是一款14引脚、8位的CMOS单片机.采用精简指令集,仅有35条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于提高单片机的运行速度和执行效率.

PIC16F616这款单片机供电电压可以在2V到5.5V之间,内部集成了一个RC振荡器,频率可以配置成8MHZ或者4MHZ,也可以用外部晶振提供时钟.内部集成有AD转换、比较器等硬件模块,还具有上电复位、欠压复位、看门狗、代码保护等功能.三个定时器、PWM发生器等可以由用户编程.下面我来一一介绍关于PIC单片机的这些模块和功能.

3.存储器

PIC16F616分为程序存储其和数据存储器,程序存储器的大小是2048words,数据存储器的大小是128bytes.

程序存储器中0000H的地址为复位地址,当上电或者看门狗计时器等复位的时候,均会导致PC指针指向复位地址.地址0004H为中断地址,当无论发生什么中断的时候,PC指针就会指向此地址.在地址0005H~07FFH可以移植程序.

数据存储器分为两个部分,分别叫做bank0和bank1,其中bank0的地址范围为:00H-7FH,Bank1的地址范围为80H-FFH.一般的寄存器都放在里面.可以通过寄存器STATUSL里面的RP0位来选择bank0和bank1.

在编程序的时候要注意的是,当你要操作的寄存器在bank0的时候,先要选择bank0(将寄存器STATUS的RP0位置0),然后再对你所要操作的寄存器进行操作,当你要操作的寄存器在bank1的时候,同理先要选择bank1.

如果想要定义一些变量,可以在数据存储器20H开始的地址定义,定义的地址范围为20H-7FH.一般这么多就够用了.

4.PIC的输入输出端口

在学习这个部分的时候,曾经遇到过一些问题.PIC单片机的引脚不多,大多都是复用引脚,例如AD、IO、比较器、外接晶振等等,所以在配置端口的时候,一定要知道每个功能怎样设置才能实现的,在这一小节中,我要讲的是通用IO口的设置问题.

PIC16F616有12个IO口,但是有一个引脚(RA3)只能作为输入引脚用,不能用作输出,另外,A口具有电平变化中断的功能,而C口没有,在设计的时候要注意.

在设置的时候,一般要进行以下几项设置:

(1)设置端口是模拟端口还是数字端口,可以通过寄存器ANSEL来设置.例如你想用AD,就要将相应的引脚设置为模拟输入端口.

(2)如果你选择的是数字端口,接下来就要设置端口的方向,是输入还是输出(RA3除外),可通过寄存器TRISA(A口)或TRISC(C口)来设置.

(3)设置端口的输出电平,可以通过寄存器PORTA(A口)或PORTC(C口)来设置.

这是对IO口的通用设置,但是这不是全部的设置,接下来的设置要看时A口还是C口了.对于A口,它有几个特殊的功能:内部弱上拉、电平变化中断、RA2/INT引脚的沿中断.如果想要这些功能,就要对相应的寄存器进行设置.

弱上拉的设置:只有当引脚为输出的时候弱上拉才有效,可以通过寄存器WPUA来设置相应引脚的弱上拉,值得一提的如果开启了弱上拉,会有多余的电流浪费,这样对于低功耗的设计是不可取的,但是如果在进行一些例如键盘电路设计的候,可以开启弱上拉功能,这样就不需要在键盘电路中加上拉电阻了.

电平变化中断的设置:可以通过寄存器IOCA来设置,但是首先要将相应引脚设置为数字端口且为输入状态.同时要将寄存器INTCON的REIE位设置为1,总中断要允许(置寄存器INTCON的GIE位),如果设置相应引脚有这个功能,当此引脚电平发生的时候,就会产生一个中断,同时一些中断标志位被置上(INTCON的RAIF位被置1),且总中断GIE被置为0.在中断服务程序中,要软件清除RAIF位和重新置GIE位才能继续开启此中断.

RA2/INT脚的沿中断设置:同样首先要将相应引脚设置为数字端口且为输入状态,设置INTCON的INTF位为1,表示允许int引脚外部中断,寄存器OPTION_REG的INTEGD位可以设置是上升沿中断还是下降沿中断.当发生中断时,INTCON的INTF位被置为1,GIE被清零,在中断服务程序中,要软件清除INTF位和重新置GIE位才能继续开启此中断.

对于C口,不能产生电平变化中断和沿中断.

5.定时器

定时器是单片机的一个很重要的部分,用它可以产生很多不同的定时时间,来满足程序设计的不同需求.PIC16F616有三个定时器,分别是Timer0、Timer1、Timer2.它们的用法不是很相同,下面来分别谈谈这三个定时器的用法和设置问题.

(1)Timer0

Timer0是一个八位的计数器,它有一个八位的计数寄存器TMR0,八位的预分频器(与看门狗共用),可以选择内部或者是外部时钟源,有计数器溢出中断的功能.

Timer0可以作为一个定时器或者计数器来使用,与Timer0有关的寄存器有:TMR0,INTCON,OPTION_REG,TRISA.

当Timer0作为定时器来使用的时候,要设置OPTION_REG的T0CS位为0,表示用的是内部时钟,每一个指令周期TMR0的值会增加(当没有预分频的时候),当TMR0被赋值的时候,会有两个指令周期的延时.预分频器可以和看门狗共用,可以由OPTION_REG的PSA位来设置,当PSA 为0的时候分频器选择Timer0,当PSA为1的时候分频器选择看门狗.同时,与分频器的分频值可以通过寄存器OPTION_REG来设置,设置的值可以由1:2到1:256.当Timer0的计数器TMR0计数从FFH到00H的时候会产生溢出,同时溢出标志位(INTCON寄存器的T0IF位)会置位(无论Timer0的中断是否开启),如果中断已经开启了(INTCON寄存器的T0IE被置位),那么就会产生溢出中断.T0IF位需要软件对其进行清零.[page]

当Timer0作为计数器来使用的时候,就要用外部时钟源(OPTION_REG的T0CS置1),每次当引脚T0CK1的沿到来时Timer0的 TMR0会增加1,上升沿和下降沿可以由OPTION_REG的T0SE来设置.中断和Timer0作为定时器使用时一样.在我们编程序的时候,可以用 Timer0进行定时或产生定时信息,下面我来解释定时器的定时时间的计算.假设Timer0用的时钟源是内部的4MHZ,那么每条指令的执行时间就是 1us,设Timer0的预分频系数是1:256,TMR0的初值是6,那么定时时间为:

256×(256-6)×1us=64ms

在编程的时候需要注意的是Timer0的中断是不能把单片机从SLEEP的状态唤醒的.

(2)Timer1

Timer1是一个十六位的计数器.它有一个计数寄存器对(TMR1H:TMR1L),时钟源也是内外可选的,具有一个2bit的预分频器,可以同步或者异步操作,具有中断功能,但是溢出中断只能在外部时钟、异步的模式才能将单片机从SLEEP中唤醒,Timer1具有捕获/比较功能,还有被一些特殊事件触发功能(ECCP),比较器的输出可以与Timer1的时钟同步.下面来一一介绍这些功能.

在编程的时候也可以按照这样的步骤来进行.设置寄存器T1CON,时钟源可以选择外部或者内部的时钟源,外部时钟源可以选择LP晶体.Timer1在选择内部时钟时,可以运行在定时器的状态,选择外部时钟的时候,可以运行在定时器或者是计数器状态,工作于计数器状态时可以选择门限是高电平还是低电平计数.这些都可以通过寄存器T1CON来设置.

以下是T1CON每个位的具体功能:bit1:Timer1是否开启位,当此位设为1时,Timer1开启,设为0时,Timer1关闭;bit2:时钟源选择位,置1时,选择外部时钟(T1CK1引脚的上升沿),此位置0时,选择的是内部时钟,并且和T1ACS(寄存器CM2CON1中)配合,当 T1ACS位为0时,时钟为FOSC/4,当T1ACS位为1时,时钟为FOSC.bit2:T1SYNC:定时器1的外部时钟输入同步位,当 TMR1CS位为1、T1SYNC位为1,定时器1被设置成与外部时钟不同步,T1SYNC位为0时,定时器1被设置成与外部时钟同步模式.Bit3: T1OSCEN:此位为1时Timer1的时钟选择LP,为0时LP晶体被关闭.Bit5-4:T1CKPS:Timer1时钟的预分频系数设置,通过这两位的是指,可以讲Timer1设置成1:1、1:2、1:4、1:8几种分频值.Bit6:TMR1GE:只有当TMR1ON位为1时才有效,当此位为 1时,Timer1计数被Timer1的门限控制,此位为0时,Timer1正常计数.Bit7:T1GINV:此位为1时,Timer1在门限为高时计数,此位为0时,Timer1在门限为低时计数.

Timer1的中断编程:当Timer1的计数产生溢出的时候,如果Timer1中断允许的话,就会产生中断.中断可以这样设置,Timer1的中断允许位TMR1IE(在PIE1寄存器中)置1,寄存器INTCON的PEIE位置1,同时总中断位GIE(位于寄存器INTCON中)要置为1.当定时器产生中断的时候,会把中断标志T1IF置为1(位于寄存器PIR1中),然后PC指针指向0004H地址.T1IF位必须软件清除.

(3)Timer2

Timer2的功能于Timer1有些不同,Timer2时一个八位的计数器,有一个八位的计数寄存器TMR2,Timer2具有以下功能:有两个分频器,一个是前分频器,一个是后分频器.分频可以软件进行设置,另外,Timer2的时钟源是指令时间(FOSC/4),Timer2有一个寄存器 PR2,此寄存器的功能是当TMR2增加到PR2的值时,将产生中断,当然,中断必须允许,然后PR2的值会重新变为00H.下面来介绍Timer2的编程:

Timer2的控制寄存器T2CON作用是设置Timer2的开启关闭和前后分频的分频系数,寄存器T2CON的TOUTPS<3:0> 位设置后分频系数,可以被设置成1:1~1:16;位TMR2ON为1时,Timer2开启,为0时,Timer2关闭;位T2CKPS<1: 0>可以设置前分频系数,可以被设置成1、4、16.

Timer2的中断可以这样控制,允许Timer2中断位TMR2IE(位于PIE1寄存器内)被置1时,Timer2中断被允许,被置0时, Timer2中断禁止.寄存器INTCON的PEIE位置1,同时总中断位GIE(位于寄存器INTCON中)置为1.通过上面的设置,Timer2就可以产生中断了.当定时器产生中断的时候,会把中断标志T2IF置为1(位于寄存器PIR1中),然后PC指针指向0004H地址.中断标志位T2IF必须软件清除.

下面是三个定时器的比较:

唤醒功能

其他功能

定时器Timer0

内部或外部时钟源,有一个预分频器.

定时器、

醒功能.

计数器值溢出时发生中断

预分频器与看门狗共用.

定时器Timer1

内部或外部时钟源,有一个预分频器

定时器、计数器

外部时钟、异步模式时可唤醒CPU

计数器值溢出时发生中断

与比较器模块、

捕获/比较模块共用

定时器Timer2

有前分频器和后分频器

醒功能.

计数器值与预置值相等时发生中断

PWM的产生需要此定时器[page]

6.AD模块

PIC16F616有一个十位、八路的AD转换器.其参考电压可以为电源电压VDD,也可以是外部参考电压(VREF引脚),当AD转换完成后可以产生一个中断,此中断可以把单片机从睡眠状态中唤醒.下面来介绍一下关于AD转换的编程方法.

要使用一个ADC,要做的有一下几件事情:

(1)设置端口,需要采样模拟信号的端口必须设置为模拟输入状态,如果设置为数字端口,将使转换结果不正确,端口的模拟输入可以由寄存器ANSEL来配置,在讲RA口的时候已经说到了如何配置了.

(2)通道的选择,有八路外部通道和三路内部通道,可以通过ADCON0寄存器的CHS<3:0>位来设置通道的选择.

(3)参考电压的选择,参考电压可以是VDD,也可以是外部参考电压,可以通过ADCON0寄存器的VCFG位来设置,当VCFG=0时,参考电压为VDD,当VCFG=1时,参考电压为外部参考电压(来自VREF引脚)

(4)ADC的转换格式,AD转换后的结果保存在一个寄存器对里面:ADRESH和ADRESL,但是AD转换结果只有十位,设置AD转换格式可以通过设置 ADCON0的ADFM位来选择,当ADFM=1时10位的AD结果的低八位保存在ADRESL内,高两位保存在ADRESH内;当ADFM=0时10位的AD结果的高八位保存在ADRESH内,低两位保存在ADRESL内.

(5)AD时钟源的选择,寄存器ADCON1专门来设置AD的时钟源,ADCS<2:0>不同组合,可以将AD的时钟源设置为不同的频率,可以为FOSC/2、FOSC/4、FOSC/8、FOSC/16、FOSC/32、FOSC/64和FRC(内部RC).

(6)AD中断的配置,要使用AD的中断功能,可以先把AD中断使能,ADIE位设置为1(在寄存器PIE1中),PEIE位置1(在INTCON寄存器中),总中断GIE位置1(INTCON寄存器中).

要开始一个AD转换,首先要使能ADC模块,即把寄存器ADCON0的ADON位置1即可,然后将GO/DONE位(ADCON0中)置1就可以启动AD转换了.

AD转换需要时间,转换1bit需要Tad的时间,Tad与AD转换的时钟源和VDD有关,转换十位就需要11个Tad时间,如果第一个AD转换完成了,要进行第二个AD转换,必须还要等待2*Tad的时间才能开始.一个AD完成了,GO/DONE位会被置为0,如果中断允许的话,就会产生中断,且中断标志位ADIF(寄存器PIR1内)会被置1,在AD中断程序中就可以把AD转换结果读取出来(读ADRESH和ADRESL),需要时把AD中断标志位清零.

AD中断可以把单片机从睡眠中唤醒,但是要注意,使用这个功能的时候,时钟源必须设置为FRC,否则的话在睡眠的时候就不会产生AD中断了.

7.看门狗

PIC16F616的看门狗WDT其定时计数的脉冲序列由片内独立的RC振荡器产生,所以它不需要外接任何器件就可以工作.而且这个片内RC振荡器与引脚OSC1/CLKIN上的振荡电路无关,即使OSC1和OSC2上的时钟不工作,WDT照样可以监视定时.例如:当PIC16F616在执行 SLEEP指令后,芯片进入休眠状态,CPU不工作,主振荡器也停止工作,但是,WDT照样可监视定时.当WDT超时溢出后,可唤醒芯片继续正常的操作.而在正常操作期间,WDT超时溢出将产生一个复位信号.如果不需要这种监视定时功能,在编程时,可关闭这个功能.

WDT的定时周期在不加分频器的情况下,其基本定时时间是18ms,这个定时时间还受温度、VDD和不同元器件的工艺参数等的影响.如果需要更长的定时周期,还可以通过软件控制OPTION寄存器(PSA位置1)把预分频器配置给WDT,这个预分频器的最大分频比可达到1∶128.这样就可把定时周期扩大128倍,即达到2.3秒.

WDT的预分频器是和Timer0所共用的,如果把预分频器配置给WDT,用CLRWDT和SLEEP指令可以同时对WDT和预分频器清零,从而防止计时溢出引起芯片复位.所以在正常情况下,必须在每次计时溢出之前执行一条CLRWDT指令喂一次狗,以避免引起芯片复位.当系统受到严重干扰处于失控状态时,就不可能在每次计时溢出之前执行一条CLRWDT指令,WDT就产生计时溢出,从而引起芯片复位,从失控状态又重新进入正常运行状态.

当WDT计时溢出时,还会同时清除状态寄存器中的D4位T0,检测T0位即可知道复位是否由于WDT计时溢出引起的.

8.比较器

PIC16F616有两个比较器:C1和C2,C1的结构比C2的结构要简单,下面我分别对这两个比较器的用法和特性作简要说明.

(4)比较器C1:它有一个独立的控制寄存器CM1CON0,通过这个寄存器可以对比较器C1进行一些设置.位C1ON可以控制C1的开启关闭,位C1OE 可以决定比较器的输出是从引脚输出还是内部输出,位C1POL可以选择比较器输出的极性,位C1R选择参考电压是链接到引脚C1IN+还是连接到 C1VREF,C1CH可以选择比较器负端从哪一个引脚输入的,位C1OUT存放了比较器的输出结果.

(5)比较器C2:它的控制寄存器CM2CON0的操作跟C1一样,但是比较器C2比比较其C1功能要强,因为它与Timer1挂上钩了,C2可以连接到 Timer1,而C1不能.当C2与Timer1相连接的时候,C2的输出可以设置成与Timer1的下降沿锁定,如果Timer1有分频,则比较器的输出与分频后的Timer1下降沿锁定,可以通过相关寄存器来进行设置.

(6)两个比较还有其它的功能,都能组成滞回比较器,这样就可以对输入电压有一定的滤波功能.两个比较器还可以形成一个SR锁存器.

由于在本项目中没有选择用比较器这个功能,所以在这里就不详细叙述其细节设置,但要注意的是在不用此模块的时候,要能够保证此模块不能影响其他模块的正常工作,可以把比较器功能关闭(通过寄存器CM1CON0、CM2CON0的CxON位置0来关闭).

9.捕获/比较/PWM功能

PIC16F616具有捕获/比较/PWM的模块,下面来简单的介绍一下它们的功能.

这三个功能需要定时器的支持,捕获和比较功能需要定时器Timer1的支持,PWM功能需要定时器Timer2的支持.都有中断的功能,选择这三种功能的某一种功能可以通过寄存器CCP1CON来设置.CCP1CON的低四位CCP1M<3:0>可以通过不同的组合来开启某项功能和关闭所有功能,当CCP1M<3:0>=0000的时候,捕获/比较/PWM模块的所有功能被禁止.具体其他的不同组合实现的功能,请参考 PIC16F616的用户手册.

当选择捕获功能时,它可以捕获引脚CCP1发生的事件,同时把16位Timer1的计数值拷贝到CCPR1H:CCPR1L中来,引脚CCP1的发生事件可以指的是下列事件:CCP1引脚的每个上升沿或者下降沿、第四个上升沿、第十六个上升沿.可以通过寄存器CCP1CON的低四位CCP1M< 3:0>来设置是哪一种事件.当事件发生的时候,单片机会置中断标志位CCP1IF(寄存器PIR1上),如果中断被允许(寄存器PEIE的位 CCP1IE=1)的话,就会产生中断,中断标志位CCP1IF需要软件清零.

选择比较功能时,如果定时器Timer1的计数器值与寄存器CCPR1H:CCPR1L相等的话,将产生下面的事件:把引脚CCP1置1/0、产生一个中断、触发一个事件(把定时器Timer1的技术器TMR1清零,并且如果此时AD是允许的话,它将触发一次AD转换),这些事件可以通过寄存器 CCP1CON的低四位CCP1M<3:0>来设置是哪一种事件.[page]

当选择PWM功能时,通过设置PR2、T2CON、CCPR1L、CCP1CON这四个寄存器,模块可以产生不同占空比的PWM波形.具体的设置和占空比的计算请参考手册.

如果我们不需要这些功能,可以把这个模块关闭掉(设置CCP1M<3:0>=0000即可).

10. 复位、中断和睡眠

(1)复位

PIC16F616包括这样的几个复位功能,上电复位(Power-on)、硬件复位、欠压复位(Brown-out)、看门狗复位.

关于上电复位POR,大家都不陌生,单片机在上电的时候保持复位直到电压能够满足其正常的工作电压,同时你可以通过对CONNFIG(编译器上即可设置)的设置,来开启Power-up Time,这个时间一般为64ms.

硬件复位可以通过MCLR引脚外界复位电路,即可实现硬件复位(将此引脚接低电平).

欠压复位这个功能是可选的,也可以直接在编译环境中配置CONFIG寄存器来开启此功能.当此功能开启时,如果单片机在运行的时候,供电电压不足就会引起欠压复位,复位后单片机如果发现供电电压已经达到正常值的时候,会有一个64ms的延时,然后再运行程序.

关于看门狗的复位在看门狗部分已经说了.这里的一些复位还涉及到一些标志位.这些标志位分布在STATUS和PCON上面.STATUS上有两个位 TO、PD,当标志位TO=1时,表示表示已经操作了上电复位或者是执行了CLRWDT或者SLEEP指令,当TO=0时,表示发生了看门狗复位.当标志位PD=1时表示操作了上电复位或者是执行了CLRWDT指令,当PD=0时,表示执行了SLEEP指令.PCON上有两个标志位是POR和BOR,分别表示的是上电复位和欠压复位标志.具体的可以参看手册.

(2)中断

PIC16F616包括这样的几个中断源:RA2/INT引脚外部中断、RA端口电平变化中断、定时器Timer0、Timer1、Timer2溢出中断、比较器中断、AD转换中断、捕获/比较/PWM中断.

这些中断的允许位和中断标志位分别位于INTCON、PIE1、PIR1、IOCA这些寄存器里面,如果要开启相应的中断,就要置相应的中断允许位,开启总中断位(INTCON寄存器的GIE位),还要开启INTCON上的PEIE位(定时器0溢出中断、INT引脚沿中断和RA端口的电平变化中断除外).

当中断发生的时候,相应的中断标志位就会置起来,同时总中断标志位GIE会被清零,保证在此时间内不会相应其他的中断,然后将当前的PC指针值压栈保存,以用来保证中断能正确的返回到原来执行的地方.然后PC指针指向中断向量地址0004H的地方,所以在编程序的时候,你可以在0004H的地址存一条跳转指令跳到你定义的中断服务程序里面去就可以了.如果在中断的时候想保存一些重要的寄存器的话,可以在中断程序的起始将其保存,然后在中断服务程序的末尾将其恢复即可.

要注意的是中断标志位不会自己清零,这就需要在编程的时候在软件上对其清零,否则的话,单片机不停的执行中断服务程序.如果你想要在以后的程序中还能产生中断的话,就要把总中断允许位GIE重新置位.

(3)睡眠

要想让单片机睡眠的方法很简单,执行一条SLEEP指令就可以了,如果看门狗允许的话,WDT就会被清零,但是还保持运行,寄存器STATUS的PD位将会置0,TO位将会置1,IO口还保持原来的状态,在睡眠状态下,不能驱动振荡器了.

有些事件可以将单片机从睡眠状态中唤醒:看门狗、RA口电平变化中断、外部复位引脚MCLK被拉低、RA2/int引脚沿中断、Timer1中断(必须工作在异步计数模式)、ECCP捕获模式中断、AD转换中断(时钟源必须为内部RC的时候)、比较器输出有变化,这些事件能够将单片机唤醒,其他的事件不能.

如果某项能唤醒单片机的中断已经开了,当总中断允许位GIE为1的时候,单片机被唤醒后可以进入中断程序中去,而当GIE位为0的时候,单片机也可以被唤醒,但是是执行下面的语句,而不能进入中断程序中去.

为了保证在执行SLEEP语句后看门狗能够清零,最好在SLEEP语句之前加一句清看门狗的语句CLRWDT.

相关型号资料:AT25020N-10SC2.7 MUX08FP IRFI9520G TS83C51RB2-MC

11. PIC单片机的一些电特性

VSS引脚的最大输出电流和VDD最大的输入电流为:90mA;

每个IO口的输出电流可达25mA,IO口总共输出电流可达90mA;

每个IO口是由两个保护二极管上下钳位的.当电压超过VDD和VSS的时候,二极管最大能承受20mA的电流;

IO口输入漏电流最大为±1uA,引脚MCLR和OSC漏电流最大为±5uA;

PORTA内部弱上拉(若设置了此功能)电流最大为 400uA;

IO口输出低电平为0.6V,输出高电压为VDD-0.7V;

12. 编程注意事项及技巧

在编程调试后和根据网上的一些资料和经验,我注意到了一些在编程的事项和技巧,通过这些设置,可以使系统更加稳定的工作,现在总结如下:

(1)

在设置端口的时候,先将端口输出你想要预置的值,以免发生出示状态的不稳定,影响系统正常工作.虽然在当前还没有定义端口是输出还是输入状态,这样做总是好的.

(2)

在开启某个中断功能的时候,最好将其中断标志位清一次零.

(3)

在设计低功耗的时候,其中有些功能是比较耗电的,如果不用的话,一定要将其关掉.例如将IO口设置成输入并将其悬空,就会很耗电流;RA口设置弱上拉的时候如果引脚接地,电流会很大;欠压复位也是一个耗电大户.而看门狗开启时用的时钟源为内部的RC,不怎么耗电;AD转换耗电也不多.

(4)

单片机里面的功能很多,在有些功能不需要的时候,一定要将其关闭(可以放在初始化程序之中),这样一来有利于程序的稳定性;二来可以省电,因为开启某个功能总是要电来驱动的.

(5)

如果一个寄存器被多种功能所共用,建议只对相应位进行操作,例如用BCF、BSF、或、异或、与、非等指令,而不要整个的将其赋值,以免弄错了使其他模块受到干扰.

关键字:PIC单片机  PIC16F616型  编程调试 引用地址:关于PIC单片机的一些经验

上一篇:PIC单片机学习方法
下一篇:PIC单片机浮点数与十进制数之间的转换

推荐阅读最新更新时间:2024-03-16 13:21

基于PIC单片机的SPWM控制技术
引言          在UPS等电力电子设备中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难。SPWM技术较好地克服了这些缺点。目前SPWM的产生方法很多,汇总如下。         1)利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进;         2)由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制;         3)利用CPLD(复杂可编程逻辑器件)设计,实现数字式SPWM发生器;         4)基于单片机实现SPWM,此方法控制电路简单可靠,
[电源管理]
基于<font color='red'>PIC单片机</font>的SPWM控制技术
PIC单片机外部中断
#INCLUDE P16F877.inc ORG 000H GOTO A1 ORG 04H GOTO ZD01 A1 BSF STATUS,RP0 BCF STATUS,RP1;体1 MOVLW 0H MOVWF TRISA;设置A口为输出口 MOVLW 06H MOVWF ADCON1;设置A口为普通I/O口模式 movlw 0FFH movwf TRISB;设定RB为输入 BCF STATUS,RP0 BCF STATUS,RP1;体0 MOVLW 0FFH MOVWF PORTA;A口输出高电平 BCF INTCON,INTF;清中断标志 BSF INTCON,INTE;开外部中
[单片机]
PIC单片机SPI通信的设计
#include #define uchar unsigned char #define uint unsigned int #define cs RC2 #define dout RC4 #define nop() asm(“nop”) __CONFIG(0x3B31); const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar data_temp; void delay(uint x); void init(); void didi(uchar num); void
[单片机]
<font color='red'>PIC单片机</font>SPI通信的设计
PIC单片机相比其他单片机的四大优势介绍
本人从事单片机应用系统的开发已有多年,使用过多种型号的PIC单片机,深感PIC单片机使用起来确实很方便: 1、 PIC单片机采用精简指令集,中档产品仅需35条指令,入门门槛低,而在使用过程中绝不会感到不方便。 2、PIC单片机的数据线和指令线各自独立,代码效率高,是传统51系列单片机的2-3倍,除几个跳转类指令外均为单周期指令,在计算延时时间时非常方便。 3、PIC单片机外围接口十分丰富,能满足绝大部分应用系统的需求;比如PIC16F877A包含8路ADC,1个CCP、PWM、USART、SSP、I2C/SPI,3个定时/计数器,1个硬件WDT等接口,8K FLASH程序存储器、256字节EEPROM,能满足较复杂测
[单片机]
<font color='red'>PIC单片机</font>相比其他单片机的四大优势介绍
自学PIC单片机必备工具
  P IC 单片机 是一种可编程的芯片,数字 电路 也有些芯片具有可编程的能力。      但是数字电路的编程太简单,因而其功能也很少,但PIC单片机具有很强的编程能力,是数字电路无法实现的目标。例如:笔者用一片PIC16F84制作的多波形电针治疗仪,能在20分钟内变换20种波形,即每分钟变换一次波形(消除人体对单波形刺激的适应性)。如果要用数字电路来实现,需要上10个芯片,这充分证明PIC单片机的可编程的能力十分强大。由于单片机自身不能编程,所以必须借助下述的硬件和软件两种开发工具对它编程之后,才能把PIC单片机变成有用的产品。这些设备价格便宜,功能可靠。      1.PC(个人电脑)和开发软件PC机一台,其配置如下:Mic
[单片机]
PIC单片机有什么特点和优势?
PIC系列单片机有什么优势? 自从我95年接触PIC单片机以来,便一直热衷于这种单片机的开发与应用。有不少朋友问我:PIC到底有什么优势?也许你也会有这样的疑问,所以我在这里略谈几点自己的看法。 1) PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界
[单片机]
基于PIC单片机及图像处理技术设计的智能台球机器人
设计摘要 台球源于英国,它是一项在国际上广泛流行的高雅室内体育运动。随着各种运动的兴起发展,台球以其内涵高雅、放松身心的特点越来越受大家欢迎。依靠单片机技术的日益成熟,基于单片机的小型化高精度控制过程的广泛应用,色度学、先进光电成像技术、计算机技术和图像处理技术的飞速发展和电机驱动技术、传感器技术以及控制技术的不断发展,我们计划设计可以与人对打的台球智能机器人,使人们可以在即使一个人的情况之下也可以享受台球带来的娱乐、休闲。 我们这次设计的智能台球机器是以PIC单片机为核心的控制系统,结合了图像处理技术,PIC单片机控制电机系统,以及机械机构设计技术等方面的知识,利用了各种芯片来实现对台球系统的图像采集处理技术,同时,使用各种
[单片机]
基于<font color='red'>PIC单片机</font>及图像处理技术设计的智能台球机器人
PIC单片机在电话远程控制器中的低功耗设计
摘要:结合电话远程控制器的低功耗设计,探讨PIC单片机低功耗的设计方法,并给出设计电路原理图。 关键词:PIC单片机 低功耗设计 电话远程控制器 待机 引言 20世纪90年代以来,随着集成电路特征线宽的持续缩小以及芯片密度和工作频率的相应增加,降低功耗已经成为亚微米和深亚微米超大规模集成电路设计中的一个主要考虑因素。功耗的增加会带来一系列问题,例如电路参数漂移、可靠性下降、芯片封装成本增加等。因此,系统的功耗在整个系统设计中,尤其是在采用电池供电的系统中显得十分重要。 Microchip公司PIC系列的单片机为设计高性能、低功耗的单片机系统提供了很好的解决方案。下面从低功耗设计方法及具体例子来介绍PIC单片机低功耗应用。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved