|
|||||||||||
| 技術(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 |
調(diào)試程序碰到一個低級郁悶的事. |
| 作者:qzgqzg 欄目:單片機 |
今晚調(diào)程序,碰到一個奇怪的問題:我要點亮一個LED(連PB.6口),用MEGAL128, CV編譯器 程序如下: #include <megal128.h> #define led PORTB.6 void ini() { DDRB=0xff; PORTB=0xff; } void main(void) { ini(); while(1) { led=0;//低電平亮 } } //led就是不亮,換了一臺電腦編譯也不行,真不知是怎么回事?但改成如下就亮了: #include <megal128.h> #define led PORTB.6 void ini() { DDRB=0xff; PORTB=0xff; } void main(void) { DDRB=0xff; PORTB=0xff; while(1) { led=0;//低電平亮 } } //各位碰到過嗎?能告訴小弟是什么原因嗎?謝謝!! |
| 2樓: | >>參與討論 |
| 作者: gxlujd 于 2004/4/22 8:41:00 發(fā)布:
ICC也有這個問題 我用ICC也碰到過,只有把配置端口的語句放在MAIN()里才行,不知為何。 |
|
| 3樓: | >>參與討論 |
| 作者: saintljb 于 2004/4/22 8:56:00 發(fā)布:
如果把端口初始化放在一個函數(shù)里必須先關(guān)全局中斷,之后再打開 |
|
| 4樓: | >>參與討論 |
| 作者: gxlujd 于 2004/4/22 9:04:00 發(fā)布:
原來如此 樓上的大俠,這些秘笈在哪本書能學(xué)到。课铱戳撕芏啾続VR的書都沒見說這些很小但很關(guān)鍵的要點。 |
|
| 5樓: | >>參與討論 |
| 作者: qzgqzg 于 2004/4/22 9:43:00 發(fā)布:
q 我先把中斷都關(guān)了也不行,前幾天我也編過一個程序,也是將端口初始化放在一個函數(shù)里的。我同事也大都這樣,也沒碰到這種情況。(我是新接觸AVR的) |
|
| 6樓: | >>參與討論 |
| 作者: 元首 于 2004/4/22 9:48:00 發(fā)布:
saintljb 說的對! |
|
| 7樓: | >>參與討論 |
| 作者: avr 于 2004/4/22 11:16:00 發(fā)布:
應(yīng)該是M103熔絲設(shè)置的問題,看一下LST文件就知道編譯器沒有錯. 應(yīng)該是M103熔絲設(shè)置的問題,而不是什么“如果把端口初始化放在一個函數(shù)里必須先關(guān)全局中斷,之后再打開”。 |
|
| 8樓: | >>參與討論 |
| 作者: gxlujd 于 2004/4/22 16:23:00 發(fā)布:
我用90S8535都是這樣,應(yīng)該不是熔絲的問題吧? 我用90S8535都是這樣,應(yīng)該不是熔絲的問題吧? |
|
| 9樓: | >>參與討論 |
| 作者: avr 于 2004/4/22 17:43:00 發(fā)布:
你可以將你的代碼貼出來,供大家分析一下。 樓主的程序,應(yīng)該是由于M103熔絲配置不正確,從而在調(diào)用函數(shù)返回時,堆棧出錯造成的。 如果你使用8535也出現(xiàn)這個問題,檢查一下編譯選項設(shè)置是否正確。 要確認是否是編譯器的問題,一定要看編譯生成的LST文件,才能看出編譯生成的代碼有無錯誤。 * - 本貼最后修改時間:2004-4-22 17:50:42 修改者:avr |
|
| 10樓: | >>參與討論 |
| 作者: zsmbj 于 2004/4/22 18:11:00 發(fā)布:
同意avr的見解! |
|
| 11樓: | >>參與討論 |
| 作者: smxdss 于 2004/4/22 19:15:00 發(fā)布:
沒問題呀! //剛剛試了一下!只不過我的是高電平亮而已。 #include <mega16.h> #define led PORTA.6 void ini() //你試著將此行前的void云掉。 { DDRA=0xff; PORTA=0x00; } void main(void) { ini(); while(1) { led=1; } } |
|
| 12樓: | >>參與討論 |
| 作者: qzgqzg 于 2004/4/23 10:50:00 發(fā)布:
謝謝各位 我換了另一塊扳子是對的,因急著調(diào),現(xiàn)在還沒查原因.但我覺得不應(yīng)該出現(xiàn)這種情況.因我的PB口也只用到其他兩個作IO口(作紅外通信),即使我的外圍有問題,我光用以上程序調(diào)都是這種情況.有時間再分析了.很感謝各位! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |