MSSP的I2C模式

[复制链接]
3734|5
 楼主| qhcmcu 发表于 2008-10-22 12:50 | 显示全部楼层 |阅读模式
哪位大哥有I2C工作在从动模式的程序
machunshui 发表于 2008-10-22 17:03 | 显示全部楼层

本人写的一个例子

本人写的一个例子<br /><br />https://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=2950544&tp=%u672C%u4EBA%u5199%u7684%u4E00%u4E2Apic%20i2c%u6A21%u5757%u57FA%u4E8E%u4E2D%u65AD%u7684%u4ECE%u673A%u4F8B%u5B50
machunshui 发表于 2008-10-22 17:14 | 显示全部楼层

程序里面有个地方需要修正

程序里面有个地方需要修正<br />else&nbsp;if(&nbsp;(temp&nbsp;^&nbsp;0b00001100)&nbsp;==&nbsp;0&nbsp;)<br /><br />应该改为<br /><br />else&nbsp;if(&nbsp;(temp&nbsp;^&nbsp;0b00001101)&nbsp;==&nbsp;0&nbsp;)<br /><br />前一个条件用于proteus模拟通过,<br /><br />后一个用于实际电路.<br /><br />原因是microchip手册上的描述有误.
 楼主| qhcmcu 发表于 2008-10-23 14:33 | 显示全部楼层

楼上你好

用proteus模拟怎么SSP1IF置不了1,只运行按键和显示功能?<br />有PIC16F917/946接24C04的I2C模式程序吗?<br />
dream2010 发表于 2008-10-23 15:12 | 显示全部楼层

I2C通讯程序借鉴

芯片MAX518实现I2C通讯程序如下,可以借鉴给你读下:<br /><br />#include&quot;pic.h&quot;<br />#include&quot;pic1687x.h&quot;<br />unsigned&nbsp;char&nbsp;i;<br />unsigned&nbsp;char&nbsp;j;<br />unsigned&nbsp;char&nbsp;n;<br /><br />const&nbsp;&nbsp;char&nbsp;&nbsp;table[127&nbsp;]&nbsp;=&nbsp;{0X80,0X86,0X8D,&nbsp;0X93,0X99,0X9F,0XA5,0XAB,0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,0X76,0X7C};<br /><br />void&nbsp;I2Cinitial()<br />{<br />SSPCON=0X08;&nbsp;&nbsp;&nbsp;//00001000主控I2C工作模式<br />SSPCON2=0X00;<br />SSPSTAT=0X80;<br />SSPADD=0X02;<br /><br />TRISC3=1;<br />TRISC4=1;<br />TRISA4=0;<br />RA4=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭74HC165芯片占线功能<br /><br />GIE=0;<br />SSPEN=1;<br />SSPIF=0;<br />}<br /><br />void&nbsp;ACK()<br />{<br />&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(SSPIF==0)&nbsp;&nbsp;//等待总线发送数据字节完成.<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPIF=0;<br />}<br /><br />void&nbsp;I2Cout()<br />{<br />SEN=1;<br />for(i=3;i--;)&nbsp;continue;<br />&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSEN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(SSPIF==0)&nbsp;&nbsp;//等待总线发送数据字节完成.<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPIF=0;<br />SSPBUF=0X58;<br />ACK();<br />SSPBUF=0X01;<br />ACK();<br />SSPBUF=j;<br />ACK();<br />PEN=1;<br />ACK();<br />}<br /><br />void&nbsp;main()<br />{<br />I2Cinitial()<br />while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;for(i=0;i&lt=127;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;j=table;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2Cout();<br />&nbsp;&nbsp;}<br /><br />}<br /><br /><br /><br />
machunshui 发表于 2008-10-23 16:53 | 显示全部楼层

proteus模拟时,先暂停,打开i2c debuger

proteus模拟时,先暂停,打开i2c&nbsp;debuger<br /><br />用i2c&nbsp;debuger发送报文,<br /><br />报文的内容回显示在数码管上.<br /><br />917/946的i2c应该差不多,<br /><br />microchip的外设长得都比较象
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

86

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部