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

📄 iic.c

📁 本程式通过4*4键盘的输入控制步进马达的正转和反转,停止转动以及加速和减速.
💻 C
字号:

/* ---------------------GESTIONE BUS I2C--------------------- */
/* Author : toniobr		Date : 11/2003 						  */
/* ---------------------------------------------------------- */

#include	<pic.h>
#include	"delay.h"
#define PORTBIT(adr,bit)	((unsigned)(&adr)*8+(bit))

static bit SCL @ PORTBIT(PORTA,0);		//porta per i dati rx e tx
static bit SDA @ PORTBIT(PORTA,1);		//porta per il clock
static bit TRISA_SDA @ PORTBIT(TRISA,1);


#define TCLOCK 5	// 0-255 uSec (5 uS equivale a una frequenza di 100 Khz)

/*Comando start*/
iic_start()
{	
	TRISA_SDA=0;		
	SDA=1;
	SCL=1;
	DelayUs(TCLOCK);
	SDA=0;
	DelayUs(TCLOCK);
	SCL=0;
	DelayUs(TCLOCK);
}

/* Comando stop*/
iic_stop()
{		
	TRISA_SDA=0;
	SCL=1;
	DelayUs(TCLOCK);
	SDA=1;
}

/* Legge lo stato del bit di acknoveldge*/
char iic_r_ack()
{		
	TRISA_SDA=1;
	SCL=1;
	DelayUs(TCLOCK);
	if(!SDA){
		SCL=0;
		DelayUs(TCLOCK);
		return 0;
	}
	else{
		SCL=0;
		DelayUs(TCLOCK);
		return 1;
	}
}

/* Invia il bit di ack */
iic_w_ack(char value)
{		
	TRISA_SDA=0;
	SDA=value;
	SCL=1;
	DelayUs(TCLOCK);
	SCL=0;
	DelayUs(TCLOCK);
}

/* Scrive su un device*/
iic_write(char value)
{		
	char i;
	TRISA_SDA=0;
	for(i=1;i<=8;i++)	//invia gli 8 bit
	{
		//SDA=(bit)(value & 0b10000000);		//msb first  da provare
		if (value&0b10000000)
			SDA=1;
		else
			SDA=0;
		value=value<<1;
		SCL=1;
		DelayUs(TCLOCK);
		SCL=0;
		DelayUs(TCLOCK);
	}	
}

/* Legge da un device*/
char iic_read()
{		
	char i;
	char value=0;
	TRISA_SDA=1;
	for(i=1;i<=8;i++)	//riceve gli 8 bit
	{
		SCL=1;
		value=value<<1;
		value|=SDA;		//msb first
		DelayUs(TCLOCK);
		SCL=0;
		DelayUs(TCLOCK);
	}
	return value;
}

⌨️ 快捷键说明

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