|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
PICC優(yōu)化后程序跑飛的代碼 |
| 作者:黃果樹(shù) 欄目:單片機(jī) |
關(guān)閉Enable assemble optimization 編譯出來(lái)的代碼 6: /******************************************************************* 7: 起動(dòng)IIC總線函數(shù) 8: 函數(shù)原型: void I2cStart(void); 9: 功能:啟動(dòng)IIC總線,即發(fā)送I2C起始條件. 10: ********************************************************************/ 11: void I2cStart(void) 12: { 13: SDA_DIR=0; //scl設(shè)為輸出 001BC5 1683 BSF 0x3, 0x5 001BC6 1303 BCF 0x3, 0x6 14: SCL_DIR=0; //sda設(shè)為輸出 001BC8 1105 BCF 0x5, 0x2 15: SDA=1; 001BC9 1283 BCF 0x3, 0x5 16: #asm 17: goto $+1 001BCB 2BCC GOTO 0x3cc 18: goto $+1 001BCC 2BCD GOTO 0x3cd 19: NOP 001BCD 0000 NOP 20: #endasm 21: SCL=1; 001BCE 1505 BSF 0x5, 0x2 22: #asm 23: goto $+1 001BCF 2BD0 GOTO 0x3d0 24: goto $+1 001BD0 2BD1 GOTO 0x3d1 25: NOP 001BD1 0000 NOP 26: #endasm //起始條件建立時(shí)間大于4.7us,延時(shí) 27: SDA=0; 001BD2 1285 BCF 0x5, 0x5 28: #asm 29: goto $+1 001BD3 2BD4 GOTO 0x3d4 30: goto $+1 001BD4 2BD5 GOTO 0x3d5 31: // NOP 32: #endasm 33: SCL=0; 001BD5 1105 BCF 0x5, 0x2 34: } 001BD6 0008 return 打開(kāi)Enable assemble optimization 編譯出來(lái)的代碼 6: /************************************************* 7: 起動(dòng)IIC總線函數(shù) 8: 函數(shù)原型: void I2cStart(void); 9: 功能:啟動(dòng)IIC總線,即發(fā)送I2C起始條件. 10: ********************************************************************/ 11: void I2cStart(void) 12: { 13: SDA_DIR=0; //scl設(shè)為輸出 000898 1683 BSF 0x3, 0x5 000899 1303 BCF 0x3, 0x6 14: SCL_DIR=0; //sda設(shè)為輸出 00089B 1105 BCF 0x5, 0x2 15: SDA=1; 00089C 1283 BCF 0x3, 0x5 16: & |
| 2樓: | >>參與討論 |
| 作者: 張明峰 于 2004/2/25 22:54:00 發(fā)布:
我不會(huì)懷疑是優(yōu)化造成的問(wèn)題 類似的I2C程序也用C寫(xiě)過(guò),從來(lái)就沒(méi)有什么問(wèn)題。有開(kāi)發(fā)工具的話就趕緊調(diào)試呀,在這兒空等干嗎? 就算程序能運(yùn)行,看你對(duì)I2C總線的如此操作方式,要我看給個(gè)50分差不多了。你對(duì)I2C協(xié)議的本質(zhì)根本就沒(méi)有掌握。 |
|
| 3樓: | >>參與討論 |
| 作者: 黃果樹(shù) 于 2004/2/26 9:17:00 發(fā)布:
問(wèn)題解決 4: /******************************************************************* 5: 起動(dòng)IIC總線函數(shù) 6: 函數(shù)原型: void I2cStart(void); 7: 功能:啟動(dòng)IIC總線,即發(fā)送I2C起始條件. 8: ********************************************************************/ 9: void I2cStart(void) 10: { 11: SDA_DIR=0; //scl設(shè)為輸出 000895 1683 BSF 0x3, 0x5 000896 1303 BCF 0x3, 0x6 12: SCL_DIR=0; //sda設(shè)為輸出 000898 1105 BCF 0x5, 0x2 13: SDA=1; 000899 1283 BCF 0x3, 0x5 14: #asm 15: goto $+1 00089B 289C GOTO 0x9c 16: goto $+1 00089C 289D GOTO 0x9d 17: NOP 00089D 0000 NOP 18: #endasm 19: SCL=1; 00089E 1505 BSF 0x5, 0x2 20: #asm 21: goto $+1 00089F 28A0 GOTO 0xa0 22: goto $+1 0008A0 28A1 GOTO 0xa1 23: NOP 0008A1 0000 NOP 24: #endasm //起始條件建立時(shí)間大于4.7us,延時(shí) 25: SDA=0; 0008A2 1285 BCF 0x5, 0x5 26: #asm 27: goto $+1 0008A3 28A4 GOTO 0xa4 28: goto $+1 0008A4 28A5 GOTO 0xa5 29: NOP 0008A5 0000 NOP 30: #endasm 31: SCL=0; 0008A6 1105 BCF 0x5, 0x2 不加return時(shí),此句未產(chǎn)生代碼 32: return;就加了此句, 33: } 0008A7 0008 RETURN不加return時(shí),編譯后無(wú)此句代碼,造成程序跑飛,堆棧溢出 * - 本貼最后修改時(shí)間:2004-2-26 9:21:07 修改者:黃果樹(shù) |
|
| 4樓: | >>參與討論 |
| 作者: 黃果樹(shù) 于 2004/2/26 9:28:00 發(fā)布:
呵呵! 估計(jì)張斑竹給我50分的原因是我用SDA=1而不是釋放總線由上拉電阻產(chǎn)生"high"吧! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |