首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]请问freescale网站上有没有关于iic的例程,哪位大哥能帮忙?

[求助]请问freescale网站上有没有关于iic的例程,哪位大哥能帮忙?

请问freescale网站上有没有关于iic的例程,哪位大哥能帮忙?
我喜欢交朋友
我记得飞思卡尔网站上有软件实现IIC的源程序。
海纳百川  有容乃大
楼上大哥,怎么能找到呢?给个链接可以吗?因为我感觉freescale上的东西太多太繁琐了
我喜欢交朋友
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=68HC908GP32&nodeId=016246844976638055

下载AN1820D和AN1820SW。
海纳百川  有容乃大
感谢大哥,太感谢了!
我喜欢交朋友
有I2C的模块的MCU 认真看寄存器的功能
没有的按照I2C的时序软件模拟
发送:启动-地址-数据-等应答。。。
读:启动-地址-发送-读数据-发送应答。。。
楼上,有没有关于这方面的c语言的例子?strongchen大哥给的那个始汇编的,小弟对汇编却是很头晕哦。
我喜欢交朋友
可以到c51的网站下载到“没有的按照I2C的时序软件模拟”的c例子
不断学习,摸索中进步!
有没有moto的?51的我这里也有。现在关键是我不知道怎么初始化IIC。
我喜欢交朋友
我给一个例子程序吧,从MOT的汇编改过来的。调试好了的。 希望能对各位有些帮助。 #include "68hc08jl3.h" //=========================================================== //定义SCL 及SDA 和 I2CPORT 及 DIRECTION #ifndef SIMI2C #define SCL 0x08 #define SDA 0x04 #define I2CPORT PTD #define I2CDIR DDRD #endif void I2CSetupDelay (void); void I2CBitDelay (void); void I2CTxByte (unsigned char ucByte); unsigned char I2CRxByte (void); void I2CStartBit (void); void I2CStopBit (void); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // I2CTxByte // Transmit the byte in Acc to the SDA pin // (Acc will not be restored on return) // Must be careful to change SDA values only while SCL is low, // otherwise a STOP or START could be implied //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void I2CTxByte(unsigned char ch) { unsigned char i; for(i = 8;i >0;i--) { if((ch & 0x80)!=0) I2CPORT |= SDA; //Set the data bit value else I2CPORT &= ~SDA; I2CSetupDelay(); I2CPORT |= SCL; I2CBitDelay(); I2CPORT &= ~SCL; ch <<= 1; } I2CPORT |= SDA; I2CDIR &= ~SDA; //Set SDA as input I2CSetupDelay(); I2CPORT |= SCL; //Clock the line to get ACK I2CBitDelay();// if((I2CPORT & SDA)==0) { //Look for ACK from slave device I2CPORT &= ~SCL; //Restore clock line I2CDIR |= SDA; //SDA back as output } else { //No acknowledgment received from slave device //Some error action can be performed here //For now, just restore the bus I2CPORT &= ~SCL; I2CDIR |= SDA; } } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // I2CRxByte // Recieve the byte to Acc from the SDA pin // (Acc will not be restored on return) // Must be careful to change SDA values only while SCL is low, // otherwise a STOP or START could be implied //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= unsigned char I2CRxByte() { unsigned char i,ch=0; I2CDIR &= ~SDA; //Set the SDA as input for(i = 8;i > 0;i--) { ch <<= 1; // I2CSetupDelay(); //Wait a bit I2CPORT |= SCL; //Clock it in I2CSetupDelay(); //Wait a bit if((I2CPORT & SDA)!=0) ch++; I2CPORT &= ~SCL; //Restore clock to low state I2CBitDelay(); }// I2CPORT &= ~SDA; //SDA set low I2CDIR |= SDA; //Set SDA as output I2CSetupDelay(); I2CPORT |= SCL; //Clock the line to give ACK I2CBitDelay();// I2CPORT &= ~SCL; return ch; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // A START condition is defined as a falling edge // on SDA while SCL is high //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=- void I2CStartBit() { I2CPORT |= SCL; I2CPORT |= SDA; I2CDIR |= SDA; I2CDIR |= SCL; I2CPORT &= ~SDA; I2CBitDelay();// I2CPORT &= ~SCL; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // A STOP condition is defined as a rising edge // on SDA while SCL is high //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void I2CStopBit() { I2CPORT &= ~SDA; I2CPORT |= SCL; I2CPORT |= SDA; I2CBitDelay();// } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // Provide some data setup time to allow // SDA to stabilize in slave device // Completely arbitrary delay (10 cycles) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void I2CSetupDelay() { asm NOP; asm NOP; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Bit delay to provide (approximately) the desired // SCL frequency // Again, this is arbitrary (16 cycles) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void I2CBitDelay() { asm NOP; asm NOP; asm NOP; asm NOP; asm NOP; }
我怎么用楼上的读出来的是255。不论写进去什么数。。
???
我用的是模拟时序的IIC,挺好用。就是Freescale单片机的。
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
程序如下:
void IIC_writebyte(unsigned char record)
{
IBCR_MS_SL = 1; // Set transmit and master mode
IBCR_TX_RX = 1; // And generate start condition
IBDR = slavewrite; // Adress the slave and set up for master transmit
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
IBDR = slave_RD_address_LSB; // Send word adress
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
while(IBSR_RXAK); // check for RXAK
IBDR = record;
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
IBCR_MS_SL = 0; // generate stop signal
}
void IIC_readbyte()
{
unsigned char dummy;
IBCR_MS_SL = 1; // Set transmit and master mode
IBCR_TX_RX = 1; // And generate start condition
IBDR = slavewrite; // Adress the slave and set up for master transmit
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
while(IBSR_RXAK); // check for RXAK
IBDR = slave_RD_address_LSB; // Send word adress
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
while(IBSR_RXAK); // check for RXAK
IBCR_RSTA = 1; // set up repeated start
IBDR = SLAVEREAD;
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
while (IBSR_RXAK); // check for RXAK
IBCR_TX_RX = 0; // set up to receive
RD_data = IBDR; // dummy read
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag
IBCR_TXAK = 1; // acknowledge disable
RD_data = IBDR;
while (!IBSR_IBIF); // wait until IBIF
IBSR_IBIF=1; // clear the interrupt event flag

IBCR_MS_SL = 0; // generate stop signal
dummy = IBDR; // dummy read
}
//****** Init routines *******************
void IIC_init(void){

IBFD = 0x4C; // frequency divider register: Bus = 8MHz => SCL = 91kHz
IBAD = 0x00; // slave address of this module
IBCR = 0x80; // enable IIC module and No interrupts
IBSR_IBAL = 1; // clear the IBAL flag
slave_RD_address_LSB = 0;
}
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
返回列表