欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: keil的單片機AD轉換程序調試 [打印本頁]

作者: a825563619    時間: 2023-8-10 10:30
標題: keil的單片機AD轉換程序調試
想問一下大家,在keil在線調試的過程中,怎么手動把ADC_CONTR寄存器里的ADC_FLAG位置1呢,或者說,怎么模擬一個ad值給它,運行時一直卡在標藍處不動了

51hei截圖_20230810102751.png (82.96 KB, 下載次數: 34)

51hei截圖_20230810102751.png

作者: xuyaqi    時間: 2023-8-10 14:56
實際器件會自動返回1,人為返回1調試沒有意義。
作者: yzwzfyz    時間: 2023-8-10 16:10
將本句暫時改成 while(1或0)
調試完成后改回。
作者: cnfloatleaf    時間: 2023-8-10 16:28
你應該查查是不是單片機初始化不對?造成一直在等待轉換結束,否則ADC不會出現這個問題
作者: wulin    時間: 2023-8-10 17:20
直接注釋掉 while(!(ADC_CONTR & ADC_FLAG));,調試完后改回來。
作者: lkc8210    時間: 2023-8-10 17:42
本帖最后由 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




作者: a825563619    時間: 2023-8-10 18:42
是不是代碼有問題呢,清除標志位是不是不該這么寫呢
作者: sttt300    時間: 2023-8-10 19:21
while語句后面沒有加“;”,這樣就會把下一句當成是while的循環體,剛好下一句是清零,就永遠在while這里循環了
作者: sttt300    時間: 2023-8-10 19:30
舉個例子:
a=2;
while(a--);
a=1;
a=2;
執行結果:a=2
假如少了個分號
a=2;
while(a--)
a=1;
a=2;
程序就執行不下去了,一直while循環
這樣可以理解吧
作者: a825563619    時間: 2023-8-11 09:31
sttt300 發表于 2023-8-10 19:21
while語句后面沒有加“;”,這樣就會把下一句當成是while的循環體,剛好下一句是清零,就永遠在while這里 ...

對的,是我疏忽了,之前試了別的跳出方式忘了加;
作者: a825563619    時間: 2023-8-11 09:37
lkc8210 發表于 2023-8-10 17:42
1.在while行打斷點
2.在Memory1窗口輸入D:0xBC(ADC_CONTR的地址)
3.按運行,會停在while行

原來如此,強啊,話說如果在線仿真可以采到ad值嗎,還是說一定要實物呢
作者: a825563619    時間: 2023-8-11 09:38
xuyaqi 發表于 2023-8-10 14:56
實際器件會自動返回1,人為返回1調試沒有意義。

只能實際器件嗎,在線的可以嗎
作者: liucan2020    時間: 2023-8-11 10:20
while(!(ADC_CONTR & ADC_FLAG));   這個分號一定需要

作者: xuyaqi    時間: 2023-8-11 10:29
a825563619 發表于 2023-8-11 09:38
只能實際器件嗎,在線的可以嗎

調試AD轉換只能實際器件才有意義。
作者: sttt300    時間: 2023-8-11 11:16
a825563619 發表于 2023-8-11 09:38
只能實際器件嗎,在線的可以嗎

只是學習的話,仿真沒問題的,學得差不多再搞實際器件
proteus 8.9是支持STC15器件的,其他仿真軟件我就不清楚了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1