PIC18F*K80程序存储器读写(c语言实现)

编程入门 行业动态 更新时间:2024-10-14 20:19:20

PIC18F*K80程序<a href=https://www.elefans.com/category/jswz/34/1766391.html style=存储器读写(c语言实现)"/>

PIC18F*K80程序存储器读写(c语言实现)

写程序存储器


#define tmpBuffer[64]  //是要写入的数据 
#define ProgrammingBuffer[64]  //临时缓存//写FlashBlock(一个块为64字节)
void WriteFlashBlock(void) {uint8_t i;//将64字节读入RAM。TBLPTRU = 0x00;TBLPTRH = HIGH_BYTE(ProgrammedPointer);TBLPTRL =  LOW_BYTE(ProgrammedPointer);for (i = 0; i < WRITE_BLOCK_SIZE; i++) {asm("tblrdpostinc");  ProgrammingBuffer[i] = TABLAT;        }    //根据需要更新RAM中的数据值。for (i = OffsetHead; i < OffsetTail; i++) {ProgrammingBuffer[i] = tmpBuffer[i];}//用擦除的地址加载表指针寄存器。TBLPTRU = 0x00;TBLPTRH = HIGH_BYTE(ProgrammedPointer);TBLPTRL =  LOW_BYTE(ProgrammedPointer);EECON1  = 0b10010100;    //准备清除闪存//执行行擦除过程。UnlockAndActivate(CORRECT_UNLOCK_KEY);asm("tblrdpostdec");    //参考手册写数据到FLASH程序内存的示例// 用正在写入的第一个字节的地址加载表指针寄存器。TBLPTRU = 0x00;TBLPTRH = HIGH_BYTE(ProgrammedPointer);TBLPTRL =  LOW_BYTE(ProgrammedPointer);//TBLPTRL =  LOW_BYTE(ProgrammedPointer + OffsetHead);// 用自动增量将64字节写入持有寄存器。for (i = 0; i < WRITE_BLOCK_SIZE; i++) {TABLAT = ProgrammingBuffer[i];asm("tblwtpostinc");}    asm("tblrdpostdec");// 执行写过程。EECON1 = 0b10000100;    //设置 EECON1 寄存器来执行写操作:将 EEPGD 位置 1 以指向程序存储器,将 CFGS 位清零以访问程序存储器,将 WREN 置 1 以使能字节写操作.UnlockAndActivate(CORRECT_UNLOCK_KEY); //执行写入flash操作
}//激活并开始写入Flash
void UnlockAndActivate(unsigned char UnlockKey)
{INTCONbits.GIE = 0;     //禁用中断。if(UnlockKey != CORRECT_UNLOCK_KEY){OSCCON = 0x03;  //切换到低频率的INTOSCwhile(1){Sleep();  //死循环}    Reset();  //复位}    

读程序存储器

unsigned long   addr32;     // for PIC18FXXK80
unsigned char rdata[8]; 
addr32=0x2000;
TBLPTR = addr32;
//读取从0x2000地址开始的8字节数据
for (i = 0; i < 8; i++) {asm("tblrdpostinc");rdata[i] = TABLAT;
}   

擦除程序存储器

void erase_device(void) {unsigned int i;//擦除用户代码(ROM中START_PAGE_TO_ERASE到MAX_PAGE_TO_ERASE的代码)for (i = START_PAGE_TO_ERASE; i < (MAX_PAGE_TO_ERASE + 1); i++) {ClrWdt(); //清除看门狗#ifdef __XC8__TBLPTRU = 0x00;TBLPTRH = (uint8_t)(i >> 2);TBLPTRL = (uint8_t)(i << 6);#elseTBLPTR = i << 6;   //指定要擦除的块地址#endifEECON1 = 0b10010100;    //准备擦除UnlockAndActivate(CORRECT_UNLOCK_KEY);}

更多推荐

PIC18F*K80程序存储器读写(c语言实现)

本文发布于:2024-02-06 13:43:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749605.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:存储器   语言   程序   PIC18F

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!