📄 cycletime.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 + -