資源簡(jiǎn)介
該代碼為PIC單片機(jī)MCP3421程序。經(jīng)過(guò)嚴(yán)格測(cè)試過(guò)后的程序,修改端口保證可以使用!!!只能上傳一個(gè)文件!!頭文件如下
#define AD_SDA_OUT TRISC &= ~0x40
#define AD_SDA_IN TRISC |= 0x40
#define AD_SDA_HIGH LATC |= 0x40
#define AD_SDA_LOW LATC &= ~0x40
#define AD_SCL_HIGH LATC |= 0x80
#define AD_SCL_LOW LATC &= ~0x80
#define AD_SDA_VAL (PORTC & 0x40)
代碼片段和文件信息
#include?
#include?
#include?“AD.h“
#include?“CPU.h“
#include?“Sensor.h“
u8?Mcp3421AddrConfigValAdCntAdShift;
u16?AdVal[10];
extern?CSys?Sys;
extern?CSensor?Sensor;
extern?CError??Error;
#ifdef?WDX
????CWD?WD;
#endif
u16?AnverageAdVal(u16?val)
{
?????u8?i;
?????u16?t[10];
?????u32?sum;
?????if(AdCnt?10)
?????{
??????????AdVal[AdCnt?++]?=?val;
??????????return?0;
?????}
#ifdef?COSENSOR?
?????if(Sensor.ZeroDelay)??????????//?CO開(kāi)機(jī)預(yù)熱5min,5min之內(nèi)AD值如果小于1000,直接賦值0
?????{
??????????if(val?300)
??????????{
???????????????Sensor.CurAdValue?=?val;
???????????????return?1;
??????????}
?????}
#endif
#ifdef??H2SSENSOR?
?????if(Sensor.ZeroDelay)??????????//?CO開(kāi)機(jī)預(yù)熱5min,5min之內(nèi)AD值如果小于1000,直接賦值0
?????{
??????????if(val?300)
??????????{
???????????????Sensor.CurAdValue?=?val;
???????????????return?1;
??????????}
?????}
#endif
?????//溫度的AD無(wú)效值還需要修改?
?????AdVal[AdShift++]?=?val;
?????if(AdShift?==?10)
??????????AdShift?=?0;
?????for(i?=?0;i?10;i?++)
??????????t[i]?=?AdVal[i];
?????
?????MakeBufFall(t10);???????????//?降序排列
??????//掐頭去尾,只計(jì)算中間6個(gè)數(shù)的平均?buf[2]----buf[7]
#ifdef?COSENSOR??
?????if((t[0]?-?t[9]?10)?&&?(t[0]?300))
#elif?H2SSENSOR
???????if((t[0]?-?t[9]?10)?&&?(t[0]?300))??
#else
?????if((t[0]?==?t[9])?&&?(t[0]?100))
#endif
?????{
??????????Sensor.DisCnt?++;
??????????if(Sensor.DisCnt?>?30)
??????????{
???????????????Sensor.DisCnt?=?30;
???????????????Error.Flag?|=?0x10;
??????????}
??????????return?0;
?????}
?????if(Sensor.DisCnt)
?????{
??????????Sensor.DisCnt?--;
??????????return?0;
?????}
?????Error.Flag?&=?~0x10;//清除錯(cuò)誤標(biāo)志
?????sum?=?0;
?????for(i?=?2;i?8;i?++)
??????????sum?+=?t[i];
?????sum?/=?6;
?????return?sum;
}
void?AD_Start(void)
{
?????AD_SDA_OUT;
?????AD_SDA_HIGH;delay_us(4);
?????AD_SCL_HIGH;delay_us(4);
?????AD_SDA_LOW;delay_us(4);
?????AD_SCL_LOW;
}
void?AD_Stop(void)
{
?????AD_SDA_OUT;
?????AD_SCL_LOW;delay_us(4);
?????AD_SDA_LOW;delay_us(4);
?????AD_SCL_HIGH;delay_us(4);?
?????AD_SDA_HIGH;delay_us(4);
}
u8?AD_Wait_Ack(void)
{
?????u8?ucErrTime=0;
?????AD_SDA_IN;?
?????AD_SCL_HIGH;delay_us(4); ?
?????while(AD_SDA_VAL)
?????{
??????????ucErrTime++;
??????????if(ucErrTime>250)
??????????{
???????????????AD_Stop();
???????????????return?1;
??????????}
?????}
?????AD_SCL_LOW; ???
?????return?0;
}
void?AD_Ack(void)
{
?????AD_SCL_LOW;delay_us(4);
?????AD_SDA_OUT;delay_us(4);
?????AD_SDA_LOW;delay_us(4);
?????AD_SCL_HIGH;delay_us(4);
?????AD_SCL_LOW;
}
????
void?AD_NAck(void)
{
?????AD_SCL_LOW;
?????AD_SDA_OUT;
?????AD_SDA_HIGH;delay_us(4);
?????AD_SCL
- 上一篇:W5500視頻資料代碼講解視頻
- 下一篇:微信小程序離線文檔 .Chm
評(píng)論
共有 條評(píng)論