📄 main.c
字号:
#include"includes.h"
main( void )
{
/******************系统时钟初始化******************/
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
FLL_CTL0 |= XCAP14PF; //系统时钟锁定
/***************读flash内容进入RAM******************/
ReadFlash(FLASH_B_ADR,N_Data);
for(int q0=0;q0<N_Data;q0++)
{
Temp_Buf_B[q0] = Temp[q0];
FLASH_DATA[q0] = Temp[q0];
}
if((FLASH_DATA[0]<=0)||(FLASH_DATA[0]>=150)) //第一次读flash内容,强制初始化控制单元内容,写falsh
{
unsigned char FLASH_DATA_TEMP[N_Data] = {0x0C,0x09,0xB0,0x59,0x7E,0x04,0x01,0x78,0x61,0x00,0x14,
0x0B,0x5E};
for(int i=0;i<N_Data;i++)
FLASH_DATA[i] = FLASH_DATA_TEMP[i];
FLASH_Operation(); //写flash操作
/***************初始化相关控制参数*******************/
sense_RAM = 12; //灵敏度默认为20%
value = sense_RAM;
Nf_min = 2480; //初始化反馈输入最小值
Nf_max = 22910; //初始化反馈输入最大值
Ng_min = 1025; //初始化给定输入最小值
Ng_max = 30817; //初始化给定输入最大值
out_min = 0; //反馈信号输出最小值
OUT_0V = out_min;
out_max = 2895; //反馈信号输出最大值
OUT_10V = out_max;
}
else //初始化操作变量
{
sense_RAM = Temp_Buf_B[0]; //灵敏度默认为1.2%
value = sense_RAM;
Nf_min = (Temp_Buf_B[1]<<8) + Temp_Buf_B[2]; //反馈信号输出最小值
Nf_max = (Temp_Buf_B[3]<<8) + Temp_Buf_B[4]; //反馈信号输出最大值
Ng_min = (Temp_Buf_B[5]<<8) + Temp_Buf_B[6]; //初始化给定输入最小值 数值待确定
Ng_max = (Temp_Buf_B[7]<<8) + Temp_Buf_B[8]; //初始化给定输入最大值
out_min = (Temp_Buf_B[9]<<8) + Temp_Buf_B[10]; //初始化反馈输入最小值
OUT_0V = out_min;
out_max = (Temp_Buf_B[11]<<8) + Temp_Buf_B[12]; //初始化给定输入最大值
OUT_10V = out_max;
}
INIT_SYS();
_EINT(); //开全局中断
while(1)
{
/***************0~10V反馈输出******************/
AO = (out_max- out_min) * ((float)(Nf)/10000) + out_min; //0~10V数据给定
DAC12_0DAT = AO; //将数据写入DA1数据寄存器
SD16CCTL0 |= SD16SC; // SD16数据采集允许
KEY_SCAN(); //按键、拨码开关扫描程序
if(flag == 0x04) //输出0V校准时实现微调
{
if((channal_out_time == 1)||(channal_out_time == 2))
{
AO = OUT_0V;
}
}
else if(flag == 0x05) //输出10V校准时实现微调
{
if((channal_out_time == 1)||(channal_out_time == 2))
{
AO = OUT_10V;
}
}
switch(flag)
{
case 1: //远程控制模式
{
remote();
LED_SHOW();
}
break;
case 2: //手操控制模式
{
local();
LED_SHOW();
}
break;
case 3: //信号输入校准
{
SD16INCTL0 = SD16INTDLY_0+SD16INCH_1; //转换为差分通道A1
SD16AE = SD16AE1;
channal_IN();
}
break;
case 4:
{
channal_OUT_0V();
channal_out_flash = 0xFF; //允许反馈输出更新Flash标志
}
break; //信号输出0V校准
case 5:
{
channal_OUT_10V();
channal_out_flash = 0xFF; //允许反馈输出更新Flash标志
}
break; //信号输出10V校准
case 6: //校零校满状态
{
SD16INCTL0 = SD16INTDLY_0; // 转换为差分通道A0
SD16AE = SD16AE0;
Calibration_zero_full();
}
break;
case 7:{sense_Establishment();}break; //灵敏度设置
case 8:{acquiesce();}break; //恢复出厂默认值
default:
{
remote();
LED_SHOW();
} //封锁输入输出
}
if(channal_out_flash == 0xFF)
{
channal_out_flash = 0x00; //清反馈输出更新Flash标志
if(abs(OUT_0V -out_min)>10) //输出最低值有改变
{
flash = 0xFF;
out_min = OUT_0V;
FLASH_DATA[9] = OUT_0V>>8; //flash数据更新
FLASH_DATA[10] = OUT_0V & 0x00FF;
channal_out_time = 1;
}
if((OUT_10V >(out_max+10))||(OUT_10V <(out_max-10))) //输出最大值有改变
{
flash = 0xFF;
out_max = OUT_10V;
FLASH_DATA[11] = OUT_10V>>8; //flash数据更新
FLASH_DATA[12] = OUT_10V & 0x00FF;
channal_out_time = 1;
}
}
if(flash == 0xFF) //有数据改变,存数据进flash
{
FLASH_Operation(); //写flash操作
flash = 0x00; //清更新flash标志
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -