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

📄 1.c

📁 光纤测试程序
💻 C
字号:
#include<reg52.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char

unsigned long data lin_shi;
float data change[2];
uchar idata math_save[110];
uchar data soft_counter;
uint  data replace_T1;
uchar data k;

uchar data send_buf[13];
uchar data rece_temp[13];
uchar data *rece_point;
uchar data send_order;
uchar data send_counter;
uchar data interrupt_counter;

sbit  cs_25045=P1^0;
sbit  so_25045=P1^1;
sbit  wp_25045=P1^2;
sbit  si_25045=P1^3;
sbit  sck_25045=P1^4;
sbit  7279_cs=P2^0;
sbit  7279_clk=P2^1;
sbit  7279_data=P2^2;
sbit  7279_key=P2^3;

void send_command(uchar m1);
void enable_25045(void);
void watchdog(void);
void initiate(void);
void wait(void);
uchar bchcode(uchar*);
uchar gets_card_num(void);

//******************************************

main()
  {
     replace_T1=0x00;
     lin_shi=0x00;
     change[0]=0x00;
     change[1]=0x00;
     way_code=0x00;
     for(k=0;k<110;k++)
       math_save[k]=0x00;
     interrupt_counter=0x00;
     rece_point=&rece_temp[0];
     initiate();

     enable_25045();
     while(1)
       {
         card_code=gets_card_num();
         watchdog();
       }
 }

//*****************************

void service_TO(void) interrupt 1  using 0
  {
    TR1=0;
    TR0=0;
    replace_T1=TH1*256+TL1;
    lin_shi=lin_shi+replace_T1;
    soft_counter++;
    if(soft_counter>=20)
        {
              soft_counter=0;
              if(way_code!=0){
                     if((way_code%2)==0){
                              change[0]=(float)lin_shi/5350;//(20000*2.7);
                              math_save[3*way_code-2]=(uchar)(change[0]/1);
                              change[1]=change[0]-(float)math_save[3*way_code-2];
                              math_save[3*way_code-3]=(uchar)(change[1]*100/1);
                     }else {
                              change[0]=(float)lin_shi/5350;//(20000*2.7);
                              math_save[3*way_code-1]=(uchar)(change[0]/1);
                              change[1]=change[0]-(float)math_save[3*way_code-1];
                              math_save[3*way_code-2]=(uchar)(change[1]*100/1);
                      }
              }
              lin_shi=0x00;
              way_code++;
              if(way_code>=37) way_code=1;
              
//************************

 void service_comm(void) interrupt 4  using 3
  {
    uchar data receive_wrong;
    uchar data i;
    ES=0;
    if(RI==1)
     {
       RI=0;
       *rece_point=SBUF;
       rece_point++;
       interrupt_counter++;
       switch(interrupt_counter)
         {
           case 6:
             {
               receive_wrong=0;
               for(i=0;i<6;i++)
                 {
                   if(rece_temp[i]!=eb90[i])
                   receive_wrong=1;
                 }
               if(receive_wrong==1)
                 {
                   for(i=0;i<5;i++)
                   rece_temp[i]=rece_temp[i+1];
                   interrupt_counter--;
                   rece_point--;
                 }
             }
             break;
           case 12:
             {
               if(rece_temp[11]==( ~bchcode(&rece_temp[6]))&&rece_temp[6]==0x71&&rece_temp[7]==0xdd&&rece_temp[10]==(uchar)(card_code+0x40))
                 {
                       uchar data ii;
                       send_counter=0;
                       interrupt_counter=0;
                       rece_point=&rece_temp[0];
                       for(ii=0;ii<6;ii++)
                         {
                           send_buf[ii]=eb90[ii];
                           send_buf[ii+6]=control_word[ii];
                           if(ii==3)
                             {
                               send_buf[ii+6]=(uchar)(card_code+0x40);
                               control_word[ii]=(uchar)(card_code+0x40);
                             }
                           if(ii==5)
                             {
                               send_buf[ii+6]=(~bchcode(&control_word[0]));
                             }
                         }
                       for(ii=0;ii<18;ii++)
                         {
                           math_save[6*ii]=(uchar)(card_code+0x40);
                           math_save[6*ii+5]=(~bchcode(&math_save[6*ii]));
                         }

                       SBUF=send_buf[send_counter];
                       send_counter++;
                       send_order=1;
                 }
                 else
                   {
                       interrupt_counter=0;
                       rece_point=&rece_temp[0];
                   }
             }
             break;
           default:
             break;
       }
  }
if(TI==1&&send_counter!=0)
  {
     if(send_order==3)
       {
         SBUF=math_save[send_counter];
         send_counter++;
         if(send_counter>=108)
           {
             interrupt_counter=0;
             send_counter=0;
             rece_point=&rece_temp[0];
           }
       }
     if(send_order==2)
       {
         SBUF=math_save[send_counter-1];
         send_counter=1;
         send_order=3;
       }
     if(send_order==1)
       {
         SBUF=send_buf[send_counter];
         send_counter++;
         if(send_counter==12)
           {
             send_order=2;
             send_counter=1;
           }
       }
   }
TI=0;
ES=1;
}

//************************

 void enable_25045(void)
  {
    cs_25045=0;
    send_command(WREN);
    cs_25045=1;
    cs_25045=0;
    wait();
    send_command(WRSR);
    wait();
    send_command(0x00);
    cs_25045=1;
  }

//********************************

void send_command(uchar ml)
  {
    static uchar data p;
    uchar data scan_bit=0x80;
    for(p=0;p<8;p++)
      {
        sck_25045=0;
        if(ml&scan_bit)
          si_25045=1;
        else
          si_25045=0;
        scan_bit=scan_bit>>1;
        sck_25045=0;
        sck_25045=1;
      }
    si_25045=0;
  }

//*****************************

void watchDog(void)
  {
    cs_25045=0;
    cs_25045=1;
  }

//******************************

void wait(void)
  {
    uchar data kk;
    for(kk=0;kk<20;kk++);
  }

//******************************

void initiate(void)
  {
    TMOD=0x51;
    PSW=00;

    TCON=00;

    IP=00;
    PS=0;
    PT0=1;

    IE=00;
    ET0=1;
    ES=1;
    EA=1;

    PCON=00;

    SCON=0x50;
    TI=0;
    RI=0;

    TL0=0x3c;
    TH0=0xb0;
    TR0=1;

    T2CON=0x30;
    TL2=0xdc;
    TH2=0xff;
    RCAP2H=0xff;
    RCAP2L=0xdc;
    TR2=1;
 }

//**************

⌨️ 快捷键说明

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