|
|||||||||||
| 技術(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 |
C51求助:C51中加入?yún)R編怎么編譯錯(cuò)誤?出現(xiàn)了怪事 |
| 作者:wayner 欄目:單片機(jī) |
各位看官、DX你們好!小弟我在Keil V7.07環(huán)境下編了 如下程序,可是編譯出現(xiàn)了錯(cuò)誤(見(jiàn)下) 我看了匯編后的代碼,竟然將ack()函數(shù)作為起始地址了! 我將startup.a51加入到源文件中,如下的警告多出了一個(gè),再看代碼 確實(shí)將RAM初始化加到了程序的開(kāi)頭,可是出現(xiàn)了死循環(huán),一直初始化。 請(qǐng)問(wèn),中斷中可否用匯編?若可用,該怎么用?先謝謝了 assembling .\g115.src... linking... *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_STARTUP MODULE: .\g115.obj (G115) *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C?CCASE MODULE: .\g1105.obj (PG115) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C?CCASE MODULE: .\g1105.obj (G115) ADDRESS: 013DH #include "reg51.h" #include "intrins.h" #define uCHAR unsigned CHAR #define uint unsigned int sbit scl=P3^1; /* i2c AT24C02 SCL pin */ sbit sda=P3^0; /* i2c AT24C02 SDA pin */ sbit sound=P1^7; sbit p01=P3^2; sbit p02=P3^3; uCHAR volatile data getabyte,addres,dlycont; uCHAR volatile data read[3],insbak; uint data needfq; void icstart(void) void icstop(void) void ack(void) void time0() interrupt 1 { #pragma asm PUSH PSW PUSH ACC PUSH B PUSH DPH PUSH DPL MOV PSW,#08H DEC dlycont MOV TH0,#03CH MOV TL0,#0B8H MOV A,dlycont JNZ ?C0002 CLR ET0 CLR EA MOV A,#03H ADD A,insbak MOV addres,A ;將地址傳回來(lái) POP DPL POP DPH POP B POP ACC POP PSW POP DPL ;POP PC VALUE POP DPH MOV DPTR,#?main?red3 PUSH DPL PUSH DPH SJMP ?C0333 ?C0002: POP DPL POP DPH POP B POP ACC POP PSW ?C0333: RETI #pragma endasm } void time1() interrupt 3 using 2 { TH1=needfq>>8; TL1=(uCHAR)needfq; sound=!sound; } void main () { uCHAR data counter,keyprstime,datan; uCHAR data addr,testb,tabf; addr=addres=counter=0; /* */ keyprstime=insbak=0; if (!p01) { delay50ms(15); if (!p01) testb=0x74; ...... red3: if (testb==0xa5) ....... } void icstart(void) { scl=0; sda=1; _nop_(); _nop_(); scl=1; _nop_(); sda=0; _nop_(); } void icstop(void) { ....... } void ack(void) { scl=0; _nop_(); sda=0; _nop_(); scl=1; _nop_(); _nop_(); } |
| 2樓: | >>參與討論 |
| 作者: wayner 于 2005/1/27 19:54:00 發(fā)布:
MOV DPTR,#?main?red3這一句的作用是想中段后返回到指定地址 |
|
| 3樓: | >>參與討論 |
| 作者: wayner 于 2005/1/28 19:48:00 發(fā)布:
再次請(qǐng)教啊! |
|
| 4樓: | >>參與討論 |
| 作者: wayner 于 2005/1/29 18:06:00 發(fā)布:
在options for files"g115.c"中我也勾選了: generate assmbler SRC filer和assmble SRC file 兩選項(xiàng) |
|
| 5樓: | >>參與討論 |
| 作者: wayner 于 2005/2/2 10:36:00 發(fā)布:
頂 |
|
| 6樓: | >>參與討論 |
| 作者: wayner 于 2005/2/4 9:50:00 發(fā)布:
這個(gè)問(wèn)題沒(méi)有人感興趣嗎? |
|
| 7樓: | >>參與討論 |
| 作者: wayner 于 2005/2/4 9:53:00 發(fā)布:
大家都準(zhǔn)備過(guò)年了,不來(lái)了?祝大家春節(jié)快樂(lè)! |
|
| 8樓: | >>參與討論 |
| 作者: eric_tj 于 2005/2/4 12:36:00 發(fā)布:
我也出現(xiàn)過(guò)。。。。 奇怪的是執(zhí)行時(shí)沒(méi)從MAIN函數(shù)開(kāi)始反而從一個(gè)子函數(shù)開(kāi)始,是不是KEIL不支持混合模式編程? |
|
| 9樓: | >>參與討論 |
| 作者: eric_tj 于 2005/2/4 12:38:00 發(fā)布:
急!求教高手指點(diǎn)! |
|
| 10樓: | >>參與討論 |
| 作者: zhang_2000 于 2005/2/4 16:26:00 發(fā)布:
C中斷 C51編程只要是進(jìn)入interrupt 函數(shù) 回自動(dòng)把A,B,PSW等壓入堆棧,你又寫(xiě) PUSH PSW PUSH ACC PUSH B PUSH DPH PUSH DPL 重復(fù).沒(méi)有必要這么做的.還是好好的去看看關(guān)于中斷的C51的書(shū)吧. |
|
| 11樓: | >>參與討論 |
| 作者: wayner 于 2005/2/6 13:49:00 發(fā)布:
謝謝zhang_2000和eric_tj,我多試試看吧! |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號(hào) |