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

📄 b3_2006.c

📁 电流电压监测的例子 电 流电压监测的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
作者     :
创立时间 :2005.9.8
第  次修改时间/修改者:

</PRE>
***************************************************/
int Read8255(int ID8255PA,int ID8255PB,int ID8255PC)
   {
      int kpa,kpb,kpc,fhw,qwei;
      kpa=ID8255PA;
      kpa=kpa & 0x7f;
      kpb=ID8255PB;
      fhw= kpb&0x01;
      kpb=kpb>>1;
      kpc=ID8255PC;
      qwei= kpc&0x01;
      kpc=kpc>>1;
      return CM(kpa,kpb,kpc,qwei,fhw);
   }
/*! @function
***************************************************
<PRE>
函数名   : <serail() interrupt 4>
功能     : <serial port receive function>
参数     : <void>
返回值   : <void>
抛出异常 : <无>
---------------------------------------------------
备注     : <interrupt function>
典型用法 : <              >
---------------------------------------------------
作者     :
创立时间 :2005.9.8
第  次修改时间/修改者:

</PRE>
***************************************************/
void serail() interrupt 4 using 2
  {
   unsigned char u,jjj,iii;
   EA=0;
   //if(RI) BEGIN
   if(RI)
     {
     ucReCom[uiRe_In]=SBUF;

     if(ucReCom[uiRe_In]=='@')
        {
         uiRe_In=0;
         ucReCom[uiRe_In]=SBUF;
        }

     if(ucReCom[0]=='@')
        {
         ucReCom[uiRe_In]=SBUF;
         uiRe_In++;
        }

     //if(ucReCom[uiRe_In-1]=='%') BEGIN
     if(ucReCom[uiRe_In-1]=='%')
        {
         //if(ucReCom[1]!='%') BEGIN
         if(ucReCom[1]!='%' && ucReCom[2]!='%')
           {
             //1.ClosePower
             if(ucReCom[1]=='P' && ucReCom[2]=='W' && ucReCom[3]=='0')
                {
                  /******************************/
                 // EVENTHAND=ClosPow;
                 PB8255C=0x00;
                  /*******************************/
                  goto mk;
                }
             //2.OpenPower
             if(ucReCom[1]=='P' && ucReCom[2]=='W' && ucReCom[3]=='1')
                {
                  /******************************/
                  //EVENTHAND=OpenPow;
                  PB8255C=0xc0;
                  /*******************************/
                  goto mk;
                }
             //3. SAVE speed & time
             if(ucReCom[1]=='S' && ucReCom[2]=='A' )
                {
                  /******************************/
                   jjj=0;
                   for(u=18;u>2;u--)
                     {
                      if((ucReCom[u] < 0x3a) && (ucReCom[u] > 0x2f))
                        {
                          iii= ucReCom[u]-0x30;
                          DP[jjj]= table[iii];
                        }
                      else if((ucReCom[u] < 0x4b) && (ucReCom[u] > 0x40))
                        {
                          iii= ucReCom[u]-0x37;
                          DP[jjj]= table[iii];
                        }
                      jjj++;
                    }
                  do
                   {
                    ACC=CMD8279;
                   }while(clflag == 1);
                  CMD8279 = 0x08;//显示方式
                  Delay(1);///
                  CMD8279 = 0x2f;//分频系数
                  for(jjj=0;jjj<16;jjj++)
                  {
                   CMD8279 = jjj+0x80;
                   DAT8279 = DP[jjj];
                  }

                  /*******************************/
                  //EVENTHAND=Wri8279;
                  goto mk;
                }
             //4.KillError
             if(ucReCom[1]=='K' && ucReCom[2]=='E' )
                {
                  /******************************/
                  EVENTHAND=WAIT;
                  /*******************************/
                  goto mk;
                }
             //5.状态灯
             if(ucReCom[1]=='Z' && ucReCom[2]=='T' )
                {
                  /******************************/
                  //EVENTHAND=State;
                  switch(ucReCom[3])
                    {
                     case 'a':   PC8255C=0x40; break;  //启动
                     case 'b':   PC8255C=0x20; break;  //就绪
                     case 'c':   PC8255C=0x10; break;  //测量
                     case 'd':   PC8255C=0x01; break;  //完成
                     case 'e':   PC8255C=0x02; break;  //出错
                     case 'f':   PC8255C=0x04; break;  //出错
                     case 'g':   PC8255C=0x08; break;  //出错
                     case 'h':   PC8255C=0x00; break;  //状态灯全灭

                     default :   break;
                    }
                  /*******************************/
                  goto mk;
                }
             //6.发送标志位设置
             if(ucReCom[1]=='F')
                {
                  flag=ucReCom[2];
                }

      mk:   jjj=0;
           }
         //if(ucReCom[1]!='%') END
        }
     //if(ucReCom[uiRe_In-1]=='%') END
     RI=0;
     }
   //if(RI) END
   EA=1;
  }
/************************************************************************************************/


void Int_one() interrupt 0 using 0
 {
   uchar ppt;
   uint drH,drL;
   EA=0;
      ppt = P1;
      if((ppt & 0x01) == 0x01)     //满足条件则由A“即将打开标记”引起中断
          {
          P1_5 = 0;
          if(P3_4 == 1) //当大小盘同步时 启动计数器0;1,2
            {
              PA8255C = 0xa0; //1010 0000//open counter
              
            }
          goto jjs;
          }
      if((ppt & 0x02) == 0x02)     //满足条件则由B”完全打开标记“引起中断
          {
          P1_6 = 0;

          if(P3_4 == 1)
             {
               PA8255C = PA8255C & 0xdf; //1101 1111 //close counter 0
               A8254CMD = 0x08;
               
             }
          goto jjs;
          }
      if((ppt & 0x08) == 0x08)     //满足条件则由D“读取标记”引起中断
          {

              //1.read 8253
              A8254CMD = 0x08;
              drL=A8254T0;
              drH++;
              drH--;
              drH=A8254T0;
              BUF8253[0]= CONSTER - ( drH*256 + drL );
              A8254CMD = 0x48;
              drL=A8254T1;
              drH++;
              drH--;
              drH=A8254T1;
              BUF8253[1]=CONSTER - ( drH*256 + drL );
              A8254CMD = 0x88;
              drL=A8254T2;
              drH++;
              drH--;
              drH=A8254T2;
              BUF8253[2]=CONSTER - ( drH*256 + drL );
              //2.read FFG_PLC
              switch (FFG_PLC)
                {
                 case 0:  if(P3_5 == 0)
                            {
                             FFG_PLC = 1;
                            }
                          break;
                 case 1:  if(P3_5 == 1)
                            {
                             FFG_PLC = 2;
                            }
                          break;
                 case 2:  BUF8253[4] = BUF8253[0];
                          FFG_PLC = 0;
                          break;
                 default: break;
                }
              //3.data parse
              BUF8253[0] = BUF8253[0];
              BUF8253[1] = BUF8253[1];



              //4.over again  initialization 8253
               //8253初始化
              A8254CMD = 0x38;
              A8254T0 = 0xff;
              A8254T0 = 0xff;
              A8254CMD = 0x78;
              A8254T1 = 0xff;
              A8254T1 = 0xff;
              A8254CMD = 0xb8;
              A8254T2 = 0xff;
              A8254T2 = 0xff;

              //5. grant A B C INT
             if((P1_5 == 0) && (P1_6 == 0) && (P1_7 == 0))
               {
               // P1_5 = 1;
               // P1_6 = 1;
               // P1_7 = 1;
               P1 = P1 | 0xe0;
               }
             
             goto jjt;
         }
jjs:  if((P1 & 0x04) == 0x04)     //满足条件则由C”产品响应标记“引起中断
         {
          P1_7 = 0;
          PA8255C = PA8255C & 0x7f; //0111 1111//close counter 1,2
          A8254CMD = 0x48;
          A8254CMD = 0x88;
         }
jjt:  EA=1;
 }

/***********************************************************************************************/
void main(void)
   {
     init();
     while(1)
     {
     switch( EVENTHAND )
       {
        case WAIT :/*** EVENT  0  ***/
              EVENTHAND=ReadVol;
              break;

        case ReadVol :/*** EVENT 1  读电压值判断是否正常、并且看是否上传数据***/

              p=Read8255(PA8255A,PB8255A,PC8255A);
                //if((p>Max[2])||(p<Min[2]))
              if(p>Max[0])
                  {
                  EVENTHAND=ERRORs;
                  }
              else
                  {
                  if(flag=='a')
                    {
                    MCUToPC[1]='a';
                    _MCUtoPC();
                    flag='0';
                    }
                  EVENTHAND=ReadCur;
                  }
              break;

         case ReadCur : /*** EVENT 2  读电流值判断是否正常、并且看是否上传数据***/
               {
               p=Read8255(PA8255B,PB8255B,PC8255B);
                //if((p>Max[3])||(p<Min[3]))
               if(p>Max[1])
                  {
                  EVENTHAND=ERRORs;
                  }
                else
                  {
                  if(flag=='b')
                    {
                      MCUToPC[1]='b';
                      _MCUtoPC();
                      flag='0';
                    }
                  EVENTHAND=WAIT;
                  }
              break;
              }
         default:
                    break;
        }
     }
 }
 //http://www.tztvu.edu.cn/kfjy/bak2001x/bkjy/jsj/bxk/jk/kcdh/zd601.ppt

⌨️ 快捷键说明

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