AT89C2051, software Sigma-Delta ADC


http://wp.me/ph3BR-Gh

現成的比較簡單, 人家寫好的, ASM 寫的不過要搭個棚來試一下, 才能確認這個源碼靠譜不

自己排列了一下, 方便閱讀, 改了源碼中一個別字

2004115135016542


------以上部分請勿修改! -------------

;************************************************
;* Sigma-Delta ADC Version 1.0a *
;* 作者: jimweaver@nbip.net *
;* 測量範圍: DC 18V~30V *
;* 最近修改: 2003-12-29 *
;************************************************

;************************************************
; xiaolaba
; reading and learning, include more comments for better understanding
; 2012-DEC-07
;************************************************

NAME SigmaDelta

ADC_CON BIT P3.7 ;RC 充電引腳
ISEG AT 60H ;堆棧起始
Stack: DS 20H ;堆棧大小

CSEG
 ORG 0000H
 SJMP On_Reset

 ORG 0003H ;外部中斷 INT0
 RETI

 ORG 000BH ;TIMER 0 溢出中斷
 AJMP Timer0Handler

USING 0 ;使用Register bank 0

On_Reset:
    MOV SP,#(Stack-1) ;初始化堆棧指針
    CLR ADC_CON       ;ADC_CON拉低,電容放電

MainLOOP:
    ACALL SigmaDeltaADC
    ;; ACALL AdjustADC ;對測量值進行軟件糾偏 (by xiaolaba, this sub-rotuine is not shown !?)
    SJMP MainLOOP

;************************************************
;* 名稱:SigmaDeltaADC *
;* 功能:測量電池電壓 *
;* 參數:無 *
;* 返回:R0R1: 電池電壓 *
;* 影響:A,PSW,R0,R1,R6,R7 *
;************************************************

SigmaDeltaADC:
     ;ADC過程不允許中斷,所以要關中斷
     CLR EA ;屏蔽所有中斷
Precharge: ;預充電,令Vc=Vin, Vc = 電容C5的電壓, Vin=待測的電壓
     SETB ADC_CON      ; 設定 P3.7 輸出 HIGH 大約電壓為 VCC(+5V), 透過 R9 (100K)
                       ; 對 C5 (104, 0.1UF) 充電, 此為 Vc, 並進入比較器 IN-
     JB P3.6,Precharge ; AT89C2051特有的, P3.6無外接引腳, P1.0/P1.1兩腳接內部比較器
; 比較輸出在P3.6讀取
                       ; 當P3.6 = 1, 跳回上面Precharge:, 繼續充電
                       ; 當P3.6 = 0, Vc > Vin, 表示AIN-的電壓高於AIN+,
; 執行下面一行指令, 開始 ADC

ADC_Start:
;每次轉換時間=5000*11us=55ms
   CLR A
   MOV R0,A   ;高字節, R0:R1 (16bit) to store ADC value
   MOV R1,A   ;低字節
   MOV R6,#20 ;5000次ADC採樣, 5000 loops

ADC_Loop1:
   MOV R7,#250    ;R6=20, R7=250, total loop count = 20x250 = 5000 loops
ADC_Loop2:
   MOV C,P3.6     ; 取比較器輸出, 存入 Carry bit (Cy)
   MOV ADC_CON,C  ; 若Cy=1, 說明 Vc 大於或小於 Vin, ADC_CON (P3.7) = 1, 繼續充電
                  ; 若Cy=0, 說明 Vc > Vin, 此時 ADC_CON (P3.7) = 0, 大約 0V, C5 開始被放電
                  ; 下面繼續 ADC value 累計, 加上 Cy (0 或 1), 累計比較器輸出的高電平個數
   CLR A     ;1C
   ADDC A,R1 ;1C,低字節
   MOV R1,A  ;1C
   CLR A     ;1C
   ADDC A,R0 ;1C,高字節
   MOV R0,A  ;1C
   DJNZ R7,ADC_Loop2 ; 循環
 DJNZ R6,ADC_Loop1   ; 連續累計 5000, 得到 ADC value 累計總值

;ADC 結束
   SETB EA ;開放所有中斷
   CLR ADC_CON ;電容放電,為下一次測量做準備
   RET

.

.

不確定BLOG主是不是就是源碼的發行人, 以上源碼及圖片, 資料都是從以下的網站拷貝的

software Sigma-Delta ADC

http://5.13.blog.163.com/blog/static/335445652007929113450285/

.

.

另外也看了雙積分原理

http://blog.21ic.com/user1/6421/archives/2010/69340.html

http://wenku.baidu.com/view/30aca26648d7c1c708a145cd.html

.

.

Analog-to-Digital Conversion Utilizing AT89LP Microcontrollers without an ADC Features, Atmel

http://www.atmel.com/Images/doc0524.pdf

source code http://www.atmel.com/Images/CODE_0524.zip

.

.

.

Sigma-Delta ADC 的比較淺白的說明

http://wenku.baidu.com/view/dbf7f58da0116c175f0e4828.html

http://bbs.ednchina.com/BLOG_ARTICLE_96439.HTM

http://www.electronics-base.com/index.php/general-description/measurement/146-all-you-need-to-know-about-analog-to-digital-conversion-adc


40. Delta-Sigma軟件測量方式,是什麼概念?

答:Delta-Sigma原理一般應用在ADC應用中。具體來說,Delta-Sigma ADC的
工作原理是由差動器、積分器和比較器構成調製器,它們一起構成一個反饋環路。
調製器以大大高於模擬輸入信號帶寬的速率運行,以便提供過採樣。模擬輸入與
反饋信號(誤差信號)進行差動(delta)比較。該比較產生的差動輸出饋送到積
分器(sigma)中。然後將積分器的輸出饋送到比較器中。比較器的輸出同時將反饋
信號(誤差信號)傳送到差動器,而自身被饋送到數字濾波器中。這種反饋環路
的目的是使反饋信號(誤差信號)趨於零。比較器輸出的結果就是1/0 流。該流
如果1密度較高,則意味著模擬輸入電壓較高;反之,0密度較高,則意味著模
擬輸入電壓較低。接著將1/0流饋送到數字濾波器中,該濾波器通過過採樣與抽
樣,將1/0流從高速率、低精度位流轉換成低速率、高精度數字輸出。

簡而言之,Delta就是差動,Sigma就是積分的意思。 Delta-Sigma軟件測試,
我的理解應該是通過軟件模擬差動積分的過程。具體來說,就是偵測外部輸入的
電壓(或者電流)信號變化,然後通過軟件積分運算,得出外部信號隨時間變化.

.
.
.

DEC/11/2012 update
Further on my reading about the Sigma-Detal-ADC and such topic, it is worth to see how it works in theory or some practices

There is a video clip of 1-BIT ADC and very recent doing this experiment, recap of is Nov/2012, she has professional equipments and easy to follow. this must be reading to enhance my knowledge if it is performing of equivalent to a complete software Sigma-Delta-ADC.

https://www.youtube.com/watch?v=DTCtx9eNHXE

.

.

Analog Device has online interactive design tool to this understanding of how Sigma-Delta-ADC working

Interactive Design Tools: Sigma-Delta Analog-to-Digital Converters : Sigma-Delta ADC Tutorial

http://designtools.analog.com/dt/sdtutorial/sdtutorial.html

.

.

.

這位仁兄的 BLOG, 正正寫出了實際但是一個簡化版本的推導過程, 如何由計數器累計 1 出現的總數以及 累計總次數的比值, 得到 ADC 的結果

http://skywired.net/blog/2011/05/introducing-the-delta-sigma-modulator/

到此為止, 軟件和 sigma-delta-adc 的學習及基本理解完成了. 實際算一次, 加深理解

既然理解了人家為何可以得到ADC值, 也就完全理解了源碼的含意, 改用其他CPU或者其他語言, 應該也不難

不過, 他的寫法是按照 AT89C2051 特別設計的, 所以道理是一理通百理明, 另外節錄的那篇MSP430的設計, 則用完全相同的原理

singma-delta-adc.xlsx

MSP430 sigma-delta-adc-implementation1 MSP430 sigma-delta-adc-implementation2 MSP430 sigma-delta-adc-implementation3

.

.

.

2012-DEC-14 update

有了源碼, 需要組譯器, 把人類看得懂的助憶符 (namonics) 組成的 ASSEMBLY PROGRAM, 翻譯成機器看得懂的 HEX CODE

這有個免費的工具, 可以 ON-LINE 操作, 不需要在本機安裝組譯器的程序

http://plit.de/cgi-bin/asem-51/wwwasem.cgi

組譯的結果

HEX


:02000000800B73
:0100030032CA
:10000B00011675815FC2B7111780FC22C2AFD2B740
:10001B0020B6FBE4F8F97E147FFAA2B692B7E43966
:0D002B00F9E438F8DFF4DEF0D2AFC2B722FE
:00000001FF

.

.

LISTING

ASEM-51 V1.4a2                                        Copyright (c) 2008 by W.W. Heinz                                        PAGE 1

MCS-51 Family Macro Assembler   A S E M - 5 1   V 1.4a2
=======================================================

Source File:    tmp/wwwasem13624.a51
Object File:    tmp/wwwasem13624.hex
List File:    tmp/wwwasem13624.lst

Line  I  Addr  Code            Source

1:                ;------以上部分請勿修改! -------------
2:
3:                ;************************************************
4:                ;* Sigma-Delta ADC Version 1.0a *
5:                ;* 作者: jimweaver@nbip.net *
6:                ;* 測量範圍: DC 18V~30V *
7:                ;* 最近修改: 2003-12-29 *
8:                ;************************************************
9:
10:                ;************************************************
11:                ; xiaolaba
12:                ; reading and learning, include more comments for better understanding
13:                ; 2012-DEC-07
14:                ;************************************************
15:
16:                NAME SigmaDelta
17:
18:        B     B7    ADC_CON BIT P3.7 ;RC 充電引腳
19:        N     60    ISEG AT 60H ;堆棧起始
20:        60    N     20    Stack: DS 20H ;堆棧大小
21:
22:                CSEG
23:        N      0000     ORG 0000H
24:      0000    80 0B         SJMP On_Reset
25:
26:        N      0003     ORG 0003H ;外部中斷 INT0
27:      0003    32         RETI
28:
29:        N      000B     ORG 000BH ;TIMER 0 溢出中斷
30:      000B    01 16         AJMP Timer0Handler
31:
32:        N     00    USING 0 ;使用Register bank 0
33:
34:      000D            On_Reset:
35:      000D    75 81 5F        MOV SP,#(Stack-1) ;初始化堆棧指針
36:      0010    C2 B7            CLR ADC_CON       ;ADC_CON拉低,電容放電
37:
38:      0012            MainLOOP:
39:      0012    11 17            ACALL SigmaDeltaADC
40:                    ;; ACALL AdjustADC ;對測量值進行軟件糾偏 (by xiaolaba, this sub-rotuine is not shown !?)
41:      0014    80 FC            SJMP MainLOOP
42:
43:      0016            Timer0Handler:

ASEM-51 V1.4a2                                        Copyright (c) 2008 by W.W. Heinz                                        PAGE 2

Line  I  Addr  Code            Source

44:      0016    22            ret
45:
46:                ;************************************************
47:                ;* 名稱:SigmaDeltaADC *
48:                ;* 功能:測量電池電壓 *
49:                ;* 參數:無 *
50:                ;* 返回:R0R1: 電池電壓 *
51:                ;* 影響:A,PSW,R0,R1,R6,R7 *
52:                ;************************************************
53:
54:      0017            SigmaDeltaADC:
55:                     ;ADC過程不允許中斷,所以要關中斷
56:      0017    C2 AF             CLR EA ;屏蔽所有中斷
57:      0019            Precharge: ;預充電,令Vc=Vin, Vc = 電容C5的電壓, Vin=待測的電壓
58:      0019    D2 B7             SETB ADC_CON      ; 設定 P3.7 輸出 HIGH 大約電壓為 VCC(+5V), 透過 R9 (100K) 對 C5 (104, 0.1UF)
充電, 此為 Vc, 並進入比較器 IN-
59:      001B    20 B6 FB         JB P3.6,Precharge ; AT89C2051特有的, P3.6無外接引腳, P1.0/P1.1兩腳接內部比較器, 比較輸出在P3.6?
爸?
60:                                       ; 當P3.6 = 1, 跳回上面Precharge:, 繼續充電
61:                                       ; 當P3.6 = 0, Vc > Vin, 表示AIN-的電壓高於AIN+, 執行下面一行指令, 開始 ADC
62:
63:      001E            ADC_Start:
64:                ;每次轉換時間=5000*11us=55ms
65:      001E    E4           CLR A
66:      001F    F8           MOV R0,A   ;高字節, R0:R1 (16bit) to store ADC value
67:      0020    F9           MOV R1,A   ;低字節
68:      0021    7E 14           MOV R6,#20 ;5000次ADC採樣, 5000 loops
69:
70:      0023            ADC_Loop1:
71:      0023    7F FA           MOV R7,#250    ;R6=20, R7=250, total loop count = 20x250 = 5000 loops
72:      0025            ADC_Loop2:
73:      0025    A2 B6           MOV C,P3.6     ; 取比較器輸出, 存入 Carry bit (Cy)
74:      0027    92 B7           MOV ADC_CON,C  ; 若Cy=1, 說明 Vc 大於或小於 Vin, ADC_CON (P3.7) = 1, 繼續充電
75:                                  ; 若Cy=0, 說明 Vc > Vin, 此時 ADC_CON (P3.7) = 0, 大約 0V, C5 開始被放電
76:                                  ; 下面繼續 ADC value 累計, 加上 Cy (0 或 1), 累計比較器輸出的高電平個數
77:      0029    E4           CLR A     ;1C
78:      002A    39           ADDC A,R1 ;1C,低字節
79:      002B    F9           MOV R1,A  ;1C
80:      002C    E4           CLR A     ;1C
81:      002D    38           ADDC A,R0 ;1C,高字節
82:      002E    F8           MOV R0,A  ;1C
83:      002F    DF F4           DJNZ R7,ADC_Loop2 ; 循環
84:      0031    DE F0         DJNZ R6,ADC_Loop1   ; 連續累計 5000, 得到 ADC value 累計總值
85:
86:                ;ADC 結束
87:      0033    D2 AF           SETB EA ;開放所有中斷
88:      0035    C2 B7           CLR ADC_CON ;電容放電,為下一次測量做準備
89:      0037    22           RET
90:
91:                end

register banks used:  0

ASEM-51 V1.4a2                                        Copyright (c) 2008 by W.W. Heinz                                        PAGE 3

no errors

ASEM-51 V1.4a2                                        Copyright (c) 2008 by W.W. Heinz                                        PAGE 4

L I S T   O F   S Y M B O L S
=============================

SYMBOL                  TYPE     VALUE    LINE
------------------------------------------------------------
??ASEM_51              NUMBER    8051
??VERSION              NUMBER    0140
AC                  BIT          D6
ACC                  DATA          E0
ADC_CON                  BIT          B7      18
ADC_LOOP1              CODE        0023      70
ADC_LOOP2              CODE        0025      72
ADC_START              CODE        001E      63
B                  DATA          F0
CY                  BIT          D7
DPH                  DATA          83
DPL                  DATA          82
EA                  BIT          AF
ES                  BIT          AC
ET0                  BIT          A9
ET1                  BIT          AB
EX0                  BIT          A8
EX1                  BIT          AA
EXTI0                  CODE        0003
EXTI1                  CODE        0013
F0                  BIT          D5
IE                  DATA          A8
IE0                  BIT          89
IE1                  BIT          8B
INT0                  BIT          B2
INT1                  BIT          B3
IP                  DATA          B8
IT0                  BIT          88
IT1                  BIT          8A
MAINLOOP              CODE        0012      38
ON_RESET              CODE        000D      34
OV                  BIT          D2
P                  BIT          D0
P0                  DATA          80
P1                  DATA          90
P2                  DATA          A0
P3                  DATA          B0
PCON                  DATA          87
PRECHARGE              CODE        0019      57
PS                  BIT          BC
PSW                  DATA          D0
PT0                  BIT          B9
PT1                  BIT          BB
PX0                  BIT          B8
PX1                  BIT          BA
RB8                  BIT          9A
RD                  BIT          B7
REN                  BIT          9C
RESET                  CODE        0000
RI                  BIT          98

ASEM-51 V1.4a2                                        Copyright (c) 2008 by W.W. Heinz                                        PAGE 5

SYMBOL                  TYPE     VALUE    LINE
------------------------------------------------------------
RS0                  BIT          D3
RS1                  BIT          D4
RXD                  BIT          B0
SBUF                  DATA          99
SCON                  DATA          98
SIGMADELTA              MODULE              16
SIGMADELTAADC              CODE        0017      54
SINT                  CODE        0023
SM0                  BIT          9F
SM1                  BIT          9E
SM2                  BIT          9D
SP                  DATA          81
STACK                  IDATA          60      20
T0                  BIT          B4
T1                  BIT          B5
TB8                  BIT          9B
TCON                  DATA          88
TF0                  BIT          8D
TF1                  BIT          8F
TH0                  DATA          8C
TH1                  DATA          8D
TI                  BIT          99
TIMER0                  CODE        000B
TIMER0HANDLER              CODE        0016      43
TIMER1                  CODE        001B
TL0                  DATA          8A
TL1                  DATA          8B
TMOD                  DATA          89
TR0                  BIT          8C
TR1                  BIT          8E
TXD                  BIT          B1
WR                  BIT          B6

.
.
.
.
2012-DEC-16, update
ASM 源碼通過組譯, 基本上可以確定可用. 但是沒有 DEBUGGER / ICE, 所以需要實際燒入CPU再看運行結果. 但是必要增加一些處理, 把ADC 的結果輸出到 RS232, 用電腦顯示, 才能確定

因此就把上面一段程序碼, 移植到 KEIL C 的編譯環境, 使用 ASM + C 的混合編程模式, 因為 ADC 需要精確的計時, 不能中斷 (Interrupt), 重寫的話留到驗證完畢後有時間再玩

GOOGLE 了一下, KEIL C inline asm, 找到了一些資料, 很快試了一下, 確定混合模式編譯可通過, 當然要做一些微調, 人家的經驗很有用

http://blog.21ic.com/user1/7823/archives/2010/77523.html

另外又抄了一個 RS232 TX ROUTINE,
http://single9.net/2009/02/89c2051-rs23/comment-page-1/#comment-4133
https://www.box.com/shared/b9ne0ubfrv

自己增加了一些 HEADER / DEFINE 之類的, 編譯順利完成, 源碼如下, 但是還沒實際測試


/*--------------------------------
compiler Keil C uVision 4
date : 2012-DEC-16
author : xiaolaba

C and ASM inline programming,
how to remove compilation warning & error
to include C51S.LIB in target tree
see detail of below
http://blog.21ic.com/user1/7823/archives/2010/77523.html
--------------------------------*/

#include <REG52.H>

char bdata flag;
sbit rx_flag=flag^0;
sbit tx_flag=flag^1;

char data hex_asc[]="0123456789ABCDEF";
char ADC_H, ADC_L;

void init_rs232();
void tx_byte(char);
void xiaolaba_adc();
void C_inline_asm_test_func();

void main () {

init_rs232();
tx_flag=1;
P1=0xff;
while(1)
{
C_inline_asm_test_func();

xiaolaba_adc();

// transimit ADC_value to RS232
tx_byte(ADC_H);
tx_byte(ADC_L);

}

}

// 2012-DEC-16, test done
void C_inline_asm_test_func()    // test purpose for C & asm inline programming
{
int a;        // C language, test
a= a +1;  // C language, test

// following is ASM
// -----------------
#pragma asm
MOV R6,#23
DELAY2:
MOV R7,#191
DELAY1:
DJNZ R7,DELAY1
DJNZ R6,DELAY2
RET
#pragma endasm
//-------------------

a = 0; // C language, test
}

void xiaolaba_adc()
{

#pragma asm

------以上部分請勿修改! -------------

;************************************************
;* Sigma-Delta ADC Version 1.0a *
;* 作者: jimweaver@nbip.net *
;* 測量範圍: DC 18V~30V *
;* 最近修改: 2003-12-29 *
;************************************************

;************************************************
; xiaolaba
; reading and learning, include more comments for better understanding
; 2012-DEC-07
;************************************************

;NAME SigmaDelta

ADC_CON BIT P3.7 ;RC 充電引腳
; ISEG AT 60H ;堆棧起始
; Stack: DS 20H ;堆棧大小

;CSEG
; ORG 0000H
; SJMP On_Reset

; ORG 0003H ;外部中斷 INT0
; RETI

; ORG 000BH ;TIMER 0 溢出中斷
; AJMP Timer0Handler

;USING 0 ;使用Register bank 0

On_Reset:
;    MOV SP,#(Stack-1) ;初始化堆棧指針
CLR ADC_CON       ;ADC_CON拉低,電容放電

MainLOOP:
ACALL SigmaDeltaADC
;; ACALL AdjustADC ;對測量值進行軟件糾偏 (by xiaolaba, this sub-rotuine is not shown !?)
SJMP MainLOOP

Timer0Handler:
ret

;************************************************
;* 名稱:SigmaDeltaADC *
;* 功能:測量電池電壓 *
;* 參數:無 *
;* 返回:R0R1: 電池電壓 *
;* 影響:A,PSW,R0,R1,R6,R7 *
;************************************************

SigmaDeltaADC:
;ADC過程不允許中斷,所以要關中斷
CLR EA ;屏蔽所有中斷
Precharge: ;預充電,令Vc=Vin, Vc = 電容C5的電壓, Vin=待測的電壓
SETB ADC_CON      ; 設定 P3.7 輸出 HIGH 大約電壓為 VCC(+5V),
; 透過 R9 (100K) 對 C5 (104, 0.1UF) 充電, 此為 Vc,
; 並進入比較器 IN-
JB P3.6,Precharge ; AT89C2051特有的, P3.6無外接引腳, P1.0/P1.1兩腳
; 接內部比較器, 比較輸出在P3.6讀取
; 當P3.6 = 1, 跳回上面Precharge:, 繼續充電
; 當P3.6 = 0, Vc > Vin, 表示AIN-的電壓高於AIN+,
; 執行下面一行指令, 開始 ADC

ADC_Start:
;每次轉換時間=5000*11us=55ms
CLR A
MOV R0,A   ;高字節, R0:R1 (16bit) to store ADC value
MOV R1,A   ;低字節
MOV R6,#20 ;5000次ADC採樣, 5000 loops

ADC_Loop1:
MOV R7,#250    ;R6=20, R7=250, total loop count = 20x250 = 5000 loops
ADC_Loop2:
MOV C,P3.6     ; 取比較器輸出, 存入 Carry bit (Cy)
MOV ADC_CON,C  ; 若Cy=1, 說明 Vc 大於或小於 Vin, ADC_CON (P3.7) = 1, 繼續充電
; 若Cy=0, 說明 Vc > Vin, 此時 ADC_CON (P3.7) = 0, 大約 0V, C5 開始被放電
; 下面繼續 ADC value 累計, 加上 Cy (0 或 1), 累計比較器輸出的高電平個數
CLR A     ;1C
ADDC A,R1 ;1C,低字節
MOV R1,A  ;1C
CLR A     ;1C
ADDC A,R0 ;1C,高字節
MOV R0,A  ;1C
DJNZ R7,ADC_Loop2 ; 循環
DJNZ R6,ADC_Loop1   ; 連續累計 5000, 得到 ADC value 累計總值

;ADC 結束
SETB EA ;開放所有中斷
CLR ADC_CON ;電容放電,為下一次測量做準備

mov ADC_H, R0
mov ADC_L, R1

RET

#pragma endasm

}

/* these two routines copied from
89S51/52燒錄器 – 透過RS232及89C2051燒錄
https://www.box.com/shared/b9ne0ubfrv */ void tx_byte(char temp) { while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[(temp>>4)&0x0f]; while(tx_flag!=1); tx_flag=0; SBUF=hex_asc[temp&0x0f]; //while(tx_flag!=1); //tx_flag=0; //SBUF=0x20; } void init_rs232() { TMOD=0x20;        //timer1 set mode 2 PCON=PCON | 0x80;    //SMOD=1 TH1=0xfd;        //19200/s TR1=1;            //start timer1 SCON=0x50;        //set mode 1 IE=0x90;            //enable int }

.

.
HEX

:03000000020800F3
:0C080000787FE4F6D8FD758158020847A7
:10088C0011463031323334353637383941424344EE
:10089C004546002025217869616F6C616261207387
:1008AC0069676D612D64656C74612D6164632032C0
:0B08BC003031322D4445432D31360011
:1009190012094AD2017590FF1209331208C8AF575C
:0A0929001208F5AF581208F580EE31
:100933000509E509700205087E177FBFDFFEDEFAB1
:0709430022E4F508F509228A
:1008C800C2B711CF80FC22C2AFD2B720B6FBE4F882
:1008D800F97E147FFAA2B692B7E439F9E438F8DF62
:0D08E800F4DEF0D2AFC2B788578958222243
:1008F5003001FDC201EF7804A2E713D8FB540F24A1
:1009050046F8E6F5993001FDC201EF540F2446F88B
:04091500E6F5992248
:10094A00758920438780758DFDD28E75985075A85C
:02095A009022E9
:10080C00020919E493A3F8E493A34003F68001F2E0
:10081C0008DFF48029E493A3F85407240CC8C333ED
:10082C00C4540F4420C8834004F456800146F6DFBC
:10083C00E4800B010204081020408090088CE47EB8
:10084C00019360BCA3FF543F30E509541FFEE493B1
:10085C00A360010ECF54C025E060A840B8E493A378
:10086C00FAE493A3F8E493A3C8C582C8CAC583CAA3
:10087C00F0A3C8C582C8CAC583CADFE9DEE780BE5B
:0108C7000030
:00000001FF

.
.
.

用免費工具, 有時候會遇到一些窘況 例如 [為了一滴醬油, 要花錢買一只雞]
看來俺不是第一個也不是最後一個, 試用版的 Keil C 有限制 2K CODE SIZE
不過這位仁兄也解決了這個問題, 不過要有相當的知識

Unpacking PKLITE executables

工具就以下這個
http://www.ollydbg.de/
其實呢, 俺並沒有省買雞的錢, 可能花了更多, 怎講呢? 因為要看得明白, 做得出來, 其實之前就需要累積了很多才辦得到, 基本上要學一下 x86 ASM, WINDOWS PROGRAMMING, C LANGUAGE CALLING CONVENTION, DEBUGGING 等等, 甚麼都學到一點點, 融匯(融會??)貫通起來才才辦得到. 對了, 學到武功不是用來殺人的, 暫時解決問題, 再需要就付錢買正版, 值錢的是過程中學到的經驗, 比買個正版要多更多, 怎說都是花時間的, 而時間是貴到無價可買的, 那你說, 是一滴醬油的錢還是一只雞的錢….看來都超過了.

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s