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

📄 sensor.c

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 C
字号:
/*
****************************************************************************                        
*                        宁波市科技园区创业大厦六楼
*              宁波中科集成电路设计中心  版权所有 Copyright 2005
*
*文件名:  sensor.c
*程序员:
*主要内容:光传感,温度传感
*完成日期:2005.3.28
****************************************************************************
*/

#include "sensor.h"
#include "os.h"
#include "adc.h"
#include "app.h"

int PhotoTempM_state;

result_t SensorTempStdControlInit(void)
{
	ADCBindPort(OS_ADC_TEMP_PORT, OSH_ACTUAL_TEMP_PORT);
	{ uint8_t atomicState = AtomicStart();
    {
		PhotoTempM_state = PhotoTempM_IDLE;
    }
    AtomicEnd(atomicState); }
	return ADCControlInit();
}

void OSH_MAKE_INT1_OUTPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) |= 1 << 5;
}

void OSH_MAKE_PHOTO_CTL_OUTPUT(void)
{
	OSH_MAKE_INT1_OUTPUT();
}

void OSH_SET_INT1_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) |= 1 << 5;
}

void OSH_SET_PHOTO_CTL_PIN(void)
{
	OSH_SET_INT1_PIN();
}

void OSH_MAKE_INT2_OUTPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) |= 1 << 6;
}

void OSH_MAKE_TEMP_CTL_OUTPUT(void)
{
	OSH_MAKE_INT2_OUTPUT();
}

void OSH_SET_INT2_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) |= 1 << 6;
}

void OSH_SET_TEMP_CTL_PIN(void)
{
	OSH_SET_INT2_PIN();
}

result_t SensorTempStdControlStart(void)
{
	{ uint8_t atomicState = AtomicStart();
    {
		OSH_SET_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_OUTPUT();
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

result_t SensorInternalTempADCGetData(void)
{
	unsigned char result;
	result = ADCGetData(OS_ADC_TEMP_PORT);
	
	return result;
}

void OSH_MAKE_INT2_INPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) &= ~(1 << 6);
}

void OSH_MAKE_TEMP_CTL_INPUT(void)
{
	OSH_MAKE_INT2_INPUT();
}

void OSH_CLR_INT2_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) &= ~(1 << 6);
}

void OSH_CLR_TEMP_CTL_PIN(void)
{
	OSH_CLR_INT2_PIN();
}

void OSH_MAKE_INT1_INPUT(void)
{
	* (volatile unsigned char *)(0x02 + 0x20) &= ~(1 << 5);
}

void OSH_MAKE_PHOTO_CTL_INPUT(void)
{
	OSH_MAKE_INT1_INPUT();
}

void OSH_CLR_INT1_PIN(void)
{
	* (volatile unsigned char *)(0x03 + 0x20) &= ~(1 << 5);
}

void OSH_CLR_PHOTO_CTL_PIN(void)
{
	OSH_CLR_INT1_PIN();
}

result_t SensorExternalTempADCGetData(void)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_IDLE) {
			PhotoTempM_state = PhotoTempM_BUSY;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_IDLE) {
		OSH_CLR_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_INPUT();
		OSH_SET_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_OUTPUT();
		return SensorInternalTempADCGetData();
    }
	return FAIL;
}

result_t PhotoTempM_ExternalTempADC_default_dataReady(uint16_t data)
{
	return SUCCESS;
}

result_t SensorExternalTempADCDataReady(uint16_t data)
{
	unsigned char result;
	result = LLCADCDataReady(data);//PhotoTempM_ExternalTempADC_default_dataReady(arg_0xa341908);
	
	return result;
}

result_t SensorInternalTempADCDataReady(uint16_t data)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_BUSY) {
			PhotoTempM_state = PhotoTempM_IDLE;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_BUSY) {
		
		
		return SensorExternalTempADCDataReady(data);
    }
	else {
		if (oldState == PhotoTempM_CONTINUOUS) {
			int ret;
			
			ret = SensorExternalTempADCDataReady(data);
			if (ret == FAIL) {
				
				
				{ uint8_t atomicState = AtomicStart();
				{
					PhotoTempM_state = PhotoTempM_IDLE;
				}
				AtomicEnd(atomicState); }
			}
			return ret;
		}
    }
	return FAIL;
}

result_t SensorExternalPhotoADCDataReady(uint16_t data)
{
	unsigned char result;
	result = LLCADCDataReady(data);
	return result;
}


result_t SensorPhoOStdControlInit(void)
{
	ADCBindPort(OS_ADC_PHOTO_PORT, OSH_ACTUAL_PHOTO_PORT);
	{ uint8_t atomicState = AtomicStart();
    {
		PhotoTempM_state = PhotoTempM_IDLE;
    }
    AtomicEnd(atomicState); }
	return ADCControlInit();
}

result_t SensorPhoOStdControlStart(void)
{
	{ uint8_t atomicState = AtomicStart();
    {
		OSH_SET_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_OUTPUT();
    }
    AtomicEnd(atomicState); }
	return SUCCESS;
}

result_t SensorExternalPhotoADCGetData(void)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_IDLE) {
			PhotoTempM_state = PhotoTempM_BUSY;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_IDLE) {
		OSH_CLR_TEMP_CTL_PIN();
		OSH_MAKE_TEMP_CTL_INPUT();
		OSH_SET_PHOTO_CTL_PIN();
		OSH_MAKE_PHOTO_CTL_OUTPUT();
		return SensorInternalPhotoADCGetData();
    }
	return FAIL;
}

result_t SensorInternalPhotoADCDataReady(uint16_t data)
{
	uint8_t oldState;
	
	{ uint8_t atomicState = AtomicStart();
    {
		oldState = PhotoTempM_state;
		if (PhotoTempM_state == PhotoTempM_BUSY) {
			PhotoTempM_state = PhotoTempM_IDLE;
        }
    }
    AtomicEnd(atomicState); }
	if (oldState == PhotoTempM_BUSY) {
		
		return SensorExternalPhotoADCDataReady(data);
    }
	else {
		if (oldState == PhotoTempM_CONTINUOUS) {
			int ret;
			ret = SensorExternalPhotoADCDataReady(data);
			if (ret == FAIL) {
				{ uint8_t atomicState = AtomicStart();
				{
					PhotoTempM_state = PhotoTempM_IDLE;
				}
				AtomicEnd(atomicState); }
			}
			return ret;
		}
    }
	return FAIL;
}

result_t SensorInternalPhotoADCGetData(void)
{
	unsigned char result;
	result = ADCGetData(OS_ADC_PHOTO_PORT);
	
	return result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -