|
發布時間: 2023-8-10 10:30
正文摘要:想問一下大家,在keil在線調試的過程中,怎么手動把ADC_CONTR寄存器里的ADC_FLAG位置1呢,或者說,怎么模擬一個ad值給它,運行時一直卡在標藍處不動了 |
a825563619 發表于 2023-8-11 09:38 只是學習的話,仿真沒問題的,學得差不多再搞實際器件 proteus 8.9是支持STC15器件的,其他仿真軟件我就不清楚了 |
a825563619 發表于 2023-8-11 09:38 調試AD轉換只能實際器件才有意義。 |
|
while(!(ADC_CONTR & ADC_FLAG)); 這個分號一定需要 |
xuyaqi 發表于 2023-8-10 14:56 只能實際器件嗎,在線的可以嗎 |
lkc8210 發表于 2023-8-10 17:42 原來如此,強啊,話說如果在線仿真可以采到ad值嗎,還是說一定要實物呢 |
sttt300 發表于 2023-8-10 19:21 對的,是我疏忽了,之前試了別的跳出方式忘了加; ![]() |
|
舉個例子: a=2; while(a--); a=1; a=2; 執行結果:a=2 假如少了個分號 a=2; while(a--) a=1; a=2; 程序就執行不下去了,一直while循環 這樣可以理解吧 |
| while語句后面沒有加“;”,這樣就會把下一句當成是while的循環體,剛好下一句是清零,就永遠在while這里循環了 |
| 是不是代碼有問題呢,清除標志位是不是不該這么寫呢 |
|
本帖最后由 lkc8210 于 2023-8-10 17:53 編輯 1.在while行打斷點 2.在Memory1窗口輸入D:0xBC(ADC_CONTR的地址) 3.按運行,會停在while行 4.在0xBC位置的值加0x10 如現在看到89(即0x89) 0x89+0x10 = 0x99
5.在0xBC位置輸入99 6.再按運行就會跳出while
|
| 直接注釋掉 while(!(ADC_CONTR & ADC_FLAG));,調試完后改回來。 |
| 你應該查查是不是單片機初始化不對?造成一直在等待轉換結束,否則ADC不會出現這個問題 |
|
將本句暫時改成 while(1或0) 調試完成后改回。 |
| 實際器件會自動返回1,人為返回1調試沒有意義。 |