📄 ad.c.bak
字号:
/*
2006。10。19 line 原因: 修改:
*/
#include <pic.h>
#include <stdio.h>
#include "inc\globals.h"
#include "inc\util_mc.h"
#include "inc\main.h"
#include "inc\eeprom.h"
typedef union
{
int y1;
unsigned char adre[2];
}adres;
bank1 adres adresult; //定义一个共用体,用于存放A/D 转换的结果
//unsigned char i_ad;
//unsigned int j_ad;
static char flagperend=0;
//static unsigned int adconvert = 0;
//static bank1 unsigned int ACaverage = 0;
bank1 int gCurVolt;
bank1 unsigned char gCurTemp;
extern bank1 unsigned char gOffLineCnt; //离线计数器,与中心断开的时间
//A/D 转化初始化子程序
void adinitial()
{
//ADCON0=0x51; //选择A/D 通道为RA2,打开A/D 转换器
//在工作状态,且使A/D 转换时钟为8tosc
ADCON0=0x41; //钟欣改
//ADCON1=0X84; //转换结果右移,及ADRESH 寄存器的高6 位为"0"
//且把RA2 口设置为模拟量输入方式 ra0 1 3为模拟输入
ADCON1=0X84;//RA0 RA1 为AD输入
PIE1=0X00;
PIE2=0X00;
ADIF=0;
ADIE=1; //A/D转换中断允许
PEIE=1; //外围中断允许
//TRISA2=1;//设置RA2 为输入方式
TRISA0=3;//钟欣改
ei();
//系统各I/O 口初始化子程序
//TRISD=0X00; //D口为输出
//ad0=0x00;
ADGO=1; //启动A/D 转换
flagperend = 0;
gCurVolt = 0;
}
//中断服务程序
//等待中断,在中断中循环检测外部电压
void interrupt adint(void)
{
if(TMR1IE&&TMR1IF)
{
TMR1IF=0;
//delaycount--;
}
if(EEIE&&EEIF)
{
EEIF=0;
//flagwrite=1;
}
if (T0IF)
{
tc++;
if(tc>1000)
{
tc = 0;
if(gOffLineCnt<MAX_OFFLINE)
gOffLineCnt++;
}
TMR0=255; //装入初值
T0IF = 0; //清除中断位
}
if(ADIE&&ADIF)//ADIF = 1 表示转换完成
{
ADIF=0;
adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH; //读取并存储A/D 转换结果,A/D 转换的结果通过共
//用体的形式放入了变量y1 中
if(adresult.y1>0x400)
{
//alarm(); //如果输入的模拟量大于2.5V(对应数字量
//0X200h),则调用报警子程序
//delay(); //调用延时子程序,使电压检测不要过于频繁
asm("nop");
}
asm("nop");
asm("nop");
asm("nop");
asm("nop");
//else PORTD=0XF0 ; //如果输入的模拟量小于2.5V,则与D 口相连的
//8个发光二极管的低4 个发亮,表示系统正常
//ADGO=1; //启动下一次A/D 转换
flagperend=1;
}
}
void AdcRead(char channel,int *adcvaule)
{
flagperend=0;
ADCON0 = (channel << 3) | 0x41; // enable ADC
asm("nop");
asm("nop");
asm("nop");
DelayF(1);//捕捉时间约200多us
ADGO = 1;
while(flagperend=0); // wait for conversion complete
*adcvaule = adresult.y1;
}
//bank1 float ac_input;
/*
(Vac*12/220-M)*N*1.54/11.97 = Vdc
M = 整流压降 N = 滤波参数
1.54/11.97 = 电阻分压
*/
/*
int ac_get(void)
{
unsigned char i;
unsigned int sum=0;
int temp1;
float ac_input;
int temp;
//220V电压检测
//均值滤波
for(i=0; i<10; i++)
{
AdcRead(0,&temp);
sum=sum+temp;
}
//sum /=10;
ACaverage=(float)sum*5/10240;//average浮点型,sum为unsigned char型
temp = (unsigned int)ACaverage;
temp1 = (unsigned int)(ACaverage*100)%100;
//printf("ACaverage = %4d.%2d\n",temp,temp1);
ac_input=(int)(float)(96.5517*ACaverage)+(float)(13.5173);
gCurVolt = (int)ac_input;
//printf("ac_input = %d\n",sum);
return (int)ac_input;
}
*/
char checkVolt(void)
{
if((gCurVolt<gMin_Volt) || (gCurVolt > gMax_Volt))
return -1;
else
return 0;
}
int temp_get(void)
{
/* unsigned char i;
unsigned int sum=0;
unsigned int temp;
//温度检测
//均值滤波
for(i=0; i<10; i++)
{
AdcRead(1,&temp);
sum=sum+temp;
}*/
//sum /=10;
/*ACaverage=(float)sum*5/10240;//average浮点型,sum为unsigned char型
temp = (unsigned int)ACaverage;
temp1 = (unsigned int)(ACaverage*100)%100;
printf("ACaverage = %4d.%2d\n",temp,temp1);
ac_input=(float)(96.5517*ACaverage)+(float)(13.5173);
sum = ac_input;
printf("ac_input = %d\n",sum);*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -