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

📄 x5045.c

📁 在89S52上运行的一个测量频率的并且利用串口通信的程序
💻 C
字号:
#include"main.h"
#include"x5045.h"


/*
void  eeprom(void)

{

	 wr_sr(0)  ;
}

*/
uchar rd_sr(void)
{
    uchar sr;
    SCK=0;
    CS=0;                                     /*时钟输入变低,CS片选为低电平*/
    write_byte(0x05);                        /*写读状态寄存器命令*/
    sr=read_byte();                          /*读取状态字节*/
    SCK=0;
    CS=1;                                  /*时钟输入变低,CS片选为低电平*/
    return sr;
}



/*x5045写状态寄存器函数~~~~~~~~~~~~~~~~~~~~~~*/
void wr_sr(uchar sr)                        
{
    //WP=1;        
    wren();                               /*调写允许函数*/
    SCK=0;                                 /*SCK为时钟输入*/
    CS=0;                                 /*CS片选*/
    write_byte(0x01);                         /*写状态寄存器命令*/
    write_byte(sr);                         /*设置1.4秒的看门狗,不保护数据*/
  	SCK=0;
    CS=1;
    wipchk();
}



/* x5045写一个字节数据函数~~~~~~~~~~~~*/
void write_byte(uchar dt)
{
    uchar i;                                
    for(i=0;i<8;i++)
    {
		
        SCK=0;
		SI = dt & 0x80;

       // if(dt&0x80) 
         //   SI=1;                       
        //else 
          //  SI=0;
        SCK=1;                       //  SCK时钟输入,时钟上升沿锁存数据;
        dt=dt<<1;                        
    }
     SI=0;
}


/* x5045读一个字节函数~~~~~~~~~~~*/
uchar read_byte(void)
{
    uchar i,byte=0;                         
    for(i=0;i<9;i++)                      //这里很怪,要循环9次  
    {
	    
		byte=byte<<1;
        SCK=1;
	
                  // SCK时钟输入,时钟下降沿锁存数据
        if(SO==1)
        	byte+=1;
      
		SCK=0;
	
	
      
    }
    return byte;                             

}

/*x5045置位写允许函数~~~~~~~*/
void wren(void)
{
    SCK=0;
    CS=0;                                 
    write_byte(0x06);                         //写允许命令
    SCK=0;
    CS=1;                                 
}


//x25045标志忙查询函数~~~~~~~~~~~~~~~~~~~~~~~~
/*
void sr_busy(void)
{
    uchar i,j;
    i=1;j=0;
    while (i)
    {
        i=rd_sr();
        if(!(i&0x01))
			i=0;
        j++;
        if(j>=230) 
			i=0;                                   //如果延时到,强行退出,2005年5月9日---防止出现死机,导致通信中断和显示4个8
    }

}

*/
void wipchk(void) //reentrant //检查WIP位,判断是否写入完成
{
	uchar  Temp,TempCyc;
	
	for(TempCyc=0;TempCyc<50;TempCyc++)
	{
		Temp = rd_sr(); //读状态寄存器
		if (Temp&0x01==0)
		TempCyc = 50; 
	}
}


/* 
void write_ee(uchar add,uchar dat)        //    n数据地址.x被写数据
{
    
    wren();                           //调写允许函数
    SCK=0;
   CS=0;                                 //CS片选为低电平/
    write_byte(0x0a);                         //使用EEPROM的下半部分256个字节
    write_byte(add);                            //数据的被写地址
    write_byte(dat);                            //写数据
    SCK=0;
    CS=1;                         
    wipchk();                              
   
  
}



uchar read_ee(uchar add)             //被读出数据个数为1
{
    uchar m;                              //x为读出的数据的地址
    SCK=0;
    CS=0;                          ///CS片选
    write_byte(0x0b);                         //写读入命令
    write_byte(add);                            //写入要读的数据单元地址
    m=read_byte();                //读入数据存m中
    SCK=0;
    CS=1;                          //CS片选为高电平,结束读过程
    return m;
}

*/

⌨️ 快捷键说明

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