⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c~

📁 使用avr--cc2420模块程序,需要原理图的联系 QQ:120304948
💻 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 + -