最近遇到一个比较奇怪的问题,我用p18lf46k22 写了一段程序,RD0,RD1,RD2接到一个74LS138的芯片的地址线。所以每次改变74LS138的输出时都要修改这三个输出。开始用单片机内部的16MHZ晶震输出都是正常的。但奇怪的是当我吧PLL打开的时候(FOSC X4 ,也就是说内部时钟工作在64MHZ)RD0怎么都没有输出,RD1,RD2,工作正常,用示波器观察RD0一直是低电平,奇怪的是把这一段程序去掉,单独把RD0置1的时候输出又是正常的。
.......
case 1:{LATD2=0;
LATD1=0;
LATD0=1;
LED_EN=1;break;}(这段程序大概每3ms调用一次)。
查了半天,发现只要把LATDx=x的指令重复几次就可以实现想要的功能了。也就是:
case 1:{LATD2=0;
LATD2=0;
LATD2=0;
LATD1=0;
LATD1=0;
LATD1=0;
LATD0=1;
LATD0=1
LATD0=1
LED_EN=1;break;}
请问有人知道这是神马原因呢。。。。难道是端口根本就不能工作在64MHZ的时钟下,中间需要插点延迟? |