单片机最小系统源程序_一花一世界,一叶一如来。_百度空间

#include <reg52.h>
sbit CS_93c66=P2^3;
sbit SK_93c66=P2^2;
sbit DI_93c66=P2^1;
sbit DO_93c66=P2^0;
void START_93c66();
void END_93c66();
void EWEN_93c66();
void EWDS_93c66();
unsigned int READ(unsigned int);
unsigned char WRITE(unsigned int,unsigned int);
void SEND_DATA_93c66(unsigned int,unsigned char);
void delay1(unsigned int);
unsigned char Addr_bit=8;//c66a设置为9,c66b设置为8

/**************************************************************************/
/*主函数                                                                  */
/*在地址0X24写入一个16位数据,并通过P1口输出,先输出高八位,后输出低八位 */
/**************************************************************************/
void main()
{
unsigned tmp;
char h_tmp,l_tmp;
P1=0xff; //LED全灭
while(!WRITE(0X24,0X55aa));
tmp=READ(0X24);
h_tmp=tmp>>8;
l_tmp=tmp;
P1=h_tmp;
delay1(60000);
P1=l_tmp;
delay1(60000);
}
/*93c66 操作子程序 */
/* 注意:这里使用的93c66 为16 位结构的EEROM*/
void delay1(unsigned int num)//延时时间约为num*2个机器周期+5us
{
while(--num);
}
/***********************************************************************/
/*名称: START_93c66() */
/*说明: 用于93c66 的启动,防止由于CS_93c66 的改动而引起数据时序混乱 */
/***********************************************************************/
void START_93c66()
{
DO_93c66=1; /*防止DO 由于是低电平而无法输入*/
CS_93c66=1;
/*开启93c66*/
CS_93c66=0;
DI_93c66=0;
SK_93c66=0;
CS_93c66=1;
delay1(1000);
}
/***************************************************************************/
/*名称:END_93c66() */
/*说明:用于93c66 的结束,防止由于CS_93c66 的改动而引起数据线为0 而无法输入*/
/***************************************************************************/
void END_93c66()
{
CS_93c66=0;
DI_93c66=1;
SK_93c66=1;
}
/***********************************************************************/
/*名称:SEND_DATA_93c66() */
/*说明:在93c66 启动下,送入指定位数的数据 */
/*输入: op_data 要输入的数据 */
/* num 输入的位数 */
/**********************************************************************/
void SEND_DATA_93c66(unsigned int op_data,unsigned char num)
{
unsigned char temp1;
op_data=op_data<<(16-num); /*左移去掉无用位*/
for(temp1=0;temp1<num;temp1++)
{
if( (op_data&0X8000)==00 )
{DI_93c66=0;}
else
{DI_93c66=1;}
SK_93c66=1;
SK_93c66=0;
op_data=op_data<<1;
}
}
/***********************************************************************/
/*名称: EWEN_93c66() */
/*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
/***********************************************************************/
void EWEN_93c66()
{
START_93c66();
SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
END_93c66();
}
/***********************************************************************/
/*名称: EWDS_93c66() */
/*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
/**********************************************************************/
void EWDS_93c66()
{
START_93c66();
SEND_DATA_93c66(0X0004,0X03);
SEND_DATA_93c66(0X0000,Addr_bit);
END_93c66();
}
/***********************************************************************/
/*名称:READ() */
/*说明:93c66 的字读取程序 */
/*输入:要读取的字节地址(9 位) */
/*输出:读取的字数值 */
/**********************************************************************/
unsigned int READ(unsigned int address)
{
unsigned char temp1;
unsigned int temp2;
START_93c66();
SEND_DATA_93c66(0X0006,0X03);
SEND_DATA_93c66(address,Addr_bit);
temp2=0; /*存放返回数据的缓冲先清零*/
for(temp1=0;temp1<16;temp1++) /*循环读出16个数据*/
{
temp2=temp2<<1;
SK_93c66=1;SK_93c66=0;
if(DO_93c66==1)
    {temp2=temp2|0X01;}
}
END_93c66();
return temp2;
}
/**********************************************************************/
/*名称:WRITE() */
/*说明:93c66 的字写入程序 */
/*输入: address 要写入的字节地址(8 位) */
/* op_data 要写入的数据(16 位) */
/*输出: 写入成功标志 */
/**********************************************************************/
unsigned char WRITE(unsigned int address,unsigned int op_data)
{
unsigned char temp1;
unsigned int temp2;
EWEN_93c66();
START_93c66();
SEND_DATA_93c66(0X0005,0X03);
SEND_DATA_93c66(address,Addr_bit);
SEND_DATA_93c66(op_data,0X10);
CS_93c66=0;
CS_93c66=1;
temp1=1;
temp2=50000; /*设置一个{zd0}延时等待数值.注意在不同的晶振下延时是不同的*/
while(!DO_93c66)
{
temp2=temp2-1;
if(temp2==0)
{
temp1=0;//temp1=0则写入失败
delay1(60000);
P1=0;
//break; /*{zd0}等待延时后说明写入失败*/
}
}
END_93c66();
EWDS_93c66();
return temp1;
}



郑重声明:资讯 【单片机最小系统源程序_一花一世界,一叶一如来。_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——