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

📄 kjj19-mn.lst

📁 这是一个模拟分站的C51源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KJJ19_MN
OBJECT MODULE PLACED IN KJJ19-mn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KJJ19-mn.c DEBUG OBJECTEXTEND

line level    source

   1          /************************************************************************************
   2          *                                       NOTICE:                                                                         
   3          *        NAME:            KJF19-MN                                                                      
   4          *        USE:           模拟监控仪(无线)
   5          *        VERSION:       V6.8                                                                                                                                                                            
   6          *        START DATE:    28/8/2006                                                                                       
   7          *        END DATE:         31/10/2006                                                                           
   8          *        MCU:                  STC89C52RD                                                               
   9          *        CRYSTAL:          11.0592MHz
  10          *        COMPANY:        镇江中煤电子有限公司
  11          *        WRITER:          胡峰平
  12          *        FUNCTION DESCRIPTION:                          
  13          ************************************************************************************/
  14          #include <At89x52.h>
  15          #include<absacc.h>  //引用外部数据存储器XBYTE
  16          #include<intrins.h>  //_nop_()引用
  17          //AT89S52 pins define
  18          #define uchar unsigned char
  19          #define uint unsigned int
  20          
  21          #define SIOAB P2_0     //Z85C30 A/B 路选择
  22          #define SIODC P2_1     //Z85C30 D/C 数据/控制选择            
  23          #define SIOCS P2_4      //Z85C30片选
  24          #define SIOWR P2_2     //Z85C30写信号
  25          #define SIORD P2_3     //Z85C30读信号
  26          
  27          
  28          #define l_red P1_6     //红发光管
  29          #define l_green P1_7   //绿发光管
  30          #define l_x P1_0       //实验灯
  31          
  32          sfr ISP_DATA=0xe2;    //内部EEPROM寄存器定义
  33          sfr ISP_ADDRH=0xe3;
  34          sfr ISP_ADDRL=0xe4;
  35          sfr ISP_CMD=0xe5;
  36          sfr ISP_TRIG=0xe6;
  37          sfr ISP_CONTR=0xe7;
  38          sfr WDT_CONTR=0xe1;   //看门狗
  39          
  40          uchar r_count;        //红灯计数器
  41          
  42          uchar data RIbuf[12];  //串口接收缓存
  43          uchar rsum;           //已接收数     
  44          uchar rljh;           //接收累加和 
  45          
  46          uchar data TIbuf[10]; //串口发送缓存
  47          uchar tsum;           //已发送数
  48          
  49          uchar siobuf[15];      //SIO接收数据缓存
  50          uchar siojsgs;         //SIO数据个数
  51          uchar data siofs[8];   //sio发送数据缓存
  52          uchar siofsgs;         //SIO发送数据个数
  53          
  54          uchar data wxfzh[8];       //设定无线挂接分站最大八个
  55          uchar idata wxfzcs[32];     //无线分站的参数
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 2   

  56          uchar idata fzsj[64]; //8个分站的数据
  57          uchar wxh;            //下发分站数组序号,对无线
  58          uchar ddfz;           //断电分站
  59          uchar ddcs;           //断电参数
  60          uchar data dzzs;           //巡检地址总数,对SDLC总线
  61          uchar xjxh;                       //当前巡检序号 ,对SDLC
  62          
  63          uchar RIYC;            //接收延迟
  64          uchar xjfzh;           //巡检分站号
  65          uchar mm5s;            //5秒延迟
  66          uchar mm3s;            //3秒延迟
  67          uchar mm20ms;          //20-30毫秒延迟
  68          uchar bmoks;       //用于Z85C30发送计数
  69          uchar bms;         //发送延迟数
  70          uchar qtzlh;       //其他指令号
  71          
  72          bit bmok;         //用于Z85C30发送标记
  73          bit fsok;         //发送OK
  74          bit Z85C30zdok;   //Z85C30接收中断OK
  75          bit RIBJ;         //串口接收标记
  76          bit TIBJ;         //串口发送标记
  77          bit RIOK;         //接收完成了
  78          bit fzhybj;       //分站询问回答标记
  79          bit qtzlbj;       //地面下发的其他指令标记
  80          bit CKZY;         //串口占用标志
  81          bit qtzlbj;       //其他指令标记
  82          
  83          void Z85C30_KZJCQ(uchar KZJCQH,uchar KZSJ);   //控制寄存器设置
  84          void Z85C30_WR0(uchar KSJ);    //WR0设置  
  85          uchar Z85C30_JCQRD(uchar JCQH);               //寄存器读取
  86          void system_init(void);      //系统初始化
  87          void Z85C30_init(void);      //Z85C30设置
  88          void Z85C30_init_A(void);  //Z85C30设置快速
  89          void delay_ms(unsigned int delay_counter); //毫秒延迟
  90          void sytx(void);    //SIO回答
  91          void HY232(uchar ml);      //串口输出
  92          void cl232(void);     //串口数据处理
  93          void eeprom_w(uchar addrh,uchar addrl,uchar sj);//EEPROM写操作
  94          uchar eeprom_r(uchar addrh,uchar addrl);        //EEPROM读操作
  95          void eeprom_clr(uchar addrh,uchar addrl);       //EEPROM清空
  96          
  97          void main(void);       //主程序
  98          void szzd(void);       //TO中断
  99          void int0_51(void);    //外中断0,Z85C30中断
 100          void int_232(void);      //串口中断
 101          
 102          
 103          /***********************************************************************************
 104          * function:         main()                                                                              
 105          * use:                                          
 106          * input parameter:       none                                                           
 107          * output parameter: none                                                
 108          ***********************************************************************************/
 109           void main(void)
 110          { 
 111   1        uchar m; 
 112   1        P1=0XFF;
 113   1        P0=0XFF;
 114   1        P2=0XFF;
 115   1        P3=0XFF;
 116   1        SP=0Xf0;   //225字节开始
 117   1         l_red=0;
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 3   

 118   1        delay_ms(100);
 119   1         wxh=0;
 120   1         xjxh=0;
 121   1         CKZY=0;
 122   1         qtzlbj=0;
 123   1        WDT_CONTR=0x37;   //看门狗设置9秒一次的溢出
 124   1        
 125   1        for(m=0;m<32;m++)       //读取8个分站的参数
 126   1         {
 127   2           wxfzcs[m]=eeprom_r(0x20,m);
 128   2                }
 129   1        for(m=32;m<40;m++) //读8个分站的地址
 130   1              {
 131   2            wxfzh[m-32]=eeprom_r(0x20,m);
 132   2                      }
 133   1              dzzs=eeprom_r(0x20,40); //读取设置分站数
 134   1          m=eeprom_r(0x20,41); //读取设置分站数反码
 135   1              if(m+dzzs!=0xFF)
 136   1              dzzs=0;
 137   1         Z85C30_init();   //Z85C30初始化
 138   1         system_init();         //系统初始化
 139   1      
 140   1        RIOK=0;
 141   1        rsum=0;
 142   1        RIbuf[0]=0;
 143   1        Z85C30zdok=0;
 144   1        fzhybj=0;
 145   1        siojsgs=0;
 146   1        
 147   1        
 148   1        while(1)
 149   1        {
 150   2        
 151   2        
 152   2         if(RIOK==1)   //**********如果有串口数据包进来***********
 153   2              {
 154   3            
 155   3                cl232();   //串口数据处理
 156   3                RIOK=0;
 157   3            rsum=0;
 158   3      
 159   3              
 160   3                       }       // if(RIOK==1) 
 161   2               
 162   2         
 163   2       if(Z85C30zdok==1) //***********如果有Z85C30数据包接收到,需要回答数据*********   
 164   2         {
 165   3           for(m=0;m<dzzs;m++)
 166   3                 {
 167   4                  if(wxfzh[m]==siobuf[0])    //如果有设置相同的点号 
 168   4                       {
 169   5                         xjxh=m;        //确定SDLC巡检的序号
 170   5                         if(siojsgs==15)          //给计算机回应监控仪数据 
 171   5                      sytx();
 172   5                         break;
 173   5                         }
 174   4                        if(siojsgs==4)   //控制命令
 175   4                         {
 176   5                          qtzlh=5;
 177   5                              qtzlbj=1;
 178   5                              break;
 179   5                               }
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 4   

 180   4                        if(siojsgs==7)   //总清命令
 181   4                              {
 182   5                               qtzlh=6;
 183   5                               qtzlbj=1;
 184   5                               break;
 185   5                                }
 186   4                       }
 187   3                       
 188   3               Z85C30zdok=0;  
 189   3               Z85C30_init_A();
 190   3                  }
 191   2       if(qtzlbj==1)  //*******************其他指令标记*****************
 192   2         {
 193   3          if(CKZY==0)    //检查是否串口空闲60ms了
 194   3                {
 195   4                 delay_ms(100);
 196   4                 if(CKZY==0)
 197   4                   {
 198   5                    qtzlbj=0;
 199   5                         HY232(qtzlh);
 200   5                         }
 201   4                      }
 202   3               }
 203   2                   }  //while(1)
 204   1       
 205   1            } //main
 206          /*********************************************************************************
 207          * function:         system_init()                                                         
 208          * use:             系统初始化           
 209          * input parameter:  none                                                        
 210          * output parameter: none                                                
 211          *********************************************************************************/
 212          void system_init(void)
 213          {        
 214   1          delay_ms(10);
 215   1      
 216   1          TMOD=0x21;      //T0方式1,T1方式2
 217   1          PCON=0x80;
 218   1          SCON=0x50;          /* 串口方式1, 8-bit UART,接收允许 */
 219   1          TH0=0xdc;
 220   1          TL0=0x00;
 221   1          TH1=0xfd;      /* TH1:   19.2k bps  @ 11.0592MHz   */
 222   1          TL1=0xfd;
 223   1          IT0=1;     //外中断0下降沿触发
 224   1          IP=0x02;    //T0高优先级 
 225   1          IE=0x93;   //允许外部中断0,T0中断,串口中断
 226   1          TR0=1;    //记数T0
 227   1          TR1=1;  
 228   1      } 
 229               
 230           /***************************************************************************
 231           实验通信-模拟分站与主接口的通信,回答接口的询问
 232           ******************************************/
 233           void sytx(void)   
 234           {
 235   1        uchar data i,b;
 236   1        WDT_CONTR=0x37;   //看门狗设置9秒一次的溢出
 237   1        SIOAB=1; //设置控制字A路接收 
 238   1        Z85C30_KZJCQ(0x03,0xCC); //WR3   RX不允许接收
 239   1        SIOAB=0;          //B路设置    
 240   1        Z85C30_KZJCQ(0x05,0x69);  //WR5 发送8位字符,发送器开放,发送CRC开放
 241   1        Z85C30_WR0(0x80);  //WR0 TX_CRC复位
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 5   

 242   1        Z85C30_KZJCQ(0x0A,0x80);  //WR10 TX_CRC预置为FF
 243   1        
 244   1          SIODC=1;          //发送上位机地址
 245   1          P0=0x00;          //接口地址
 246   1          SIOCS=0;SIOWR=0;
 247   1          _nop_();
 248   1          SIOWR=1; SIOCS=1;SIODC=0;  
 249   1          Z85C30_WR0(0xC0);    //发送欠载/信息结束位复位 
 250   1      
 251   1           i=xjxh*8;
 252   1               for (b=0;b<8;b++)//把要回答给接口的数据提取
 253   1                  {
 254   2                        siofs[b]=fzsj[i];
 255   2                        i=i+1;
 256   2                        }
 257   1      
 258   1           for (b=1;b<9;b++)                    //上传接口8个字节,
 259   1                  {
 260   2                    i=0;
 261   2                        bmoks=0;
 262   2                        bms=3;
 263   2                        bmok=0;    //用于SIO发送成功标记
 264   2                 while(i!=0x04)
 265   2                    {   
 266   3                      if (bmok==1)
 267   3                      goto willx1; 
 268   3                      i=Z85C30_JCQRD(0X00);  //读取寄存器中的数据   
 269   3                      i=i&0x04;         
 270   3                      }
 271   2                    goto pp1;   
 272   2               willx1:  break;
 273   2                pp1:
 274   2      
 275   2                  P0=siofs[b];   //参数数据  
 276   2                  SIODC=1;      //发送数据
 277   2                   SIOCS=1;SIOWR=1;   
 278   2                   SIOCS=0;SIOWR=0;
 279   2                   _nop_();
 280   2                   SIOWR=1; SIOCS=1;

⌨️ 快捷键说明

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