微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机的学习心得

PIC单片机的学习心得

时间:01-11 来源:互联网 点击:

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

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

  唤醒功能

  其他功能

  定时器Timer0

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

  定时器、醒功能。

  计数器值溢出时发生中断预分频器与看门狗共用。

  定时器Timer1

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

  定时器、计数器

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

  计数器值溢出时发生中断

  与比较器模块、

  捕获/比较模块共用

  定时器Timer2

  有前分频器和后分频器

  醒功能。

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

  PWM的产生需要此定时器

  AD模块

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

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

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

  (2)通道的选择,有八路外部通道和三路内部通道,可以通过ADCON0寄存器的CHS3: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的时钟源,ADCS2: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中断了。

  看门狗

  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指令喂一次狗,以避免引起芯片复位。当系统受到严重干扰处于失控状态时,就不可能在每

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top