⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.c

📁 这是《Keil Cx51 V7.0单片机高级语言编程与uVision2应用实践》教材各章中列出的全部程序例子。
💻 C
字号:
#include "config.h"
#include "isp.h"

/****************************** FLASH写入函数 ***************************
* 函数原型:void flash_wr(Uchar xdata *addr, Uchar val)
* 功    能:向映射到外部数据存储器空间的FLASH地址单元addr写入一个字节
*           的数据val。
*************************************************************************/
void flash_wr(Uchar xdata *addr, Uchar val) {
  *addr = val;          
}

/****************************** FLASH读取函数 ***************************
* 函数原型: Uchar flash_rd(Uchar xdata *addr)
* 功    能:从映射到外部数据存储器空间的FLASH地址单元addr读取一个字节
*           的数据并返回主调函数。
*************************************************************************/
Uchar flash_rd(Uchar xdata *addr) {  
  return *addr;  
}

/****************************** FLASH命令函数 ***************************
* 函数原型: void flash_cmd(Uchar cmd)
* 功    能:执行FLASH命令序列cmd。
*************************************************************************/
void flash_cmd(Uchar cmd) {
  flash_wr(0x5555, 0xAA);
  flash_wr(0x2AAA, 0x55);
  flash_wr(0x5555, cmd);
} 

/****************************** FLASH擦除函数 ***************************
* 函数原型: void flash_erase(void)
* 功    能:擦除整个FLASH存储器。
*************************************************************************/
void flash_erase(void) {
  Uchar pol_n, pol_n_1;
  flash_cmd(0x80);     	
  flash_cmd(0x10);
  pol_n_1 = flash_rd(0x5555);
  pol_n   = flash_rd(0x5555);  
  while ((pol_n ^ pol_n_1) == 0x40) {  
    pol_n_1 = pol_n;
    pol_n   = flash_rd(0x5555);
  }
}

/****************************** FLASH编程函数 ***************************
* 函数原型: void flash_prog(Uint16 addr, Uchar value)
* 功    能:对指定的FLASH存储器地址addr编程一个字节的数据value。
*************************************************************************/
void flash_prog(Uint16 addr, Uchar value) {                  
  flash_cmd(0xA0);  
  flash_wr(addr, value); 
  while (flash_rd(addr) != value);
} 

/****************************** FLASH_ID函数 ***************************
* 函数原型: Uint16 flash_id()
* 功    能:读取双字节FLASH存储器生产厂商和器件ID,高字节为厂商ID,
*           低字节为器件ID。
*************************************************************************/
Uint16 flash_id() {
  Uint16 flash_id=0;
  flash_cmd(0x90);      
  flash_id = flash_rd(0x0000) << 8 | flash_rd(0x0001);  
  flash_cmd(0xF0);    
  return flash_id;            
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -