第一部分:SLEEP模式的实验 1. 目的 验证SLEEP模式的功能与特性 2. 材料
表5-3 材料

3. 电路
 图5-12 原理图
4. 实照
 图5-13 实照
5. 步骤 1. PIC基本电路 □将PIC的MCLR引脚接上+5V,Vss引脚接上+0V,而VDD与VSS引脚之间接个直流电流表或者是万用表的直流电流档。 □将石英振荡器的两个引脚,分别接上PIC的OSC1、OSC2引脚。 □将两个电容的其中一个电容,一脚接OSC1、另一脚接+0V,而另外一个电容,则是一脚接OSC2,另一脚与前一个电容的作法一样,接+0V。 2. SLEEP验证电路 □将RA0引脚接上一个220Ω的电阻,然后再串接上一个LED ,最后把LED的负极脚接+0V □将一个2KΩ的电阻一边与+5V接,另一边则接到PIC的引脚。 □ 将DIP SW一端接PIC的RA1引脚,另一端直接连+0V。
6. 流程图
 图5-14 流程图
7. 程序 □标号说明 ·RESET:起始程序的进入点 ·RE-TEST:重复检查指拨开关电位的进入点
□寄存器使用配置情形 ·F5:读取指拨开关电位用

8. 说明
起先当我们尚未给PIC接入电源时,先将指拨开关拨到OFF的位置,接着送电,执行了点亮LED的程序生,很快PIC执行到"BTFSC 5,1"的指令,由于从外部所检测到的电位一直是"HI",所以程序的执行路径开成了一个无穷循环,不断在执行检测外部电位的工作。
这个时候,我们从直流电表上可得知PIC在无穷循环的执行下,其PIC单片机的电流损耗情形。在此处我们以无穷循环执行的电力损耗,来代表一般正常运行的电力损耗。
然后我们将指拨到ON的位置,此时PIC检测到"LO"原电位,改变为不同的执行路径,而跳离了无穷循环。
一旦跳离了无穷循环的执行,紧接着执行的是SLEEP指令,执行了SLEEP指令后,PIC单片机便因为SLEEP指令的执行,而进入了POWER DOWN的模式(即是一种省电状态),这时再来看直流表的电流读数,便会小于原先执行无穷循环时的电流量了,因此达到省电的性能。
在PIC进入POWER DOWN模式后,PIC的I/O状态会保持在原先尚未执行SLEEP指令前的状态,即是输入还是输入,输出还输出,而输出的电位也不会被改变,因为即使进入省电状态后,LED依然亮着就是证明。
9. 除错 电路方面可能的错误: □LED不亮:可能是将正负极引脚方向弄反 □LED不亮:可能是把2KΩ与日俱增200Ω的电阻插错位置。 □指拨开关控制结果相反:将开关两端接线对调即可。
程序方面可能的错误:
□BTSFC与BTFSS两个指令容易混淆,必须注意。 □MOVLW与MOVWF两个指令容易混淆,必须注意。 □以二进制(Binary)表示数值时,要注意位数的位置。
第二部分:WATCHDOG TIMER的实验
1. 目的 用DIP SW来模拟执行故障情况,并由LED的操作状况来验证WATCHDOG的功能与特性。 2. 材料 除了不用万用表或直流电流表之外,所有器件与前一部分的实验相同。 3. 电路 与第一部分电路相同,请参考第一部分。 4. 实照 与和一部分实照相同,请参考第一部分。 5. 步骤 1. PIC基本电路 □将PIC的MCLR引脚接上+5V,Vss引脚接上去+0V,而VDD与VSS引脚之间接个直流电流表或者是万用表的直流电流档。 □将石英振荡器的两个引脚,分别接上PIC的OSC1、OSC2引脚。 □将两个电容的其中一个是电容,一脚接OSC1、另一个接+0V ,而另外一个电容,则是一脚接OSC2,另一脚与前一个电容的作法一样,接+0V。 2. WATCHDOG TIMER验证电路 □与SLEEP的验证电路完全相同。 6. 流程图

7. 程序 □标号说明 ·RESET:起始的进入点 ·SSS:主程序进入点 ·LAM:慢亮操作的进入点 ·XX:检测指拨开关电位的进入点 ·BAM:快亮操作的进入点 ·DELAY:延时子程序的进入点 ·DD1:递减延时操作进入点(1) ·DD2:递减延时操作进入点(2) □寄存器使用配置情形 ·F5:读取拨动开关电位用 ·F30:延时子程序递减延时用(1) ·F29:延时子程序递减延时用(2) ·F31:递减重复闪灭执行次数用

8. 说明
首先在程序中,我们使用OPTION指令将WDT设置为约定2 .5秒才会计时额满,当然这也使用分频来延长定时时间。 在这次的实习中,我们用一个指拨开关来模拟PIC执行上的问题(Trouble),使PIC无法正常运行,在面包板送电之初,我们将此指拨开关打在OFF这一端,使PIC能运行正常。 送电之后,PIC开始运行,正常的运行情形是使LED慢节奏的亮八下, 然后再快节奏的亮八下,这样周而复始的运行,即是正常的状况。 由于程序中有一段检查开关电位的指令"BTFSC 5,1",原先在指拨开关打在OFF端的情况下,这个指令检测到"HI"电位,使程序能顺畅地循环执行而不间断,并在执行途中不时地执行CLRWDT的指令,以防止WDT产生复位,影响PIC正常工作,当然这必须将CLRWDT指令适时适处地放在程序中。 当我们把指拨开关打到ON端,会发现LED慢节奏的亮完八下后,轮到执行检测外部电位时,由于所侦得为"LO"电位,所以进入重复检查电位的循环,只要电位无法恢复成"HI",程序的执行就无法跳出此循环。 如果这种情况一直持续,约2.5秒后会发现,LED重新慢节奏的亮八下,这种现象表示WDT定时值已满,对PIC产生了复位,使芯片从头运行,因为在持续的检查循环中,并没有执行CLRWDT的指令,以致于WDT持续递增定时值,在2.5秒后WDT计满,使PIC复位。 当然,如果指拨开关拨回OFF端,仍旧会在2.5秒后重新运行,直到成ON端后,才有机会正常运行,以及执行到快节奏的闪烁操作。 如果在检测电位循环中,也有CLRWDT指令的执行,那么PIC的运行仍会持续不正常,详细与深入的探讨可以参考旗标出版的另一本PIC书籍"PIC单片机应用系列(一)烧写器"。 所以安排CLRWDT指令也是有决窍,至于WDT的计满时间,读者也可以自行调整,本次实习只是以让肉眼能证实际上考虑,所以才将WDT计时调慢,真正的应用情况大多比较快速。
9. 除错
电路方面可能的错误:如第一部分
程序方面可能的错误: □插入CLRWDT指令必须适时适处,如果汉有把握可以多插入几处。 □调用延时子程序的次数要正确,否则LED的亮灭操作会不正确。 □BSF与BCF两个指令必须明确,否则LED的亮灭操作会不正确。
|