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

📄 cycletime.c

📁 *51单片机时序总驱动 *包括并口的6800和8080,串口的I2C,SPI,1-WIRE *所有片选由上层驱动完成(I2C,1-wire为总线选择)
💻 C
字号:
#include"cycletime.h"

/*******************6800函数*******************/
#ifdef CT_6800
/********/
void CT68_sbyte(uchar DorI, uchar datas)  //写入 参数表(数据>SET_D / 指令>SET_I,直接数)         
{   
    CT68_DI = DorI;
    CT68_RW = SET_W;
    CT68_EN = SET_EN;
  #ifdef HIGH_SPEED
    CT68_EN = SET_EN;	        //大于24M晶振时用
  #endif
    DATAB = datas;
    CT68_EN = !SET_EN;
  #ifdef CT_8080
    CT68_RW = 1;
  #endif
}

/********/
uchar CT68_rbyte(uchar DorI)           //读取 参数表(数据>SET_D / 指令>SET_I)           
{            
    uchar uctmp;
    DATAB = 0XFF;
    CT68_DI = DorI;
    CT68_RW = SET_R;
    CT68_EN = SET_EN;
  #ifdef HIGH_SPEED
    CT68_EN = SET_EN;	        //大于24M晶振时用
  #endif
    uctmp = DATAB;              //获得数据
    CT68_EN = !SET_EN; 
    return uctmp;
} 
/********/
#endif

/*******************8080函数*******************/
#ifdef CT_8080
/*******/ 

void CT80_sbyte(uchar datas)              //8080写入
{
    CT80_WR = 0; 
  #ifdef HIGH_SPEED
    CT80_WR = 0;	        //大于24M晶振时用
  #endif
    DATAB = datas;
    CT80_WR = 1;
} 

uchar CT80_rbyte()                  //8080读取 
{
    uchar uctmp;
    DATAB = 0XFF;
    CT80_RD = 0;  
  #ifdef HIGH_SPEED
    CT80_RD = 0;	        //大于24M晶振时用
  #endif
    uctmp = DATAB;
    CT80_RD = 1;
    return uctmp;
}
/********/
#endif
   
/*******************I2C函数*******************/
#ifdef CT_I2C
/******** 


/********/
#endif
   
/*******************SPI函数*******************/
#ifdef CT_SPI
/******************************/
void SPI_sbyte(uchar ucdat)
{
    uchar i;
    SCLK = 0;
    for( i=0; i<8; i++)
    {
        MOSI = ucdat & 0x80;
        SCLK = 1;
        SCLK = 0;
        ucdat <<= 1;
    }
}

/******************************/
uchar SPI_rbyte()
{
    uchar i, rtdat = 0;
    for(i=0; i<12; i++)
    {
        rtdat |= MOSO;
    	rtdat <<= 1;
    	SCLK = 1;
    	SCLK = 0;
    }
    return rtdat;
}
/********/
#endif
   
/*******************1-wire函数*******************/
#ifdef CT_1_WIRE
/********/
void Delay10us(uchar tmp)
{
	while(tmp--)
	{tmp&=255;tmp|=0;} 
}
/********/ 
bit CT_1_init()          //返回0则初始化成功,否则失败.
{
	bit tmp;
    DQ = 1;
//	Delay10us(1);
	DQ = 0;
	Delay10us(50);         //复位脉冲大于480us
	DQ = 1;
	Delay10us(12);    //释放总线后,等待>100us(资料上15~60us) !!!12M时12~15可用 !!!!
	tmp = DQ;            //检测存在脉冲
    Delay10us(1);
    return tmp;
}
/********/
uchar CT_1_rbyte()
{
	uchar i,tmp = 0;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = 1;
        if(DQ)
		tmp |= (0x01 << i);   //15us内采样
		Delay10us(4);		  //等待45us 
	}  
	DQ = 1;
	return tmp;
}
/********/
void CT_1_sbyte(uchar tmp)
{
    uchar i;
    for(i=0;i<8;i++)
    {
       DQ = 0;
       DQ = 0;           //写0大于1us
       DQ = tmp & 0x01;  //15us后采样
       tmp >>= 1; 
       Delay10us(5);      //最大采样时间45us
	   DQ = 1;              
    }                          
}
/********/
#endif   

/******************************/

⌨️ 快捷键说明

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