• 老王818
    了解作者
  • C/C++
    开发工具
  • 25KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 6
    下载次数
  • 2019-11-07 20:05
    上传日期
串行EE2PROM芯片93C46SPI接口驱动程序。
AT93C46.rar
  • AT93C46
  • at93c46_cof.aws
    241B
  • AT93C46.lst
    18.3KB
  • AT93C46.prj
    1KB
  • AT93C46_cof.aps
    2.1KB
  • AT93C46.hex
    1.6KB
  • AT93C46.SRC
    44B
  • AT93C46.dbg
    3.5KB
  • AT93C46.cof
    4.4KB
  • AT93C46.lk
    12B
  • AT93C46.o
    6.6KB
  • AT93C46.mp
    1.5KB
  • AT93C46._C
    6.7KB
  • AT93C46.lis
    33.4KB
  • AT93C46.C
    6.7KB
  • AT93C46.mak
    548B
  • AT93C46.s
    14.7KB
  • AT93C46.dp2
    60B
内容介绍
/********************************************** *工程名称:eeprom AT93C46 读写 *工作模式:8位字节模式(ORG=GND),IO口模拟时序,mega16使用内部 8Mhz RC *作 者:朱海峰 *邮 箱:ntzhf@163.com QQ:543376422 *创建日期:2007.10.26 *修改日期:2007.10.30 ************************************************/ #include <iom16v.h> #include <macros.h> #define uint8_t unsigned char #define uint16_t unsigned int #define nop NOP() //op code #define READ 0X80 //只包括前3个控制BIT--下同 #define EWEN 0X00 #define ERASE 0Xc0 #define WRITE 0X40 #define ERAL 0X00 #define WRAL 0X00 #define EWDS 0X00 #define DI 5 #define DO 6 #define CS 4 #define SK 7 #define ORG 0 //0=接地(8位模式);1=接VCC(16位模式) #define DDR_DI DDRB #define DDR_DO DDRB #define DDR_CS DDRB #define DDR_SK DDRB #define PORT_DI PORTB #define PORT_DO PORTB #define PORT_CS PORTB #define PORT_SK PORTB #define PIN_DI PINB #define PIN_DO PINB #define PIN_CS PINB #define PIN_SK PINB #define set_di() PORT_DI |= (1<<DI) #define clr_di() PORT_DI &= ~(1<<DI) #define set_cs() PORT_CS |= (1<<CS) #define clr_cs() PORT_CS &= ~(1<<CS) #define set_sk() PORT_SK |= (1<<SK) #define clr_sk() PORT_SK &= ~(1<<SK) #define buzzer_on() DDRD |= (1<<2);PORTD |= (1<<2) #define buzzer_off() DDRD |= (1<<2);PORTD &= ~(1<<2) #define Green_off() DDRB |= (1<<0);PORTB |= (1<<0) #define Green_on() DDRB |= (1<<0);PORTB &= ~(1<<0) #define Red_off() DDRB |= (1<<1);PORTB |= (1<<1) #define Red_on() DDRB |= (1<<1);PORTB &= ~(1<<1) uint8_t Read(uint8_t add); void EW_enable(void); void EW_disable(void); void Erase(uint8_t add); void Erase_all(void); void Write(uint8_t add,uint8_t w_data); void IO_init(void); void Delay_ms(uint16_t ms); void Send_str_op(uint8_t op); void Send_bits(uint8_t s_data); void delay_us(void); /*********************************************/ void main(void) { uint8_t temp_1 = 0x00; nop; IO_init(); while (2) { EW_enable(); //读写使能 //Erase(0x03); Write(0x01,0x28); //在地址为0X01的EEPROM中写入数据0x28 nop; nop; //EW_disable(); //Delay_ms(100); //EW_enable(); temp_1 = Read(0x01); //读取地址为0X01的EEPROM中的数据 nop; nop; EW_disable(); if (temp_1 == 0x28) //校验读取的数据是写入的 { Green_on(); //校验正确,绿色LED亮 Red_off(); } else { Green_off(); //校验不正确,红色LED亮 Red_on(); } for(;;) nop; } } /*********************************************/ void IO_init(void) { DDR_DI |= (1<<DI); PORT_DI &= ~(1<<DI); DDR_CS |= (1<<CS); PORT_CS &= ~(1<<CS); DDR_SK |= (1<<SK); PORT_SK &= ~(1<<SK); } /*********************************************/ void delay_us(void) { nop; nop; nop; nop; } /*********************************************/ /********************************************* 函数功能:发送起始位和操作码 描 述:一个BIT的起始位+两个BIT的操作码 入口参数:OP 出口参数:无 *********************************************/ void Send_str_op(uint8_t op) { uint8_t i; //===========start bit=================// set_di(); delay_us(); set_sk(); delay_us(); clr_sk(); delay_us(); //===========send op code================// for (i=0;i<2;i++,op <<=1) { if (op & 0x80) { set_di(); } else { clr_di(); } delay_us(); set_sk(); delay_us(); clr_sk(); delay_us(); clr_di(); } } /********************************************* 函数功能:发送7个BIT 描 述:地址或其他 入口参数:s_data 出口参数:无 *********************************************/ void Send_bits(uint8_t s_data) { uint8_t i,temp_data = 0; for (i=0;i<7;i++,s_data <<=1) { temp_data = s_data; if (temp_data & 0x40) // xxxx'xxxx { // &0100'0000 set_di(); } else { clr_di(); } delay_us(); set_sk(); delay_us(); clr_sk(); delay_us(); clr_di(); } } /********************************************* 函数功能:从指定地址读出一个字节的数据 描 述:从已add为地址的eeprom中读数据 入口参数:add 出口参数:read_data *********************************************/ uint8_t Read(uint8_t add) { uint8_t i,buffer = 0,read_data = 0; set_cs(); delay_us(); Send_str_op(READ); Send_bits(add); for (i=0;i<8;i++) { set_sk(); delay_us(); buffer |= (PIN_DO & 0X40); //读取引脚电平 buffer >>= DO; read_data <<=1; read_data |= buffer; delay_us(); clr_sk(); } delay_us(); clr_cs(); return read_data; } /********************************************* 函数功能:延时函数 描 述:延时 入口参数:ms 出口参数:void *********************************************/ void Delay_ms(uint16_t ms) { uint8_t i; for (;ms>0;ms--) for(i = 0;i<100;i++) ; } /********************************************* 函数功能:读写禁止 描 述:禁止读写功能 入口参数:void 出口参数:void *********************************************/ void EW_disable(void) { set_cs(); delay_us(); Send_str_op(EWDS); Send_bits(0x00); delay_us(); clr_cs(); } /********************************************* 函数功能:读写使能 描 述:使能读写功能 入口参数:void 出口参数:void *********************************************/ void EW_enable(void) { set_cs(); delay_us(); Send_str_op(EWEN); Send_bits(0x60); delay_us(); clr_cs(); } /********************************************* 函数功能:擦出指定地址的内容 描 述:将指定地址的内容全部擦除 入口参数:add 出口参数:void *********************************************/ void Erase(uint8_t add) { clr_cs(); clr_sk(); set_cs(); delay_us(); Send_str_op(ERASE); Send_bits(add); delay_us(); clr_cs(); delay_us(); delay_us(); set_cs(); while (!(PIN_DO & (1<<DO))); //check busy delay_us(); clr_cs(); } /********************************************* 函数功能:在指定的地址写一个字节的数据 描 述:将一个字节的数据写入指定地址 入口参数:add,w_data 出口参数:void *********************************************/ void Write(uint8_t add,uint8_t w_data) { uint8_t i; set_cs(); delay_us(); Send_str_op(WRITE); Send_bits(add); for (i=0;i<8;i++,w_data <<=1) { delay_us(); if (w_data & 0x80) { set_di(); } else { clr_di(); } delay_us(); set_sk(); delay_us(); clr_sk(); delay_us(); clr_di(); } delay_us(); clr_cs(); delay_us(); delay_us(); set_cs(); while (!(PIN_DO & (1<<DO))); //check busy delay_us(); clr_cs(); } /*********************************************/ /*********************************************/ /*********************************************/
评论
    相关推荐
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档
    • SIM800C_MQTT.rar
      使用SIM800C模块,使用MQTT协议,连接中国移动onenet平台,能实现数据的订阅、发布、存储等
    • 卷积神经网络
      这是卷积神经网络的一个实际用例,已经调试好了,能够在matlab上成功运行,适合从事卷积神经网络(CNN)研究的人员学习使用。
    • android从bootloader到launcher启动流程整理
      讲述android 开机流程 从boot rom---bootloader---init--zygote---systemserver---ams 并附上自己整理的每个流程的流程图 ,清晰熟悉android 启动流程
    • 分数阶混沌系统:分数阶混沌系统的数值解。-matlab开发
      该工具箱包含可用于模拟一些著名的分数阶混沌系统的函数,例如: - 陈的系统, - Arneodo的系统, - Genesio-Tesi 的系统, - 洛伦兹系统, - 牛顿-莱普尼克系统, - 罗斯勒的系统, - Lotka-Volterra系统, - 达芬的系统, - 范德波尔的振荡器, -伏打的系统- 陆氏系统, - 刘的系统, - Chua的系统, - 金融系统, - 3 细胞 CNN。 这些函数以数值方式计算描述混沌系统的分数阶非线性微分方程的解。 每个函数返回总模拟时间的状态轨迹(吸引器)。 更多详情请看书: Ivo Petras,分数阶非线性系统:建模、分析和仿真,Springer,系列:非线性物理科学,2011,ISBN 978-3-642-18100-9。 http://www.springer.com/engineering/control/book/978-3-
    • matlabpam代码-dsp-library:用于光通信的MATLABDSP函数库
      matlab pam代码 DSP库 该项目包含几种不同的功能,可将DSP算法应用于光通信。 这些功能适用于相干和非相干(PAM,DMT)光通信。 大多数功能是相互独立的。 因此,该代码中的功能可以轻松使用,并与其他DSP功能结合使用。 用法 功能列表以及简短说明在文件中。 输入和输出参数的描述在每个函数的标题中。 讯号 通常,输入(和输出)信号在第一维度上具有时间(例如,列向量),而第二维度用于一次管理多个信号(例如,不同的极化,不同的参数等)。 之所以选择这种约定,是因为MATLAB通过将列保留在内存的连续部分中来存储矩阵,因此,这种约定比其他方法(行向量)要快。 参数 大多数功能使用参数结构作为输入参数。 函数中使用的参数的描述通常在标头中,而coherent-dsp函数的默认参数在文件中。 参考 执照 此代码在下发布。
    • 有关多目标跟踪的PHD滤波的一些资料
      一些关于多目标跟踪的新的文献,主要是有关概率假设密度(PHD)的
    • 基于python开发的全国新工商采集工具 v1.2版本
      这个软件是通过scrapy爬虫框架结合代理IP池再加上request模拟请求技术以及验证码识别技术,可以做到日更新采集全国新工商信息。采集的数据自动存储在mysql数据库表里,可下载全量1.8亿多企业工商基本信息和36维度的详细信息.支持sql和excel导出数据包格式。
    • Aerosim Blockset
      The AeroSim aeronautical simulation blockset provides a complete set of tools for the rapid development of nonlinear 6-degree of freedom aircraft dynamic models. In addition to the basic aircraft dynamics blocks, the library also includes complete aircraft models which can be customized through parameter files.
    • matlab匹配滤波代码-matlab_for_thesis:Matlab博士学位论文代码
      matlab匹配滤波代码博士论文的MATLAB代码 博士论文的MATLAB代码的一部分,“井田双色散水下声通道中的多载波通信”。 函数下的func_JingTian文件夹 FUNC_JINGTIAN包含多载波通信中一些通常需要的功能: OFDM调制/解调模块,包括几种数据辅助的信道估计方法和差分解调; 快速实现GFDM和C-FBMC调制/解调,分别包括时域和频域的迫零(ZF)和匹配滤波(MF)均衡; 为OFDM信道估计中使用的压缩感测方法计算字典的功能; 增加信道效应,施加宽带多普勒失真的功能; 通过线性调频Z变换(CZT)以任意精度对频域中的信号进行重采样; Hermite函数合成的信号之间的交叉歧义函数的计算。 演示文件夹 以下列出了四个演示 demo1:使用基本追踪(BP)算法形式的压缩感知方法对OFDM进行稀疏2-D信道估计; demo2:比较基本数据辅助OFDM信道估计算法,包括常规频域插值和基于IDFT的变换域方法; demo3:圆形滤波器组多载波(C-FBMC / OQAM)的基于DFT特征向量的原型滤波器合成; demo4:用于广义频分复用(GFDM)的辅助日期辅助无干