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

📄 350_int.#2

📁 C8051F350单片机的24位AD程序
💻 #2
字号:
//-----------------------------------------------------------------------------
// 包含文件
//-----------------------------------------------------------------------------
//
#include <C8051F350.H>
#include <C8051F350_command.h>
//-----------------------------------------------------------------------------
// 外部全局变量声明区
//-----------------------------------------------------------------------------
//
extern unsigned char GC_SBUF0_num;
extern unsigned char GC_UART_command;
extern unsigned char GC_350_ADC0_channels;
extern unsigned char GC_350_result_h,GC_350_result_l;//ADC0转换结果高低位
//-----------------------------------------------------------------------------
// 外部调用函数声明区
//-----------------------------------------------------------------------------
//
void Save_calibrate_parameter(void);


//-----------------------------------------------------------------------------
// 中断服务程序区
//-----------------------------------------------------------------------------
//准备好所有中断,以便在中断向量区生成RETI,有助抗干扰
//
//-----------------------------------------------------------------------------
// 外部0中断函数
//-----------------------------------------------------------------------------
//
void Int0_ISR(void)		interrupt 0
{
	;
}

//-----------------------------------------------------------------------------
// Timer0中断
//-----------------------------------------------------------------------------
// 
void Timer0_ISR(void)	interrupt 1
{	
	;
}
//-----------------------------------------------------------------------------
// 外部1中断函数
//-----------------------------------------------------------------------------
// 
void Int1_ISR(void)		interrupt 2
{
	;
}
//-----------------------------------------------------------------------------
// Timer1中断
//-----------------------------------------------------------------------------
//
void Timer1_ISR(void)   interrupt 3
{
	;
}
//-----------------------------------------------------------------------------
// UART0中断
//-----------------------------------------------------------------------------
//
void UART0_ISR(void)    interrupt 4
{
	unsigned char C_sbuf0_temp;

	if(TI0)											//发送采样数据
	{	
		TI0 = 0;
		if( GC_SBUF0_num == 5 )						//检查还剩多少位数据未被发送出去
		{
			SBUF0 = 0xda; 							//发送数据起始标志
			GC_SBUF0_num--;							//发送数据数量值减1
		}
		else if( GC_SBUF0_num == 4 )
		{
			SBUF0 = 0xad; 							//发送数据起始标志
			GC_SBUF0_num--;							//发送数据数量值减1
		}
		else if( GC_SBUF0_num == 3 )				//检查还剩多少位数据未被发送出去
		{
			SBUF0 = GC_350_ADC0_channels; 			//发送数据通道号码
			GC_350_ADC0_channels += 0x11; 			//随后改变通道的号码
			if( GC_350_ADC0_channels == 0x55 )
			{
				GC_350_ADC0_channels = 0x11;
			}
			GC_SBUF0_num--;							//发送数据数量值减1
		}
		else if( GC_SBUF0_num == 2 )			   	//检查还剩多少位数据未被发送出去
		{
			SBUF0 = GC_350_result_h;				//发送转换结果高位
			GC_SBUF0_num--;							//发送数据数量值减1
		}
		else if( GC_SBUF0_num == 1 )			  	//检查还剩多少位数据未被发送出去
		{
			SBUF0 = GC_350_result_l;				//发送转换结果低位
			GC_SBUF0_num = 0;						//发送数据数量值减1
		}	
		else
		{
			GC_SBUF0_num = 5;
		}
	}

	if(RI0)//接收上级命令
	{
		RI0 =0;
		C_sbuf0_temp = SBUF0;
		if( C_sbuf0_temp == 0xa5 )					//首先满足关键字A5
		{
			GC_UART_command = 0xa5;
		}
		else if( ( C_sbuf0_temp == 0xf1 ) & ( GC_UART_command == 0xa5 ) )//然后满足关键字F1
		{
			GC_UART_command = 0xf1;
		}
		else if( GC_UART_command == 0xf1 )			//最后将命令放入命令字节
		{
			GC_UART_command = C_sbuf0_temp;
		}
		else										//否则不满足关键字则命令清空
		{
			GC_UART_command = 0xff;
		}		
	}
}

//-----------------------------------------------------------------------------
// ADC0中断
//-----------------------------------------------------------------------------
//
void ADC0_ISR(void)    interrupt 10
{
	AD0INT = 0;									//软件清除ADC0中断
												//保存转换结果
	GC_350_result_h = ADC0FH;				    //保存高8位
	GC_350_result_l = ADC0FM;					//保存低8位

	COM_ADC0_idle;								//ADC0进入空闲状态,等待设置转换参数
												//判断应该采样哪个通道
	if( GC_350_ADC0_channels == 0x11 )			//上次采样为1通道,则此次采样2通道
	{	
		float TFV_temp_calculate_vlu;
		unsigned int	TIV_temp_result;		

		COM_ADC0_channels_2;			

		//计算温度显示值
		TFV_temp_calculate_vlu = GC_350_result_h * 256 + GC_350_result_l;
		TFV_temp_calculate_vlu *= 2490;
		TFV_temp_calculate_vlu /= (65536 * 32);
		TFV_temp_calculate_vlu -= 54.3;
		TFV_temp_calculate_vlu /= 0.205;
		TFV_temp_calculate_vlu *= 3355.4;
		TIV_temp_result = (unsigned int)TFV_temp_calculate_vlu;
		GC_350_result_l = (unsigned char)TIV_temp_result;
		GC_350_result_h = (unsigned char)(TIV_temp_result>>8);
	}
	else if ( GC_350_ADC0_channels == 0x22 )	//上次采样为2通道,则此次采样3通道
	{
		COM_ADC0_channels_3;
	}
	else if ( GC_350_ADC0_channels == 0x33 )	//上次采样为3通道,则此次采样4通道
	{
		COM_ADC0_channels_4;
	}
	else if ( GC_350_ADC0_channels == 0x44 )	//上次采样为4通道,则此次采样1通道
	{
		//COM_ADC0_channels_1;
		COM_ADC0_channels_temp;
	}
	COM_ADC0_single_conver;						//启动下次单次转换
	//进入发送状态
	TI0 = 1;	
}

⌨️ 快捷键说明

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