历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | 基于STC15W408AS单片机内部EEPROM读写接口函数

发布者:EnchantedHeart 来源: 51hei关键字:STC15W408AS  单片机  内部EEPROM读写  接口函数 手机看文章 扫描二维码
随时随地手机看文章


#include "reg51.h"

#include "intrins.h"

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

typedef uchar BYTE;

typedef uint WORD;



sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull

sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain

sfr P0M1 = 0x93;

sfr P0M0 = 0x94;

sfr P2M1 = 0x95;

sfr P2M0 = 0x96;

sfr P3M1 = 0xB1;

sfr P3M0 = 0xB2;

sfr P4M1 = 0xB3;

sfr P4M0 = 0xB4;

sfr P5M1 = 0xC9;

sfr P5M0 = 0xCA;

sfr P6M1 = 0xCB;

sfr P6M0 = 0xCC;

sfr P7M1 = 0xE1;

sfr P7M0 = 0xE2;



sfr IAP_DATA    =   0xC2;           //IAP数据寄存器

sfr IAP_ADDRH   =   0xC3;           //IAP地址寄存器高字节

sfr IAP_ADDRL   =   0xC4;           //IAP地址寄存器低字节

sfr IAP_CMD     =   0xC5;           //IAP命令寄存器

sfr IAP_TRIG    =   0xC6;           //IAP命令触发寄存器

sfr IAP_CONTR   =   0xC7;           //IAP控制寄存器



#define CMD_IDLE    0               //空闲模式

#define CMD_READ    1               //IAP字节读命令

#define CMD_PROGRAM 2               //IAP字节编程命令

#define CMD_ERASE   3               //IAP扇区擦除命令

#define ENABLE_IAP  0x82            //if SYSCLK<20MHz

#define IAP_ADDRESS 0x0400



uint c,d,h,k,j;



/***************************输出宏定义***********************/

#define OUT0 OUT_1=1;OUT_2=1;OUT_3=1;OUT_4=1;OUT_5=1;OUT_6=1;//定义0档

#define OUT1 OUT_1=0;OUT_2=1;OUT_3=1;OUT_4=1;OUT_5=1;OUT_6=1;//定义1档

#define OUT2 OUT_1=0;OUT_2=0;OUT_3=1;OUT_4=1;OUT_5=1;OUT_6=1;//定义2档

#define OUT3 OUT_1=0;OUT_2=0;OUT_3=0;OUT_4=1;OUT_5=1;OUT_6=1;//定义3档

#define OUT4 OUT_1=0;OUT_2=0;OUT_3=0;OUT_4=0;OUT_5=1;OUT_6=1;//定义4档

#define OUT5 OUT_1=0;OUT_2=0;OUT_3=0;OUT_4=0;OUT_5=0;OUT_6=1;//定义5档

#define OUT6 OUT_1=0;OUT_2=0;OUT_3=0;OUT_4=0;OUT_5=0;OUT_6=0;//定义6档

    

sbit key1=P3^6; //1号键:火力加

sbit key2=P3^5; //2号键:火力减

sbit key3=P3^4; //3号键:启动开关

sbit WORK_LED=P1^1;     //显示板工作指示灯

sbit SPK=P1^2; //蜂鸣器的驱动IO口

sbit COM_LED=P1^0;      //显示板COM控制

sbit SCK=P2^7;          //显示板74HC164,SCK

sbit SDA=P2^6;          //显示板74HC164,SDA

sbit OUT_1=P2^0;        //输出1

sbit OUT_2=P2^1;        //输出2

sbit OUT_3=P2^2;        //输出3

sbit OUT_4=P2^3;        //输出4

sbit OUT_5=P2^4;        //输出5

sbit OUT_6=P2^5;        //输出6

sbit FIRE=P1^3;         //火焰检测

sbit AD0=P1^4;          //开关AD输入

sbit LGNITION_SW=P1^5;  //点火开关

sbit TEMP=P1^6;         //温度控制

sbit LGNITION=P3^7;     //点火控制


uchar SEG_tab[11]={0xf7,0xc1,0xbb,0xdb,

             0xcd,0xde,0xfe,0xc3,0xff,0xdf,0x00};//0-9,关闭;



/***************************延时函数*************************/

void Delay(BYTE n)

{

    WORD  x;

    while (n--)

    {

       x = 5000;

       while (x--);

    }

}



/***************************74HC164驱动程序*************************/

void Send_164(uchar dd)    //发送一个字节

{                   

     uchar a;    

     SCK=0;    

     for(a=0;a<8;a++)    

     {    

         SCK=0; SDA=dd&0x80;     

         SCK=1; dd=dd<<1;         

     } 

     SDA=0; 

}

/***************************蜂鸣*************************/

void key_beep()

{  

  uchar b;  

  for(b=2;b>0;b--)

     {

       for(c=2;c>0;c--)

       {

         SPK=0;

         Delay(5);

         SPK=1;

       }

     }     

}


/*----------------------------

关闭IAP

----------------------------*/

void IapIdle()

{

    IAP_CONTR = 0;                  //关闭IAP功能

    IAP_CMD = 0;                    //清除命令寄存器

    IAP_TRIG = 0;                   //清除触发寄存器

    IAP_ADDRH = 0x80;               //将地址设置到非IAP区域

    IAP_ADDRL = 0;

}


/*----------------------------

从ISP/IAP/EEPROM区域读取一字节

----------------------------*/

BYTE IapReadByte(WORD addr)

{

    BYTE dat;                       //数据缓冲区


    IAP_CONTR = ENABLE_IAP;         //使能IAP

    IAP_CMD = CMD_READ;             //设置IAP命令

    IAP_ADDRL = addr;               //设置IAP低地址

    IAP_ADDRH = addr >> 8;          //设置IAP高地址

    IAP_TRIG = 0x5a;                //写触发命令(0x5a)

    IAP_TRIG = 0xa5;                //写触发命令(0xa5)

    _nop_();                        //等待ISP/IAP/EEPROM操作完成

    dat = IAP_DATA;                 //读ISP/IAP/EEPROM数据

    IapIdle();                      //关闭IAP功能


    return dat;                     //返回

}


/*----------------------------

写一字节数据到ISP/IAP/EEPROM区域

----------------------------*/

void IapProgramByte(WORD addr, BYTE dat)

{

    IAP_CONTR = ENABLE_IAP;         //使能IAP

    IAP_CMD = CMD_PROGRAM;          //设置IAP命令

    IAP_ADDRL = addr;               //设置IAP低地址

    IAP_ADDRH = addr >> 8;          //设置IAP高地址

    IAP_DATA = dat;                 //写ISP/IAP/EEPROM数据

    IAP_TRIG = 0x5a;                //写触发命令(0x5a)

    IAP_TRIG = 0xa5;                //写触发命令(0xa5)

    _nop_();                        //等待ISP/IAP/EEPROM操作完成

    IapIdle();

}


/*----------------------------

扇区擦除

----------------------------*/

void IapEraseSector(WORD addr)

{

    IAP_CONTR = ENABLE_IAP;         //使能IAP

    IAP_CMD = CMD_ERASE;            //设置IAP命令

    IAP_ADDRL = addr;               //设置IAP低地址

    IAP_ADDRH = addr >> 8;          //设置IAP高地址

    IAP_TRIG = 0x5a;                //写触发命令(0x5a)

    IAP_TRIG = 0xa5;                //写触发命令(0xa5)

    _nop_();                        //等待ISP/IAP/EEPROM操作完成

    IapIdle();

}


关键字:STC15W408AS  单片机  内部EEPROM读写  接口函数 引用地址:基于STC15W408AS单片机内部EEPROM读写接口函数

上一篇:51单片机定时闹钟仿真程序
下一篇:L297,L298驱动步进电机原理图proteus仿真+程序 LCD显示速度

推荐阅读

集微网消息, 11 月 8 日,在三星开发者大会上,三星除了正式亮相折叠屏设备之外,同时还公布了能够适应折叠屏设备的全新系统 UI —— One UI 。        据悉,One UI 是基于 Android 9.0 打造,三星方面表示,它是经过重新设计,使得全新 UI 更加适应单手操作。同时,三星对几乎所有 APP 进行重新设计,力求让所有点击操作都集...
离上次真正写历程已经有10天的时间了。国庆嘛,自己给自己放了几天假——耍耍游戏下下棋什么的。 其实这次写触屏的驱动和对ARM中中断的过程的了解也花了不少时间和脑力。我就简单分享一下CPU执行某个中断的条件吧,也是我自己的理解,如果有错还请大家指正(以IRQ中断为例吧):   在程序状态寄存器中(CPSR寄存器)i 位为IRQ中断禁止位...
随着电子产品日益流行,寻找坚固耐用的电池变得越来越重要。如今,大多数设备都使用锂离子电池,这种电池通常比较安全,但有时会起火或爆炸。(图片来源:techxplore)作为一种替代方案,全固态锂电池(ASSLB)备受关注。锂离子电池的电极是固态的,但电解质为液态。相比之下,全固态锂电池的电极和电解质都是固态,而且非常安全;但是,这也导致在运行过程...
之前曾有消息称,苹果可能取消iPhone的mimi款,主要原因是销量不是很好。  据爆料人LeaksApplePro透露,明年的iPhone阵容将由两款6.1英寸和两款6.7英寸的设备组成,而不会推出iPhone 14 mini。  除了销量不堪的缘故外,还有更多的因素是,苹果希望继续扩大专业机型和非专业机型之间差距。  类似的消息之前就曾出现过,当时就有消息人士透露...

史海拾趣

问答坊 | AI 解惑

面向对象技术在嵌入式开发中的应用

随着信息技术的发展,对嵌入式系统的研究与开发也成为当前的一个热点。由于 -.机上应用的 /01占用资源太多,不适合嵌入式的应用,因此嵌入式系统对轻量级 /01 的需求越来越迫切。首先介绍了嵌入式系统及其相关概念,并针对图形用户界面在嵌入式系统 ...…

查看全部问答∨

请推荐电源降压IC

我现在正在做一个系统外部供电是12V。系统中有3.3V和3.8V供电,请问我应该选择先降到哪一个点比较合适?我还有一个掉电保护电路。请推荐一个IC给我和一个电源系统的设计方案。谢谢!…

查看全部问答∨

运动与健康市场的人体传感器网络PAN

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 近年来,随着各种短距离无线通信技术的发展,人们提出了一个新的概念,即个人局域网PAN(Personal Area Network)。      PAN 核心思想是,用无线电或红外线或者蓝牙代替传统的有线电缆 ...…

查看全部问答∨

超正的红外解码资料 不看就走宝咯

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 喜欢就顶下吧  …

查看全部问答∨

DS18B20

问下 就是DS18B20负温度如何弄 ,我做来总是有1度的误差…

查看全部问答∨

100分请教高手Trace32如何加载符号

在cmm文件中设置如下: &UBOOT_EXECUTED_ADDRESS=0x33e00000 &UBOOT_PATH="Y:\\svn\\uboot_tao\\uboot-1.3.4-m9" &UBOOT_IMAGE="&UBOOT_PATH\\u-boot" &UBOOT_CODE="&UBOOT_PATH\\" print "u-boot loading again fo ...…

查看全部问答∨

ShellExecuteEx 打开bat文件一闪

= _T(\"searchlist.bat\");          //执行DOS命令                                TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...…

查看全部问答∨

请教 LED灯闪烁模式

现在有8个LED ,用51单片机的8个I/O控制,老大让闪烁200种模式 如果每种模式写一个函数实现,那就得200个函数,老大说200个函数太大了 他要像活字印刷那样,几个函数通过不同的组合就能实现这200种模式 唉,想得头都大了,不知道大家有没有什么 ...…

查看全部问答∨

MPMC里的VFBC

在EDK中,MPMC的VFBC可以不经过CPU直接跟用户逻辑通信吗?在EDK中配置好MPMC的端口后,如何将其导入到ISE里啊?…

查看全部问答∨

怎样获取映像中代码段和数据段的大小???

用 IAR EWARM 5.20 开发 STM32F103ZC(Cortex-M3内核) 在连接配置文件(.icf)中,我想分别获取 readonly 和 readwrite 块的大小,然后将指定的内存大小减去这两块的大小之后的剩余空间作为堆栈使用,这个要怎么实现呢? 举个例子: me ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved