通灵王精神大师2GS码:在PC上用并行口模拟I2C总线的C源代码实例
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 19:01:31
在微机上模拟I2C总线的设计中,用并行口的D0(PIN2)模拟SCL信号,用D1(PIN3)模拟SDA信号。根据IIC总线的电平规范,程序如下:
#include
#include
#include
#include
#define DELAY_TIME 10
#define FALSE 0
#define TRUE 1
const unsigned char SCL_PIN=0x01;
const unsigned char SDA_OIN=0x02;
static void SET_SCL(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,SCL_PIN //将SCL置1
out dx,ax
}
}
static void CLR_SCL(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,0xff-SCL_PIN //将SCL置0
out dx,ax
}
}
static void SET_SDA(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,SDA_PIN //将SDA置1
out dx,ax
}
}
static void CLR_SDA(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,0xff-SDA_PIN //将SDA置0
out dx,ax
}
}
void DELAY(int t=DELAY_TIME) //延时子程序
{
for(int i=0;i }
void IIC_Start(void) //启动I2C总线
{
//在SCL为高电平时,使SDA出现一个负跳变
SET_SDA();
SET_SCL();
DELAY();
CLR_SDA();
DELAY();
CLR_SCL();
DELAY();
}
void IIC_Stop(void) //终止I2C总线
{
//在SCL为高电平时,使SDA出现一个正跳变
CLR_SDA();
SET_SCL();
DELAY();
SET_SDA();
DELAY();
CLR_SCL();
DELAY();
}
void SEND_0(void) //发送BIT0
{
//在SCL为高电平时,使SDA保持低电平
CLR_SDA();
SET_SCL();
DELAY();
CLR_SCL();
DELAY();
}
void SEND_1(void) //发送BIT1
{
//在SCL为高电平时,使SDA保持高电平
SET_SDA();
SET_SCL();
DELAY();
CLR_SCL();
DELAY();
}
int Check_Acknowledge(void)
{
//发送完每个字节检查SLAVE的应答信号
SET_SDA(); //主器件释放SDA线
SET_SCL();
DELAY(DELAY_TIME/2);
unsigned char b=inportb(0x378); //采样信号线
DELAY(DELAY_TIME/2);
CLR_SCL();
DELAY();
if(b&0xSDA_PIN) //SALVE返回1
return FLASE;
return TRUE;
}
#include
#include
#include
#include
#define DELAY_TIME 10
#define FALSE 0
#define TRUE 1
const unsigned char SCL_PIN=0x01;
const unsigned char SDA_OIN=0x02;
static void SET_SCL(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,SCL_PIN //将SCL置1
out dx,ax
}
}
static void CLR_SCL(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,0xff-SCL_PIN //将SCL置0
out dx,ax
}
}
static void SET_SDA(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,SDA_PIN //将SDA置1
out dx,ax
}
}
static void CLR_SDA(void)
{
asm{
mov dx,0x378
in ax,dx
or ax,0xff-SDA_PIN //将SDA置0
out dx,ax
}
}
void DELAY(int t=DELAY_TIME) //延时子程序
{
for(int i=0;i
void IIC_Start(void) //启动I2C总线
{
//在SCL为高电平时,使SDA出现一个负跳变
SET_SDA();
SET_SCL();
DELAY();
CLR_SDA();
DELAY();
CLR_SCL();
DELAY();
}
void IIC_Stop(void) //终止I2C总线
{
//在SCL为高电平时,使SDA出现一个正跳变
CLR_SDA();
SET_SCL();
DELAY();
SET_SDA();
DELAY();
CLR_SCL();
DELAY();
}
void SEND_0(void) //发送BIT0
{
//在SCL为高电平时,使SDA保持低电平
CLR_SDA();
SET_SCL();
DELAY();
CLR_SCL();
DELAY();
}
void SEND_1(void) //发送BIT1
{
//在SCL为高电平时,使SDA保持高电平
SET_SDA();
SET_SCL();
DELAY();
CLR_SCL();
DELAY();
}
int Check_Acknowledge(void)
{
//发送完每个字节检查SLAVE的应答信号
SET_SDA(); //主器件释放SDA线
SET_SCL();
DELAY(DELAY_TIME/2);
unsigned char b=inportb(0x378); //采样信号线
DELAY(DELAY_TIME/2);
CLR_SCL();
DELAY();
if(b&0xSDA_PIN) //SALVE返回1
return FLASE;
return TRUE;
}
I2C总线的协议
I2C总线设计的,用程序实现协议,完成其功能。
请问康佳2908T彩电的I2C总线的数据
求助TCL 2901A I2C总线调整方法的资料
索尼KV-F25MF1的I2C总线进入方法
S60上的游戏如何在PC上模拟运行?
什么是I2C总线 简单点说它的功能是什么呀
奔腾4 2.8C能否用在533总线主板上
为什么手提电脑上无加密狗并行口?(长方形的)
主板上的PCI总线应该是数据总线吧,那地址总线在哪里呢?
有没有模拟手机软件 在PC上接受短信
用c编写的计算器源代码
请问高达SEED有在PC平台上出过游戏吗?或者是可以在PC上模拟的其他平台的游戏?
SM总线控制器在c盘的什么位置
用PC能不能模拟PS2的 零红蝶?
有没有PC上用来模拟PSP的模拟器?
基于PC总线的D/A转换
高路华彩电各种型号I2C总线进入
厦华MT-2968彩电是不是I2C总线电路
C语言课程设计的源代码在哪里有下载啊?
请问在哪能下到C语言库函数的源代码?
NDS游戏《恶魔城苍月的十字架》模拟器在PC上怎么模拟?有什么具体要求吗?
微机的内部总线包含什么总线 A. PCI总线B. 地址总线 C. AGP总线D. 系统总线
DES的C程序源代码