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

📄 conrol.lst

📁 dsp与PCI之间的HPI通信的原理电路图
💻 LST
字号:
C51 COMPILER V7.05   CONROL                                                                09/27/2007 11:17:01 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE CONROL
OBJECT MODULE PLACED IN CONROL.OBJ
COMPILER INVOKED BY: C:\silabs\IDEfiles\C51\BIN\C51.exe CONROL.C DB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF CONROL.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          //通信9个字节,前3个字节为帧头,均为0xff;第四个字节为距离,a路占高4位
   2          //bc路占低4位;第五个字节位速度a路占高4位,bc路占低4位;第六个字节为A路衰减量;
   3          //第7个字节为B路衰减量;第8个字节为c路衰减量;第9个字节为控制开关信号,8位分别为
   4          //* * * * 相参开关,c路开关,b路开关,a路开关,其中1为开,0为关
   5          //系统采用15M晶振,每100ms更新一次距离延时,每秒钟更新10次对应速度分别0,100m/s
   6          //200m/s,300m/s,400m/s,500m/s,所以每100ms应该更新的距离分别为0m,10m,20m,30m
   7          //40m,50m。15M的晶振一个脉冲对应的距离是10m。所以0m,10m,20m,30m
   8          //40m,50m对应的脉冲改变量分别为0,1个,2个,3个,4个,5个。
   9          //
  10          //
  11          //
  12          //
  13          //
  14          #include <C8051F020.h>
  15          #include <absacc.h>
  16          #include <stdio.h>
  17          #include <intrins.h>
  18          #define uchar unsigned char
  19          #define uint unsigned int
  20          #define a_dis_com XBYTE[0x0FFF]
  21          #define a_updata_com XBYTE[0x1FFF]
  22          #define bc_dis_com XBYTE[0x2FFF]
  23          #define bc_updata_com XBYTE[0x3FFF]
  24          #define a_bc_v_com XBYTE[0x4FFF]
  25          #define a_att_com XBYTE[0x5FFF]
  26          #define b_att_com XBYTE[0x6FFF]
  27          #define c_att_com XBYTE[0x7FFF]
  28          #define on_off_com XBYTE[0X8FFF]
  29          bit  flag_a;
  30          bit flag_bc;
  31          
  32          uint code distance[]={1500,2000,5000,8000,15000,18000,21000,24000,27000,30000,32000};
  33          uchar count_interrupt=0;
  34          uchar count_receive_data;
  35          uchar receive_data[9];
  36          uchar a_dis,bc_dis;
  37          uint a_conversion_data,bc_conversion_data;
  38          uint save_a_inital_distance,save_bc_inital_distance;
  39          uchar hex_h,hex_l;
  40          uchar a_velocity,bc_velocity;
  41          void dec_hex(uint x)
  42          {hex_h=x/0xff;
  43   1       hex_l=x%0xff;
  44   1       
  45   1      }
  46          void config_mcu (void) 
  47          {
  48   1      //----------------------------------------------------------------
  49   1              //看门狗配置
  50   1                      WDTCN = 0x07;   // Watchdog Timer Control Register
  51   1                      WDTCN = 0xde;   // 禁止看门狗
  52   1              WDTCN = 0xAD;
  53   1              // Configure the XBRn Registers
  54   1                      XBR0 = 0x04;    // XBAR0: Initial Reset Value串口0使能
C51 COMPILER V7.05   CONROL                                                                09/27/2007 11:17:01 PAGE 2   

  55   1                      XBR1 = 0x00;    // XBAR1: Initial Reset Value
  56   1                      XBR2 = 0xC0;    // XBAR2: Initial Reset Value弱上拉全局禁止     
  57   1              P0MDOUT = 0xff; // Output configuration for P0 
  58   1              P1MDOUT = 0xff; // Output configuration for P1 
  59   1              P2MDOUT = 0xff; // Output configuration for P2 
  60   1              P3MDOUT = 0xff; // Output configuration for P3 
  61   1              P74OUT = 0xff;  // Output configuration for P4-7
  62   1              P1MDIN = 0xFF;  // Input configuration for P1
  63   1                      EMI0CF = 0x3f;                  // EMIF ACTIVE ON p4-p7非复用movx指令访问外部ram
  64   1                      }
  65          //-------------------------------------------------------------------------
  66          void SYSCLK_Init (void)
  67          {
  68   1         int i;                              /*延时计数器*/
  69   1      
  70   1         OSCXCN = 0x67;                      /*打开外部晶体振荡器*/
  71   1         for (i=0; i < 256; i++) ;           /*延时*/
  72   1      
  73   1         while (!(OSCXCN & 0x80)) ;          /*查询外部晶体是否稳定起振*/
  74   1      
  75   1         OSCICN = 0x08;                      /*用外部晶体作为系统时钟,并禁止时钟丢失检测*/
  76   1      }
  77          //--------------------------------------------------------------------------
  78          void UART0_Init (void)
  79          {
  80   1         SCON0   = 0x50;                     /*SCON0:模式1,8位UART,时能RX*/
  81   1         TMOD    = 0x20;                     /*TMOD: 定时器工作再模式2, 8位重载*/
  82   1         TH1=0xfa;                                             //波特率设置
  83   1         TL1=0xfa;                           /*设置定时1用作波特率的重载值*/
  84   1         TR1    = 1;                         /*开定时器1*/
  85   1         CKCON  = 0x00;                      /*定时器1用系统时钟作12分频为它的时基,定时器0用系统时钟的12分频作为
             -时钟,定时器2使用系统时钟的12分频作为时钟*/
  86   1         PCON  = 0x80;                      /*SMOD00 = 1*/
  87   1      }
  88          
  89          //---------------------------------------------------------------------------------
  90          void ComTx(uchar x){
  91   1         SBUF0=x;
  92   1        while(TI0==0);
  93   1        TI0=0;
  94   1      }
  95          //-------------------------------------------------------------------------------------
  96                  void output_control_paramater(uint  a_distance_data,uint bc_distance_data,uchar a_bc_v_data     ,uchar a_att_
             -data,
  97                                                                            uchar b_att_data,uchar c_att_data,uchar on_off_data)
  98                  {dec_hex(a_distance_data);
  99   1              a_dis_com=hex_l;
 100   1              a_dis_com=hex_h;
 101   1              a_updata_com=0x00;
 102   1              dec_hex(bc_distance_data);
 103   1              bc_dis_com=hex_l;
 104   1              bc_dis_com=hex_h;
 105   1              bc_updata_com=0x00;
 106   1              a_bc_v_com=a_bc_v_data  ;
 107   1              a_att_com=a_att_data;
 108   1              b_att_com=b_att_data;
 109   1          c_att_com=c_att_data;
 110   1              on_off_com=on_off_data;
 111   1              }
 112          //-------------------------------------------------------------------------------------
 113                  void main(void)
 114          {   
C51 COMPILER V7.05   CONROL                                                                09/27/2007 11:17:01 PAGE 3   

 115   1      
 116   1              uchar crc,i;
 117   1              crc=0;
 118   1              config_mcu();
 119   1              SYSCLK_Init();
 120   1              UART0_Init();
 121   1              output_control_paramater(0X00,0X00,0X00,0X00,0X00,0X00,0x00);//A,B,C路关闭
 122   1              count_receive_data=0;
 123   1              receive_data[9]=(0,0,0,0,0,0,0,0,0);
 124   1              TL0=0xdf;       //定时器0定时60ms
 125   1              TH0=0x01;
 126   1              T2CON=T2CON & 0XF0;//
 127   1              EA=1;//使能总中断
 128   1              ES0=1;//使能串口0中断
 129   1              ET0=1;//使能定时器0中断
 130   1              ET2=1;//使能定时器2中断
 131   1      
 132   1              //ComTx(0x30);
 133   1      while(1)
 134   1         { do 
 135   2         { if (count_receive_data>=1) 
 136   3      //TR0=1;
 137   3              ;
 138   3               }
 139   2          while(count_receive_data<9);
 140   2                  EA=0;
 141   2                  TR0=0;
 142   2                  TL0=0xdf;//定时器0定时20ms
 143   2                  TH0=0x01;
 144   2                      TL2=0x77;       //定时器2定时50ms
 145   2                      TH2=0xec;
 146   2                      RCAP2L=0x77;
 147   2                      RCAP2H=0xec;
 148   2                      bc_dis=receive_data[3]&0x0f;//为转换BC路距离,可直接查表
 149   2                      a_dis=receive_data[3]>>4;//为转换后A路距离,可直接查表
 150   2                      a_velocity=(receive_data[4]>>4);//为转换后A路速度,
 151   2                      if (a_velocity>=8)
 152   2                      flag_a=1;
 153   2                      else
 154   2                      flag_a=0;
 155   2                      a_velocity=a_velocity&0x07;//去掉符号位
 156   2                      bc_velocity=(receive_data[4]&0x0f);//为转换后BC路速度,
 157   2                      if (bc_velocity>=8)
 158   2                      flag_bc=1;
 159   2                      else 
 160   2                      flag_bc=0;
 161   2                      bc_velocity=bc_velocity&0x07;//去掉符号位
 162   2                      a_conversion_data=distance[a_dis];//转换成A路应延时的脉冲数
 163   2                      bc_conversion_data=distance[bc_dis];//转换成BC路应延时的脉冲数
 164   2                      save_a_inital_distance=a_conversion_data;
 165   2                      save_bc_inital_distance=bc_conversion_data;
 166   2              
 167   2                      if( receive_data[0]==0xff && receive_data[1]==0xff && receive_data[2]==0xff)
 168   2                              {for (i=3;i<9;i++)
 169   3                                   crc=crc+receive_data[i];
 170   3                                       ComTx(crc);
 171   3                                       crc=0;
 172   3                                       output_control_paramater(a_conversion_data,bc_conversion_data,receive_data[4],receive_data[5],receive
             -_data[6],receive_data[7],receive_data[8]);
 173   3                              TR2=1;
 174   3                              }                
 175   2                              count_receive_data=0;
C51 COMPILER V7.05   CONROL                                                                09/27/2007 11:17:01 PAGE 4   

 176   2                              receive_data[9]=(0,0,0,0,0,0,0,0,0);
 177   2                              EA=1;
 178   2               }
 179   1      }
 180          
 181           /*串口中断0子程序*/
 182          void UART0_ISR (void) interrupt 4
 183          {
 184   1              if(!TI0)                        //是发送中断还是接收中断
 185   1              {   receive_data[count_receive_data]=SBUF0;
 186   2                      count_receive_data++;
 187   2                      RI0 = 0;                        /*清接收标志位*/
 188   2              }
 189   1              TI0 = 0;                                /*清发送标志位*/
 190   1      
 191   1      }
 192           /*定时器0中断服务程序*/
 193          void Timer0_Isr(void) interrupt 1
 194          {               
 195   1                      TR0=0;
 196   1                      TL0=0xdf;//定时器0定时20ms
 197   1                  TH0=0x01;
 198   1                      count_receive_data=0;
 199   1                      receive_data[9]=(0,0,0,0,0,0,0,0,0);
 200   1      }
 201          void Timer2_ISR (void) interrupt 5
 202          {
 203   1              TF2=0;                  //清除中断标志
 204   1              count_interrupt++;//中断次数加1
 205   1      if (count_interrupt==2) //100ms定时到
 206   1          {count_interrupt=0;
 207   2              //A路转换后的距离换算   
 208   2                      if(!flag_a)
 209   2              a_conversion_data=a_conversion_data-a_velocity;
 210   2              else 
 211   2              a_conversion_data=a_conversion_data+a_velocity;
 212   2              //BC路转换后的距离换算  
 213   2                      if(!flag_bc)
 214   2              bc_conversion_data=bc_conversion_data-bc_velocity;
 215   2              else 
 216   2              bc_conversion_data=bc_conversion_data+bc_velocity;
 217   2                      output_control_paramater(a_conversion_data,bc_conversion_data,receive_data[4],receive_data[5],receive_da
             -ta[6],receive_data[7],receive_data[8]);
 218   2              if ((a_conversion_data>36000 )||(a_conversion_data<5)) 
 219   2              a_conversion_data=save_a_inital_distance;       
 220   2              if ((bc_conversion_data>=36000) ||(bc_conversion_data<=5)) 
 221   2              bc_conversion_data=save_bc_inital_distance;
 222   2              }
 223   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    711    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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