通过调试的AT93C46读写程序(C语言)

发布者:博雅之士最新更新时间:2017-01-03 来源: eefocus关键字:AT93C46  读写程序  C语言 手机看文章 扫描二维码
随时随地手机看文章

/********************************************************************* 
                    通过调试的AT93C46读写程序(C语言)

 * 程序说明:本程序实现51系列单片机对AT93C46的读写,ORG端接地

 * 版本: v1.1

 *********************************************************************/
#include
#include
unsigned char uchar;
#define READ_D 0xc0     //读指令
#define WRITE_D 0xa0     //写指令
#define ERASE_D 0xe0     //擦除指令
#define EWEN_D 0x98     //擦/写允许指令
#define EW_D 0x80     //擦/写禁止指令

sbit CS = P1^0;
sbit SK = P1^1;
sbit DI = P1^2;
sbit DO = P1^3;


//时钟函数
void at93c46_clock(void)
{
  SK=0;
  _nop_();
  SK=1;
}

//输入函数;in_data为数据,d_bit为输入数据的位数。
void send(uchar in_data,uchar d_bit)
{
 uchar i;
 for(i=0;i   {
     DI=(bit)(in_data&0x80);
     in_data<<=1;
     at93c46_clock();
   }
}

//接收函数
uchar receive(void)
{
 uchar in_data=0;
 uchar j;
 DO=1;
 while(DO) at93c46_clock();
 for(j=0;j<8;j++)
   {
  at93c46_clock();
     in_data=(in_data<<1)|DO;
   }
 at93c46_clock();
  return(in_data);
}
//发送读指令和地址,从AT93C46指定的地址中读取数据
uchar read(uchar addr)
  {
    uchar data_r;
 addr<<=1;
    send(READ_D,3);     //送读指令
    send(addr,7);     //送地址
    data_r=receive();     //接收数据
    CS=0;
    return(data_r);
  }

//擦除操作函数
void erase(uchar addr)
{
DO=1;
CS=1;
addr<<=1;
send(ERASE_D,3); 
send(addr,7);
CS=0;
CS=1;
while(!DO);      //等待擦除完毕
CS=0;
}

//将一个字节数据写入AT93C46指定的地址中。
void wirite(uchar addr,uchar eData)
  {
    CS=1;     //擦/写允许
   send(EWEN_D,10);
 CS=0;
  _nop_();  
    erase(addr);   //写数据前擦除同样地址的数据
 addr<<=1;
    CS=1;
    send(WRITE_D,3);  //送写指令
    send(addr,7);   //送地址
 send(eData,8); 
    CS=0;
  _nop_();
    CS=1;
    while(!DO) at93c46_clock();     //等待写完
    CS=0;
    //********擦/写禁止********
  _nop_();          
 CS=1;    
   send(EW_D,10);
 CS=0;
  }


关键字:AT93C46  读写程序  C语言 引用地址:通过调试的AT93C46读写程序(C语言)

上一篇:4×4矩阵式键盘(非中断)源程序
下一篇:基于51单片机实现模拟IIC总线时序

推荐阅读最新更新时间:2024-03-16 15:28

关于51单片机中C语言编写的精确延时函数
有些特殊的应用会用到比较精确的延时(比如DS18B20等),而C不像汇编,延时精准度不好算。本人经过反复调试,对照KEIL编译后的汇编源文件,得出了以下几条精确延时的语句(绝对精确!本人已通过实际测试),今天贴上来,希望对需要的朋友有所帮助 sbit LED = P1^0; // 定义一个管脚(延时测试用) unsigned int i = 3; // 注意i,j的数据类型, unsigned char j = 3; // 不同的数据类型延时有很大不同 //-----------------各种精确延时语句----------------------------------- while( (i--)!=1 ); //
[单片机]
51单片机控制HD61202液晶显示C语言程序
//写汉字液晶程序 液晶屏分为4行/8列汉字,全部使用模拟接口方式。 /////////////////////////////////////////////////////////////////////////////////////////////////// 连线图: / /LCM---89C52/ /LCM---89C52/ /LCM-------89C52/ /LCM----------89C52/ / /DB0---P1.0/ /DB4---P1.4
[单片机]
单片机C语言教程第二课-初步认识51芯片
上一课我们的第一个项目完成了,可能有懂C语言的朋友会说, 这和PC机上的C语言没有多大的区别呀 。的确没有太大的区别,C语言只是一种程序语言的统称,针对不同的处理器相关的C语言都会有一些细节的改变。编写PC机的C程序时,如要对硬件编程你就必须对硬件要有一定的认识,51单片机编程就更是如此,因它的开发应用是不可与硬件脱节的,所以我们先要来初步认识一下51苾片的结构和引脚功能。MSC51架构的芯片种类很多,具体特点和功能不尽相同(在以后编写的附录中会加入常用的一些51芯片的资料列表),在此后的教程中就以Atmel公司的AT89C51和AT89C2051为中心对象来进行学习,两者是AT89系列的典型代表,在爱好者中使用相当的多,应用资料
[单片机]
单片机<font color='red'>C语言</font>教程第二课-初步认识51芯片
PIC单片机CCS之C语言(#INT_DEFAULT的应用)
#INT_DEFAULT 语法: #int_default 目的:如果PIC触发一个中断且没有设置任何中断标志位, 则下面的函数将被调用.如果有一个中断标志,但一次都没触发,则#int_default函数也可被调用. 例子:#int_default default_isr(){ printf( Unexplained interrupt\r\n );
[单片机]
基于MSP430单片机驱动NRF24L01无线模块接收C语言程序
NRF24L01无线模块在此程序中可以直接与MSP430单片机直接相连,单片机的电压和无线模块的电压都是3.3V, 无需加阻流电阻。通信接口为单片机模拟的SP口,LC12864液晶屏主要是用作把接收到数据通过其显示出来。 程序测试通过,可用! //p4口为液晶屏 //p1口中断 //nRF24L01无线通信 //p5.0 csn //p5.1 mosi //p5.3 sck //p5.2 miso //p1.2 irq //p5.7 ce //ST7920串行控制128*64液晶 //rst p4.3 复位 //rs p4.0 片选 //rw p4.1 数据 //E p4.2 时钟 #include msp430
[单片机]
如何用C语言操纵AVR的IO端口(以ICCAVR为例)
举例一:将PB0定义为输出,且输出为高电平 DDRB=BIT(0);//定义 PB0为输出 PORTB|=BIT(0);// PB0 输出高电平 举例二:将PB0、PB1定义为输出,且PB0输出低电平,PB1均为高电平 DDRB|=BIT(0)|BIT(1);//定义 PB0、PB1为输出 PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平 举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1 PORTB^=BIT(0);//PB0 输出高电平 与0异或,不变,与1异或,原来0的为1,1的为0 举
[单片机]
C语言一百例第九例
代码: /* C语言第九例 题目:要求输出国际象棋棋盘。 程序分析:国际象棋棋盘由64个黑白相间的格子组成,分为8行*8列。用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 */ #include stdio.h void main(void) { int a,b; //定义两个变量 for(a=0;a 8;a++) //八列循环八次 { for(b=0;b 8;b++)//八行循环八次 { if((a+b)%2==0)//能被2整除就打印符号 { printf( %c%c ,11,11); }
[单片机]
<font color='red'>C语言</font>一百例第九例
51单片机1秒定时C语言程序(通过调试)
#include reg52.h // 晶振为12MHz, #include stdio.h #include absacc.h #include intrins.h /*************************** * 定义硬件引脚连接 ****************************/ sbit p1_0=P1^0; /************************* * 定义全局变量 ***********************/ // Byte data intrCounter; // 计时器中断次数 // Byte data beginNum; // 开始倒计时的时间 /
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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