音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

為什么運行結(jié)果會是如此?

作者:ihafd 欄目:單片機
為什么運行結(jié)果會是如此?
   MPLAB IDE(v7.50)里,用如下語句作延時,單步運行一步i的值是增加8或者9而不是1,為什么啦?
  for(i = 0; i < 0x3FFF; i++)
  i = i;

  這樣做延時,單步運行一步i的值就是增加1.
while(i <= 0x3fff)
   {
    i++;
   }

在菜單的Debugger -- setting---Osc/Trace里把Processor Frequency 的頻率值改變后,在Trace -- Scycles里看程序運行所用的時間,發(fā)現(xiàn)不管Processor Frequency 的頻率值怎樣改變,程序運的時間是不會變的.
為什么啦?

2樓: >>參與討論
yewuyi
你看的機器周期數(shù)把?
不管換什么OSC,周期數(shù)是確定的

3樓: >>參與討論
ihafd
不是啊.
是在WATCH里的VALUE看到的啊.

4樓: >>參與討論
yewuyi
看這
 

5樓: >>參與討論
zhf0964
寫法錯了。
在C語言里,不允許對for循環(huán)中的循環(huán)變量賦值。
所以應(yīng)該修改成:
for(i = 0; i < 0x3FFF; i++)
{
   nop;
}



6樓: >>參與討論
ihafd
改成為樣還是一樣啊。
我改成這樣,運行一步i的值還是增加8或者9啊。
for(i = 0; i < 0x3FFF; i++);

* - 本貼最后修改時間:2006-12-5 20:40:05 修改者:ihafd

7樓: >>參與討論
xieyuanbin
我試過,兩種都可以的。
以上方法都是只加一,估計你在什么地方又修改了這個變量值。

8樓: >>參與討論
蘭天白云
你看的是秒表,
應(yīng)該在View菜單下看

9樓: >>參與討論
ihafd
就是這他程序.
就是一個那么簡單的程序,調(diào)試出的的結(jié)果卻是如如此.
每運行一步i的值還是增加8或者9 .編譯后調(diào)試看看.

#include<p18f452.h>
unsigned int i = 0;
int LED;
void main(void)
{
TRISD = 0x00;
PORTD = 0xff;
LED = 0x80;
while(1)
{
  PORTD =~LED;
  for(i = 0; i < 0x3FFF; i++);
  LED = LED>>1;
  if(LED == 0x00)
   LED = 0x80;
}
}


10樓: >>參與討論
wyh820826
軟件仿真有一定的局限。
特別是運行周期,和電腦的運行狀況有很大關(guān)系,最好是用硬件仿真或試驗板試驗。

11樓: >>參與討論
su_mj000
此問題與晶振頻率無關(guān)
但與編譯及MPLAB-IDE有關(guān).看看匯編清單就應(yīng)該清楚了.

另外,此處的i變量是否是全局變量(按理不應(yīng)設(shè)成全局變量)?

盡管大多數(shù)人不會在循環(huán)體內(nèi)隨意改變循環(huán)變量,但C語言并不禁止
這么做.不過"i=i;"可能會被優(yōu)化掉.

12樓: >>參與討論
mikesullen
同意7樓
簡化程序試下,我剛才也試了,沒有問題。。。

13樓: >>參與討論
xieyuanbin
程序本身沒問題?赡苁荢IM的一個功能。
調(diào)試了樓主的程序,確實如樓主所說一次變化I不止加1,而是加8.5或12.5,但從匯編代碼來看是正常的,也沒有別的程序在改變這個變量,可能是程序的編寫者覺得在這個上面死等浪費太多,所以多走了幾步,但時間是準的。不過我不知道那個開關(guān)在哪里。你若要看實際的單步,可以看PROGRAM MEMORY中實際的匯編代碼,或者也可這樣寫:
for(i = 0; i < 0x3FFF; i++)
{
CLRWDT();
}
在里面加一個空的操作即可。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
pic16f73  RA1可以讀出頻率嗎?
急,通信問題
我的電流檢測有問題,高手指點
PIC單片機中的TMR1在中斷中如何使用
16f917使能代碼保護后無法用ICD2重復(fù)擦寫,
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號