完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
用户闪存程序存储器空间(000200H~00ABFDH)内。
PICC 有库函数实现闪存相关功能: - void flash_copy(const unsigned char * source_addr, unsigned char length, unsigned short dest_addr); - void flash_erase (unsigned short addr); - unsigned int flash_read (unsigned short addr); |
|
|
|
|
|
|
|
|
(000200H~00ABFDH)这段空间是放用户程序的,那么我要往程序存储器存入数据,应该使用哪段地址了?
评分 |
|
|
|
|
|
|
|
|
#include "p24fj64ga006.h"
_CONFIG2(IESO_OFF&FNOSC_PRIPLL&FCKSM_CSDCMD&POSCMOD_XT/*&OSCIOFNC_OFF*/); _CONFIG1(JTAGEN_OFF&GCP_OFF&GWRP_OFF&ICS_PGx2&FWDTEN_OFF/*&BKBUG_ON&WINDIS_OFF&FWPSA_PR32&WDTPS_PS1*/); //#define UINT32 unsigned long #define UINT16 unsigned int #define UINT8 unsigned char #define FLASH_ERASEPAGE 0x4042 #define FLASH_PROGLINE 0x4001 int FlashReadData(UINT16 FlashAddr,UINT8 *Dest,UINT8 DataNum) { TBLPAG = 0x00; for(;DataNum>0;DataNum--) { asm("tblrdl.b [%1],%0":"=r"(*Dest):"r"(FlashAddr)); Dest++; asm("tblrdh.b [%1],%0":"=r"(*Dest):"r"(FlashAddr)); Dest++; FlashAddr += 2; } return 0; } void FlashErasePage(UINT16 FlashAddr) { UINT16 temp16; NVMCON = FLASH_ERASEPAGE; TBLPAG = 0x00; temp16 = FlashAddr; asm("tblwtl w0,[w0]"); NVMKEY = 0x55; NVMKEY = 0xaa; _WR = 1; Nop(); Nop(); } void FlashWriteData(UINT16 FlashAddr,UINT8 *Dest,UINT8 DataNum) { UINT16 temp16; NVMCON = FLASH_ERASEPAGE; TBLPAG = 0x00; temp16 = FlashAddr; asm("tblwtl w0,[w0]"); NVMKEY = 0x55; NVMKEY = 0xaa; _WR = 1; Nop(); Nop(); NVMCON = FLASH_PROGLINE; TBLPAG = 0x00; for(;DataNum>0;DataNum--) { asm("tblwtl.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr)); Dest++; asm("tblwth.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr)); Dest++; FlashAddr += 2; } NVMKEY = 0x55; NVMKEY = 0xaa; _WR = 1; Nop(); Nop(); } void main() { AD1PCFG=0XFFFF; int a[1]={0xffff,0x55aa}; int b[1]; TRISB=0; LATB=0XFFFF; FlashReadData(0xAC00,b,4); Nop(); Nop(); FlashErasePage(0XAC00); Nop(); Nop(); FlashWriteData(0xAC00,a,4); Nop(); Nop(); FlashReadData(0xAC00,b,4); while(1); } 贴上我的代码,读写擦除模块都没问题的,主函数调用有问题吗?我在线调试,当运行完READ之后不会往下执行ERASE,而是直接回到主函数的第一行,一直这样循环,这是怎么回事? |
|
|
|
|
|
|
|
|
我在数据手册上看到闪存数据存储器可以单字节读写,但是在写字节的时候会自动擦除目标字节所在的行,这样说是不是我写这个字节的时候就会把已经写进去,而且在同一行的字节给擦除了那?
|
|
|
|
|
|
|
|
|
刚开始学的小白 asm("tblwtl.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr)); 这一句看不太懂,有没有人能解释一下
|
|
|
|
|
|
|
|
|
请教下这个库函数怎么查看啊。新手入门,最近老师让写一个flash驱动,无从下手,求指教啊 |
|
|
|
|
|
|
|
|
楼主在吗,我的FLASH程序为什么一直卡循环了,
void main() { init(); INT16U L7_NOW_state = 0x0000; INT16U L7_state = 0x0000; while(1) { L7_state = 0x0001;// FlashWriteWordEraseRow(0x07f0,L7_state); delay(1); // L7_NOW_state=FlashReadWord(0x07f0); L7_NOW_state = flash_read(0x07f0); if( L7_NOW_state == 0x0000) { RC3=~RC3; RC5=0; delay(10); } else { RC5=~RC5; RC3=0; delay(10); } } } 执行 到FlashWriteWordEraseRow(0x07f0,L7_state); 这一步 就不往下走了,不知道为什么 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2378 浏览 1 评论
4235 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2614 浏览 2 评论
3111 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4565 浏览 5 评论
有套STM32与西门子200程序需要代写,有兴趣的工程师与有联系!
2478浏览 1评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6790浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 22:37 , Processed in 0.986781 second(s), Total 71, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖