MINI-C函数可以带参数了

描述

虽然MINI-C,函数可以带参数的功能已经开放了一阵子了,但是很多工程师朋友的思维还是停留在MINI-C函数不能带参数的阶段。能带参数,和普通C的程序兼容性更强了。希望大家都留意一下,看编译通过,是不是心情一下美丽了很多。

参数

 

附一个IDE下面的程序实例,“PADAUK Tool/0.98x/demo/EE_RW”, 该程序实例是针对PGS152的EEPROM的读写操作的。请参考:

//Fail :EERMC.Time_Out ??

voidEE_W (WORD adr, BYTE data)

{

BYTEbuffer [8];

@@:ldeeradr;

.wait0EERMC.Busy;

if (EERL == data)return;//如果资料相同,则结束

#if_SYS(AT_CHIP)

A=~ EERL & data;

if (ZF)

{//可以覆烧

EERL=data;

while (1)

{

Do_Program (adr);

.wait0EERMC.Busy;

if (EERMC.Time_Out){

IHRC_EPM = 0x34;

continue;//重烧到对为此 ?

}

IHRC_EPM = 0x3F;

return;

}

}

#elif_SYS(AT_ISP_ICE)

if (EERL == 0xFF)//只有 0xFF 才能烧录

{

EERL=data;

Do_Program (adr);

.wait0EERMC.Busy;

if (EERMC.Time_Out)

goto@B;//如果检查相同就不用再重烧

return;

}

#else

A=~ EERL & data;

if (ZF)

{//可以覆烧

EERL=data;

while (1)

{

Do_Program (adr);

.wait0EERMC.Busy;

if (! EERMC.Time_Out)//重烧到对为此 ?

return;

}

}

#endif

WORDpnt1=adr & 0xFFF8;

WORDpnt2=buffer;

BYTEcnt=8;

do

{//备份 8 笔资料

ldeerpnt1;

.wait0EERMC.Busy;

*pnt2=EERL;

pnt1$0++;pnt2$0++;

} while (--cnt);

pnt2$0=(adr & 7) + buffer;

*pnt2=data;//更新目的资料

//Erase 8 笔资料

@@:Do_Erase (adr);

cnt=8;

pnt1$0=adr & 0xF8;

pnt2$0=buffer;

.wait0EERMC.Busy;

#if_SYS(AT_CHIP)

if (EERMC.Time_Out) 

{

IHRC_EPM = 0x34;

goto @B;

}

IHRC_EPM = 0x3F;

#else

if (EERMC.Time_Out) 

goto @B;

#endif

Setup_ProgramMode;

while (1)

{//写入 8 笔资料

EERL=*pnt2;

Run_Program (pnt1);

.wait0EERMC.Busy;

#if_SYS(AT_CHIP)

if (EERMC.Time_Out)

{

IHRC_EPM = 0x34;

ldeerpnt1;

.wait0EERMC.Busy;

data=*pnt2;

A=~ EERL & data;

if (ZF)continue;

goto@B;

}

IHRC_EPM = 0x3F;

#else

if (EERMC.Time_Out)

continue;

#endif

pnt1$0++;pnt2$0++;

if (!--cnt)return;

}

}

voidEE_R (WORD adr)

{

ldeeradr;

.wait0EERMC.Busy;

A=EERL;

}

//#if_SYS(AT_ISP_ICE)

//.ICE_CMDVoltage4V

//#endif

voidFPPA0 (void)

{

.ADJUST_ICSYSCLK=IHRC/4, VDD=4V;//SYSCLK=IHRC/4

//4V 似乎对 ISP ICE 比较容易写入

EEPROM_Initial

while (1)

{

WORDadr=0;

BYTEdata;

data=0xFF;

do

{//测试逐一写 Bit 为 0

data>>=1;

EE_W (adr, data);

EE_R (adr);

} while (data);

adr=0;

data=adr$0 ^ 0x55;

BYTEcnt=_SYS(SIZE.EEPROM);

do

{//全部写乱码

EE_W (adr, data);

adr++;data--;

} while (--cnt);

trap;

adr=0;

data=adr$0 ^ 0x55;

cnt=_SYS(SIZE.EEPROM);

do

{//测试是否为乱码

EE_R (adr);

if (A != data)trap;

adr++;data--;

} while (--cnt);

trap;

}

}

voidInterrupt (void)

{

pushaf;

if (Intrq.T16)

{//T16 Trig

//User can add code

Intrq.T16=0;

//...

}

popaf;

}

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分