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

📄 isdtask.c

📁 加速度采集器。基于ATMega16L.AVRSTUIDIO4
💻 C
字号:
#include "isdtask.h"
#include <avr/io.h>
#include <avr/pgmspace.h>

#define 	ISDThresholdNumber  5
const prog_uint16_t 	isdThreshold[ISDThresholdNumber] = {
	150,
	300,
	500,
	700,
	900};






extern unsigned long currentTime;
extern unsigned char mainState;
extern unsigned char currentImpactUpdated;
extern unsigned short currentImpact;

void delayReset();

void isdReset()
{
	PORTISD &= ~ISDRESET;
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	PORTISD |= ISDRESET;
}

void delayDebounce()
{
	unsigned long recordTime;
	recordTime = currentTime;
	while(currentTime-recordTime<=ISDDELAY);
}	

void delayReset()
{
	unsigned long recordTime;
	recordTime = currentTime;
	while(currentTime-recordTime<=2);
}	


void isdTaskInit()
{
	isdReset();
}

void isdTask()
{
	unsigned char i;
	unsigned short isdImpact;
	unsigned short progImpact;

	if(mainState!=1)
		return;
	if(isdBusy())
		return;
	if( !(currentImpactUpdated & 0x02) )
		return;

	//Fetch the current impact
	CLI();
	currentImpactUpdated &= ~0x02;
	isdImpact = currentImpact;
	SEI();

	//Classify
	progImpact = __LPM_word_enhanced__(isdThreshold);
	if(isdImpact<progImpact)
		return;
	//reset
	isdReset();
	delayReset();
	//Classify & forward
	for(i=1;i<ISDThresholdNumber;i++)
	{
		progImpact = __LPM_word_enhanced__(isdThreshold+i);
		if(isdImpact>progImpact)
		{	//forward
			while(isdBusy());
			PORTISD &= ~ISDFWD;
			delayDebounce();
			PORTISD |= ISDFWD;
		}
	}

	//play
	while(isdBusy());
	PORTISD &= ~ISDPLAY;
	delayDebounce();
	PORTISD |= ISDPLAY;
}

unsigned char isdBusy()
{
	if (PINISD & ISDRDY)
		return 0;
	else 
		return 1;
}

⌨️ 快捷键说明

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