一.指令差異說明
82G516指令與標準8051完全相容,原本8051程式移植到這顆CPU,大部分都可以正常執行,但因80G516執行速度較快,對於一些用迴圈或NOP指令來做延遲的作法,可能會因速度太快而無法正常執行,需要做適度修正。
82G516指令表(完整資料請參考資料手冊第26章 指令集,121~127頁)。注意:每個指令時脈差異不同,如有需要務必先查表。
Mnemonic |
Description |
Byte |
Execution |
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語言