R8C/1B單片機(jī)的Flash編程/擦除掛起功能
在EW1模式下執(zhí)行擦除指令進(jìn)行Flash擦除時(shí)(典型值為200ms/1K字節(jié)塊),CPU雖處于HOLD狀態(tài),但可以接受中斷響應(yīng),實(shí)現(xiàn)分時(shí)擦除。利用這個(gè)工作原理,下面給出一個(gè)R8C/1B單片機(jī)的應(yīng)用實(shí)例,利用Timer(定時(shí)器)中斷和Flash擦除掛起功能實(shí)現(xiàn)對(duì)擦除時(shí)間的估算。
本文引用地址:http://www.ex-cimer.com/article/96982.htm使用TimerX定時(shí)1ms,Flash擦除過(guò)程中每1ms掛起一次,進(jìn)入中斷處理程序并調(diào)整計(jì)時(shí)變量g_Timers。在擦除結(jié)束后,g_Timers所存儲(chǔ)的就是擦除時(shí)間的估算值。
例程如下。
#include "sfr_r81b.h"
unsigned int g_Timers;//總擦除時(shí)間計(jì)數(shù)變量
/* 定時(shí)器X中斷處理函數(shù) */
#pragma interrupt timerX_ISR
void timerX_ISR(){
g_Timers++;
}
/* 檢查DataFlash狀態(tài)寄存器 */
unsigned char checkStatusRegister(){
return fmr07|fmr06;
}
/* 清除DataFlash狀態(tài)寄存器 */
void clearStatusRegister(){
*((unsigned char *)0x2400) = 0x50;//執(zhí)行清除狀態(tài)寄存器軟件命令
}
/* 塊擦除 */
unsigned char eraseBlock(unsigned int adr){
unsigned char result="1";
asm("FCLR I");//關(guān)中斷
fmr01 = 0;
fmr01 = 1;//進(jìn)入CPU改寫(xiě)模式
fmr11 = 0;
fmr11 = 1;//設(shè)置為EW1模式&nb
評(píng)論