导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→通过调试的AT93C46读写程序(C语言)[cy757]

 *第37646篇: 通过调试的AT93C46读写程序(C语言)

  
楼 主:cy757 2006年2月13日23:27
 通过调试的AT93C46读写程序(C语言)
本程序是我个人根据现在各个93C46/93C56/93C66读写的程序修改而成,欢迎各个读者就本程序存在的问题提出讨论。

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

 * 程序说明:本程序实现51系列单片机对AT93C46的读写,ORG端接地。各位读者
             在使用过程中如果出现那些问题欢迎给我来信。
 * 版本: v1.1
 * 时间: 2006.2.8

 * 作者: 广州大学松田学院 飘扬
 * QQ: 23328100
 * E-mail:cy757@21cn.com
 *********************************************************************/
#include   <reg51.h>  
#include   <intrins.h>  
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  <d_bit;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;
  }


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:谁知道HYNIX的单片机代理商

[下一篇主题]:研究院诚聘——广州天河