kingman 发表于 2009-4-18 19:51:06

PIC16C71单片机的问题和对策

问题1:在芯片进入低功耗睡眠模式 (SLEEP MODE)后,其振荡脚将处于浮态,这将使芯片的睡眠功耗上升,比原手册中的指标高了10μA以上。

对策:在振荡脚OSC1和地 (GND)之间加一10MΩ电阻可防止OSC1进入浮态,且不会影响单片机正常振荡。


问题2:RA口方向寄存器TRISA目前只是一个4位寄存器,对应于RA0~RA3,并非手册中所言是8位寄存器,对应于RA0~RA4,即RA4并没有相应的输入/输出方向控制位,它是一个具有开极输出,施密特输入I/O脚。


对策:避免使用对RA口进行读-修改-写指令(如BCF RA, BSF RA),以免非意愿地改变RA4的输入/输出状态。对于RA口的操作应采用寄存器的操作方式(MOVWF RA)。

问题3:当CPU正在执行一条对INTCON寄存器进行读-修改-写指令时,如果发生中断请求,则读中断例程会被执行二次。这是因为当中断请求发生后INTCON寄存器中的GIE位会被硬件自动清零(屏蔽所有中断),并且程序转入中断例程入口(0004H)。当GIE位被清零后,如果这时正好CPU在执行一条对INTCON的读-修改-写指令(如BSF INTCON等),则 GIE位还会被写回操作重新置1,这样会造成CPU二次进入中断例程。
对策:如果在程序中需对INTCON的某一中断允许位进行修改,则应事先置GIE=0
,修改完成后再恢复GIE=1。
…………..
BCF INTCON, GIE
BSF INTCON, ×××
BSF INTCON, GIE
…………..
问题4:当芯片电压VDD加电上升时间大于100μs时,电源上电复位电路POR和电源上电延时器PWRT可能不能起正常的作用,而使芯片的复位出现不正常(即PC≠复位地址)。一般在这种情况下建议不要采用PWRT。
对策:如果VDD上升时间很长,此芯片一般需较长的电源上电延时,可靠的电源上电延时方法如图1所示,在MCLR端外接复位电路。
问题5:如果在A/D转换中用RA3作为参考电压输入,则最大满量程误差(NFS)要大于手册中的指标。实际情况如表1所示。
表1 A/D满量程误差表
VREF源
(5.12V)
满量程误差
(NFS)
VDD
<±1 LSb
RA3
<±2.5 LSb



页: [1]
查看完整版本: PIC16C71单片机的问题和对策