传感器模拟IIC与msp430F133通信输出结果不对

[复制链接]
3679|9
 楼主| cumtgirl 发表于 2008-3-9 09:03 | 显示全部楼层 |阅读模式
程序代码如下:按照此程序输出的传感器(HP03)内存的几个常数不对,不知道为什么?调试了一周了,郁闷<br />//Function:模拟IIC与MCU通信,压力传感器的MCLK接MCU的ACLK(32768Hz输出)<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vss--&gt&nbsp;GND<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VDD--&gtVCC<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCLK(32768HZ)--&gtP2.0<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XCLK--&gtP6.1&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA--&gtP6.0<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL--&gtP6.2&nbsp;<br />//*******************head&nbsp;files**********************************<br />#include&ltmsp430x14x.h&gt<br />//#include&quot;io430.h&quot;<br />#include&ltmath.h&gt<br />//*********************symbol&nbsp;define*****************************<br />#define&nbsp;SDA_STATE&nbsp;P6IN&nbsp;&&nbsp;BIT0&nbsp;&nbsp;&nbsp;//读入SDA状态<br /><br />unsigned&nbsp;int&nbsp;C1=0;<br />unsigned&nbsp;int&nbsp;C2=0;<br />unsigned&nbsp;int&nbsp;C3=0;<br />unsigned&nbsp;int&nbsp;C4=0;<br />unsigned&nbsp;int&nbsp;C5=0;<br />unsigned&nbsp;int&nbsp;C6=0;<br />unsigned&nbsp;int&nbsp;C7=0;<br />unsigned&nbsp;char&nbsp;AA=0;<br />unsigned&nbsp;char&nbsp;BB=0;<br />unsigned&nbsp;char&nbsp;CC=0;<br />unsigned&nbsp;char&nbsp;DD=0;<br /><br />unsigned&nbsp;int&nbsp;D1=0;<br />unsigned&nbsp;int&nbsp;D2=0;<br />long&nbsp;float&nbsp;DUT=0;<br />long&nbsp;float&nbsp;OFF=0;<br />long&nbsp;float&nbsp;SENS=0;<br />long&nbsp;float&nbsp;X=0;<br />long&nbsp;float&nbsp;Press=0;<br />long&nbsp;float&nbsp;Temp=0;<br />//*******************function&nbsp;declaration************************<br />void&nbsp;IIC_start(void);<br />void&nbsp;IIC_stop(void);<br />void&nbsp;IIC_SDA_HIGH(void);<br />void&nbsp;IIC_SDA_LOW(void);<br />void&nbsp;IIC_SCL_HIGH(void);<br />void&nbsp;IIC_SCL_LOW(void);<br />void&nbsp;IIC_ACK(void);<br />void&nbsp;IIC_NOACK(void);<br />void&nbsp;MCLKON(void);<br />void&nbsp;MCLKOFF(void);<br />void&nbsp;XCLR_LOW(void);<br />void&nbsp;XCLR_HIGH(void);<br />void&nbsp;IIC_ReadCalDate(void);<br />unsigned&nbsp;char&nbsp;IIC_readbyte(void);<br />void&nbsp;IIC_writebyte(unsigned&nbsp;char);<br />void&nbsp;ReadTemperaturePressureAD(void);<br />void&nbsp;CalculatepressTemp(void);<br />unsigned&nbsp;int&nbsp;ReadPressureAD();<br />unsigned&nbsp;int&nbsp;ReadTemperatureAD();<br />void&nbsp;SysDelay1ms(unsigned&nbsp;int);<br />void&nbsp;Delay16us(void);<br />void&nbsp;CPU_Init(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化时钟<br />void&nbsp;Port_Init(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化I/O<br />//********************************************************<br />//function:read&nbsp;calcute&nbsp;data&nbsp;and&nbsp;pressure,temp&nbsp;data<br />//********************************************************<br />void&nbsp;main(&nbsp;void&nbsp;)<br />{<br />&nbsp;&nbsp;//SysDelay1ms(100);<br />&nbsp;&nbsp;CPU_Init();<br />&nbsp;&nbsp;Port_Init();<br />&nbsp;&nbsp;//SysDelay2ms(50);<br />&nbsp;&nbsp;IIC_ReadCalDate();<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;ReadTemperaturePressureAD();<br />&nbsp;&nbsp;CalculatepressTemp();<br />&nbsp;&nbsp;SysDelay1ms(100);<br />&nbsp;&nbsp;}<br />}<br />//********************************************************<br />void&nbsp;CPU_Init(void)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;WDTCTL&nbsp;=&nbsp;WDTPW&nbsp;+&nbsp;WDTHOLD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Stop&nbsp;watchdog&nbsp;timer&nbsp;to&nbsp;prevent&nbsp;time&nbsp;out&nbsp;reset&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Configure&nbsp;internal&nbsp;clocks<br />&nbsp;&nbsp;DCOCTL&nbsp;&nbsp;=&nbsp;DCO1&nbsp;+&nbsp;DCO2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;digitally&nbsp;controlled&nbsp;oscillator&nbsp;to&nbsp;~1MHz<br />&nbsp;&nbsp;BCSCTL1&nbsp;=&nbsp;XT2OFF&nbsp;+&nbsp;RSEL2;<br />&nbsp;&nbsp;BCSCTL2&nbsp;=&nbsp;SELM0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;MCLK&nbsp;and&nbsp;SMCLK&nbsp;use&nbsp;this&nbsp;oscillator<br />&nbsp;&nbsp;do<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;IFG1&nbsp;&=&nbsp;~OFIFG;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;OSCFault&nbsp;flag_breathe<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0xFF;&nbsp;i&gt0;&nbsp;i--);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delay&nbsp;wait<br />&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;while((IFG1&OFIFG)!=0);&nbsp;<br /><br />}<br />//********************&nbsp;Port&nbsp;Initialization****************<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vss&nbsp;GND<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.3&nbsp;VDD<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2.0&nbsp;MCLK(32768HZ)<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P6.1&nbsp;XCLK<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P6.0&nbsp;SDA<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P6.2&nbsp;SCL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//********************************************************<br />void&nbsp;Port_Init(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;//P6SEL&nbsp;&=&nbsp;~0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.3普通IO<br />&nbsp;&nbsp;//P6DIR&nbsp;|=&nbsp;0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.3输出1<br />&nbsp;&nbsp;//P6OUT&nbsp;|=&nbsp;0x08;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;P2DIR&nbsp;|=&nbsp;0x01;<br />&nbsp;&nbsp;P2SEL&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P2.0输出ACLK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1输出<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2输出<br />&nbsp;}<br />//*********************************************************<br />void&nbsp;IIC_ReadCalDate(void)<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;ucValue=0;<br />//&nbsp;P6OUT&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1输出0<br />&nbsp;IIC_start();<br />&nbsp;IIC_writebyte(0xa0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//contain&nbsp;stop&nbsp;signal<br />&nbsp;IIC_writebyte(16);<br />&nbsp;IIC_start();<br />&nbsp;IIC_writebyte(0xa1);<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C1=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C1&lt&lt=8;<br />&nbsp;C1|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C2=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C2&lt&lt=8;<br />&nbsp;C2|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C3=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C3&lt&lt=8;<br />&nbsp;C3|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C4=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C4&lt&lt=8;<br />&nbsp;C4|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C5=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C5&lt&lt=8;<br />&nbsp;C5|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C6=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C6&lt&lt=8;<br />&nbsp;C6|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C7=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;C7&lt&lt=8;<br />&nbsp;C7|=ucValue;<br />&nbsp;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;AA=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;BB=ucValue;<br />&nbsp;//UartSend(AA);<br />&nbsp;//UartSend(BB);<br /><br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_ACK();<br />&nbsp;CC=ucValue;<br />&nbsp;ucValue=IIC_readbyte();<br />&nbsp;IIC_NOACK();<br />&nbsp;IIC_stop();<br />&nbsp;DD=ucValue;<br />&nbsp;}<br />//*********************************************************<br />void&nbsp;ReadTemperaturePressureAD(void)<br />{<br />&nbsp;long&nbsp;sumADvalue=0;<br />&nbsp;XCLR_HIGH();<br />&nbsp;MCLKON();<br />&nbsp;SysDelay1ms(2);<br />&nbsp;<br />&nbsp;D1=ReadPressureAD();<br />&nbsp;sumADvalue+=D1;<br />&nbsp;D1=ReadPressureAD();<br />&nbsp;sumADvalue+=D1;<br />&nbsp;D1=ReadPressureAD();<br />&nbsp;sumADvalue+=D1;<br />&nbsp;D1=ReadPressureAD();<br />&nbsp;sumADvalue+=D1;<br />&nbsp;D1=sumADvalue&gt&gt2;<br />&nbsp;<br />&nbsp;D2=ReadTemperatureAD();<br />&nbsp;<br />&nbsp;P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />&nbsp;P6DIR&nbsp;|=&nbsp;&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出<br />&nbsp;P6OUT&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;P6SEL&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2普通IO<br />&nbsp;P6DIR&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2输出<br />&nbsp;P6OUT&nbsp;&=&nbsp;~0x04;<br />&nbsp;<br />&nbsp;MCLKOFF();<br />&nbsp;XCLR_LOW();<br />&nbsp;}<br />//*********************************************************<br />unsigned&nbsp;int&nbsp;ReadTemperatureAD(void)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;ucData=0;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;ADT=0;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xee);<br />&nbsp;&nbsp;IIC_writebyte(0xff);<br />&nbsp;&nbsp;IIC_writebyte(0xe8);<br />&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;SysDelay1ms(40);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xee);<br />&nbsp;&nbsp;IIC_writebyte(0xfd);<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xef);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;ucData=IIC_readbyte();<br />&nbsp;&nbsp;IIC_ACK();<br />//UartSend(CC);<br />&nbsp;&nbsp;ADT=ucData;<br />&nbsp;&nbsp;ADT&lt&lt=8;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;ucData=IIC_readbyte();<br />&nbsp;&nbsp;IIC_NOACK();<br />&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;ADT|=ucData;<br />//UartSend(DD);&nbsp;<br />&nbsp;&nbsp;return&nbsp;(unsigned&nbsp;int)(ADT);&nbsp;&nbsp;<br />}<br />unsigned&nbsp;int&nbsp;ReadPressureAD(void)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;ucData=0;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;ADP=0;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xee);<br />&nbsp;&nbsp;IIC_writebyte(0xff);<br />&nbsp;&nbsp;IIC_writebyte(0xf0);<br />&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;SysDelay1ms(40);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xee);<br />&nbsp;&nbsp;IIC_writebyte(0xfd);<br />&nbsp;&nbsp;IIC_start();<br />&nbsp;&nbsp;IIC_writebyte(0xef);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;ucData=IIC_readbyte();<br />&nbsp;&nbsp;IIC_ACK();<br />&nbsp;&nbsp;ADP=ucData;<br />&nbsp;&nbsp;ADP&lt&lt=8;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;ucData=IIC_readbyte();<br />&nbsp;&nbsp;IIC_NOACK();<br />&nbsp;&nbsp;IIC_stop();<br />&nbsp;&nbsp;ADP|=ucData;<br />//UartSend(BB);<br />&nbsp;&nbsp;return&nbsp;(unsigned&nbsp;int)(ADP);&nbsp;&nbsp;<br />}<br />//*************Calculate&nbsp;&nbsp;press&nbsp;and&nbsp;temp*******************<br />void&nbsp;CalculatepressTemp(void)<br />{<br />&nbsp;&nbsp;&nbsp;if&nbsp;(D2&nbsp;&gt=&nbsp;C5)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;DUT&nbsp;=&nbsp;D2&nbsp;-&nbsp;C5&nbsp;-&nbsp;(D2&nbsp;-&nbsp;C5)&nbsp;*&nbsp;(D2&nbsp;-&nbsp;C5)&nbsp;*&nbsp;AA&nbsp;/&nbsp;16384&nbsp;/&nbsp;(1&nbsp;&lt&lt&nbsp;CC);<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(D2&nbsp;&lt&nbsp;C5)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;DUT&nbsp;=&nbsp;D2&nbsp;-&nbsp;C5&nbsp;-&nbsp;(D2&nbsp;-&nbsp;C5)&nbsp;*&nbsp;(D2&nbsp;-&nbsp;C5)&nbsp;*&nbsp;BB&nbsp;/&nbsp;16384&nbsp;/&nbsp;(1&nbsp;&lt&lt&nbsp;CC);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;OFF&nbsp;=&nbsp;(C2&nbsp;*&nbsp;4)&nbsp;+&nbsp;((C4&nbsp;-&nbsp;1024)&nbsp;*&nbsp;&nbsp;DUT&nbsp;*&nbsp;4&nbsp;/&nbsp;16384);<br />&nbsp;&nbsp;SENS&nbsp;=&nbsp;&nbsp;(C1&nbsp;*&nbsp;1024&nbsp;+&nbsp;C3&nbsp;*&nbsp;&nbsp;DUT)&nbsp;/&nbsp;1024;<br />&nbsp;&nbsp;X&nbsp;=&nbsp;&nbsp;(SENS&nbsp;*&nbsp;(D1&nbsp;-&nbsp;7168)&nbsp;-&nbsp;OFF&nbsp;*&nbsp;16384)&nbsp;/&nbsp;16384;<br />&nbsp;&nbsp;Press&nbsp;=&nbsp;(X&nbsp;*&nbsp;10&nbsp;+&nbsp;C7&nbsp;*&nbsp;32)&nbsp;/&nbsp;32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Final&nbsp;pressure&nbsp;value&nbsp;(in&nbsp;millibars)<br />&nbsp;&nbsp;Temp&nbsp;=&nbsp;250&nbsp;+&nbsp;(&nbsp;DUT&nbsp;*&nbsp;C6&nbsp;/&nbsp;256&nbsp;*&nbsp;(1&nbsp;&lt&lt&nbsp;DD)&nbsp;-&nbsp;&nbsp;DUT&nbsp;*&nbsp;256)&nbsp;/&nbsp;(1&nbsp;&lt&lt&nbsp;DD)&nbsp;/&nbsp;256;&nbsp;//&nbsp;Final&nbsp;temperature&nbsp;value<br />&nbsp;&nbsp;Press&nbsp;=&nbsp;Press&nbsp;*&nbsp;98312&nbsp;/&nbsp;131072;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Convert&nbsp;to&nbsp;mmHg<br />&nbsp;}<br /><br />//********************1ms定时程序************************<br />void&nbsp;SysDelay1ms(unsigned&nbsp;int&nbsp;ms)<br />{<br />&nbsp;&nbsp;&nbsp;int&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;for(i=0;i&ltms;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt200;j++);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br />//********************//&nbsp;20us定时程序***********************<br />//void&nbsp;Delay20us(void)<br />//{&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;_NOP();<br />//&nbsp;&nbsp;&nbsp;_NOP();<br />//&nbsp;&nbsp;&nbsp;_NOP();<br />//&nbsp;&nbsp;_NOP();<br />//&nbsp;&nbsp;&nbsp;_NOP();<br />//&nbsp;&nbsp;&nbsp;_NOP();<br />//}<br />//**********************//&nbsp;16us定时程序********************<br />void&nbsp;Delay16us(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;_NOP();<br />}<br />//*********************************************************<br />void&nbsp;IIC_writebyte(unsigned&nbsp;char&nbsp;ucData)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;if((ucData&nbsp;&&nbsp;0x80)==0x80)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IIC_SDA_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC_SDA_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IIC_SCL_HIGH();<br />&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;ucData&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;//stop&nbsp;signal<br />&nbsp;&nbsp;IIC_SDA_HIGH();<br />&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;IIC_SCL_HIGH();&nbsp;&nbsp;<br />&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;Delay16us();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}<br />unsigned&nbsp;char&nbsp;IIC_readbyte(void)<br />{<br />&nbsp;unsigned&nbsp;char&nbsp;ucValue=0;<br />&nbsp;unsigned&nbsp;char&nbsp;ucindex=0;<br />&nbsp;<br />&nbsp;IIC_SDA_HIGH();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//output&nbsp;high&nbsp;level,get&nbsp;ready&nbsp;for&nbsp;accept<br />&nbsp;Delay16us();<br />&nbsp;for(ucindex=0;ucindex&lt8;ucindex++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ucValue&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC_SCL_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />&nbsp;&nbsp;&nbsp;&nbsp;P6DIR&nbsp;&=&nbsp;~0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(SDA_STATE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucValue|=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC_SCL_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay16us();<br />&nbsp;&nbsp;}<br />&nbsp;return&nbsp;(unsigned&nbsp;int)(ucValue);<br />}<br />//*********************************************************<br />void&nbsp;IIC_start(void)<br />{<br />IIC_SDA_HIGH();<br />Delay16us();<br /><br />IIC_SCL_HIGH();<br />Delay16us();<br /><br />IIC_SDA_LOW();<br />Delay16us();<br /><br />IIC_SCL_LOW();<br />Delay16us();<br />}<br />void&nbsp;IIC_stop(void)<br />{<br />IIC_SCL_LOW();<br />Delay16us();<br /><br />IIC_SDA_LOW();<br />Delay16us();<br /><br />IIC_SCL_HIGH();<br />Delay16us();<br /><br />IIC_SDA_HIGH();<br />Delay16us();<br />}<br />//*********************************************************<br />void&nbsp;IIC_ACK(void)<br />{<br />&nbsp;IIC_SDA_LOW();<br />&nbsp;Delay16us();<br />&nbsp;<br />&nbsp;IIC_SCL_HIGH();<br />&nbsp;Delay16us();<br />&nbsp;<br />&nbsp;IIC_SCL_LOW();<br />&nbsp;Delay16us();<br />}<br />void&nbsp;IIC_NOACK(void)<br />{<br />&nbsp;IIC_SDA_HIGH();<br />&nbsp;Delay16us();<br />&nbsp;<br />&nbsp;IIC_SCL_HIGH();<br />&nbsp;Delay16us();<br />&nbsp;<br />&nbsp;IIC_SCL_LOW();<br />&nbsp;Delay16us();<br />}<br />//*********************************************************<br />void&nbsp;MCLKON(void)<br />{<br />&nbsp;&nbsp;P2SEL&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;set&nbsp;p2.0&nbsp;as&nbsp;ACLK&nbsp;Output&nbsp;for&nbsp;sensor&nbsp;MCLK<br />&nbsp;&nbsp;P2DIR&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P2.0输出<br />&nbsp;&nbsp;&nbsp;<br />}<br />void&nbsp;MCLKOFF(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;shutdown&nbsp;p2.0&nbsp;as&nbsp;ACLK&nbsp;Output&nbsp;<br />{<br />&nbsp;&nbsp;P2SEL&nbsp;&=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;P2DIR&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P2.0输出<br />&nbsp;&nbsp;P2OUT&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P2.0&nbsp;=&nbsp;0<br />}<br />void&nbsp;XCLR_LOW(void)<br />{<br />&nbsp;P6SEL&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1普通IO<br />&nbsp;P6DIR&nbsp;|=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1输出0<br />&nbsp;P6OUT&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />void&nbsp;XCLR_HIGH(void)<br />{<br />&nbsp;P6SEL&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1普通IO<br />&nbsp;P6DIR&nbsp;|=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1输出1<br />&nbsp;P6OUT&nbsp;|=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//*********************************************************<br />void&nbsp;IIC_SDA_HIGH(void)<br />{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出<br />&nbsp;&nbsp;P6OUT&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出1<br />&nbsp;<br />}<br /><br />void&nbsp;IIC_SDA_LOW(void)<br />{<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出<br />&nbsp;&nbsp;P6OUT&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出0<br /><br />}<br />//*********************************************************<br />void&nbsp;IIC_SCL_HIGH(void)<br />{<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x04;&nbsp;<br />&nbsp;&nbsp;P6OUT&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2输出1<br />}<br />void&nbsp;IIC_SCL_LOW(void)<br />{<br />&nbsp;&nbsp;P6SEL&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2普通IO<br />&nbsp;&nbsp;P6DIR&nbsp;|=&nbsp;0x04;&nbsp;<br />&nbsp;&nbsp;P6OUT&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2输出0<br />}<br />
stycx 发表于 2008-3-9 10:05 | 显示全部楼层

Delay16us(); 准确吗 加长点时间试下吧

<br />实在不行找个stc12le5410&nbsp;芯片用厂家的代码试一下<br /><br />另外请问:<br />HP03能测量大气压力吗?好买吗
 楼主| cumtgirl 发表于 2008-3-9 10:32 | 显示全部楼层

RE:

实在不行找个stc12le5410&nbsp;芯片用厂家的代码试一下<br />---这个方法现在行不通。<br />我现在只能从程序看问题了,程序都是仿照他们厂家提供的代码改,只不过用的MCU不同而已
 楼主| cumtgirl 发表于 2008-3-9 11:10 | 显示全部楼层

三八节的郁闷

三八节阿!这两天正好赶周末!<br />我调了两天程序。那位大虾出来指点下阿,帮我解脱啊
一从陶令 发表于 2008-3-9 12:15 | 显示全部楼层

把SDA和SCL的访问波形发上来

你把SDA和SCL的访问波形发上来,肯定可以看出问题的。<br />
 楼主| cumtgirl 发表于 2008-3-9 13:09 | 显示全部楼层

回楼上,我现在没有示波器,没法看啊

回楼上,我现在没有示波器,没法看啊
一从陶令 发表于 2008-3-9 13:32 | 显示全部楼层

做一次单次IIC访问

能否做一次单次IIC访问(只读一个字节),看读取值是否正确,以确定是否访问时序有问题<br />
 楼主| cumtgirl 发表于 2008-3-9 14:57 | 显示全部楼层

单次也不行

单次也不行,读出来的都是F
一从陶令 发表于 2008-3-9 18:14 | 显示全部楼层

时序

单次访问都不行,肯定是时序出了问题。IIC的主从之间时钟、建立保持时间都对吗?能否调整软件以改善时序边界?<br />另外电路设计检查过吗?上拉电阻值、负载电容都考虑过吗?上拉电阻的最小值要满足IIC器件最大输入灌电流的要求,上拉电阻最大值取决于负载电容及访问速度(也就是上升时间),最终选择同时满足这两个要求的值。
 楼主| cumtgirl 发表于 2008-3-10 22:04 | 显示全部楼层

问一下:IIC中对SCL的频率有什么要求吗?

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

本版积分规则

140

主题

293

帖子

0

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