R8C/1B單片機的Flash編程/擦除掛起功能
sp;
本文引用地址:http://dyxdggzs.com/article/96982.htmfmr40 = 0;
fmr40 = 1;//允許中斷擦除掛起
asm("FSET I");//開(kāi)中斷
g_Timers = 0;//計數值清零
prex=0x32-1;tx=0x32-1;//定時(shí)值1ms
txs=1;//定時(shí)器X開(kāi)始計數
*((unsigned char *)adr) = 0x20;//執行塊擦除軟件命令
*((unsigned char *)adr) = 0xD0;
while(fmr00 != 1){//判斷擦除是否結束
fmr41 = 0;//中斷返回后繼續擦除
}
txs=0;//定時(shí)器X停止計數
fmr01 = 0;//退出CPU改寫(xiě)模式
if(!checkStatusRegister()){//查看狀態(tài)寄存器
result = 0;//擦除成功
}
else //擦除失敗
clearStatusRegister();//清除狀態(tài)寄存器
return result;
}
/* 對MCU進(jìn)行初始化 */
void initMCU(){
unsigned char i="0";
asm("FCLR I");//關(guān)中斷
//將CPU時(shí)鐘切換為主時(shí)鐘20MHz
prcr = 1;//解除對cm0,cm1,ocd寄存器的寫(xiě)保護
cm13 = 1;//接通 Xin-Xout
cm15 = 1;//Xin-Xout驅動(dòng)能力:高
cm05 = 0;//Xin-Xout啟動(dòng)
cm16 = 0;//無(wú)分頻模式
cm17 = 0;
cm06 = 0;//使CM16,CM17有效
while(1){//等待主時(shí)鐘振蕩穩定
if(!ocd3){
if(i>=10) break;
else ++i;
}
}
ocd2 = 0;//選擇主時(shí)鐘
prcr = 0;//設定對cm0,cm1,ocd寄存器的寫(xiě)保護
//設置定時(shí)器
txmr=0x00;//定時(shí)器X設為定時(shí)器模式
tcss=0x11;//選擇計數源為f8
txic=0x07;//定時(shí)器X中斷優(yōu)先級為7
asm("FSET I");//開(kāi)中斷
}
/* 主函數 */
void main(void)
{
unsigned char flag;
initMCU();//對MCU進(jìn)行初始化
flag = eraseBlock(0x2400);//擦除大小為1kB的塊A,塊首地址為2400H
while (1);
}
評論