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

📄 clk_deal.lst

📁 单片机程序代码,经过很详细的测试.呵呵,硬件相关.
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CLK_DEAL
OBJECT MODULE PLACED IN clk_deal.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE clk_deal.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS DEBUG OBJECTEXTEND

line level    source

   1          #include <REG54.H>
   2          #include "rc7820.h"
   3          #include "rc7860.h"
   4          #include "f2rc7820.h"
   5          #include "cmd_para_save.h"
   6          
   7          extern unsigned char f2rc7820_rd(unsigned char f2addr) large reentrant;
   8          extern void SetResRdyTbl(unsigned char prio) large reentrant;
   9          extern unsigned char GetResRdyTbl(unsigned char prio) large reentrant;
  10          extern unsigned long int xdata commandid;                              //表示命令代码的变量
  11          extern unsigned char xdata tx_buf[];
  12          extern unsigned char xdata tx_buf_pointer;
  13          extern bit tx_done;
  14          
  15          unsigned char xdata clksource_reg = 0;                  //保存强制转换的时钟源
  16          unsigned char xdata clk_force = 0xFF;                           //强制转换的时钟源代号
  17          unsigned char xdata clk_source = 8;                                     //主用时钟源代号寄存器,缺省自由振荡
  18          unsigned char xdata clkmode_reg = 0;                    //保存是强制模式还是自动运行
  19          unsigned char xdata clkarray_flg = 0;                           //是否填写优先级表标志位
  20          unsigned char xdata clk_prio = 8;                                       //时钟优先级标志
  21          unsigned int xdata clkprio_array[7] = {0,0,0,0,0,0,0};                                                  //时钟优先级恢复计数
  22          unsigned char xdata clkarray[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};    //时钟优先级存储数组
  23          unsigned char xdata clk_check_flg[2] = {0,0};
  24          //时钟频偏检测标志数组,第一位表示光口号,第二位表示计数值
  25          unsigned char xdata clk_frequence_stat;
  26          extern unsigned char xdata start_flg[4];
  27          
  28          unsigned char set_clock_source(struct cmd_para_save *set_clock){
  29   1      //C10强制配置时钟源函数
  30   1      unsigned char xdata clksource;
  31   1      unsigned char xdata return_value;
  32   1      unsigned char xdata flg;
  33   1      
  34   1              commandid = 0x00433130;
  35   1              clksource = set_clock -> force_clock_source;
  36   1      
  37   1              switch (clksource){
  38   2                      case 0: flg = Reflos_reg1 & 0x80;          //查看7820中T11即光口0线路时钟
  39   2                                      if (flg == 0){
  40   3                                              //S_reg = 0x81;                  //配置时钟源为光口0线路时钟
  41   3                                              clksource_reg = 0x81;
  42   3                                              clk_force = 0;
  43   3                                              return_value = 0;
  44   3                                      }
  45   2                                      else {
  46   3                                              clksource_reg = 0;
  47   3                                              clk_force = 0xFF;
  48   3                                              return_value = 2;
  49   3                                      }
  50   2                                      break;
  51   2                      case 1: flg = Reflos_reg1 & 0x40;          //查看T12即光口1线路时钟
  52   2                                      if (flg == 0){
  53   3                                              //S_reg = 0x82;                  //配置时钟源为光口1线路时钟
  54   3                                              clksource_reg = 0x82;
  55   3                                              clk_force = 1;
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 2   

  56   3                                              return_value = 0;
  57   3                                      }
  58   2                                      else {
  59   3                                              clksource_reg = 0;
  60   3                                              clk_force = 0xFF;
  61   3                                              return_value = 2;
  62   3                                      }
  63   2                                      break;
  64   2                      case 2: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x80;      //查看T16即光口2线路时钟
  65   2                                      if (flg == 0 & start_flg[0] == 0){
  66   3                                              //S_reg = 0x86;                  //配置时钟源为光口2线路时钟
  67   3                                              clksource_reg = 0x86;
  68   3                                              clk_force = 2;
  69   3                                              return_value = 0;
  70   3                                      }
  71   2                                      else {
  72   3                                              clksource_reg = 0;
  73   3                                              clk_force = 0xFF;
  74   3                                              return_value = 2;
  75   3                                      }
  76   2                                      break;
  77   2                      case 3: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x40;      //查看T17即光口3线路时钟
  78   2                                      if (flg == 0 & start_flg[0] == 0){
  79   3                                              //S_reg = 0x87;                  //配置时钟源为光口3线路时钟
  80   3                                              clksource_reg = 0x87;
  81   3                                              clk_force = 3;
  82   3                                              return_value = 0;
  83   3                                      }
  84   2                                      else {
  85   3                                              clksource_reg = 0;
  86   3                                              clk_force = 0xFF;
  87   3                                              return_value = 2;
  88   3                                      }
  89   2                                      break;
  90   2                      case 7: flg = Reflos_reg2 & 0x08;          //查看7820中T21即第二外时钟源
  91   2                                      if (flg == 0){                                     
  92   3                                              //S_reg = 0x89;                //配置时钟源为第二外时钟
  93   3                                              clksource_reg = 0x89;
  94   3                                              clk_force = 7;
  95   3                                              return_value = 0;
  96   3                                      }
  97   2                                      else {                                                          //时钟源丢失
  98   3                                              clksource_reg = 0;
  99   3                                              clk_force = 0xFF;
 100   3                                              return_value = 2;                   //返回值2执行失败
 101   3                                      }
 102   2                                      break;
 103   2                      case 6: flg = Reflos_reg2 & 0x02;           //查看7820中T31即第一外时钟源
 104   2                                      if (flg == 0){
 105   3                                              //S_reg = 0x8B;                 //配置时钟源为第一外时钟源
 106   3                                              clksource_reg = 0x8B;
 107   3                                              clk_force = 6;
 108   3                                              return_value = 0;
 109   3                                      }
 110   2                                      else {
 111   3                                              clksource_reg = 0;
 112   3                                              clk_force = 0xFF;
 113   3                                              return_value = 2;
 114   3                                      }
 115   2                                      break;
 116   2                      case 8: //S_reg = 0xC0;                      //配置时钟源自由振荡模式
 117   2                                      clksource_reg = 0xC0;
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 3   

 118   2                                      clk_force = 8;
 119   2                                      return_value = 0;                  //返回值0执行成功
 120   2                                      break;
 121   2                      case 9: //S_reg = 0xE0;                      //配置时钟源为保持模式
 122   2                                      clksource_reg = 0xE0;
 123   2                                      clk_force = 9;
 124   2                                      return_value = 0;                 //返回值0执行成功
 125   2                                      break;
 126   2                      default:clksource_reg = 0;
 127   2                                      clk_force = 0xFF;
 128   2                                      return_value = 2;                 //非法配置返回值2不成功
 129   2                              break;
 130   2              }
 131   1              if (!GetResRdyTbl(1))
 132   1                      SetResRdyTbl(1); 
 133   1              return (return_value);
 134   1      }
 135          
 136          
 137          unsigned char set_clock_mode(struct cmd_para_save *set_clock){
 138   1      //C11设置时钟源运行模式
 139   1      unsigned char xdata clk_mode;
 140   1      unsigned char xdata return_value;
 141   1      
 142   1              clk_mode = set_clock -> clock_source_mode;
 143   1              commandid = 0x00433131;
 144   1              clkmode_reg = clk_mode;                        //save clk mode
 145   1      
 146   1              if (clkmode_reg){                              //if clk run force mode
 147   2                      if (clksource_reg != 0){                   //if clk mode no error
 148   3                              S_reg = clksource_reg;                 //run clk mode
 149   3                              clk_source = clk_force;
 150   3                              return_value = 0;                      
 151   3                              }
 152   2                      else return_value = 2;
 153   2              }
 154   1              else return_value = 0;                         //clk run auto mode
 155   1               if (!GetResRdyTbl(1))
 156   1                      SetResRdyTbl(1); 
 157   1               return (return_value);
 158   1      }
 159          
 160          unsigned char set_clock_prio(struct cmd_para_save *set_clock){
 161   1      //C12配置时钟源优先级表
 162   1      unsigned char xdata clksource;
 163   1      unsigned char xdata clkprio;
 164   1      
 165   1              commandid = 0x00433132;
 166   1              clksource = set_clock -> clock_source;
 167   1              clkprio = set_clock -> clock_prio;
 168   1      
 169   1              if (clkprio >=0 & clkprio <= 7){
 170   2                      clkarray[clkprio] = clksource;
 171   2                      clkarray_flg = 1;
 172   2                      if (!GetResRdyTbl(1))
 173   2                              SetResRdyTbl(1);
 174   2                      return(0);
 175   2              }
 176   1              else {
 177   2              if (!GetResRdyTbl(1))
 178   2                      SetResRdyTbl(1);
 179   2                      return(2);
C51 COMPILER V7.50   CLK_DEAL                                                              03/10/2006 16:35:31 PAGE 4   

 180   2              }
 181   1      }
 182          
 183          
 184          
 185          unsigned char get_clock_working(void){
 186   1      //C13取得当前输入时钟源状态
 187   1      unsigned char xdata return_value;
 188   1      unsigned char xdata clkport;
 189   1      
 190   1      //      clkport = S_reg & 0x60;
 191   1              if (Mode_reg == 0x02){
 192   2                      return_value = 9;
 193   2              }
 194   1              else if(Mode_reg == 0x03){
 195   2                      return_value = 8;
 196   2              }
 197   1              else {
 198   2                      clkport = S_reg & 0x0F;
 199   2                      switch (clkport){
 200   3                      case 1: return_value = 0;
 201   3                                      break;
 202   3                      case 2: return_value = 1;
 203   3                                      break;

⌨️ 快捷键说明

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