资源简介
该代码为PIC单片机MCP3421程序。经过严格测试过后的程序,修改端口保证可以使用!!!只能上传一个文件!!头文件如下
#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开机预热5min,5min之内AD值如果小于1000,直接赋值0
{
if(val < 300)
{
Sensor.CurAdValue = val;
return 1;
}
}
#endif
#ifdef H2SSENSOR
if(Sensor.ZeroDelay) // CO开机预热5min,5min之内AD值如果小于1000,直接赋值0
{
if(val < 300)
{
Sensor.CurAdValue = val;
return 1;
}
}
#endif
//温度的AD无效值还需要修改
AdVal[AdShift++] = val;
if(AdShift == 10)
AdShift = 0;
for(i = 0;i < 10;i ++)
t[i] = AdVal[i];
MakeBufFall(t10); // 降序排列
//掐头去尾,只计算中间6个数的平均 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;//清除错误标志
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
相关资源
- STC12C5A60S2手指心跳检测程序
- BC28+51单片机的原理图
- stc15w408as串口通讯
- STC15系列工控程序带485通讯+Modbus协议
- MY1690-12P MP3解码模块应用程序含驱动程
- MAC芯片LAN91C111 verilog源码
- LDC金属探测程序完整版
- DHT11驱动STC12C5A单片机
- AT89C51单片机--CC1101无线接收程序经本
- LDC1000 stm32源码
- STC12C5A60S2_AD转换12864显示程序
- C1StudioNet 2013/2014/2015 keygen
- ASC15 Preliminary Contest Notifications
- MSP430G2553 ADC10测试
- 数模转换-DAC124s085
- 循迹小车基于STC15W201S LM339制作
- CRC16校验码计算工具
- STC15/STC15F2K60S2/STC15W4K32S4系列读取超声
- STC15F2K60S2串口通信程序
- STC15F2K60S2读取DHT11温湿度传感器数据串
- weblogic12.2.1.3.0百度云.txt
- STC12C5A60S2.H头文件
- TM4C123GH6PM最常用例程
- STC15F2K60S2 iic 驱动程序
- stc12单片驱动DHT11温湿度传感器
- TSP CHC144
- 74HC164扩展按键处理程序集非常详细,
- 数模转换器DAC121C081
- CRC16位校验算法源代码
- ltc1860 ad程序
评论
共有 条评论