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

📄 sfunc.lst

📁 本文详细介绍了VB和单片机之间进行通信的过程。为了确保通信的可靠性
💻 LST
字号:
C51 COMPILER V7.06   SFUNC                                                                 05/13/2004 15:25:57 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SFUNC
OBJECT MODULE PLACED IN Sfunc.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Sfunc.c ROM(COMPACT)

stmt level    source

   1          #include<reg51.h>
   2          //#include <intrins.h>
   3          //------------------------------------------
   4          #define true unsigned char 1
   5          #define false unsigned char 0
   6          //#define COUNT 10/*DELAY 10*COUNT ms*/
   7          /*----------------------------------------*/
   8           extern void OnError(char ErrorN);
   9           void delayms(unsigned int x);
  10           unsigned char Ack_call(void);
  11          /*--------全局变量区----------------------*/
  12           bit Flag_t=0;
  13           int Flag_Count=0;///*DELAY 10*COUNT ms*/
  14          /*----------------------------------------*/
  15          /*serial communicaton initial8*/
  16          void init_s(void)//串口工作时T1不能再用。
  17           {
  18   1        TMOD=0X20;//定时器T1工作于自动装载模式
  19   1        TH1=0XE8;//1200BPS
  20   1        TL1=0XE8;  
  21   1        PCON=0X00; /*SMOD=0;*/
  22   1        SCON=0X50;/*方式1且允许接收*/
  23   1        TR1=1;//定时器开始工作
  24   1       }
  25          /*函数功能:在内存Address处进行长度为n的数据填充,填充数据为i*/
  26          void init_m(char data *Address,unsigned char n,unsigned char j)
  27          {
  28   1         unsigned char i=0;
  29   1          //Address=0x30;
  30   1       for (i=0;i<n;i++)
  31   1         {
  32   2         *Address=j;
  33   2          Address++;
  34   2         }
  35   1      }
  36          /*TIMER0 Initial*/
  37          void init_t0(void)
  38          {
  39   1       TMOD=TMOD|0X21;/*保持TMOD的定时器1的原始设置,又开启T0。*/
  40   1       TH0=0xdc;/*10MS interrupt delay*/
  41   1       TL0=0x00;
  42   1       EA=1;
  43   1       ET0=0;/*enable it if want to work*!!!!*/
  44   1       TR0=0;
  45   1      }
  46          /*----------------------interrupt program----------------------*/
  47          void int_t0(void) interrupt 1
  48            {
  49   1         static int n=0;
  50   1         TH0=0xdc;/*10MS interrupt delay*/
  51   1         TL0=0x00;
  52   1         n+=1;/*not best*/
  53   1         if (n==Flag_Count)  
  54   1          {
  55   2            TR0=0;
C51 COMPILER V7.06   SFUNC                                                                 05/13/2004 15:25:57 PAGE 2   

  56   2            ET0=0;
  57   2            Flag_t=1;
  58   2            n=0;
  59   2           }
  60   1         }
  61            //---------------------------------------------------------
  62          /*ack flame*/
  63          //输入接收等待时间,输出接收值
  64          unsigned char Ack_call(void)//专供Ack调用,以缩短程序。
  65          {
  66   1        unsigned char j;
  67   1       ET0=1;//---------------!!
  68   1       TR0=1;
  69   1       while (RI==0&&Flag_t==0);/*接收到信号或时间到10*Flag_COUNT ms退出等待*/
  70   1       RI=0;
  71   1       ET0=0;
  72   1       TR0=0;
  73   1       Flag_Count=0;
  74   1       j=SBUF;//如果J没接收到数据,则会和i的数据一样
  75   1       if (Flag_t==1) j=0xf1;
  76   1       Flag_t=0;
  77   1       return(j);
  78   1      }
  79          bit Ack(void)
  80          {
  81   1       unsigned char i;
  82   1       Flag_Count=200;//一次等2s.
  83   1       i= Ack_call();//
  84   1       if(i==0x63)/*ASCII:c*/
  85   1           return(1);
  86   1       else   return(0);//凡是收不到63的情况,包括掉包、传错都重传3次。
  87   1       }
  88          
  89          /*hand to hand function,send 0x54,recieve0x63,if have wrong,重发3次*/
  90          bit hd2hd(void)
  91          {
  92   1        unsigned char i;
  93   1       for(i=0;i<3;i++)
  94   1           {
  95   2                 SBUF=0X54;//SEND T
  96   2                 while(TI==0);TI=0;/*don't set breakpoint here*/
  97   2                 if (Ack()==1) return(1);
  98   2             delayms(300);//等待300MS,使计算机有时间反映
  99   2           }
 100   1            
 101   1              return(0);
 102   1      }
 103          /*函数功能:从Adrress处发送n个数据*/
 104          void Send_Data( char data *Adrress,unsigned char n)
 105          {
 106   1       unsigned char pf=0;
 107   1       unsigned char i;
 108   1       SBUF=0X55;/*起始位55*/
 109   1       while(TI==0);TI=0;
 110   1       SBUF=n;/*data lenth*/
 111   1       while(TI==0);TI=0;
 112   1           pf=0;
 113   1            for (i=0;i<n;i++)
 114   1               {
 115   2              unsigned char m;///SBUF的值不定!!
 116   2                SBUF=*Adrress;///发送完才变为当前数
 117   2                m=*Adrress;
C51 COMPILER V7.06   SFUNC                                                                 05/13/2004 15:25:57 PAGE 3   

 118   2                Adrress++;
 119   2                pf+=m;
 120   2              while(TI==0);TI=0;
 121   2               }
 122   1             SBUF=pf;
 123   1             while(TI==0);TI=0;
 124   1       }    
 125           void delayms(unsigned int x)//延时1ms*X
 126            {
 127   1              unsigned char j;
 128   1              while(x--)
 129   1              {
 130   2                      for(j=0;j<125;j++)
 131   2                      {;}
 132   2              }
 133   1        }
 134             
 135          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    248    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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