📄 cycletime.h
字号:
/***************************************
*51单片机时序总驱动
*包括并口的6800和8080,串口的I2C,SPI,1-WIRE
*所有片选由上层驱动完成(I2C,1-wire为总线选择)
*Ver: 0.1 0816 //Test Pass: KS0108(6800),MAX153(8080),18B20(1-wire),****24C02(I2C),***MAX197(),***MAX1247()
*
* Ary9006
***************************************/
#ifndef __CYCLETIME__
#define __CYCLETIME__
#include<reg52.h>
#ifndef uchar
#define uchar unsigned char
#endif
/*使用时序设置*/
#define CT_6800 //使用6800时序
#define CT_8080 //使用8080时序
//#define CT_I2C //使用I2C时序
//#define CT_SPI //使用SPI时序
//#define CT_1_WIRE //使用1-wire时序
/*并行口设置*/
#define DATAB P1 //并行数据口
#define INSTR P2 //并行指令口
//#define HIGHSPEED //大于24M晶振用
#ifdef CT_6800
sbit CT68_DI = INSTR^0;
sbit CT68_RW = INSTR^1;
sbit CT68_EN = INSTR^2;
#endif
#ifdef CT_8080
// sbit CT80_DI = INSTR^0;
sbit CT80_WR = P2^0;
sbit CT80_RD = P2^1;
#endif
/*串行口设置*/
#ifdef CT_SPI
sbit SCLK = P2^0; //SPI之SCLK
sbit MOSI = P2^1; //SPI之MOSI
sbit MOSO = P2^2; //SPI之MOSO
#endif
#ifdef CT_I2C
sbit SCL = P2^5; //I2C之SCL
sbit SDA = P2^6; //I2C之SDA
#endif
#ifdef CT_1_WIRE
sbit DQ = P2^7; //单总线
#endif
/*此为并行标示,无需更改*/
#define SET_EN 1 //使能有效电平:1>高;0>低
#define SET_D 1 //数据有效电平:1>高;0>低
#define SET_I 0 //指令有效电平:1>高;0>低
#define SET_R 1 //读有效电平:1>高;0>低
#define SET_W 0 //写有效电平:1>高;0>低
/******************并行外部函数*********************/
extern void CT68_sbyte(uchar DorI, uchar datas); //6800写入,参数表(数据>SET_D / 指令>SET_I,直接数)
extern uchar CT68_rbyte(uchar DorI); //6800读取,参数表(数据>SET_D / 指令>SET_I)
extern void CT80_sbyte(uchar datas); //8080写入
extern uchar CT80_rbyte(); //8080读取
/*******************SPI外部函数*******************/
extern uchar SPI_rbyte(); //Receive One byte
extern void SPI_sbyte(uchar ucdat); //Sent byte
/*******************I2C外部函数*******************/
extern void I2C_start(); //启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变
extern void I2C_stop(); //终止I2C总线,当SCL为高电平时使SDA产生一个正跳变
extern uchar I2C_rbyte(); //Receive One byte
extern void I2C_sbyte(uchar); //Sent byte
/*******************1-wire外部函数*******************/
extern bit CT_1_init(); //返回0则初始化成功,否则失败.
extern uchar CT_1_rbyte();
extern void CT_1_sbyte(uchar tmp);
/******************/
#endif
/*****************6800时序参数表******************
项目 符号 最小值最大值 单位
E 周期时间 Tcyc 1000 - nS
E 高电平宽度 Pweh 450 - nS
E 低电平宽度 Pwel 450 - nS
E 上升时间 Tr - 25 nS
E 下降时间 Tf - 25 nS
地址建立时间 Tas 140 - nS
地址保持时间 Tah 10 - nS
数据建立时间 Tdsw 200 - Ns
数据延时时间 Tddr - 320 Ns
数据保持时间(写) Tdhw 10 - nS
数据保持时间(读) Tdhr 20 - Ns
******************8080时序参数表*******************
******************SPI时序参数表*******************
******************I2C时序参数表*******************
上电到读操作 最大1 ms
上电到写操作 最大1 ms
写周期时间 最大10 ms
时钟频率 最大400 KHz
输入的噪声抑制时间 最大200 ns
SCL 变低至SDA 数据输出及应答信号 最大1 us
新的发送开始前总线空闲时间 最小1.2 us
STA 起始信号保持时间 最小0.6 us
时钟低电平周期 最小1.2 us
时钟高电平周期 最小0.6 us
STA 起始信号建立时间 最小0.6 us
DAT 数据输入保持时间 最小0 ns
DAT 数据输入建立时间 最小50 ns
SDA 及SCL 上升时间 最大0.3 us
SDA 及SCL 下降时间 最大300 ns
STO 停止信号建立时间 最小0.6 us
数据输出保持时间 最小100 ns
******************1-wire时序参数表*******************
参数(us) 最小 最大
时间隙 60 120
恢复时间 1
写0低电平时间 60 120
写1低电平时间 1 15
读数据有效时间 15
复位高电平时间 480
复位低电平时间 480 4800
存在检测高电平 15 60
存在检测低电平 60 240
*******************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -