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

📄 rs485.lst

📁 可视门铃的主机软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE RS485
OBJECT MODULE PLACED IN RS485.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE RS485.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          /*
   2          串口通讯程序,分与分机通讯程序和与管理机通讯程序,其中:发送数据用同一个串口,接收分机数据由FPGA完成
   3          接收管理机数据由51完成
   4          mainFcommon(uchar txcommand)为发数据到分机,只要填好数据调用此函数即可
   5          Doorcommon(void)为发数据到主机,填好数据调此函数,返回YES表示数据通讯正常
   6          */
   7          
   8          
   9          #include "defineh.h"
  10          #include "externh.h"
  11          
  12          uchar haveDOORWORKDATA;  //对方忙
  13          
  14          extern void nop(void);
  15          extern void watchdog(void);
  16          extern void delays100ms(void);
  17          extern void roomalarmdatawork(void);//报警数据缓存
  18          
  19          void datatosamedoor(uchar commandone,uchar commandtwo);  //发送数据给分机或从主从门口机 而不需要应答的
  20          void copystoretotemp(void); //把缓冲区的数据临时保存起来
  21          void copystoretotxf(void); //把缓冲区的数据临时保存的数据送到发送缓冲区
  22          
  23          sbit mRxd=P3^0;
  24          sbit mFRxd=P3^3;
  25          sbit mRs485F=P1^2;
  26          sbit mRs485G=P1^3;
  27          
  28          
  29          /**********************************************/
  30          
  31          /*
  32          void delays1ms(void)
  33          {
  34           uchar i;
  35           for(i=0;i<=150;i++);
  36          }
  37          */
  38          void copystoretotemp(void) //把缓冲区的数据临时保存起来
  39          {
  40   1      uchar xdata i;
  41   1      	for(i=0;i<14;i++)
  42   1      		TempTx_buffer[i]=TxF_buffer[i];
  43   1      }
  44          void copystoretotxf(void) //把缓冲区的数据临时保存的数据送到发送缓冲区
  45          {
  46   1      uchar xdata i;
  47   1      	for(i=0;i<14;i++)
  48   1      		TxF_buffer[i]=TempTx_buffer[i];
  49   1      }
  50          void delays3ms(void)
  51          {
  52   1       uint i;
  53   1       for(i=0;i<=500;i++);
  54   1      }
  55          
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 2   

  56          void RSdelays10ms(void)
  57          {
  58   1       uint i;
  59   1       for(i=0;i<=2000;i++);
  60   1      }
  61          
  62          void delays60ms(void)
  63          {
  64   1        uchar j;
  65   1        uint i;
  66   1        for(j=0;j<3;j++)
  67   1         for(i=0;i<=4000;i++);
  68   1      }
  69          
  70          /**********************************************/
  71          void testrx(void)          /*检测到RX变低延时后发*/
  72          {
  73   1       if(!mRxd)
  74   1         {
  75   2          delays60ms();
  76   2          Rxlowtime=0;
  77   2          Rxlow_bit=1;
  78   2         }
  79   1      }
  80          void  detectbusSTA()  //检测总线状态
  81          {
  82   1       uchar m,n=0;
  83   1      
  84   1       for(n=0;n<=50;n++)  //第一次检测
  85   1         {
  86   2          watchdog();
  87   2          testrx();
  88   2         }
  89   1       if(secdooraddr==0x0a)
  90   1           m=0;
  91   1       else 
  92   1           m=secdooraddr;
  93   1       for(;m>0;m--)  //根据门口机的地址进行延时
  94   1             //delays1ms();
  95   1             delays3ms();
  96   1      
  97   1       for(n=0;n<=50;n++)  //第二次检测
  98   1         {
  99   2          watchdog();
 100   2          testrx();
 101   2         }
 102   1         
 103   1       
 104   1      
 105   1      }
 106           /**********************************************/
 107          void testFrx(void)          /*检测到RX变低延时后发*/
 108          {
 109   1       if((RxFrun_bit==1)||(RxF_count!=0))
 110   1         {
 111   2          delays60ms();
 112   2          Rxlowtime=0;
 113   2          Rxlow_bit=1;
 114   2         }
 115   1      
 116   1      }
 117          
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 3   

 118          void  detectFbusSTA()  //检测分机总线状态
 119          {
 120   1      
 121   1       uchar m,n=0;
 122   1       for(;n<60;n++)
 123   1       {
 124   2         watchdog();
 125   2         testFrx();
 126   2       }
 127   1      
 128   1       if(secdooraddr==0x0a)
 129   1           m=0;
 130   1       else 
 131   1           m=secdooraddr;
 132   1       for(;m>0;m--)  //根据门口机的地址进行延时
 133   1             //delays1ms();
 134   1             delays3ms();
 135   1      
 136   1       for(n=0;n<=50;n++)  //第二次检测
 137   1         {
 138   2          watchdog();
 139   2          testFrx();
 140   2         }
 141   1      
 142   1       
 143   1      }
 144          /**********************************************/
 145          void Ftxstart(void)
 146          {
 147   1       #if SENDISHIGH            //1 RS485 SEND ENABLE IS HIGH 
               {
               mRs485F=1;
               mRs485G=0;
               }
               #else          //0为11.0592, RS485enable  is high(receive)
 153   1       {
 154   2       mRs485F=0;
 155   2       mRs485G=1;
 156   2       }
 157   1       #endif
 158   1       
 159   1       TxF_bit=1;
 160   1       TxF_count=0;
 161   1       txselect_bit=1;
 162   1       SBUF=SENDSTART;
 163   1       TxF_sum=SENDSTART;
 164   1      }
 165          /**********************************************/
 166          void Gtxstart(void)
 167          {
 168   1       #if SENDISHIGH            //1 RS485 SEND ENABLE IS HIGH 
               {
               mRs485F=0;
               mRs485G=1;
               }
               #else          //0为11.0592, RS485enable  is high(receive)
 174   1       {
 175   2       mRs485F=1;
 176   2       mRs485G=0;
 177   2       }
 178   1       #endif
 179   1       
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 4   

 180   1       Tx_bit=1;
 181   1       Tx_count=0;
 182   1       txselect_bit=0;
 183   1       SBUF=DSENDSTART;
 184   1       Tx_sum=DSENDSTART;
 185   1      }
 186          /***********************************************/
 187          bit Frsprogarm(uchar txdata)       /*有数据要求发到分机,填好数据,*/
 188          {
 189   1       uchar i;
 190   1       uchar j;
 191   1        //delays60ms();
 192   1       // detectFbusSTA();  //检测分机总线状态
 193   1        j=randdata;              /*随机数,以便和其它机通讯错开时间*/
 194   1       txdata=txdata;
 195   1       innersendwaitBIT=1;   //发送数据计时
 196   1       innersendwaitTimeCnt=0;
 197   1       haveDOORWORKDATA=0;
 198   1       for(;;)
 199   1        {
 200   2         
 201   2         if(RxFrun_bit==1)
 202   2           {
 203   3             delays60ms();
 204   3             watchdog();
 205   3           }
 206   2         
 207   2         if((innercallDATA==1)&&(((TxF_buffer[0]==MAINCALL)|(TxF_buffer[0]==CENCALL)|(TxF_buffer[0]==DDOORCALL))
             -))
 208   2           {
 209   3            for(i=0;i<15;i++)
 210   3              {
 211   4                 delays60ms();
 212   4                 watchdog();
 213   4                 if(EnWork_bit==1)
 214   4                  break;
 215   4              }
 216   3           }
 217   2         if(EnWork_bit==1)
 218   2         	{
 219   3         	
 220   3         	if(TxF_buffer[0]==NEEDTOUSELINE)
 221   3         		{
 222   4         		if(lineuseNUM!=secdooraddr)
 223   4      			break;
 224   4      			
 225   4         		}		
 226   3         	}
 227   2         if(innersendwaitTimeCnt>SENDWAITTIMEOUT)  
 228   2              return NO;
 229   2         
 230   2         if((!Tx_bit)&&(!TxF_bit)&&(!RxFrun_bit)&&(j==0))
 231   2          {    
 232   3                  Ftxstart();
 233   3                  return YES;
 234   3              
 235   3          }
 236   2         if(j==0)
 237   2           j=30;
 238   2         j--;   
 239   2         nop();
 240   2         watchdog();
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 5   

 241   2        }
 242   1       return NO;
 243   1      }
 244          /***********************************************/
 245          bit Grsprogarm(uchar txgcommand)       /*有数据要求发到管理机,填好数据,*/
 246          { 
 247   1       uchar i,j;
 248   1       
 249   1       j=randdata;              /*随机数,以便和其它机通讯错开时间*/
 250   1       
 251   1       //delays60ms(); 
 252   1       //detectbusSTA(); 

⌨️ 快捷键说明

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