|
|
我是将下面的OS代码写成了C51代码,不知道有没有问题,请各位帮忙看一下。或者有什么好的建议,能够优化一下c51代码
---------------------------------------------------------------------------------------------------------------------------------------
ORG 1000H
GOTO Main;跳转到Main函数
ORG 1080H
Main:
;这一段代码是将0x7805地址存储的值赋给0x7825地址来存储
LDWR R0, 0X7805 ; R0:R1 0x7805
MOVXR R10, 1, 1 ; R10:R11 0x7805存储的1个字长度的数据
LDWR R0, 0X7825 ; R0:R1 0x7825
MOVXR R10, 0, 1 ; 0x7825 0x7805存储的值
;
;这一段代码是将0x7808地址存储的值赋给0x7828地址,将0x108E低字节存储的数据赋给0x7829地址
LDWR R0, 0X7808 ; R0:R1 0x7808
MOVXR R10, 1, 2 ; R10:R11:R12:R13 0x7808 0x7809的数据
LDWR R0, 0X108E ; R0:R1 0x108E
MOVXR R20, 1, 1 ; R20:R21 0x108E的数据
MOV R21, R12, 1 ; R12:R13 R21:R22 0x108E低字节存储的数据
;LDBR R12, 1, 1
LDWR R0, 0X7828 ; R0:R1 0x7828
MOVXR R10, 0, 2 ; 0x7828 0x7829 R10:R11:R12:R13 0x7808 0x108E低字节
;这一段代码是将0x7845地址存储的值赋给0x7865地址来存储
LDWR R0, 0X7845
MOVXR R10, 1, 1
LDWR R0, 0X7865
MOVXR R10, 0, 1
;这一段代码是将0x7848地址存储的值赋给0x7868地址,将0x108E低字节存储的数据赋给0x7869地址
LDWR R0, 0X7848 ; R0:R1 0x7848
MOVXR R10, 1, 2 ; R10:R11:R12:R13 0x7848 0x7849
MOV R21, R12, 1 ; R12:R13 R21:R22 0x108E-low
;LDBR R12, 1, 1
LDWR R0, 0X7868 ; R0:R1 0x7868
MOVXR R10, 0, 2 ; 0x7868 0x7869 R10:R11:R12:R13 0x7848 0x108E-low
;这一段代码是将0x7905地址存储的值赋给0x7925地址来存储
LDWR R0, 0X7905
MOVXR R10, 1, 1
LDWR R0, 0X7925
MOVXR R10, 0, 1
;这一段代码是将0x7908地址存储的值赋给0x7928地址,将0x108E低字节存储的数据赋给0x7929地址
LDWR R0, 0X7908
MOVXR R10, 1, 2
LDWR R0, 0X108E
MOVXR R20, 1, 1
MOV R21, R12, 1
;LDBR R12, 1, 1
LDWR R0, 0X7928
MOVXR R10, 0, 2
;这一段代码是将0x7945地址存储的值赋给0x7965地址来存储
LDWR R0, 0X7945
MOVXR R10, 1, 1
LDWR R0, 0X7965
MOVXR R10, 0, 1
;这一段代码是将0x7948地址存储的值赋给0x7968地址,将0x108E低字节存储的数据赋给0x7969地址
LDWR R0, 0X7948
MOVXR R10, 1, 2
MOV R21, R12, 1
;LDBR R12, 1, 1
LDWR R0, 0X7968
MOVXR R10, 0, 2
GOTO Main
;END
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define LOW_DATA_ADDR 0x108E
u16 temp = 0;
u16 temp_low_val = 0;
u16 start_addr = 0x7805;
ReadDgusVp(LOW_DATA_ADDR, &temp_low_val, 1);
temp_low_val = temp_low_val<<8;
u16 i;
u16 j;
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
temp = 0;
ReadDgusVp(start_addr, (u8*) &temp, 1);
WriteDgusVp(start_addr + (0x0020), (u8*) &temp, 1);
temp = 0;
ReadDgusVp(start_addr + (0x0003), (u8*) &temp, 1);
WriteDgusVp(start_addr + (0x0023), (u8*) &temp, 1);
WriteDgusVp(start_addr + (0x0024), (u8*) &temp_low_val, 1);
start_addr += 0x0040;
}
start_addr = 0x7905;
}
|
|