阅读:1483回复:6
rayyang斑竹请进
关于PHILIP网站上的D12例程(Mass Storage例子程序,52单片机和D12连接环境)的一个疑问:
在例程中的USB中断处理usb_isr()中,当读D12中断寄存器的值后,如果有SUSPEND_CHANGE中断到来,则把52的P0~P3全置值0XFF,根据该例程的电路图,52的P00~P03分别接D12的数据脚DATA0~DATA3,因此可以肯定P00~P03是作为数据脚使用的,而不是作为I/O口使用。请斑竹指教,既然P00~P03是作为数据脚,那么怎么能对其赋值0XFF呢?下面这段代码的真实用意是什么?听zn_soft说,你对D12很精通,所以想到了问你,还请斑竹费心指教了。 if(D12IS_SUSPENDCHANGE) { if(D12SUSPD == 1) { // In suspend state P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; P3 = 0xFF; PCON |= 0x02; //Powerdown bit set while (1); } } |
|
沙发#
发布于:2002-06-12 15:52
rayyang哪里去了?进if(D12IS_SUSPENDCHANGE)
并且又进入下面条件 if(D12SUSPD == 1) 意味着什么?是不是表明传输已经掉线?因为后面加了while(1);死循环在那里干什么? |
|
板凳#
发布于:2002-06-12 17:13
因为51对D12的操作都是在中断函数中.主函数在哪里打转无关紧要.所以在挂起那里有一个while(1).当有有新的D12信号来时,中断函数会跳出这个死循环的.
P0不管是不是在IO方式还是在总线方式都可以进行赋值.在这里相当于将单片机设置到上电状态.其实也没有什么意思. |
|
|
地板#
发布于:2002-06-12 17:47
因为51对D12的操作都是在中断函数中.主函数在哪里打转无关紧要.所以在挂起那里有一个while(1).当有有新的D12信号来时,中断函数会跳出这个死循环的. 多谢指教! 但是这段代码就是在中断处理函数usb_isr()里写的呀,此时D12的中断被关闭掉进行该处理,WHILE(1)后根本没有办法跑到函数跳出前的重新打开D12中断那一步。 另外你说51对D12的操作都是在中断函数中进行,也不一定,可能你看到的例程跟我这个不同吧,我这个例程中批管道的处理就不是在中断函数中进行的。 P0如果是I/O口,只能给它赋0或1呀,只能有1bit,不能够给它赋0xff吧? |
|
地下室#
发布于:2002-06-13 14:35
估计你看到的东西和我的不一样.
P0共有8位呀.0xff是天经地义的. |
|
|
5楼#
发布于:2002-06-14 12:45
takaya说的是正确的。你所说的P0其实是8个bit。
|
|
|
6楼#
发布于:2002-06-17 10:46
多谢指教,我51和52单片机了解得太少了。先去看看资料。
|
|