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

[复制链接]
1904|0
 楼主| cumtgirl 发表于 2008-3-9 09:05 | 显示全部楼层 |阅读模式
程序代码如下:按照此程序输出的传感器(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 />}<br />//*********************************************************<br />void&nbsp;IIC_ReadCalDate(void)<br />{<br />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 />IIC_start();<br />IIC_writebyte(0xa0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//contain&nbsp;stop&nbsp;signal<br />IIC_writebyte(16);<br />IIC_start();<br />IIC_writebyte(0xa1);<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C1=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C1&lt&lt=8;<br />C1|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C2=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C2&lt&lt=8;<br />C2|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C3=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C3&lt&lt=8;<br />C3|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C4=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C4&lt&lt=8;<br />C4|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C5=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C5&lt&lt=8;<br />C5|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C6=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C6&lt&lt=8;<br />C6|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C7=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />C7&lt&lt=8;<br />C7|=ucValue;<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />AA=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />BB=ucValue;<br />//UartSend(AA);<br />//UartSend(BB);<br /><br />ucValue=IIC_readbyte();<br />IIC_ACK();<br />CC=ucValue;<br />ucValue=IIC_readbyte();<br />IIC_NOACK();<br />IIC_stop();<br />DD=ucValue;<br />}<br />//*********************************************************<br />void&nbsp;ReadTemperaturePressureAD(void)<br />{<br />long&nbsp;sumADvalue=0;<br />XCLR_HIGH();<br />MCLKON();<br />SysDelay1ms(2);<br /><br />D1=ReadPressureAD();<br />sumADvalue+=D1;<br />D1=ReadPressureAD();<br />sumADvalue+=D1;<br />D1=ReadPressureAD();<br />sumADvalue+=D1;<br />D1=ReadPressureAD();<br />sumADvalue+=D1;<br />D1=sumADvalue&gt&gt2;<br /><br />D2=ReadTemperatureAD();<br /><br />P6SEL&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0普通IO<br />P6DIR&nbsp;|=&nbsp;&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.0输出<br />P6OUT&nbsp;&=&nbsp;~0x01;&nbsp;&nbsp;<br /><br />P6SEL&nbsp;&=&nbsp;~0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2普通IO<br />P6DIR&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.2输出<br />P6OUT&nbsp;&=&nbsp;~0x04;<br /><br />MCLKOFF();<br />XCLR_LOW();<br />}<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 />}<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 />}<br />unsigned&nbsp;char&nbsp;IIC_readbyte(void)<br />{<br />unsigned&nbsp;char&nbsp;ucValue=0;<br />unsigned&nbsp;char&nbsp;ucindex=0;<br /><br />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 />Delay16us();<br />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 />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 />IIC_SDA_LOW();<br />Delay16us();<br /><br />IIC_SCL_HIGH();<br />Delay16us();<br /><br />IIC_SCL_LOW();<br />Delay16us();<br />}<br />void&nbsp;IIC_NOACK(void)<br />{<br />IIC_SDA_HIGH();<br />Delay16us();<br /><br />IIC_SCL_HIGH();<br />Delay16us();<br /><br />IIC_SCL_LOW();<br />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 />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 />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 />P6OUT&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />void&nbsp;XCLR_HIGH(void)<br />{<br />P6SEL&nbsp;&=&nbsp;~0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1普通IO<br />P6DIR&nbsp;|=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P6.1输出1<br />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 /><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 /><br />&nbsp;<br />&nbsp;<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

293

帖子

0

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