一.指令差異說明

82G516指令與標準8051完全相容,原本8051程式移植到這顆CPU,大部分都可以正常執行,但因80G516執行速度較快,對於一些用迴圈或NOP指令來做延遲的作法,可能會因速度太快而無法正常執行,需要做適度修正。

82G516指令表(完整資料請參考資料手冊第26章 指令集,121~127頁)。注意:每個指令時脈差異不同,如有需要務必先查表。

Mnemonic

Description

Byte

Execution
Clock Cycles

ARITHMETIC OPERATIONS

ADD A,Rn

Add register to ACC

1

2

ADD A,direct

Add direct byte to ACC

2

3

ADD A,@Ri

Add indirect RAM to ACC

1

3

ADD A,#data

Add immediate data to ACC

2

2

ADDC A,Rn

Add register to ACC with Carry

1

2

ADDC A,direct

Add direct byte to ACC with Carry

2

3

ADDC A,@Ri

Add indirect RAM to ACC with Carry

1

3

ADDC A,#data

Add immediate data to ACC with Carry

2

2

SUBB A,Rn

Subtract register from ACC with borrow

1

2

SUBB A,direct

Subtract direct byte from ACC with borrow

2

3

SUBB A,@Ri

Subtract indirect RAM from ACC with borrow

1

3

SUBB A,#data

Subtract immediate data from ACC with borrow

2

2

INC A

Increment ACC

1

2

INC Rn

Increment register

1

3

INC direct

Increment direct byte

2

4

INC @Ri

Increment indirect RAM

1

4

INC DPTR

Increment data pointer

1

1

DEC A

Decrement ACC

1

2

DEC Rn

Decrement register

1

3

DEC direct

Decrement direct byte

2

4

DEC @Ri

Decrement indirect RAM

1

4

MUL AB

Multiply A and B

1

4

DIV AB

Divide A by B

1

5

DA A

Decimal Adjust ACC

1

4

舉例來說,寫入文字行LCD,每筆資料執行時間至少要經過40 uS,等LCD執行完成才可再對LCD進行下一個寫入動作。要完成此功能,本來只要寫簡單2個指令即可:

        mov    R7,#25   ;執行 1 us
        djnz   R7,$     ;執行25次,共50 us

但換成82G516後,因速度快了6倍,會造成延遲時間太短,上述指令實際執行時間不到10us,使得顯示不正常。CPU快是好事,只是配合周邊使用時須適當調整。

        mov    R7,#150  ;執行 1/6 us
        djnz   R7,$     ;執行150次,共1/3 * 150 us = 50 us

 

指令

指令長度

82G516執行週期

標準8051執行週期

MOV Rn,#data

2

2

12

DJNZ Rn,rel

2

4

24

若時脈為12 MHz,12週期為1 uS。

 

二.操作環境設定

笙泉的82G516增加了許多額外的功能,為控制這些特殊功能,此顆CPU將控制這些功能的暫存器分別賦予特定位址,以方便程式編譯與執行,所有暫存器名稱與位址分如下表所示。

82G516 特殊函數暫存器記憶體位置表(SFR Memory Map)

 

8 BYTES

 

F8H

-

CH

CCAP0H

CCAP1H

CCAP2H

CCAP3H

CCAP4H

CCAP5H

FFH

F0H

B

-

PCAPWM0

PCAPWM1

PCAPWM2

PCAPWM3

PCAPWM4

PCAPWM5

F7H

E8H

P4

CL

CCAP0L

CCAP1L

CCAP2L

CCAP3L

CCAP4L

CCAP5L

EFH

E0H

ACC

WDTCR

IFD

IFADRH

IFADRL

IFMT

SCMD

ISPCR

E7H

D8H

CCON

CMOD

CCAPM0

CCAPM1

CCAPM2

CCAPM3

CCAPM4

CCAPM5

DFH

D0H

PSW

-

-

-

-

KBPATN

KBCON

KBMASK

D7H

C8H

T2CON

T2MOD

RCAP2L

RCAP2H

TL2

TH2

-

-

CFH

C0H

XICON

-

-

-

-

ADCTL

ADCH

PCON2

C7H

B8H

IP

SADEN

S2BRT

-

-

-

ADCL

-

BFH

B0H

P3

P3M0

P3M1

P4M0

P4M1

-

-

IPH

B7H

A8H

IE

SADDR

S2CON

-

-

AUXIE

AUXIP

AUXIPH

AFH

A0H

P2

AUXR1

-

-

-

AUXR2

-

A7H

98H

SCON

SBUF

S2BUF

-

-

-

-

-

9FH

90H

P1

P1M0

P1M1

P0M0

P0M1

P2M0

P2M1

EVRCR

97H

88H

TCON

TMOD

TL0

TL1

TH0

TH1

AUXR

STRETCH

8FH

80H

P0

SP

DPL

DPH

SPSTAT

SPCTL

SPDAT

PCON

87H

 

 

 

 

藍色字體為82G516額外增加的特殊暫存器

 

 

↑可位元定址 SFRs

 

 

 

 

 

 

1.組合語言

如果只用到標準8051的功能,只要將Keil uVision 2 中的 Define 8051 SFR Names的打上勾勾,便可正常組譯與執行

若要使用笙泉82G516內的特殊暫存器,記的要將Keil uVision 2 中的 Define 8051 SFR Names的勾勾取消,

並將設定 $INCLUDE (REG_MPC82G516.INC) 寫在程式開頭,組譯時才不會產生錯誤。 範例

2.C語言