📄 f020.c
字号:
/*********************************************************************/
/********************************************************************/
//station 2//
//射击控制信号采集//
//M301/C 射控地GNDS//
//共14路采样//
//采样通道AIN0。0~AIN0。7//
// AIN1。0~AIN1。5//
#include "c8051f020.h"
#include "Delay.h"
#include "flash.h"
#include "math.h"
//#include "Const.h"
#define A 0x0E //Xn*9.4922*11 1.5V
#define B 0x05 //Xn*9.4922*11 0.5V
sbit Status_system_LED = P3^4;
sbit Status_AD_LED =P3^5;
extern void config (void);
void UART0_SendByte(unsigned char value);
void Read_AD_Current(void);
unsigned int idata systemstate;
unsigned char xdata x[0x07fff];
unsigned char idata shijian_data[3]; //最大255
unsigned char idata AIN;//通道变量
unsigned char idata adh,adm,adl;//开机目地地址变量
unsigned char idata data_length;
bit c_flag;//C命令读标志位
bit e_flag;//E命令读标志位
bit fast_read;//D命令读标志位
bit AD_Current_flag;//K命令读标志位
bit AIN_Flag;//定时器中断,AD转换标志位
unsigned char idata timepoint;
unsigned char idata fast_adh,fast_adm,fast_adl;
unsigned long int idata end_add;
unsigned int idata AIN00_ADDR[3];
unsigned int idata AIN01_ADDR[3];
unsigned int idata AIN02_ADDR[3];
unsigned int idata AIN03_ADDR[3];
unsigned int idata AIN04_ADDR[3];
unsigned int idata AIN05_ADDR[3];
unsigned int idata AIN06_ADDR[3];
unsigned int idata AIN07_ADDR[3];
unsigned int idata AIN10_ADDR[3];
unsigned int idata AIN11_ADDR[3];
unsigned int idata AIN12_ADDR[3];
unsigned int idata AIN13_ADDR[3];
unsigned int idata AIN14_ADDR[3];
unsigned int idata AIN15_ADDR[3];
unsigned int idata AIN16_ADDR[3];
unsigned int idata AIN17_ADDR[3];
unsigned int idata m0,m1,m2,m3,m4,m5,m6,m7,n0,n1,n2,n3,n4,n5,n6,n7;//m~AIN0.0~AIN0.7缓存地址 n~AIN1.0~AIN1.7缓存地址
unsigned char first_flag00,first_flag01,first_flag02,first_flag03,first_flag04,first_flag05,first_flag06,first_flag07;
unsigned char first_flag10,first_flag11,first_flag12,first_flag13,first_flag14,first_flag15,first_flag016,first_flag17;
//*****各通道上次采样值RAM保存地址*******//
//AIN00~0X2000 //AIN10~0X3000
//AIN01~0X2100 //AIN11~0X3100
//AIN02~0X2200 //AIN12~0X3200
//AIN03~0X2300 //AIN13~0X3300
//AIN04~0X2400 //AIN14~0X3400
//AIN05~0X2500 //AIN15~0X3500
//AIN06~0X2600 //AIN16~0X3600
//AIN07~0X2700 //AIN17~0X3700
//***********************************//
void main (void)
{
unsigned int Temp_AD;
unsigned int idata last_xn;
unsigned int idata current_xn;
//unsigned int i;
WDTCN = 0xDE;
WDTCN = 0xAD; //禁止WDT
config();
//Flash Address Initial//
AIN00_ADDR[0]=0x00;
AIN00_ADDR[1]=0x00;
//AIN00_ADDR[2]=0x08;//AIN0.0 存储区域0x000000~0x01FFFF共128K
AIN01_ADDR[0]=0x02;
AIN01_ADDR[1]=0x00;
//AIN01_ADDR[2]=0x08;//AIN0.1 存储区域0x020000~0x03FFFF共128K
AIN02_ADDR[0]=0x04;
AIN02_ADDR[1]=0x00;
//AIN02_ADDR[2]=0x08;//AIN0.2 存储区域0x040000~0x05FFFF共128K
AIN03_ADDR[0]=0x06;
AIN03_ADDR[1]=0x00;
//AIN03_ADDR[2]=0x08;//AIN0.3 存储区域0x060000~0x07FFFF共128K
AIN04_ADDR[0]=0x08;
AIN04_ADDR[1]=0x00;
//AIN04_ADDR[2]=0x08;//AIN0.4 存储区域0x080000~0x009FFF共128K
AIN05_ADDR[0]=0x0A;
AIN05_ADDR[1]=0x00;
//AIN05_ADDR[2]=0x08;//AIN0.5 存储区域0x0A0000~0x0BFFFF共128K
AIN06_ADDR[0]=0x0C;
AIN06_ADDR[1]=0x00;
//AIN06_ADDR[2]=0x08;//AIN0.6 存储区域0x0C0000~0x0DFFFF共128K
AIN07_ADDR[0]=0x0E;
AIN07_ADDR[1]=0x00;
//AIN07_ADDR[2]=0x08;//AIN0.7 存储区域0x0E0000~0x0FFFFF共128K
AIN10_ADDR[0]=0x10;
AIN10_ADDR[1]=0x00;
//AIN10_ADDR[2]=0x08;//AIN1.0 存储区域0x010000~0x11FFFF共128K
AIN11_ADDR[0]=0x12;
AIN11_ADDR[1]=0x00;
//AIN11_ADDR[2]=0x08;//AIN1.1 存储区域0x120000~0x13FFFF共128K
AIN12_ADDR[0]=0x14;
AIN12_ADDR[1]=0x00;
//AIN12_ADDR[2]=0x08;//AIN1.2 存储区域0x140000~0x15FFFF共128K
AIN13_ADDR[0]=0x16;
AIN13_ADDR[1]=0x00;
//AIN13_ADDR[2]=0x08;//AIN1.3 存储区域0x160000~0x17FFFF共128K
AIN14_ADDR[0]=0x18;
AIN14_ADDR[1]=0x00;
//AIN14_ADDR[2]=0x08;//AIN1.4 存储区域0x180000~0x19FFFF共128K
AIN15_ADDR[0]=0x1A;
AIN15_ADDR[1]=0x00;
//AIN15_ADDR[2]=0x08;//AIN1.5 存储区域0x1A0000~0x1BFFFF共128K
AIN16_ADDR[0]=0x1C;
AIN16_ADDR[1]=0x00;
//AIN16_ADDR[2]=0x08;//AIN1.6 存储区域0x1C0000~0x1DFFFF共128K
AIN17_ADDR[0]=0x1E;
AIN17_ADDR[1]=0x00;
//AIN17_ADDR[2]=0x08;//AIN1.7 存储区域0x1E0000~0x1FFFFF共128K
//RAM Address Initial//
m0=0x0000;
m1=0x0100;
m2=0x0200;
m3=0x0300;
m4=0x0400;
m5=0x0500;
m6=0x0600;
m7=0x0700;
n0=0x1000;
n1=0x1100;
n2=0x1200;
n3=0x1300;
n4=0x1400;
n5=0x1500;
n6=0x1600;
n7=0x1700;
//first_flag Initial//
first_flag00=0;first_flag01=0;first_flag02=0;first_flag03=0;first_flag04=0;first_flag05=0;first_flag06=0;first_flag07=0;
first_flag10=0;first_flag11=0;first_flag12=0;first_flag13=0;first_flag14=0;first_flag15=0;
TR1=1;
EA=1;
TR0=0;
systemstate=0;
AIN=0X00;
timepoint=0x00;
fast_adh=0X00;fast_adm=0X00;fast_adl=0X00;end_add=0X00000000;
AD_Current_flag=0;
Status_system_LED=0;
Status_AD_LED =1;
// FLASH_SE(0x1F,0x00,0x00);
// UART0_SendByte(0XEE);
while(1)
{
if(fast_read==1)
{
TR0=0;
ET0=0;
fast_read=0;
Fast_Read(fast_adh,fast_adm,fast_adl,end_add);
}
if(e_flag==1)
{
TR0=0;
ET0=0;
e_flag=0;
//FLASH_SE(0x00,0x00,0x00);
FLASH_BE();
//Flash Address Initial//
AIN00_ADDR[0]=0x00;
AIN00_ADDR[1]=0x00;
//AIN00_ADDR[2]=0x08;//AIN0.0 存储区域0x000000~0x01FFFF共128K
AIN01_ADDR[0]=0x02;
AIN01_ADDR[1]=0x00;
//AIN01_ADDR[2]=0x08;//AIN0.1 存储区域0x020000~0x03FFFF共128K
AIN02_ADDR[0]=0x04;
AIN02_ADDR[1]=0x00;
//AIN02_ADDR[2]=0x08;//AIN0.2 存储区域0x040000~0x05FFFF共128K
AIN03_ADDR[0]=0x06;
AIN03_ADDR[1]=0x00;
//AIN03_ADDR[2]=0x08;//AIN0.3 存储区域0x060000~0x07FFFF共128K
AIN04_ADDR[0]=0x08;
AIN04_ADDR[1]=0x00;
//AIN04_ADDR[2]=0x08;//AIN0.4 存储区域0x080000~0x009FFF共128K
AIN05_ADDR[0]=0x0A;
AIN05_ADDR[1]=0x00;
//AIN05_ADDR[2]=0x08;//AIN0.5 存储区域0x0A0000~0x0BFFFF共128K
AIN06_ADDR[0]=0x0C;
AIN06_ADDR[1]=0x00;
//AIN06_ADDR[2]=0x08;//AIN0.6 存储区域0x0C0000~0x0DFFFF共128K
AIN07_ADDR[0]=0x0E;
AIN07_ADDR[1]=0x00;
//AIN07_ADDR[2]=0x08;//AIN0.7 存储区域0x0E0000~0x0FFFFF共128K
AIN10_ADDR[0]=0x10;
AIN10_ADDR[1]=0x00;
//AIN10_ADDR[2]=0x08;//AIN1.0 存储区域0x010000~0x11FFFF共128K
AIN11_ADDR[0]=0x12;
AIN11_ADDR[1]=0x00;
//AIN11_ADDR[2]=0x08;//AIN1.1 存储区域0x120000~0x13FFFF共128K
AIN12_ADDR[0]=0x14;
AIN12_ADDR[1]=0x00;
//AIN12_ADDR[2]=0x08;//AIN1.2 存储区域0x140000~0x15FFFF共128K
AIN13_ADDR[0]=0x16;
AIN13_ADDR[1]=0x00;
//AIN13_ADDR[2]=0x08;//AIN1.3 存储区域0x160000~0x17FFFF共128K
AIN14_ADDR[0]=0x18;
AIN14_ADDR[1]=0x00;
//AIN14_ADDR[2]=0x08;//AIN1.4 存储区域0x180000~0x19FFFF共128K
AIN15_ADDR[0]=0x1A;
AIN15_ADDR[1]=0x00;
//AIN15_ADDR[2]=0x08;//AIN1.5 存储区域0x1A0000~0x1BFFFF共128K
AIN16_ADDR[0]=0x1C;
AIN16_ADDR[1]=0x00;
//AIN16_ADDR[2]=0x08;//AIN1.6 存储区域0x1C0000~0x1DFFFF共128K
AIN17_ADDR[0]=0x1E;
AIN17_ADDR[1]=0x00;
//AIN17_ADDR[2]=0x08;//AIN1.7 存储区域0x1E0000~0x1FFFFF共128K
//RAM Address Initial//
m0=0x0000;
m1=0x0100;
m2=0x0200;
m3=0x0300;
m4=0x0400;
m5=0x0500;
m6=0x0600;
m7=0x0700;
n0=0x1000;
n1=0x1100;
n2=0x1200;
n3=0x1300;
n4=0x1400;
n5=0x1500;
n6=0x1600;
n7=0x1700;
//first_flag Initial//
first_flag00=0;first_flag01=0;first_flag02=0;first_flag03=0;first_flag04=0;first_flag05=0;first_flag06=0;first_flag07=0;
first_flag10=0;first_flag11=0;first_flag12=0;first_flag13=0;first_flag14=0;first_flag15=0;
//UART0_SendByte(0X0E);
}
if(c_flag==1)//C命令程序段
{
//TR0=0;
//ET0=0;
c_flag=0;
Read_Flash_Data_To_PC (adh,adm,adl,data_length);
//ET0=1;
//TR0=1;
}
if(AD_Current_flag==1)//K命令程序段
{
AD_Current_flag=0;
TR0=0;
ET0=0;
Read_AD_Current();
}
if(systemstate==1)//S命令启动采样
{
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x00,0x00,0x00,0x00);//通道AIN0。0
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x10,0x00,0x00,0x10);//通道AIN1。0
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x02,0x00,0x00,0x01);//通道AIN0。1
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x12,0x00,0x00,0x11);//通道AIN1。1
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x04,0x00,0x00,0x02);//通道AIN0。2
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x14,0x00,0x00,0x12);//通道AIN1。2
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x06,0x00,0x00,0x03);//通道AIN0。3
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x16,0x00,0x00,0x13);//通道AIN1。3
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x08,0x00,0x00,0x04);//通道AIN0。4
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x18,0x00,0x00,0x14);//通道AIN1。4
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0A,0x00,0x00,0x05);//通道AIN0。5
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1A,0x00,0x00,0x15);//通道AIN1。5
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0C,0x00,0x00,0x06);//通道AIN0。6
//Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1C,0x00,0x00,0x16);//通道AIN1。6
Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0E,0x00,0x00,0x07);//通道AIN0。7
//Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1E,0x00,0x00,0x17);//通道AIN1。7
systemstate=2;
ET0=1;
TR0=1;
while(systemstate==2)
{
if(c_flag==1)//C命令程序段
{
TR0=0;
ET0=0;
c_flag=0;
Read_Flash_Data_To_PC (adh,adm,adl,data_length);
ET0=1;
TR0=1;
}
if(AD_Current_flag==1)//K命令程序段
{
AD_Current_flag=0;
TR0=0;
ET0=0;
Read_AD_Current();
ET0=1;
TR0=1;
}
if(fast_read==1)//D命令程序段
{
fast_read=0;
TR0=0;
ET0=0;
Fast_Read(fast_adh,fast_adm,fast_adl,end_add);
ET0=1;
TR0=1;
}
if(AIN_Flag==1)
{
/***********************************START AIN=0X01*********************************************/
if(AIN==0X01)
{
AIN_Flag=0;
/***************************AD LONG TIME NO CHANGE****************************/
if(timepoint>253)
{
TR0=0;
ET0=0;
Status_AD_LED=~Status_AD_LED;
AMX0SL = 0x00;//AIN0.0 //AIN00-AIN07->0X00-0X07
AD0INT = 0; // 清除ADC转换完成标志
AD0BUSY = 1;
Delay_us(5);
while (!AD0INT);
current_xn = ADC0H;
x[m0]=current_xn;
m0++;
x[m0]=0xFE;
m0++;
AMX1SL=0x00;//AIN1.0
ADC1CN &= 0xDF;// 清除ADC转换完成标志 AD1INT = 0;
ADC1CN |= 0x10;// AD1BUSY = 1;
Delay_us(5);
while (!ADC1CN&0x20); //等待AD1INT=1;
current_xn=ADC1;
x[n0]=current_xn;
n0++;
x[n0]=0xFE;
n0++;
ET0=1;
TR0=1;
}
if(m0>0X00FF)
{
TR0=0;
ET0=0;
m0=0x0000;//AIN0.0缓存区首地址
switch (first_flag00)
{
case 0X00: Read_Data_T0_Flash (AIN00_ADDR[0],AIN00_ADDR[1],0x08,m0+8,248);
AIN00_ADDR[1]++;
//AIN00_ADDR[2]=0x00;
first_flag00=1;
break;
case 0X01: Read_Data_T0_Flash (AIN00_ADDR[0],AIN00_ADDR[1],0x00,m0,256);
AIN00_ADDR[1]++;
//AIN00_ADDR[2]=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -