新闻中心

EEPW首页>嵌入式系统>设计应用> PIC单片机的学习心得

PIC单片机的学习心得

作者: 时间:2014-01-11 来源:网络 收藏

  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中断了。

  看门狗

的看门狗WDT其定时计数的脉冲序列由片内独立的RC振荡器产生,所以它不需要外接任何器件就可以工作。而且这个片内RC振荡器与引脚OSC1/CLKIN上的振荡电路无关,即使OSC1和OSC2上的时钟不工作,WDT照样可以监视定时。例如:当在执行 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计时溢出引起的。

  比较器

有两个比较器: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来关闭)。

  捕获/比较/PWM功能

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

  这三个功能需要定时器的支持,捕获和比较功能需要定时器Timer1的支持,PWM功能需要定时器Timer2的支持。都有中断的功能,选择这三种功能的某一种功能可以通过寄存器CCP1CON来设置。CCP1CON的低四位CCP1M3:0>可以通过不同的组合来开启某项功能和关闭所有功能,当CCP1M3: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的低四位CCP1M3:0>来设置是哪一种事件。

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

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

  复位、中断和睡眠

  (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,分别表示的是上电复位和欠压复位标志。具体的可以参看手册。

比较器相关文章:比较器工作原理


分频器相关文章:分频器原理
上拉电阻相关文章:上拉电阻原理


评论


相关推荐

技术专区

关闭