2010-10-18 125 views
1

我想通過通用編程器(SuperPro)將Keil編譯器中的Blinky程序編程爲P89LPC936微控制器。但微控制器沒有運行。但是當我在assambly編寫一個簡單的程序並編寫相同的硬件時,它工作正常。請問我在哪裏做錯了我需要幫助。p89lpc936需要keil編程幫助

這裏是代碼>>> 代碼:

/* Blinky.C - LED Flasher for the Keil LPC900 EPM Emulator/Programmer Module */ 

#include <REG936.H> // register definition 

void delay (unsigned long cnt) 
{ 
    while (--cnt); 
} 

void main() 
{ 
    unsigned char i; 

    P1M1 |= 0x20; 
    P1M2 &= 0xDF; 

    P2M1 &= 0xE7; 
    P2M2 |= 0x18; 

delay (20000); 
    for(;;) 
    { for (i = 0x01; i; i <<= 1) 
    { P2 = i; // simulate running lights 
     delay (20000); 
    } 
    for (i = 0x80; i; i >>= 1) 
    { P2 = i; 
     delay (20000); 
    } 
    } 
} 

這裏是十六進制文件>>>

:10006B008F0B8E0A8D098C08780874FF12004DECEB 
:06007B004D4E4F70F32210 
:100003004391205392DF53A4E743A5187F207E4EEC 
:100013007D007C0012006B7B01EB6013F5A07F2059 
:100023007E4E7D007C0012006BEB25E0FB80EA7BBB 
:1000330080EB60E3F5A07F207E4E7D007C00120004 
:070043006BEBC313FB80EA25 
:01004A002293 
:04FFF00023001E00CC 
:08FFF800000000000000000001 
:030000000200817A 
:0C00810078FFE4F6D8FD75810B02000347 
:10004B007401FF3395E0FEFDFC080808E62FFFF670 
:10005B0018E63EFEF618E63DFDF618E63CFCF622E9 
:00000001FF 

這裏是彙編代碼和它的hex文件這是工作絕對正確的。

Code: 
; LPC936A1.A51 
; Oct 7, 2010     PCB: ? 

; Features:  ? 
;    ? 


$mod51 


RL1  bit  P2.3 
RL2  bit  P2.4 

       DSEG AT 20H 
FLAG1: ds  1 
STACK: ds  1 


FRL1 bit  FLAG1.0     ; Relay 1 


       CSEG 
       org  0H 
       ajmp Reset 

       org  30H 
Reset:   mov  0A5H,#0FFH 

Start:   mov  c,FRL1     ; 
       mov  RL1,c 
       cpl  c 
       mov  FRL1,c 
       mov  RL2,c 

       acall Delay0 

       ajmp Start 

Delay0:   mov  R7,#250 
Delay:   mov  R6,#61 
Delay1:   nop 
       nop 
       nop 
       nop 
       nop 

       nop 
       nop 
       nop 
       djnz R6,Delay1 
       djnz R7,Delay 
       ret 

Text:   DB  '(C) DIGIPOWER 2010' 
Text0:   DB  ' LPC936A1 ' 

       END 


And its hex is 
:020000000130CD 
:1000300075A5FFA20092A3B3920092A411400133D0 
:100040007FFA7E3D0000000000000000DEF6DFF2D7 
:10005000222843292044494749504F5745522032CE 
:0D006000303130204C5043393336413120CF 
:00000001FF 

請幫讀音字卡住。

問候 達尼

+4

這不是一個真正的問題嗎?OP已經表現出了一些努力,提供了他/她的嘗試,並且正在尋求幫助。嘖。 – 2010-10-18 11:36:01

+1

你應該重新回顧以前提出的問題,然後點擊最有幫助的答案旁邊的勾號。你可以在這裏看到你以前的問題:http://stackoverflow.com/users/357296/adnan#tabs-question-user – 2010-10-18 11:42:18

+0

@Colin感謝編輯 – jassuncao 2010-10-18 11:44:59

回答

0

拆卸或編譯C彙編器,看看有什麼編譯器在做什麼。什麼在你的C程序中工作或沒有? LED是否發光?你的彙編器看起來正在燒14萬條指令,但C也許是40,000條?這可能會導致你可以看到你的眼睛和看起來在開但不閃爍的光。

C程序看起來是在設置彙編器沒有的寄存器。那裏有bug嗎?他們禁用了哪些不應該被觸及的東西?

底線是你需要將兩個程序相互移動,使彙編程序複雜化,直到它接近C正在做的事情,並調整彙編程序的C(不得不查看編譯器的輸出)。

+0

好吧..這是個好主意......我會努力的。但是,C代碼正在模擬器上運行。 – Adnan 2010-10-20 11:35:51

+0

它在做什麼或者不在做什麼?如果LED發光,它可能會眨眼睛,你的眼睛看不到它。但模擬器會。還是LED燈仍然熄滅?模擬器很少反映現實。通常只允許只讀存儲器寫入,在芯片之外的地址提供存儲器等。 – 2010-10-20 13:50:01

+0

不,它不是主體,如果我不眨眼,讓它們連續不斷,即使那樣我也不會讓它們發光和引腳也不要顯示輸出電壓。 – Adnan 2010-10-20 14:33:53

1

我不具有Keil工具的工作很長一段時間,我從未使用過微,所以也許我不能幫你了。

  • 您是否試過在模擬器上運行它?
  • 嘗試在main中放置一個斷點並檢查它是否停在那裏。我可能會遇到一些c_start的問題,而你的main沒有被調用。
  • 看看初始化代碼的程序集並檢查奇怪的東西。我想你可以檢查編譯器生成的彙編代碼。您可能需要啓用某些選項來生成中間文件

您也可以在stackexchange上檢查"Electronics and Robotics"。在那裏你可能會發現使用電子產品的人可能會提供更好的幫助。

1

你說你在彙編中編寫了一個程序,它工作正常,但沒有在C中。你是否驗證過你的C環境配置爲將你的代碼和數據放在內存中的正確位置?另外,一些芯片有一個「復位向量」,在芯片首次上電時以及芯片復位時被調用。你的C環境是否正確設置了這個向量?它會在開始運行時將代碼跳轉到您的程序嗎?

+0

這可能是問題所在。但是我使用了包含中斷向量的默認設置的默認start900.a51啓動文件。你有任何例子如何使其正確。 – Adnan 2010-10-20 17:14:37

+0

對不起,我不知道。這些只是我過去用其他芯片(HC12,i8051等)必須做的一般事情。您的例程和數據以及堆棧和中斷代碼的正確內存位置取決於特定芯片的內存映射。另外,在C環境中設置這些東西可能是針對每個工具的。 – 2010-10-20 17:39:55

0

嘗試:

void delay (unsigned long cnt) 
{ 
    while (--cnt) { 
#pragma asm 
     NOP 
#pragma endasm 
} 
}