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

📄 3200demo.lst

📁 这是北京福星晓程公司的PL3105电力载波通信程序
💻 LST
字号:
C51 COMPILER V6.02  3200DEMO                                                               12/10/2004 11:42:13 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE 3200DEMO
OBJECT MODULE PLACED IN C:\3200_DEMO\3200DEMO.OBJ
COMPILER INVOKED BY: C:\COMP51V6\C51.EXE C:\3200_DEMO\3200DEMO.C DB SB OE

stmt level    source

   1          /*******************************************************************************************
   2           *
   3           *  Copyright (c) 2004,北京福星晓程电子科技股份有限公司
   4           *
   5           *  All Rights Reserved
   6           *
   7           *
   8           *
   9           *  文件名称:3200DEMO.C
  10           *
  11           *  文件标识:存档
  12           *
  13           *  摘    要:单、复费率载波DEMO收发板程序
  14           *            1. 接收PC机串口下发的抄表命令并通过载波转发
  15           *            2. 接收载波返回的抄表应答命令并通过串口转发给PC机
  16           *            3. 不加跳线端子,适用于复费率 ; 4、5脚加跳线端子,适用于单费率
  17           *            4. CPU :PL3200
  18           *            5. 串口波特率:  2400BPS  无校验
  19           *            6. 复费率接收最长有效字节数:247 ; 单费率接收最长字节数:14
  20           *
  21           *
  22           *  当前版本:2.0(发布)
  23           *  作    者:魏  茂
  24           *  完成日期:2004年11月17日
  25           *  修改记录:修改串口转发部分的程序,另开一个com_buf,载波接收到数据以后,
  26           *            立即将接收到的数据转移到新开com_buf里,在串口转发时不关闭载波中断,
  27           *            直接使用com_buf。
  28           *
  29           *
  30           *
  31           *  取代版本:
  32           *  原作者  :
  33           *  完成日期:
  34           *
  35           *
  36          *******************************************************************************************/
  37          
  38          #include "PL3200.h"
  39          
  40          #define uchar unsigned char
  41          #define uint  unsigned int
  42          
  43          //I/O 口设置
  44          
  45          sbit   DFL_FFL = P1^1;                // 单—复费率转换判断标志脚
  46          sbit   rlamp   = P1^2;                // 接收指示灯
  47          sbit   tlamp   = P1^3;                // 发送指示灯
  48          
  49          // 全局变量设置
  50          uchar data     DFL_FFL_Sign;          // 单——复费率标识
  51          
  52          uchar  bdata   pl_data;               // 发送字节缓冲
  53          
  54          uchar  data    pl_len;                // 发送字节计数
  55          uchar  data    ti_len;                // 发送字节计数
C51 COMPILER V6.02  3200DEMO                                                               12/10/2004 11:42:13 PAGE 2   

  56          uchar  data    zbr_delay;             // 发送字节计数
  57          uchar  data    zbt_delay;             // 发送字节计数
  58          uchar  data    uart_delay;            // 发送字节计数
  59          uchar  data    max_rx ;               // 发送字节计数
  60          
  61          uchar  data    x,n;                   // x、n表示串口接收控制变量
  62          uchar  xdata   r[250];                // 串口接收缓冲区
  63          uchar  data    ystxd;                 // 延时时间变量
  64          uchar  data    Carrier_Rxd_Delay;     // 延时时间变量
  65          uchar  data    r_data;
  66          uchar  data    wdi;                   // 软狗变量
  67          uchar  data    r_len;                 // 接收字节个数变量
  68          uchar  data    r_len1;                // 接收字节个数变量
  69          uchar  data    dat;                   // 接收字节个数变量
  70          
  71          // 位变量
  72          bit    bdata   r_x;                   // 载波接收控制变量
  73          bit    bdata   plmrxd;                // 载波接收标志
  74          bit    bdata   plmtxd;                // 载波发送标志
  75          uchar  xdata   pl_buf[250];           // 载波接收/红外接收缓冲区
  76          uchar  xdata   com_buf[250];          // 载波接收/红外接收缓冲区
  77          
  78          
  79          /**************************************************************************************
  80           *
  81           * FUNCTION:    timeint0
  82           *
  83           * DESCRIPTION: 定时器0中断程序; 50 ms 发生一次中断,对延时变量进行减1处理
  84           *
  85           * PARAMETERS:  none
  86           *
  87           * RETURNED:    none
  88           *************************************************************************************/
  89          void  timeint0(void) interrupt 1
  90          {
  91   1         if  (ystxd!=0)
  92   1         {
  93   2            ystxd--;                       // 串口发送延时
  94   2         }
  95   1      
  96   1         if(Carrier_Rxd_Delay>0)
  97   1         {
  98   2            Carrier_Rxd_Delay--;
  99   2         }
 100   1         else
 101   1         {
 102   2            Carrier_Rxd_Delay=0;
 103   2            rlamp=1;
 104   2            r_x=0;
 105   2         }
 106   1      
 107   1         TH0=0x63;                         // 置定时器计数  50ms 中断一次( 12MHz )
 108   1         TL0=0xcc;
 109   1      
 110   1         if(wdi==0x9a)
 111   1         {
 112   2            WDT_RST=0xa1;                  // 清看门狗
 113   2            wdi=0;
 114   2         }
 115   1      }
 116          
 117          
C51 COMPILER V6.02  3200DEMO                                                               12/10/2004 11:42:13 PAGE 3   

 118          /**************************************************************************************
 119           *
 120           * FUNCTION:    pl_pro
 121           *
 122           * DESCRIPTION: 载波中断收、发程序
 123           *
 124           * PARAMETERS:
 125           *              in :  PLM_RS(PLM_RS=0  载波接收 ;  PLM_RS=1 载波发送)
 126           *
 127           *              out:  plmrxd=1 载波接收成功  ; com_buf[]  载波接收成功的数据
 128           *
 129           * RETURNED:    none
 130           *************************************************************************************/
 131          void  pl_pro(void) interrupt 7
 132          {                                             // 复费率载波处理
 133   1         uchar data i;
 134   1      
 135   1        SSC_ADR=0x00;                               //选择载波状态寄存器
 136   1        dat= SSC_DAT;
 137   1        if((dat&0x80)==0x0)
 138   1            return;
 139   1      
 140   1        if((dat&0x01)==1)                           //载波发送状态
 141   1        { // 载波发送
 142   2          if((pl_len<ti_len)&&(pl_len<240))
 143   2          {
 144   3             SSC_BUF=r[pl_len++];                  //发送下一个字节
 145   3          }
 146   2          else//((pl_len>=ti_len)||(pl_len>240))//发送字节字数限制,芯片自己会回到载波接收状态
 147   2          {  //发送完成
 148   3            plmtxd=0;                              // 清正在发送标志
 149   3      
 150   3            ti_len=0;
 151   3            pl_data=0;
 152   3      
 153   3            for(pl_len=0;pl_len<20;pl_len++)
 154   3            {
 155   4               r[pl_len]=0;
 156   4            }
 157   3            pl_len=0;
 158   3            tlamp=1;                                // 发送指示灯灭
 159   3          }
 160   2        }
 161   1        else
 162   1        { // 载波接收
 163   2          //if(plmrxd==1){return;}
 164   2          if((dat&0x04)==0x04)                //如果接收的是祯头标志
 165   2          {
 166   3      
 167   3            if(r_x==0)                        //如果处于等待接收状态
 168   3            {
 169   4               r_data=SSC_BUF;                //接收第一个字节,并准备接收后面的字节
 170   4               pl_buf[0]=r_data;
 171   4               r_len=1;
 172   4               r_len1 =60;
 173   4               r_x=1;
 174   4               rlamp=0;
 175   4      
 176   4               Carrier_Rxd_Delay=20;          // 最大接收延时时间为1S
 177   4            }
 178   3          }
 179   2          else
C51 COMPILER V6.02  3200DEMO                                                               12/10/2004 11:42:13 PAGE 4   

 180   2          {
 181   3            if(r_x==1)                          // 如果已经接收了祯头,继续接收后续字节
 182   3            {
 183   4              r_data=SSC_BUF;
 184   4              pl_buf[r_len]=r_data;
 185   4      
 186   4              if(r_len==0x04)                   // 接收到了载波字节个数
 187   4              {
 188   5                 r_len1=r_data+7;               // 加7的意思是3个地址码+1个控制码+1个长度码+2个校验码
 189   5      
 190   5                 if(r_len1>60)
 191   5                    r_len1=60;                  // 接收字节长度限制
 192   5              }
 193   4      
 194   4              r_len+=1;
 195   4      
 196   4              if(r_len>=r_len1)
 197   4              {
 198   5                 plmrxd=1;
 199   5                 rlamp=1;
 200   5                 r_x=0;
 201   5      
 202   5                 for( i=0 ; i<(r_len1+1) ; i++ )
 203   5                 {
 204   6                    com_buf[i]=pl_buf[i];
 205   6                 }
 206   5      
 207   5              }
 208   4            }
 209   3          }
 210   2        }
 211   1      }
 212          
 213          /**************************************************************************************
 214           *
 215           * FUNCTION:    initsys
 216           *
 217           * DESCRIPTION: 初始化设置函数,
 218           *              进行系统初始化设置
 219           *
 220           * PARAMETERS:  none
 221           *
 222           * RETURNED:    none
 223           *
 224           *************************************************************************************/
 225          void initsys(void)
 226          {  // 控制看门狗喂狗时间长度
 227   1        CKCON=0X3F;
 228   1        // 8位/16位运算模式选择位设置
 229   1        ALU_MOD=0;      // 设置成8位运算模式
 230   1        //载波通讯配置
 231   1        //************   3200的载波寄存器设置  **********//
 232   1        SSC_ADR=0x03;
 233   1        SSC_DAT=0xC0;
 234   1        
 235   1        SSC_ADR=0xFF;
 236   1        SSC_DAT=0xFF;
 237   1        SSC_ADR=0x02;
 238   1        SSC_DAT=0x1F;
 239   1        SSC_ADR=0xFF;
 240   1        SSC_DAT=0x00;
 241   1        
C51 COMPILER V6.02  3200DEMO                                                               12/10/2004 11:42:13 PAGE 5   

 242   1        //************   3200的载波寄存器设置  **********//
 243   1        EIE=0X01;       // (A9H 使能INT2中断(EX2=1)
 244   1        IT2=1;          // (C8H) 为边沿触发方式(IT2=1)

⌨️ 快捷键说明

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