📄 350_int.#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 + -