基于STC15W408AS单片机内部EEPROM读写接口函数

发布者:EnchantedHeart最新更新时间:2019-11-16 来源: 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显示速度

推荐阅读最新更新时间:2024-11-13 03:27

51单片机显示时间日期
#include reg52.h #include max7219.h #include DS1302.h sbit p10=P1^0; bit flag=0; //调整控制标记 bit flagh=1; //时间日期切换标记 uchar temp ; //调整前的时间 uchar curtime1 ,curtime2 ; //调整后的时间显示模式 uchar tab1 ={30,40,11,31,8,2,14}; //DS1302初始化时间 uchar xingqi; //读取的星期 uchar code tab2 ={0xff,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8};
[单片机]
Atmel推出多款低功耗8位tinyAVR MCU
Atmel巩固其在8位MCU市场的领先地位,推出多款低功耗8位tinyAVR MCU 拓展其MCU产品组合 持续投资开发创新技术,为广受市场欢迎的8位AVR MCU组合增添差异化产品 中国北京,2013年11月26日- 全球微控制器(MCU)和触摸解决方案领域的领导者Atmel公司(纳斯达克:ATML)今日宣布推出ATtiny441和 ATtiny841,进一步拓展其低功耗8位tinyAVR MCU产品组合。 Atmel是8位MCU的市场领导者,而ATtiny441/841系列的发布进一步体现了其致力于持续投资这一市场的承诺。凭借公司在MCU领域确立的二十多年的领先地位,此次发布的产品整合了各种易用的功能、工具和外设,从而提
[单片机]
MCS-51单片机之液晶显示
用MCS-51单片机来驱动液晶显示本已不属于单片机本身的知识了,我所用到的液晶是1602液晶屏,主要是要自已去查看相关芯片的文档,所以自然对英语阅读能力是一个不小的挑战.在看文档的时候,我们也只需要注意几个相对重要的问题,而不用面对大篇的文档而不知何去何从,第一重要当然是液晶的时序图了,只有掌握了时序图后我们才能写出合理正确的程序,除此之外,还有相关引角的作用也是必不可少的. 在编写相关程序时,首先是将相关位进行设置,将RW接地即可,还有就是要合理设置RS位和EN位了,它们分别是读写选择位,命令数据先择位,使能位了,在操作时序的时候,我们主要也是来操作EN位来以时序进行控制的所以,她是极其重要的.接下来,我们就可以向芯片写
[单片机]
51单片机通过esp8266和温度传感器将温度显示到手机上
需要的硬件:51单片机,ESP8266(wifi模块),DS18b20(温度传感器) 需要的软件: 手机要下载一个网络调试助手,浏览器就有。 部分代码: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit DQ=P2^4; sbit k1=P1^0; sbit fmq=P1^4; char receiveTable = ; char aa = ; uint temp,shi,ge,a,i,flag; void delay(uint i) //5us { do
[单片机]
51<font color='red'>单片机</font>通过esp8266和温度传感器将温度显示到手机上
单片机PWM波(AT89C51、ADC0808)
一、简介 此电路由AT89C51最小系统和ADC0808组成。 二、运行效果 三、代码 /*想要更多项目私wo!!!*/ #include reg52.h #define uint unsigned int #define uchar unsigned char sbit CLK = P2^4; sbit ST = P2^5; sbit EOC = P2^6; sbit OE = P2^7; sbit PWM = P3^0; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i 120;i++); } } voi
[单片机]
<font color='red'>单片机</font>PWM波(AT89C51、ADC0808)
基于使用STM8单片机I2C方式实现读写操作
STM8硬件I2C知识 STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz)或快速(最高400kHz)的I2C总线。 1.I2C的4种模式 ● 从设备发送模式 ● 从设备接收模式 ● 主设备发送模式 ● 主设备接收模式 2.I2C的主要特点 ● 并行总线/I2C总线协议转换器 ● 多主机功能:该模块既可做主设备也可做从设备 ●I2C主设备功能 ─ 产生起始和停止信号 ●I2C从设备功能 ─ 可编程的I2C 地址检测 ─ 停止位检测 ● 产
[单片机]
基于使用STM8<font color='red'>单片机</font>I2C方式实现<font color='red'>读写</font>操作
51单片机(AT89C52)一键多功能(短按、长按)
短按(按下持续时间小于3s)一次数码管显示加1,同时流水灯计数加1。 长按(按下持续时间大于3s)时,数码管显示每500ms加1,同时流水灯每500ms计数加1。 #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; #define NOKEY 0 #define KEYDOWN 1 #define KEYUP 2 uchar keystate; sbit key=P2^7; void keyscan(void); uchar timeflag; uchar code table = { 0x80,0xf2,0x48,0x60,
[单片机]
基于MSP430 单片机的便携式气象仪设计
  0 引言   温度.湿度.气压.风速.风向等气象参数的测量在日常生活.农业.渔业.工业.林业.航海等领域中起着十分重要的作用,很多地区气象参数的测量大多依靠当地天气预报,可是,天气预报地域范围较广,无法精确到小区域的气候测量.而搭建气象台成本较高,性价比很低,因此设计一种小型化,便携式的综合气象测量仪就显得十分必要.针对上述问题本文设计了一种低功耗便携式气象仪,该气象检测系统可以有效地测量小区域的温度.湿度.气压.风速.风向等气象参数,精度可达到普通气象测量要求,还有实时显示.实时存储.回溯查询的功能,具有低功耗.小型化.便携式.低成本的特点,适应于各种小区域的气象测量,具有一定的实用价值.   1 系统设计和工作原理
[单片机]
基于MSP430 <font color='red'>单片机</font>的便携式气象仪设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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