📄 admain.i
字号:
#line 1 "admain.c" /0 #line 1 "D:\KEIL\C51\INC\ADI\ADUC812.H" /0 sfr P0 = 0x80; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr DPP = 0x84; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr P1 = 0x90; sfr SCON = 0x98; sfr SBUF = 0x99; sfr I2CDAT = 0x9A; sfr I2CADD = 0x9B; sfr P2 = 0xA0; sfr IE = 0xA8; sfr IE2 = 0xA9; sfr P3 = 0xB0; sfr IP = 0xB8; sfr ECON = 0xB9; sfr ETIM1 = 0xBA; sfr ETIM2 = 0xBB; sfr ETIM3 = 0xC4; sfr EDATA1 = 0xBC; sfr EDATA2 = 0xBD; sfr EDATA3 = 0xBE; sfr EDATA4 = 0xBF; sfr WDCON = 0xC0; sfr EADRL = 0xC6; sfr T2CON = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC; sfr TH2 = 0xCD; sfr PSW = 0xD0; sfr DMAL = 0xD2; sfr DMAH = 0xD3; sfr DMAP = 0xD4; sfr ADCCON2 = 0xD8; sfr ADCDATAL = 0xD9; sfr ADCDATAH = 0xDA; sfr PSMCON = 0xDF; sfr ACC = 0xE0; sfr I2CCON = 0xE8; sfr DCON = 0xE8; sfr ADCCON1 = 0xEF; sfr B = 0xF0; sfr ADCOFSL = 0xF1; sfr ADCOFSH = 0xF2; sfr ADCGAINL = 0xF3; sfr ADCGAINH = 0xF4; sfr ADCCON3 = 0xF5; sfr SPIDAT = 0xF7; sfr SPICON = 0xF8; sfr DAC0L = 0xF9; sfr DAC0H = 0xFA; sfr DAC1L = 0xFB; sfr DAC1H = 0xFC; sfr DACCON = 0xFD; sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88; sbit T2EX = 0x91; sbit T2 = 0x90; sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98; sbit EA = 0xAF; sbit EADC = 0xAE; sbit ET2 = 0xAD; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0; sbit PSI = 0xBF; sbit PADC = 0xBE; sbit PT2 = 0xBD; sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8; sbit PRE2 = 0xC7; sbit PRE1 = 0xC6; sbit PRE0 = 0xC5; sbit WDR1 = 0xC3; sbit WDR2 = 0xC2; sbit WDS = 0xC1; sbit WDE = 0xC0; sbit TF2 = 0xCF; sbit EXF2 = 0xCE; sbit RCLK = 0xCD; sbit TCLK = 0xCC; sbit EXEN2 = 0xCB; sbit TR2 = 0xCA; sbit CNT2 = 0xC9; sbit CAP2 = 0xC8; sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit F1 = 0xD1; sbit P = 0xD0; sbit ADCI = 0xDF; sbit DMA = 0xDE; sbit CCONV = 0xDD; sbit SCONV = 0xDC; sbit CS3 = 0xDB; sbit CS2 = 0xDA; sbit CS1 = 0xD9; sbit CS0 = 0xD8; sbit MDO = I2CCON^7; sbit MDE = I2CCON^6; sbit MCO = I2CCON^5; sbit MDI = I2CCON^4; sbit I2CM = I2CCON^3; sbit I2CRS = I2CCON^2; sbit I2CTX = I2CCON^1; sbit I2CI = I2CCON^0; sbit D1 = DCON^7; sbit D1EN = DCON^6; sbit D0 = DCON^5; sbit D0EN = DCON^3; sbit ISPI = 0xFF; sbit WCOL = 0xFE; sbit SPE = 0xFD; sbit SPIM = 0xFC; sbit CPOL = 0xFB; sbit CPHA = 0xFA; sbit SPR1 = 0xF9; sbit SPR0 = 0xF8;#line 4 "admain.c" /0 #line 1 "D:\KEIL\C51\INC\MATH.H" /0 #pragma SAVE #pragma REGPARMS extern char cabs (char val); extern int abs (int val); extern long labs (long val); extern float fabs (float val); extern float sqrt (float val); extern float exp (float val); extern float log (float val); extern float log10 (float val); extern float sin (float val); extern float cos (float val); extern float tan (float val); extern float asin (float val); extern float acos (float val); extern float atan (float val); extern float sinh (float val); extern float cosh (float val); extern float tanh (float val); extern float atan2 (float y, float x); extern float ceil (float val); extern float floor (float val); extern float modf (float val, float *n); extern float fmod (float x, float y); extern float pow (float x, float y); #pragma RESTORE #line 5 "admain.c" /0 sbit Run_Id=P2^5; sbit Ctrl1 =P2^6; sbit Ctrl0 =P2^7; sbit Adv0 =P1^2; sbit Adv1 =P1^3; unsigned int Ad_o[2]; unsigned int Da_i[2]; struct segment{ unsigned char V_start; unsigned char V_end; unsigned char mul_col; unsigned char add_col; }; struct segment Seg; unsigned char DATA_U[64]; unsigned char Rptr,Wptr; unsigned char DATA_W[16]; unsigned char Uptr,Ulen; unsigned char flag,flag1,flag_s; unsigned char time_p,time_r; idata unsigned int temp_s[20]; unsigned int GetADC(unsigned char Channel) { unsigned char *p; unsigned char variable; unsigned int ADC_value; p=(unsigned char *)&ADC_value; ADCCON2=Channel; SCONV=1; while (SCONV) { } SCONV=1; while (SCONV) { } variable=0x0F&ADCDATAH; *p=variable; p++; *p=ADCDATAL; return(ADC_value); } void SetDac(unsigned char num,unsigned int Da_data) { if(num==0) { DACCON=0x1F; DAC0H=(unsigned char)((Da_data>>8) & 0x000f); DAC0L=(unsigned char)(Da_data & 0x00ff); } else if(num==1) { DACCON=0x1F; DAC1H=(unsigned char)((Da_data>>8) & 0x000f); DAC1L=(unsigned char)(Da_data & 0x00ff); } } void Delay(unsigned char D_time) { unsigned char i,j,k; for(i=0;i<D_time;i++) { for(j=0;j<0xff;j++); { k=j; k=i; i=i; } } } unsigned char Select_V(unsigned int Y) { unsigned long M; unsigned char i,Vsel; M=(unsigned long)Y*10*5*2; M=M / 4095; Vsel=(unsigned char)(M & 0x000000ff); if(Vsel>100) Vsel=100; for(i=0;i<20;i++) { EADRL=i; ECON=0x01; if((Vsel>=EDATA1)&&(Vsel<EDATA2)) { Seg.V_start= EDATA1; Seg.V_end = EDATA2; Seg.mul_col= EDATA3; Seg.add_col= EDATA4; return 1; } } return 0; } unsigned char Write_f(unsigned char type,unsigned char Addr) { switch(type) { case 0: ECON=0x06; Delay(20); ECON=0x03; break; case 1: EADRL=Addr; ECON=0x01; EDATA1=Seg.V_start; EDATA2=Seg.V_end ; EDATA3=Seg.mul_col; EDATA4=Seg.add_col; ECON=0x05; ECON=0x02; ECON=0x03; break; case 2: EADRL=Addr; ECON=0x02; ECON=0x03; break; } return 1; } void Calcu(unsigned char num) { unsigned long G; unsigned int Y; if(num==0) {Y=GetADC(0x02);} else if(num==1) {Y=GetADC(0x03); } Ad_o[num]=Y; if(Select_V(Y)==1); { G=Seg.add_col *4095; G=G/5/2; Y=(unsigned int)((Seg.mul_col*Y+G)/10); if(Y>=0x0FFF) { Y=0x0FFF; } if(Y<=0x0000) { Y=0x0000; } } Da_i[num]=Y; SetDac(num,Y); } void SystemInit() { TL2=0xDC; TH2=0xFF; RCAP2L=0xDC; RCAP2H=0xFF; T2CON=0x30; TR2=1; SCON=0x50; ES=1; TMOD=0x01; TL0=0xFF; TH0=0xDB; TR0=1; ET0=1; ADCCON1=0x7c; EA=1; } void Write_Serial(unsigned int T_Data) { unsigned char *p; p=(unsigned char *)&T_Data; DATA_W[0]=*p; DATA_W[1]=*(p+1); Uptr=0; Ulen=2; TI=1; flag=1; } void W_Uart(unsigned char *p, unsigned char len) { unsigned char i; for(i=0;i<len;) { DATA_W[i]=*p; i++; p++; } Uptr=0; Ulen=len; TI=1; flag=1; } void main(void) { unsigned char i,k; unsigned char len_r,count; unsigned char Addr_P; unsigned char temp_t; unsigned char j; SystemInit(); Rptr=Wptr=Uptr=0x00; flag=flag1=0x00; flag_s=0x00; temp_t=0; W_Uart("Aduc812 start",13); for(i=0;i<20;i++) { temp_s[i]=0x00;} EADRL=0; ECON=0x01; if(EDATA1==0xff) { Write_f(0x00,0x00); EADRL=0x9f; for(i=0;i<16;i++) { EADRL=i; EDATA1=i*10; EDATA2=(i+1)*10; EDATA3=10; EDATA4=0; ECON=0x02; EADRL=0x9f; } } EADRL=0x40; ECON=0x01; j=EDATA1; while(1) { if(time_r==0){Run_Id=~Run_Id;time_r=10;} if(Ctrl0) { if(GetADC(0x02)>0x0030) { i=j&0x1f; if(i>20) i=20; SetDac(0,temp_s[i]); } else { SetDac(0,0x0000); for(i=0;i<20;i++) { temp_s[i]=0x00;} } } else { Calcu(0); if(flag_s==1) { for(i=19;i>0;i--) { temp_s[i]=temp_s[i-1];} temp_s[0]=Da_i[0]; flag_s=0; if((j&0x80)!=0) temp_t++; if(temp_t>=0x64) { Write_Serial(Ad_o[0]); while(flag){;} Write_Serial(Da_i[0]); temp_t=0; } } } if((time_p==0)&&(flag1>0)) { flag1=0x00; W_Uart("uart err",8); Rptr=Wptr=0x00; } if(Rptr!=Wptr) { time_p=0x80; k=DATA_U[Rptr]; Rptr++; if(Rptr>=64) {Rptr=0;} switch(flag1) { case 0: if(k==0xaa) {flag1=0x01;} else if(k==0xbb){flag1=0x10;} else if(k==0xcc) { for(i=0;i<20;i++) { Write_Serial(temp_s[i]); while(flag){;} } } else if(k==0xcd){flag1=0x20;} break; case 1: if(k>0x00) { flag1=0x02; len_r=k; if(len_r>60) {len_r=60;} count=0x00; Addr_P=Rptr; } else {flag1=0x00;} break; case 2: count++; if(count==len_r){flag1=0x03;} break; case 3: Write_f(0x00,0x00); Rptr=Addr_P; count=len_r/4; for(i=0;i<count;i++) { EADRL=i; EDATA1=DATA_U[Rptr]; EDATA2=DATA_U[Rptr+1]; EDATA3=DATA_U[Rptr+2]; EDATA4=DATA_U[Rptr+3]; ECON=0x02; EADRL=0x9F; Rptr=Rptr+4; } len_r=0; Addr_P=0; flag1=0x00; Rptr=Wptr=0x00; W_Uart("down ok" ,7); break; case 0x10: flag1=0x00; Rptr=Wptr=0x00; len_r=0; for(i=0;i<65;i++) { EADRL=i; ECON=0x01; Seg.V_start= EDATA1; Seg.V_end = EDATA2; Seg.mul_col= EDATA3; Seg.add_col= EDATA4; while(flag){;} W_Uart((unsigned char*)&Seg ,4); } break; case 0x20: { flag1=0x00; EADRL=0x40; ECON=0x01; EDATA1=k; EDATA2=0x0f; EDATA3=0xcd; EDATA4=0xcd; ECON=0x05; ECON=0x02; EADRL=0x41; j=k; W_Uart("ok" ,2); Rptr=Wptr=0x00; } } } } } void S_int0() interrupt 0 { } void S_int1() interrupt 2 { } void Time0() interrupt 1 { TL0=0xFF; TH0=0xDB; TR0=1; if(time_r>0){time_r--;flag_s=1;} if(time_p>0){ time_p--;} } void Uart_isr() interrupt 4 { EA=0; if(RI) { RI=0; DATA_U[Wptr]=SBUF; Wptr++; if(Wptr>=64) Wptr=0; } if(TI) { TI=0; if((Uptr<Ulen) && (flag==0x01)) { SBUF=DATA_W[Uptr]; Uptr++; } else { flag=0; } } EA=1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -