📄 adc.c~
字号:
#include <mega128.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "typedef.h"
#include "app.h"
#include "rtc.h"
#include "serialdrv.h"
#include "timer.h"
#include "cc2420.h"
#include "ADC.h"
#include "18B20.h"
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 3
#define ADC_VREF_TYPE 0xC0
#pragma warn-
eeprom unsigned int MY_ID;
eeprom unsigned char SET_OUT;
#pragma warn+
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
unsigned int adcnum0[20];
unsigned int adcnum1[20];
unsigned int adcnum2[20];
unsigned int adcnum3[20];
unsigned char adcno = 0;
unsigned int adcvalue0 = 0;
unsigned int adcvalue1 = 0;
unsigned int adcvalue2 = 0;
unsigned int adcvalue3 = 0;
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
register static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
adcnum0[adcno]=adc_data[0];
adcnum1[adcno]=adc_data[1];
adcnum2[adcno]=adc_data[2];
adcnum3[adcno]=adc_data[3];
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
{
input_index=0;
if (++adcno >= 20)
adcno = 0;
}
ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
// Start the AD conversion
ADCSRA|=0x40;
}
void ADC_init(void)
{
// ADC initialization
// ADC Clock frequency: 57.600 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
ADCSRA=0xCF;
MY_ID = 18188;
if (SET_OUT > 8)
SET_OUT = 0;
}
void ADC_deal(void)
{
unsigned char i;
unsigned int adcsum;
adcsum = 0;
for (i=0;i<20;i++)
adcsum += adcnum0[i];
adcvalue0 = adcsum; //1023*20
adcsum = 0;
for (i=0;i<20;i++)
adcsum += adcnum1[i];
adcvalue1 = adcsum; //1023*20
adcsum = 0;
for (i=0;i<20;i++)
adcsum += adcnum2[i];
adcvalue2 = adcsum; //1023*20
adcsum = 0;
for (i=0;i<20;i++)
adcsum += adcnum3[i];
adcvalue3 = adcsum; //1023*20
}
void updata_proc(void)
{
unsigned char i;
unsigned char szsum;
unsigned char nloop;
unsigned char *pTemp;
unsigned int nTemp;
memset(cc2420_data_send, 0x00, 35);
// ADC_deal();
temp_deal();
i = ~PINC;
cc2420_data_send[0] = SEND_NO+2; //13+2
cc2420_data_send[1] = 0x7e;
cc2420_data_send[2] = 0x7e;
nTemp = MY_ID;
pTemp = (unsigned char*)&nTemp;
cc2420_data_send[3] = *(pTemp + 0);
cc2420_data_send[4] = *(pTemp + 1);
cc2420_data_send[5] = CLK_YEAR;
cc2420_data_send[6] = CLK_MONTH;
cc2420_data_send[7] = CLK_DAY;
cc2420_data_send[8] = CLK_HOUR;
cc2420_data_send[9] = CLK_MIN;
cc2420_data_send[10] = (unsigned char)g_itemp_c[0]; //CLK_SEC
/*
nTemp = adcvalue0;
pTemp = (unsigned char*)&nTemp;
cc2420_data_send[9] = *(pTemp + 0);
cc2420_data_send[10] = *(pTemp + 1);
nTemp = adcvalue1;
pTemp = (unsigned char*)&nTemp;
cc2420_data_send[11] = *(pTemp + 0);
cc2420_data_send[12] = *(pTemp + 1);
nTemp = adcvalue2;
pTemp = (unsigned char*)&nTemp;
cc2420_data_send[13] = *(pTemp + 0);
cc2420_data_send[14] = *(pTemp + 1);
nTemp = adcvalue3;
pTemp = (unsigned char*)&nTemp;
cc2420_data_send[15] = *(pTemp + 0);
cc2420_data_send[16] = *(pTemp + 1);
cc2420_data_send[17] = 0; //temp
*/
cc2420_data_send[11] = i;
cc2420_data_send[12] = SET_OUT;
szsum = 0x00;
for (nloop = 1; nloop < SEND_NO; nloop ++)
{
szsum += cc2420_data_send[nloop];
}
cc2420_data_send[SEND_NO] = 0xFF - szsum;
cc2420_send(SEND_NO+3); //15+1
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -