作為開頭,很多細節我就先略過了,主要簡單的介紹幾個步驟to make the OC8051 run。
1、獲取OC8051源代碼。(opencore或某電子類論壇下載)。
2、修改oc8051_defines.v。此文件可讓用戶對硬件進行裁剪和配置。
修改如下(部分):
1 //
2 // oc8051 pherypherals
3 //
4 `define OC8051_UART
5 `define OC8051_TC01
6 `define OC8051_TC2
7 `define OC8051_PORTS //ports global enable
8 `define OC8051_PORT0
9 `define OC8051_PORT1
10 `define OC8051_PORT2
11 `define OC8051_PORT3
12
13
14 //
15 // oc8051 ITERNAL ROM
16 //
17 //`define OC8051_ROM
18 `ifdef OC8051_ROM
19 //`define OC8051_XILINX_ROM //rom implement as xilinx ,or comment to as generic rom.
20 `endif
21
22
23 //
24 // oc8051 memory
25 //
26 //`define OC8051_CACHE
27 //`define OC8051_WB
28
29 //-----------
30 //----ram----
31 //-----------
32 //`define OC8051_RAM_XILINX
33 //`define OC8051_RAM_VIRTUALSILICON
34 //`define OC8051_RAM_GENERIC
35
36
37
38
39 //
40 // oc8051 simulation defines
41 //
42 `define OC8051_SIMULATION
43 //`define OC8051_SERIAL
44
45 //
46 // oc8051 bist
47 //
48 //`define OC8051_BIST
上述設置配置了默認的所有外設,并開啟了仿真,而存儲的設置則為,rom:無片內rom,使用片外的rom。ram:使用默認的ram模型,由寄存器組(DFF)構成,與具體實現無關,方便仿真。
3、編寫C code。
主要的C代碼如下:
1 #include 2 int i; 3 void umain () 4 { 5 6 i=0; 7 P0=0x01; 8 IE=0x82; 9 IP=0x02; 10 TMOD=0X01; 11 TH0=0XFF; 12 TL0=0XF0; 13 TCON=TCON | 0x10; 14 15 while(1) 16 { 17 } 18 } 19 20 void Ex0_ISR() interrupt 0 using 1 21 { 22 } 23 void Timer0_ISR() interrupt 1 using 2 24 { 25 TH0=0XFF; 26 if(i<8) 27 { 28 i=i+1; 29 } 30 else 31 { 32 i=0; 33 } 34 35 P0=0x01<36 } 上述代碼我使用了AT89X51.H頭文件,基本上,51是一個很標準的單片機,各種51的變種都有一個相同的子集,因此使用此頭文件是沒有問題的,你會有疑問,主函數怎么寫成 了umain,是不是筆誤,不是的,它就是這樣,當然這需要一些其他的操作;在此先略過。 4、3中生成的hex使用一個小工具,可以生成可作為仿真的.in;.in會被加載到外部rom(我們配置了無內部rom,直接從外部rom啟動。) 運行的波形如下: 注:在調試軟件的時候發現一個小小的問題,由于使用了全局變量向中斷函數傳遞信息,我第一次的寫法是這樣的: #include int i=0; void umain () { ... 出現warming: *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?C_INITSEG 即聲明和賦值語句不能同時進行,同時我通過查看map文件和反匯編,發現匯編多出了一條奇怪的跳轉指令,不過那個地方的那個奇怪指令正常情況下永遠執行不到。 好吧,我承認,我是一個業余的coder,而且對于51的編程,也是2-3年前的一個課程設計了,邊查邊寫還寫出這么爛風格的C代碼,可惡的是,寫個全局變量還剛好
上一篇:OC8051軟件編程說明
下一篇:80C51單片機-LED流水燈效果
推薦閱讀最新更新時間:2025-06-03 08:36





設計資源 培訓 開發板 精華推薦
- 使用 Aimtec 的 AM3G-0505SH30Z 的參考設計
- 瀚文分離小板
- FS26安全SBC編程插座板
- STP16CPC26低壓16位恒流LED灌電流驅動器典型應用電路
- LTC3119EUFD 12V、2MHz 寬輸入穩壓器的典型應用電路
- 用于 48V、500W 電動自行車/踏板車的 LTC2992CDE 功率監視器的典型應用
- SI53154-EVB,用于 PoE 無線接入點的 100 至 210MHz 時鐘發生器的評估板
- LTC3642IDD-5 正負降壓轉換器的典型應用電路
- TA8256H 6W x 3ch 音頻功率放大器典型應用
- PD70101EVB6FC、基于 PD70101 的 IEEE802.3 Type 1 PD 評估板控制 5V/1.2A 輸出隔離反激轉換器以實現最小 PSE 功耗