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

📄 lytc-adc.c

📁 水下数据采集和控制系统
💻 C
字号:
#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/signal.h>

struct DATA_FRAME
{
	unsigned char START[2];			// FF,FF: 正常数据包,帧头. FF,FE:特殊指令.

	unsigned int AD1[2];        //32路采样值,每路8位
	unsigned char something[2];	//一些特殊事件
 	unsigned char END[2];   //0A,0D: 数据帧正常结束

};
struct DATA_FRAME data;	//数据帧

unsigned char	sendnum=0;
unsigned char *sendp;
unsigned char adch=0;			//保存采样后的高8位AD数据。
unsigned char adcl=0;			//保存采样后的8位AD数据。




//系统初始化
void SYS_INIT(void)
{
	sendp = &data;

	data.START[0]=0xff;
	data.START[1]=0xff;

	data.END[0]=0x0a;
	data.END[1]=0x0d;

	SREG = 0x80;	//开全局中断
	UDR = 0x0d;

}

//USART 串口初始化
void USART_INIT(unsigned int baud_rate)
{
	UBRRH = baud_rate>>8;
	UBRRL = baud_rate;

	UCSRB = 0x48;
//	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

}

void ADC_INIT(void)
{
//
	ADMUX = 0x44;	///ADC4
//	ADCSRA = 0x88;
	ADCSRA = 0xcf;


}

//*****************************主程序**************************************************
void main(void)
{
	USART_INIT(47);
	ADC_INIT();
	SYS_INIT();
	
	while(1)
	{
		if ((ADCSRA&(1<<ADSC))==0)	// 如果AD完成, 启动下一次AD
		{
			if((sendnum<2) || (sendnum>5))
			{
				data.AD1[0] = adch*256+adcl;
				ADCSRA |= 0x40;	//启动AD转换
			}
		}

	}


}

/* USART, Tx Complete */
SIGNAL(USART_TXC_vect)
{
unsigned char	cc,a,b;

//	UCSRA = UCSRA & 0xbf;

	if (sendnum < sizeof(data))
	{
		cc = *(sendp+sendnum);
		sendnum++;
		if(cc==0x8d)
		{
			a=cc;
			b=a;
		}	
//		UDR = 0;
		UDR = cc;
	}
	else
	{
		UDR = *sendp;
//		UDR = 0x00;
		sendnum = 1;
	}

//	UDR = 'B';
}

/* USART, Rx Complete */
SIGNAL(USART_RXC_vect)
{
unsigned char	recive_char;
	
//	recive_char = UDR;
//	UDR = recive_char;
//	data.RECIVEDATA = recive_char;
		
//	recivedataprocess(recive_char);


//	recive_char = 'z';

}

/* ADC Conversion Complete */
SIGNAL(ADC_vect)
{
	adcl = ADCL;
	adch = ADCH;	//ADC选择8位左对齐,可只取高8位数据,精度1/256
}

⌨️ 快捷键说明

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