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

📄 tasks.c

📁 RTOS(real time OS)单片机程序。ATMEGA16芯片
💻 C
字号:
#include <avr\io.h>
#include <avr\interrupt.h>
#include "Tasks.h"
#include "..\delay_function.h"
#include "..\USART\USART_mega16.h"
#include "..\MotorControl\MotorControl.h"
#include "..\ADC\ADC_mega16.h"

//AD采样通道选詠E
enum {
	G_X = AD_SE_ADC1,
	G_Y = AD_SE_ADC2,
	G_Z = AD_SE_ADC3,
	R_X = AD_SE_ADC4,
	R_Y = AD_SE_ADC5,
	H_X = AD_SE_ADC6
};


unsigned int Azimuthc, Azimuth, Hight, Hightc;
unsigned int xcenter, ycenter;

//初始化系统
void Init_Sys(void)
{
	OSCCAL = 0xAF;//0xCF;//0x9B;				// 8M系统内部时钟校准    
	initADC();				//初始化AD
	init_motorcontrol();	//初始化电机控制
	init_USART();			//初始化串口
	sei();					//打开中断
	put_ok();
}

//加速度传感器电位紒E丒
unsigned int g_sensor(void)
{
	unsigned long tmp;
	unsigned char i;
	ADMUX  = ADREF_256V;	//0xC0:选詠E.56V的片内基准电压源

	ADC_sel(G_Y);		//选择通道
	read_adc();			//丢弃前几个采样值
	read_adc();
	read_adc();
	read_adc();
	tmp = (read_adc());			//重复采褋E00次
	for (i=0;i<99;i++) {
		tmp += (read_adc());
	}
	tmp = tmp/100;				//取平緛E
	return ((unsigned int)tmp);	//返回结箒E
}

//变阻器电位紒E丒
unsigned int r_sensor(void)
{
	unsigned long tmp;
	unsigned char i;

	ADMUX  = ADREF_AVCC;	//0x40:选择AVCC作参考电压

	ADC_sel(H_X);		//选择通道
	read_adc();			//丢弃前几个采样值
	read_adc();
	read_adc();
	read_adc();
	tmp = (read_adc());			//重复采褋E00次
	for (i=0;i<99;i++) {
		tmp += (read_adc());
	}
	tmp = tmp/100;				//取平緛E
	return ((unsigned int)tmp);	//返回结箒E
}

//摇杆状态紒E丒
unsigned int Rocker_sensor(unsigned char id)
{
	unsigned long tmp;
	unsigned char i;

	ADC_sel(id);		//选择通道
	read_adc();			//丢弃前几个采样值
	read_adc();
	read_adc();
	read_adc();
	tmp = (read_adc());			//重复采褋E0次
	for (i=0;i<9;i++) {
		tmp += (read_adc());
	}
	tmp = tmp/10;				//取平緛E
	return ((unsigned int)tmp);	//返回结箒E
}

//获得方位角
void Get_Azimuth(void)
{
	Azimuth = r_sensor();
//test
put_hex((char)(Azimuth>>8));
put_hex((char)Azimuth);
put_cr();
//test
}

//获得高度角
void Get_Hight(void)
{
//	unsigned int tmp;
//	tmp = g_sensor();

	Hight = g_sensor();
//test
put_hex((char)(Hight>>8));
put_hex((char)Hight);
put_cr();
//test
}

//高度角控制---offset:偏移量
void HightCtl(char offset)
{
	unsigned char i;

	if (offset>=0) {				//偏移量为正,增大俯仰角
		for (i=0;i<offset;i++) {
			Step_MotorCtl(d_up);
			delay_nms(5);
//test
//			Get_Hight();
//test
		}
	}
	else {							//偏移量为负,减小俯仰角
		offset = 0-offset;
		for (i=0;i<offset;i++) {
			Step_MotorCtl(d_down);
			delay_nms(5);
//test
//			Get_Hight();
//test
		}
	}
	PORTC &= 0xF0;	//电机运转结蕘E各相控制电平清羴E
}

//方位角控制---speed:电机转速
void AzimuthCtl(char speed)
{
	if (speed>=0) {			//顺时諄E

⌨️ 快捷键说明

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