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

📄 ryll6.c

📁 asm无参数调用c51
💻 C
字号:
/*   ryll.c   01,01,11  copyright DaTong  YanGaoWei */

#include <d:\dosfile\c51\inc\reg51.h>
#include <d:\dosfile\c51\inc\math.h>
#include <d:\dosfile\c51\inc\stdio.h>  

#define ctrl_8279 0x80
#define dis_8279 0x80
#define ds_12887 0x40

extern inp();
extern outp();

float accumulate;
float ad_f_result;
unsigned int ad_resu;
unsigned int ad_result[2];
unsigned char display_buffer[16];
unsigned char work_mark;
unsigned char count_1s;
unsigned char count_i;
bit watch_dog_mark;
bit low_limit;
bit high_limit;

code unsigned char seg_code[15]={0xf3,0x60,0xb5,0xf4,0x66,0xd6,0xd7,
                                    0x70,0xf7,0xf6,0x00,0x04,0x67,0x83,0xff};

/*     0,1,2,3,4,5,6,7,8,9, ,-,h,l,8.,

             a             76543210
          f     b          dcbahgfe
             g
          e     c
             d    h                    */

char inputx(char addr1,char addr2)
{
  DPH=addr1;
  DPL=addr2;
  inp();
  return(ACC);
} 

outputx(char addr1,char addr2,char para)
{
  DPH=addr1;
  DPL=addr2;
  ACC=para;
  outp();
}

data_output()
{
    unsigned char temp1;
    unsigned char temp2;
    unsigned char temp3;
    unsigned char temp4;
    long temp;
    temp=(long)(accumulate * 10);
    temp1=(char)temp;
    temp2=(char)(temp >> 8);
    temp3=(char)(temp >> 16);
    temp4=(char)(temp >> 24);
    outputx(ds_12887,0x10,temp1);
    outputx(ds_12887,0x11,temp2);
    outputx(ds_12887,0x12,temp3);
    outputx(ds_12887,0x13,temp4);
}

data_input()
{
    unsigned char temp1;
    unsigned char temp2;
    unsigned char temp3;
    unsigned char temp4;
    long temp;
    temp=0;
    temp1=inputx(ds_12887,0x10);
    temp2=inputx(ds_12887,0x11);
    temp3=inputx(ds_12887,0x12);
    temp4=inputx(ds_12887,0x13);
    temp=temp4;
    temp=temp << 8;
    temp=temp | temp3;
    temp=temp << 8;
    temp=temp | temp2;
    temp=temp << 8;
    temp=temp | temp1;
    accumulate=(float)(temp);
    accumulate=accumulate/10;
}


timedelay(unsigned int times)
{
 unsigned int ti;
 for (ti=times;ti>0;ti--){}
}

watch_dog()
{
  if (watch_dog_mark==1)
  {
    X7=0;
    watch_dog_mark=0;
  }
  else
  {
    X7=1;
    watch_dog_mark=1;
   }                
}
convert_resultch(float resu)
{
  float r1;  
  unsigned long int r2;
  
  r2=(long)(resu*10);
  if (high_limit==1) display_buffer[0]=12;
  else {
     if (low_limit==1) display_buffer[0]=13;
     else display_buffer[0]=10;
  }
/*  display_buffer[0]=r2/1000; */
  display_buffer[1]=(r2/100)%10;
  display_buffer[2]=(r2/10)%10;
  display_buffer[3]=(r2)%10;  
  if (display_buffer[1]==0) {
     display_buffer[1]=10;
  }
}
convert_t(float resu)
{
  float t1;
  unsigned long int t2;
  
  t2=(long)(resu*10);
  display_buffer[4]=t2/100000;
  display_buffer[5]=(t2/10000)%10;
  display_buffer[6]=(t2/1000)%10;
  display_buffer[7]=(t2/100)%10;  
  display_buffer[8]=(t2/10)%10;  
  display_buffer[9]=(t2)%10;  
  if (display_buffer[4]==0) {
     display_buffer[4]=10;
     if (display_buffer[5]==0) {
       display_buffer[5]=10;
         if (display_buffer[6]==0) {
           display_buffer[6]=10;
            if (display_buffer[7]==0) display_buffer[7]=10;

         }
     }
  }
}

display()
{
  unsigned char count_dis;
  outputx(ctrl_8279,1,0x90);
  for (count_i=0;count_i<=15;count_i++){
     count_dis=display_buffer[count_i];
     count_dis=seg_code[count_dis];
     if ((count_i==2) || (count_i==8)) { 
       count_dis=count_dis|0x8;
     }                            
     outputx(dis_8279,0,count_dis);
    }
}
                                      
max_187()
{
      unsigned char max_temp;
      X0=0;
      timedelay(1);   
      X0=1;
      if (X2==1) max_temp=1;
      else max_temp=0;
      return(max_temp);
}

ad_tran()
{
  unsigned char ad_temp;
  ad_result[0]=ad_result[1];
  ad_result[1]=0;
  X0=0;
  X1=0;
  timedelay(20);
  X0=1;
  for (count_i=0;count_i<=12;count_i++){ 
      switch(count_i) {
      case 0:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*2048);
      break;
      case 1:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*1024);
      break;
      case 2:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*512);
      break;
      case 3:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*256);
      break;
      case 4:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*128);
      break;
      case 5:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*64);
      break;
      case 6:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*32);
      break;
      case 7:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*16);
      break;
      case 8:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*8);
      break;
      case 9:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*4);
      break;
      case 10:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*2);
      break;
      case 11:
      ad_temp=max_187();
      ad_result[1]=ad_result[1]+(ad_temp*1);
      break;
      case 12:
      ad_temp=max_187();
      if (ad_temp!=0) ad_result[1]=ad_result[0];  
      break;
      default:
      break;
      } 
    }
    X1=1;
    ad_resu=(ad_result[1]+ad_result[0])/2;
}

ad_convert()
{
    if (ad_resu<=700) low_limit=1;
    else low_limit=0;
    if (ad_resu>=4050) high_limit=1;
    else high_limit=0;
    if (ad_resu<=800) ad_resu=0;
    else {
      if (ad_resu>=4000) ad_resu=3200;
      else ad_resu=ad_resu-800;
    }
    ad_f_result=(float)ad_resu;
    ad_f_result=ad_f_result/106.66666666;
}

accu()
{
  float accu_temp;
  accu_temp=ad_f_result/7200;  
  accumulate=accumulate+accu_temp;
  if (accumulate>=99999.9) accumulate=99999.9;
}

timer1() interrupt 3 using 1
{
  EA=0;
  TL1=0xaf;
  TH1=0x3c;  /* 0.05s */
  count_1s++;
  EA=1;
}

ext1() interrupt 2 using 3
{
  EA=0;
  EA=1;
}

ext0() interrupt 0 using 3
{
  EA=0;
  EA=1;
}

init_8279()
{
  outputx(ctrl_8279,1,0x0a);
  outputx(ctrl_8279,1,0x90);
  outputx(ctrl_8279,1,0x34);
  outputx(ctrl_8279,1,0xd3);
}

initial()
{
  count_1s=0;
  count_i=0;
  work_mark=0;
  data_input();
}

void main()
{
  X7=0;
  TMOD=0x15;
  TL1=0xaf;
  TH1=0x3c;
  TR0=0;
  TR1=1;   /*  timer1 mode  */
  ET1=1;
  IT1=0;   /*  ext int mode */
  IT0=0;
  EX1=0;
  EX0=0;
  ES=0;    /*  232 disable  */
  IP=0x8;
  EA=1;
  X7=1;
  init_8279();
  for (count_i=0;count_i<=15;count_i++) {
    display_buffer[count_i]=14;
  }
  display();
  watch_dog();
  timedelay(30000);
  watch_dog();
  initial();
  watch_dog();
loop:
    if(X6==1) {
      accumulate=0;
      data_output();
    }  
    if (count_1s>=10){         /*  0.5s accumulate   */
     count_1s=0;
     watch_dog();
     ad_tran(); 
     ad_convert();
     if (ad_f_result > 0.6) {
       accu();
       data_output();
     }
     watch_dog();
     convert_resultch(ad_f_result);   
     convert_t(accumulate);
     }   
     display();
    goto loop;
}

⌨️ 快捷键说明

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