⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at93c46.h

📁 mcs51系列单片机常用芯片使用头文件(包含MAX7219,DS18B20,DS1302,AT93C46,IC电话卡
💻 H
字号:
/*******************************************************************************
*  标题:  at93c46头文件                                                        *
*  日期:  2007-4-1                                                             *
*  版本:  1.0                                                                  *
*  作者:  无名                                                                 *
*  邮箱:  djrljf@163.com                                                       *
*  QQ  : 403499014                                                            *
********************************************************************************
********************************************************************************
* 【版权】 Copyright(C)无名        All Rights Reserved                         *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#ifndef	_at93c46_H 				      // 防止at93c46.h被重复引用

#define	_at93c46_H
#include "at89x52.h"


#define uchar unsigned char
#define uint  unsigned int
//默认设置,使用时根据实际布线修改DIN CLK LOAD
#define CS P3_3
#define SK P3_4
#define DI P3_5
#define DO P3_6
//操作数设置
#define READ  0x02
#define WRITE 0x01
#define ERASE 0x03
#define OTHER 0x00
#define EWEN  0xc0
#define EWDS  0x00
#define ERAL  0x80
#define WRAL  0x40
//测试写动作完成
void test()
     {CS=0;CS=1;
	 DO=0;
	 while(~DO);
	 while(DO);
	 CS=0;
	 }
//写开始位,操作数,地址(特殊字)
void head(uchar buf,uchar addr)
     {
	 uchar i=0;
	 CS=1;SK=0;DI=0;
	 DI=1;SK=1;SK=0;   //起始位
	 if(buf&&0x02==0x02)DI=1;
	 else DI=0;
	 SK=1;SK=0;   
	 if(buf&&0x01==0x01)DI=1;
	 else DI=0;
	 SK=1;SK=0;      //"写"操作码
	 for(i=0;i<8;i++)
	    {
		if((addr&0x80)==0x80)DI=1;   //写1
		else DI=0;                   //写0
		SK=1;SK=0;                   //些
		addr=(addr<<1);              //从高位开始写地址
		}
     }
//===================================================
//读指定地址内数据
//===================================================
uchar readBit(uchar addr)
     {
	 uchar i=0,temp=0;
	 head(READ,addr);
	 for(i=0;i<8;i++)                //读8为数据
	    {
		SK=0;SK=1;
		temp=(temp|DO);
		temp=temp<<1;                //从高位到低位
		}
	 CS=0;CS=1;                      //结束标记
	 return temp;                    //返回结果
	 }
//===================================================
//从指定地址开始连续读N个字节返回到指定数组(93C46不支持此功能)
//===================================================
void readMulti(uchar addr,uchar no,uchar *word)
     {
     uchar i=0,j=0,temp;
	 head(READ,addr);
	 for(j=0;j<no;j++)            //连续读NO个数据
	    {
	    for(i=0;i<8;i++)         //读8为数据
	       {
		    SK=0;SK=1;
		    temp=(temp|DO);
		    temp=temp<<1;
		    }
	    *(word+j)=temp;          //返回一个数据
		}
	 CS=0;CS=1;                  //结束标记
	 }
//===================================================
//写数据到指定地址
//===================================================
void write(uchar addr,uchar dat)
     {
     uchar i=0;
	 head(WRITE,addr);
	  for(i=0;i<8;i++)
	    {
		if((dat&0x80)==0x80)DI=1;
		else DI=0;
		SK=1;SK=0;
		dat=(dat<<1);           //从高位开始写地址
		}
	  test();
	 }
//===================================================
//擦除指定地址内数据(填充1)
//===================================================
void erase(uchar addr)
     {
     uchar i=0;
	 head(ERASE,addr);
	 for(i=0;i<10;i++);
	 test();
	 }
//===================================================
//写允许设置
//===================================================
void ewen()
     {
	 head(OTHER,EWEN);
	 CS=0;
	 }
//===================================================
//写禁止设置
//===================================================
void ewds()
     {
	 head(OTHER,EWDS);
	 CS=0;
	 }
//===================================================
//擦除全部数据
//===================================================
void eral()
     {
	 head(OTHER,ERAL);
	 test();
	 }
//===================================================
//写数据到所有空间
//===================================================
void wral(uchar dat)
     {
	 uchar i=0;
	 head(OTHER,WRAL);
	 for(i=0;i<8;i++)
	    {
		if((dat&0x80)==0x80)DI=1;
		else DI=0;
		SK=1;SK=0;
		dat=(dat<<1);           //从高位开始写地址
		}
     test();
	 }
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -