关于PICC读AT93C46使用,无法读出,附源程

[复制链接]
3189|3
 楼主| sunlimcu 发表于 2008-3-5 09:30 | 显示全部楼层 |阅读模式
#include&quot;pic.h&quot;<br />#include&quot;pic16f7x.h&quot;<br /><br />#define&nbsp;CS&nbsp;RC2<br />/***<br />&nbsp;&nbsp;&nbsp;PIC16F74&nbsp;&nbsp;&nbsp;&nbsp;AT93C46<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC4--------DO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC5--------DI<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC2--------CS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC3--------SK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GND--------GND,ORG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VDD--------VCC<br />***/<br /><br />void&nbsp;MCU_init()<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTC=0X2C;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISC=0XD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISD=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTE=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISE=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION=0X42;//4MHZ&nbsp;OSC&nbsp;8分频<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMR0=131;&nbsp;&nbsp;&nbsp;//1ms定时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPSTAT=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPCON=0X31;<br />&nbsp;&nbsp;&nbsp;}<br />//93c46读写程序,使用SPI<br />void&nbsp;Delay(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />}<br /><br />unsigned&nbsp;char&nbsp;OutPut(unsigned&nbsp;char&nbsp;SendData)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPBUF=SendData;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(STAT_BF==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;clrwdt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=SSPBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(temp);<br />}<br /><br />void&nbsp;Ewen(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=0X09;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=EWEN;&nbsp;&nbsp;&nbsp;//0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=0;<br />}<br />void&nbsp;Ewds(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=0;<br /><br />}<br /><br />void&nbsp;WriteByte(unsigned&nbsp;char&nbsp;WData,unsigned&nbsp;char&nbsp;Adress)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;wtemp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ewen();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wtemp=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(wtemp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wtemp=Adress|0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(wtemp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutPut(WData);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!DI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />unsigned&nbsp;char&nbsp;&nbsp;ReadByte(unsigned&nbsp;char&nbsp;Adress)<br />{<br />unsigned&nbsp;char&nbsp;wrtemp,rtemp;<br />CKP=1;<br />CS=1;<br />Delay();<br />wrtemp=0x03;<br />OutPut(wrtemp);<br />wrtemp=Adress&0x7f;<br />OutPut(wrtemp);<br />//&nbsp;asm()&quot;nop&quot;;<br />CKP=0;<br />asm(&quot;nop&quot;);<br />rtemp=OutPut(wrtemp);<br />Delay();<br />CS=0;<br />CKP=1;<br />return(rtemp);<br />}<br />/*void&nbsp;WriteBytes(unsigned&nbsp;char&nbsp;*WriteData,unsigned&nbsp;char&nbsp;Number,unsigned&nbsp;char&nbsp;Adress){<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;Ewen();<br />&nbsp;&nbsp;while(Number!=0){<br />&nbsp;&nbsp;&nbsp;temp=*WriteData;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteByte(temp,Adress);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(DI==0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;clrwdt&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CS=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteData++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adress++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number--;<br />&nbsp;&nbsp;}<br />}*/<br /><br />void&nbsp;ReadBytes(unsigned&nbsp;char&nbsp;*ReadData,unsigned&nbsp;char&nbsp;Number,unsigned&nbsp;char&nbsp;Adress)<br />{<br />//unsigned&nbsp;char&nbsp;temp;<br />while(Number!=0)<br />{<br />asm(&quot;clrwdt&quot;);<br />*ReadData=ReadByte(Adress);<br />ReadData++;<br />Adress++;<br />Number--;<br />}<br />}<br /><br />void&nbsp;main(void)<br />{<br />&nbsp;MCU_init();<br />&nbsp;WriteByte(100,1);<br />&nbsp;temp=0;<br />&nbsp;temp=ReadByte(1);<br />&nbsp;读出来的是0XFF??<br />&nbsp;while(1);<br />}
hotpower 发表于 2008-3-10 23:56 | 显示全部楼层

先用IO模拟看看~~~

  
wjf07 发表于 2008-3-11 15:31 | 显示全部楼层

pls call Microchip office

  
shishaojun 发表于 2009-3-26 22:56 | 显示全部楼层

不用这么麻烦,picc自己带i2c程序库

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

1

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