• 山高水长
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-03-29 12:31
    上传日期
这是一个51单片机读写sst39vf400a存储器的例子
sst39vf400a读写例程.rar
  • fb.c
    4.7KB
内容介绍
#include<stdio.h> #define ST0 0x0006 #define ST1 0x0007 #define PMST 0x001D #define SWWSR 0x0028 #define SWCR 0x002B #define BSCR 0x0029 #define CLKMD 0x0058 #define PMST_VAL 0x00E0 //interupt vectors from ox80 #define SWWSR_VAL 0x7FFF // PMST中的TPTR位与中断向量表的起始地址有关; #define SWCR_VAL 0x0000 #define BSCR_VAL 0x8800 #define CLKMD_VAL 0x0287 #define ST0_VAL 0x0000 #define ST1_VAL 0xC000 //INTM=0(使能所有可屏蔽中断),CPL=1(堆栈指针SP寻址) typedef unsigned char BYTE; void ResetFlash() //FLASH复位子程序 { BYTE *pa; pa=(BYTE *)0x8000; *pa=0x0F0; delay_10s(); } void EraseFlash() //FLASH片擦除子程序 { BYTE *pa; pa=(BYTE *)0x8555; *pa=0x0AA; pa=(BYTE *)0x82AA; *pa=0x055; pa=(BYTE *)0x8555; *pa=0x080; pa=(BYTE *)0x8555; *pa=0x0AA; pa=(BYTE *)0x82AA; *pa=0x055; pa=(BYTE *)0x8555; *pa=0x010; delay_10s(); //延时10s } void WriteFlash(BYTE *pa,int pd)//写FLASH某个单元的子程序 { BYTE *tmp; tmp=(BYTE *) 0x8555; *tmp=0x0AA; tmp=(BYTE *)0x82AA; *tmp=0x055; tmp=(BYTE *)0x8555; *tmp=0x0A0; *pa=pd; delay_625ms(); //延时625ms } delay_10s()//延时子程序可用简单的加法计数实现,例如延时10s的子程序示例如下: { int i,j; for(i=0;i<0x1000;i++) { for(j=0;j<0x1000;j++); } } delay_625ms() { int i,j; for(i=0;i<0x100;i++) { for(j=0;j<0x100;j++); } } void main() { BYTE *FlashPtr; //指向FLASH的指针 int FlashData; //写往FLASH的数据 int i; BYTE *OriMem; //代码在片内RAM的源地址 int iDatalen; //代码段长度 *(volatile unsigned int *)ST0 = ST0_VAL; *(volatile unsigned int *)ST1 = ST1_VAL; *(volatile unsigned int *)CLKMD = 0x0000; //PLL模式先转换为DIV二分频模式 while(*(volatile unsigned int *)CLKMD & 0x0001){}; *(volatile unsigned int *)CLKMD = CLKMD_VAL; //DSP上电复位时,时钟默认为二分频,即10MHz,基础时钟为20MHz //这里,初始化为PLL×5,即100MHz //CLKMD_VAL==0x4287 *(volatile unsigned int *)PMST =PMST_VAL; //PMST_VAL==0x00ec *(volatile unsigned int *)SWWSR =SWWSR_VAL; //SWWSR_VAL==0x7fff *(volatile unsigned int *)SWCR =SWCR_VAL; //WCR_VAL=0x0001 *(volatile unsigned int *)BSCR =BSCR_VAL; //BSCR_VAL==0x8802 asm(" ssbx xf"); //点亮蓝色LED ResetFlash(); //复位FLASH EraseFlash(); //整片擦除FLASH //开始烧写FLASH,下面为Boot表引导信息 FlashPtr=(BYTE *)0x8000; FlashData=0x10AA; //置16位存储器格式 0x10AA WriteFlash(FlashPtr++,FlashData); FlashData=0x7FFF; //置SWWSR软件等待状态寄存器初始化值 0x7FFF WriteFlash(FlashPtr++,FlashData); FlashData=0x0F000; //置BSCR分区转换控制寄存器初始化值 0x0F000 WriteFlash(FlashPtr++,FlashData); FlashData=0x0000; //程序执行入口偏移地址XPC 0x0000 WriteFlash(FlashPtr++,FlashData); FlashData=0x1000; //程序执行入口地址PC 0x1000 WriteFlash(FlashPtr++,FlashData); FlashData=0x0c0e; //第一个程序段的长度 0x0c0e WriteFlash(FlashPtr++,FlashData); FlashData=0x0000; //第一个程序要装入的内部RAM区偏移地址 0x0000 WriteFlash(FlashPtr++,FlashData); FlashData=0x0100; //第一个程序段要装入的内部RAM区地址 0x0100 WriteFlash(FlashPtr++,FlashData); //开始烧写第一段程序 OriMem=(BYTE *)0x0100; //第一段程序首地址 iDatalen=0x0c0e; //第一段程序长度 for(i=0;i<iDatalen;i++) { FlashData=*OriMem++; WriteFlash(FlashPtr++,FlashData); } //烧写第二段。vectors及.cinit FlashData=0x0048; //第二个程序段的长度 0x0048 WriteFlash(FlashPtr++,FlashData); FlashData=0x0000; //第二个程序要装入的内部RAM区偏移地址 0x0000 WriteFlash(FlashPtr++,FlashData); FlashData=0x0080; //第二个程序段要装入的内部RAM区地址 0x0080 WriteFlash(FlashPtr++,FlashData); //开始烧写第二段程序 OriMem=(BYTE *)0x0080; //第二段程序首地址 iDatalen=0x0048; //第二段程序长度 for(i=0;i<iDatalen;i++) { FlashData=*OriMem++; WriteFlash(FlashPtr++,FlashData); } //烧写第三段及.const FlashData=0x0024; //第三个程序段的长度 0x0024 WriteFlash(FlashPtr++,FlashData); FlashData=0x0000; //第三个程序要装入的内部RAM区偏移地址 0x0000 WriteFlash(FlashPtr++,FlashData); FlashData=0x00c8; //第三个程序段要装入的内部RAM区地址 0x00c8 WriteFlash(FlashPtr++,FlashData); //开始烧写第三段程序 OriMem=(BYTE *)0x00c8; //第三段程序首地址 iDatalen=0x0024; //第三段程序长度 for(i=0;i<iDatalen;i++) { FlashData=*OriMem++; WriteFlash(FlashPtr++,FlashData); } //程序烧写结束,写入Boot表结束标志 FlashData=0x0000; //引导表结束标志 WriteFlash(FlashPtr,FlashData); //在数据空间0xFFFF写入引导表起始地址 FlashPtr=(BYTE *)0x0FFFF; FlashData=0x8000; WriteFlash(FlashPtr,FlashData); for(;;); //FLASH烧写完毕 }
评论
    相关推荐
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路
    • VHDL 的实例程序,共44个.rar
      经典VHDL 的实例程序,共44个!要下载的尽快
    • USBtoRS232Driver.rar
      USB转串口驱动程序,可以用在笔记本电脑上,方便的通过串口给单片机下载程序!
    • 模糊控制程序.rar
      模糊PID控制程序的源码,是作业,有讲解,
    • 串口编程源代码.rar
      这是本人最近几年所编写的串行通讯的代码集,可以供大家参考学习。
    • DELTA_PLC.rar
      台达PLC Modbus协议通信dll com控件
    • hongwaigooog.rar
      单片机红外遥控最全的资料,包含很多当前电视遥控专用芯片的解码方式,C语言和汇编语言编写的解码范例程序,看完了你就会了!
    • MF500绝密.rar
      非接触式IC卡开发板源程序,包括原理图/PCB图;源程序在KEIL环境下编译,打开压缩包后直接点击PRJ文件,即可编译使用。 这是个保密文件,做Mifare one卡开发人基本上都用过到这个源代码。
    • 20078251299410.rar
      C51实用程序(45个) I/O、定时器、中断、看门狗、计数器、软件AD、VB串口、93c06驱动、24c02系列驱动、7219、20045、软件陷阱、串口中断、码值转换、AVR通讯、IIC、DS1302、DS1820、SPI、1602、12232、12864、T6963、1330、PC键、键盘输入法、智能化、飞机游戏、贪吃蛇、多级菜单实例等
    • mcudesign.rar
      单片机设计,毕业设计 16×16点阵(滚动显示)论文+程序 cdma通信系统中的接入信道部分进行仿真与分析 LED显示屏动态显示和远程监控的实现 MCS-51单片机温度控制系统 USB接口设计 毕业设计(论文)OFDM通信系统基带数据 仓库温湿度的监测系统 单片机串行通信发射机 单片机课程设计__电子密码锁报告 单片机控制交通灯 电动智能小车(完整论文 电气工程系06届毕业设计开题报告 电信运营商收入保障系统设计与实现 电子设计大赛点阵电子显示屏(A题 电子时钟 火灾自动报警系统设计 基于GSM短信模块的家庭防盗报警系统 基于GSM模块的车载防盗系统设计 TC35i 资料 基于网络的虚拟仪器测试系统 门控自动照明电路 全遥控数字音量控制的D类功率放大器 数控直流稳压电源完整论文 数字密码锁设计 数字抢答器(数字电路) 数字时钟 水箱单片机控制系统 同步电机模型的MATLAB仿真 温度监控系统的设计 用单片机控制直流电机 用单片机实现温度远程显示 智能家用电热水器控制器 智能型充电器电源和显示的设计 自动加料机控制系统