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

📄 sart.lst

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 181   1          } */
 182   1          else if (amr_stat == STAT_SYNC1) {//3
 183   2            amr_frame[amr_count++] = c;         //收数据
 184   2            if (amr_count == 6) {
 185   3              amr_len = c + 1;     //收取长度值
 186   3              amr_count = 0;
 187   3              amr_stat = STAT_DATA;           //  uart_sendchar(c);
 188   3            }
 189   2          }
 190   1          else if (amr_stat == STAT_DATA) {  //5
 191   2          amr_frame[6+amr_count++] = c;
 192   2          if (amr_count == amr_len) {
 193   3            amr_count = 0;
 194   3            amr_stat = STAT_PREAMBLE; //1
 195   3                if (c == FRAME_END){  //16h   uart_sendchar(c);
 196   4            // uart_sendblock(amr_frame,amr_len+6);
 197   4              return 1;               
 198   4            }
 199   3          }   
 200   2        }   
 201   1                 
 202   1        return 0;
 203   1      
 204   1      }
 205          
 206          /*=============================================================================*/
 207          
 208          // Transmit a single byte
 209          void uart_sendchar(uchar chr)
 210          {
 211   1      
 212   1      //      unsigned char i , a;
 213   1              /* Disable serial interrupts for a while */
 214   1              ES   = 0;
 215   1              /* 
 216   1               * Clear the Transmit Interrupt flag to prepare the serial port
 217   1               * to send a new character.
 218   1              */
 219   1      
 220   1              TI = 0;
 221   1              ACC=chr;                  /*从缓冲中发送串行口数据*/
 222   1              TB8=P;                          /*---------------------  *偶校验位设置*/
 223   1              SBUF=ACC;       
 224   1      
 225   1              /* Wait until tx buffer is empty */
 226   1              while (TI != 1) {;}
 227   1      
 228   1              // Clear it
 229   1              TI = 0; 
 230   1      
 231   1              /* Enable serial interrupts*/
 232   1          ES = 1;
 233   1       
 234   1      }
 235          /*=============================================================================*/
 236          
 237          
 238          void uart_sendblock(uchar buf[], int len)
 239          {
 240   1        uchar i;
C51 COMPILER V7.09   SART                                                                  01/12/2007 09:29:49 PAGE 5   

 241   1      
 242   1        for (i = 0; i < len; i++)   uart_sendchar(buf[i]);   
 243   1      
 244   1      }
 245          /*=============================================================================*/
 246          
 247          // Sync transmit/receiving
 248          /*=============================================================================*/
 249          
 250          void sync_sendchar(uchar c)
 251          {
 252   1        int i;
 253   1        EA = 0;
 254   1        SDATA = 1;
 255   1        while (D_RDY == 0);      // wait for D_RDY to become high
 256   1        D_SYNC = 0;
 257   1      
 258   1        for (i = 0; i < 8; i++) { 
 259   2              SDATA=(c & 0x01) ? 1:0 ;  // put data bit
 260   2              SCLK=0;
 261   2              SCLK=0;
 262   2              SCLK=0;
 263   2              SCLK=0;
 264   2      
 265   2              c >>= 1;        // next bit
 266   2              SCLK=1;
 267   2              SCLK=1;
 268   2              SCLK=1;
 269   2              SCLK=1;
 270   2        }
 271   1      
 272   1        D_SYNC = 1;
 273   1      
 274   1        SDATA=1;
 275   1       EA = 1;
 276   1      }
 277          
 278          /*=============================================================================*/
 279          
 280          int sync_recved()
 281          {
 282   1        return (RX_RDY == 0) ? 1 : 0;
 283   1      }
 284          
 285          /*=============================================================================*/
 286          
 287          int sync_data_ready()
 288          {
 289   1        return (D_RDY == 0) ? 1 : 0;
 290   1      }
 291          
 292          /*=============================================================================*/
 293          
 294          // Call this function only when sync_recved() returns 1
 295          int sync_getchar(void)
 296          {
 297   1        
 298   1        uchar l;
 299   1        int c;
 300   1        EA = 0;
 301   1        D_SYNC = 1;
 302   1         
C51 COMPILER V7.09   SART                                                                  01/12/2007 09:29:49 PAGE 6   

 303   1      //  while(D_RDY!=0);
 304   1      
 305   1        for  (l = 0; l < 8; l++) {
 306   2              SCLK = 0;
 307   2              SCLK = 0;
 308   2              SCLK = 0;
 309   2              SCLK = 0;
 310   2              SCLK = 0;
 311   2              SCLK = 0;
 312   2              SCLK = 0;
 313   2              SCLK = 0;
 314   2              SCLK = 0;
 315   2              SCLK = 0;
 316   2              c >>= 1;
 317   2              if (SDATA) c |= 0x80;
 318   2              else c &= 0x7f;
 319   2              SCLK = 1;
 320   2              SCLK = 1;
 321   2              SCLK = 1;
 322   2              SCLK = 1; 
 323   2        } 
 324   1        D_SYNC = 1;   
 325   1        EA = 1;               
 326   1        return c;
 327   1      
 328   1      }
 329          /*=============================================================================*/
 330          
 331          
 332          int sync_getblock(uchar buf[], int len)
 333          {
 334   1        unsigned char i;
 335   1      
 336   1        for (i = 0; i < len; i++) {
 337   2          if (sync_data_ready())  buf[i] = sync_getchar();
 338   2              else return -1;
 339   2        }
 340   1      
 341   1        return len;
 342   1      
 343   1      }
 344          
 345          
 346          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
 347          
 348          
 349          !!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
 350                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 351          
 352          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
 353          
 354          
 355          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    522    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   IDATA SIZE       =     49    ----
C51 COMPILER V7.09   SART                                                                  01/12/2007 09:29:49 PAGE 7   

   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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