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

📄 test.lst

📁 遥控灯系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   TEST                                                                  12/14/2006 14:53:22 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN .\test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\test.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include  <stdio.h>
   2          #include <../philips/reg51f.h>
   3          #include " sja1000.h "
   4          
   5          #define HIGH    1
   6          #define LOW     0
   7          
   8          unsigned char Count = 0;
   9          unsigned char Count1= 0;                //慢闪
  10          unsigned char FramID[4] ;   //帧头
  11          unsigned char TXDData[8];       //发送的数据
  12          unsigned char RXDData[8] ;      //接收的数据
  13          
  14          unsigned char a[18]={0x55,0xaa,0x00,0x12,0x08,0x08,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,
             -0x00};
  15          long  int  aa,bb;
  16          long  int  chk;
  17          
  18          
  19          sbit  mute=P2^5;                        //消音
  20          sbit  bell=P1^1;        //外接电铃
  21          sbit  ha=P2^6;          //蜂鸣器
  22          
  23          
  24          //串行输入信号控制脚
  25          sbit DATp=P1^5;
  26          sbit CLKp=P1^4;
  27          sbit CTLp=P1^3;
  28          unsigned char  bdata tData[2];           /* 数据暂存区 */
  29          
  30          sbit   as1=tData[0]^0;                                  //按钮状态
  31          sbit   as2=tData[0]^1;
  32          sbit   as3=tData[0]^2;
  33          sbit   as4=tData[0]^3;
  34          sbit   as5=tData[0]^4;
  35          sbit   as6=tData[0]^5;
  36          sbit   as7=tData[0]^6;
  37          sbit   as8=tData[0]^7;
  38          
  39          
  40          sbit   ls1=tData[1]^7;                          //灯的状态
  41          sbit   ls2=tData[1]^6;
  42          sbit   ls3=tData[1]^5;
  43          sbit   ls4=tData[1]^4;
  44          sbit   ls5=tData[1]^3;
  45          sbit   ls6=tData[1]^2;
  46          sbit   ls7=tData[1]^1;
  47          sbit   ls8=tData[1]^0;
  48          
  49          
  50          
  51          
  52          sbit   led1=P3^3;     //指示灯状态
  53          sbit   led2=P3^4;
  54          sbit   led3=P3^5;
C51 COMPILER V7.06   TEST                                                                  12/14/2006 14:53:22 PAGE 2   

  55          sbit   led4=P2^0;
  56          sbit   led5=P2^1;
  57          sbit   led6=P2^2;
  58          sbit   led7=P2^3;
  59          sbit   led8=P2^4;
  60          
  61          //若要改变发送顺序,则可以改变diss,astate,lstate的字节顺序
  62          unsigned char  bdata  diss;     //消音状态位
  63          sbit    dis1=diss^7;
  64          sbit    dis2=diss^6;
  65          sbit    dis3=diss^5;
  66          sbit    dis4=diss^4;
  67          sbit    dis5=diss^3;
  68          sbit    dis6=diss^2;
  69          sbit    dis7=diss^1;
  70          sbit    dis8=diss^0;
  71          
  72          
  73          
  74          unsigned char bdata astate;    //按钮延时判断状态位
  75          sbit   ass1=astate^7;                                   
  76          sbit   ass2=astate^6;
  77          sbit   ass3=astate^5;
  78          sbit   ass4=astate^4;
  79          sbit   ass5=astate^3;
  80          sbit   ass6=astate^2;
  81          sbit   ass7=astate^1;
  82          sbit   ass8=astate^0;
  83          
  84          unsigned char bdata lstate;    //指示灯延时判断状态位
  85          sbit   lss1=lstate^7;                                   
  86          sbit   lss2=lstate^6;
  87          sbit   lss3=lstate^5;
  88          sbit   lss4=lstate^4;
  89          sbit   lss5=lstate^3;
  90          sbit   lss6=lstate^2;
  91          sbit   lss7=lstate^1;
  92          sbit   lss8=lstate^0;
  93          
  94          
  95          unsigned char bdata DataIn;    /* 串行数据输入 */
  96          sbit IN2 = DataIn^0;
  97          
  98          bit  flash,flashs;
  99          
 100          void InitSJA( void );           //SJA初始化
 101          void SEND( void );                      //发送函数
 102          void InitSYS( void );           //系统初始化
 103          
 104          
 105          
 106          void ReadData(void)                                             //串行读数据
 107          {
 108   1         unsigned char i,j;
 109   1         CLKp = HIGH;                        /* 时钟线置高 */ 
 110   1         DATp = HIGH;                        /* 数据线置高 */ 
 111   1         CTLp = HIGH;                        /* 采样数据   */ 
 112   1         CTLp = LOW;  
 113   1         CLKp = LOW;                         /* 时钟线置低 */   
 114   1         for(j=0;j<2;j++)
 115   1         {
 116   2            for(i=0;i<8;i++)
C51 COMPILER V7.06   TEST                                                                  12/14/2006 14:53:22 PAGE 3   

 117   2            {  DataIn = DataIn<<1;           /* 数据读入 一共8个  */     
 118   3               IN2 = DATp; 
 119   3               CLKp = HIGH;                  /* 时钟翻转          */       
 120   3               CLKp = LOW;                               
 121   3            }      
 122   2            tData[j] = DataIn;               /* 把数据存入暂存区  */ 
 123   2         }
 124   1      }
 125          
 126          
 127          
 128          
 129          
 130          
 131          
 132          
 133          
 134          
 135          void delay(unsigned int i)
 136          {
 137   1           while(i--);    
 138   1      }
 139          
 140          //SJA1000初始化
 141          void InitSJA( void )
 142          {
 143   1              PX0 = PRIORITY_HIGH; /*设CAN 优先中断 */
 144   1              IT0 = INTLEVELACT;      /*中断0 为电平激活 */
 145   1         EA = DISABLE;                        /*所有中断禁能 */
 146   1         SJAIntEn = DISABLE; /*来自SJA100 的外部中断禁能 */
 147   1              while((ModeControlReg & RM_RR_Bit)==ClrByte)
 148   1          {  
 149   2                /*其他位而不是复位模式/请求位没有改变 */
 150   2                 ModeControlReg = ModeControlReg|RM_RR_Bit;
 151   2          }                             
 152   1      
 153   1          ClockDivideReg = CANMode_Bit|CLKOff_Bit;/*PeliCan,同时关闭时钟*/
 154   1      
 155   1              
 156   1               /*定义验收代码和屏蔽 */
 157   1          AcceptCode0Reg = 0xaa;                      
 158   1          AcceptCode1Reg = 0xaa;
 159   1          AcceptCode2Reg = 0xaa;
 160   1          AcceptCode3Reg = 0xaa;
 161   1          AccepMask0Reg  = 0x00;
 162   1          AccepMask1Reg  = 0x00;
 163   1          AccepMask2Reg  = 0x00;
 164   1          AccepMask3Reg  = 0x00;
 165   1                                                                                                                              
 166   1              /*位频率250Kbit/s@16MHz 总线被采样一次 */
 167   1         BusTiming0Reg= 0x01;
 168   1         BusTiming1Reg= 0x1C;                                                                                  
 169   1         /*配置CAN 输出TX0 悬空TX1 推挽正常输出模式 */
 170   1         OutControlReg = Tx1Float|Tx0PshPull|NormalMode;
 171   1      
 172   1           do   /*等待直到RM_RR_Bit 清零 */
 173   1          {   
 174   2                        ModeControlReg = AFM_Bit; //进入工作模式,选择单个验收滤波器32位
 175   2      
 176   2           }while((ModeControlReg&RM_RR_Bit) != ClrByte);
 177   1      
 178   1          InterruptEnReg = RIE_Bit|BEIE_Bit|DOIE_Bit; /*SJA1000 的接收中断使能 */
C51 COMPILER V7.06   TEST                                                                  12/14/2006 14:53:22 PAGE 4   

 179   1                                                    /*SJA1000 的错误中断使能 */
 180   1                                                    /*SJA1000 的溢出中断使能 */
 181   1          
 182   1          SJAIntEn = ENABLE; /*SJA1000 的外部中断使能 */
 183   1          EA = ENABLE; /*所有中断使能 */
 184   1      }
 185          
 186          //数据发送
 187          void SEND(void)
 188          {       
 189   1      if(StatusReg&TBS_Bit==TBS_Bit);   //发送缓冲区释放
 190   1        {
 191   2                      TxFramInFo =    0x88;                   /* 扩展帧 */                                                                                                                                                            
 192   2                      TxBuffer1  =    FramID[0];                                      //帧ID
 193   2                      TxBuffer2  =    FramID[1];
 194   2                      TxBuffer3  =    FramID[2];
 195   2                      TxBuffer4  =    FramID[3];
 196   2                      TxBuffer5  =    TXDData[0];                                     //发送的数据
 197   2                      TxBuffer6  =    TXDData[1];
 198   2                      TxBuffer7  =    TXDData[2];
 199   2                      TxBuffer8  =    TXDData[3];
 200   2                      TxBuffer9  =    TXDData[4];
 201   2                      TxBuffer10 =    TXDData[5];
 202   2                      TxBuffer11 =    TXDData[6];
 203   2                      TxBuffer12 =    TXDData[7];
 204   2                      CommandReg =    TR_Bit;                                         /*置位发送请求位 */
 205   2              }                       
 206   1      }
 207          
 208          
 209          
 210          
 211          void   senddata(Uchar word)
 212          {           P=0;
 213   1             ACC=0;
 214   1                       ACC=word;
 215   1                       TB8=!P;
 216   1                       SBUF=ACC;
 217   1                       while(TI==0);
 218   1                       TI=0;
 219   1      
 220   1      
 221   1      }
 222          
 223          
 224          
 225          
 226          
 227          void send_422(void)
 228          {
 229   1              aa=0;
 230   1              bb=0;
 231   1         chk=0;
 232   1              a[12]=0xff-lstate;
 233   1              a[13]=0xff-astate;
 234   1              aa=a[0]+a[2]+a[4]+a[6]+a[8]+a[10]+a[12]+a[16];
 235   1              bb=a[1]+a[3]+a[5]+a[7]+a[9]+a[11]+a[13]+a[17];
 236   1         chk=(aa<<8)+bb;
 237   1      
 238   1              chk = (chk >> 16) + (chk & 0xffff);
 239   1              chk+=(chk>>16);
 240   1              a[15]=~chk;
C51 COMPILER V7.06   TEST                                                                  12/14/2006 14:53:22 PAGE 5   

 241   1              a[14]=~(chk>>8);
 242   1      
 243   1      
 244   1      senddata(a[0]);
 245   1      senddata(a[1]);
 246   1      senddata(a[2]);
 247   1      senddata(a[3]);
 248   1      senddata(a[4]);
 249   1      senddata(a[5]);
 250   1      senddata(a[6]);
 251   1      senddata(a[7]);
 252   1      senddata(a[8]);
 253   1      senddata(a[9]);
 254   1      senddata(a[10]);
 255   1      senddata(a[11]);
 256   1      senddata(a[12]);
 257   1      senddata(a[13]);
 258   1      senddata(a[14]);
 259   1      senddata(a[15]);
 260   1      senddata(a[16]);
 261   1      senddata(a[17]);
 262   1      
 263   1      }        
 264                  
 265          
 266          
 267          
 268          
 269          
 270          
 271          
 272          
 273          
 274          
 275          
 276          
 277          
 278          //系统初始化
 279          
 280          void  InitSYS(void)
 281          {       delay(1000);
 282   1              TMOD=0x21;                      // 定时器1工作在模式2,自动再装入的8位计数器
 283   1                                      // 定时器0工作在模式1,16位计数器
 284   1              ET0=1;                          // 开定时器0中断
 285   1                      TR0=1;                          // 启动定时器0
 286   1                      EXTRAMCtrReg=EXTRAM;    /* 低地址(0~128) 使用外部RAM     */
 287   1              EA=1;
 288   1      
 289   1      SCON=0xD0;      //方式3
 290   1      
 291   1      TH1=0xf7;
 292   1      TR1=1;
 293   1      TI=1;
 294   1                                      
 295   1      PCON|=0X80;
 296   1      

⌨️ 快捷键说明

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