近日写一个DA的驱动,用的是12位DA芯片MAX5812,芯片上标为AAYZ(对应地址0xA8),调试了好久一直无电压输出。<br /> 其中用的51系列单片机做仿真I2C接口,上拉电阻Rp为10K,串行电阻为10欧,SDA、SCL高电平为5V;VDD接MAX6045的输出端,也就是4.5V;ADD接地,都是按照手册上所说的接的,用示波器看SCL和SDA的波形都是正确的,芯片也换过了,两个芯片都是一样的效果,一直没有电压出来,不知道是何缘故,现附上这一段的代码,麻烦各位高人看看有什么问题没有,感激不尽!<br /><br />#include<reg51.h><br />#include<absacc.h><br />#include<intrins.h><br /><br />#define uchar unsigned char <br />#define uint unsigned int <br /><br />sbit SCL=P2^7;<br />sbit SDA=P2^6;<br /><br />bit cack;<br />uint value;<br /><br />void delayms(uint m)<br />{<br /> uint j;<br /> uint i;<br /> for(i=0;i<m;i++)<br /> for(j=0;j<600;j++)<br /> _nop_();<br />}<br /><br />void delay2ns()<br />{<br /> _nop_();<br /> _nop_();<br />}<br /><br />void delay4ns()<br />{<br /> _nop_();<br /> _nop_();<br /> _nop_();<br /> _nop_();<br />}<br /><br />void Start()<br />{<br /> SDA=1;<br /> SCL=1;<br /> delay4ns();<br /> SDA=0;<br /> delay4ns();<br /> SCL=0;<br /> delay4ns();<br />}<br /><br /><br />void Stop()<br />{<br /> SDA=0;<br /> delay4ns();<br /> SCL=1;<br /> delay4ns();<br /> SDA=1;<br /> <br />}<br /><br />void Writebyte(uchar byte)<br />{<br /> uchar i;<br /> for(i=0;i<8;i++)<br /> {<br /> SDA=(bit)(byte&0x80);<br /> delay4ns();<br /> SCL=1;<br /> delay4ns();<br /> SCL=0;<br /> delay4ns();<br /> byte<<=1; <br /> }<br /> delay4ns();<br />}<br /><br />void Sent_ack()<br />{<br /> SDA=0;<br /> delay4ns();<br /> SCL=1;<br /> delay4ns();<br /> SCL=0;<br /> delay4ns(); <br />}<br /><br />void Sent_noack()<br />{<br /> SDA=1;<br /> delay4ns();<br /> SCL=1;<br /> delay4ns();<br /> SCL=0;<br /> delay4ns(); <br />}<br /><br />void Wait_ack( )<br />{ <br /> SCL=0; <br /> SDA=1; <br /> delay4ns();<br /> SCL=1;<br /> delay4ns();<br /> cack=SDA;<br /> while(cack)<br /> {<br /> cack=SDA;<br /> } <br /> SCL=0; <br /> SDA=1;<br /> delay4ns(); <br />}<br /><br />main() <br />{<br /> SCL=1;<br /> SDA=1;<br /> value=0x0AAA; <br /> delayms(500);<br /> while(1)<br /> { <br /> //presskey();<br /> Start();<br /> Writebyte(0xA8);<br /> Wait_ack(); <br /> <br /> Writebyte((value>>8)|0xC0);<br /> Wait_ack();<br /> <br /> Writebyte(value&0x00FF);<br /> Wait_ack();<br /> <br /> Stop();<br /> delayms(100);<br /> }<br /><br />}<br /><br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/200812/200812181756444.pdf'>https://bbs.21ic.com/upfiles/img/200812/200812181756444.pdf</a> |
|