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

📄 zengzp.lst

📁 通信方式是485方式。通过485来控制一组灯的开关。
💻 LST
字号:
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE ZENGZP
OBJECT MODULE PLACED IN H:\MYPROJ~1\485_LI~1\ZENGZP.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE H:\MYPROJ~1\485_LI~1\ZENGZP.C DB SB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          /*曾智平文档
   2          传送字节37
   3          修改者机号和801一样 ,前置字符和801一样
   4          
   5          0x9e+01+00+机号+命令+37+。。。。。。。。。。。。。。
   6          开灯命令0xaa+时间1+时间2+   时间为0表示常开,否则按照时间计算关灯时间
   7          开灯命令0xbb+                  直接关灯
   8          
   9          
  10          */
  11          
  12          
  13          
  14          
  15          #include <reg54.h>
  16          #include <stdlib.h>
  17          #include <absacc.h>
  18          #include "string.h"
  19          #include "stdio.h"
  20          
  21          #define uchar unsigned char
  22          #define uint  unsigned int
  23          #define ulong unsigned long
  24          #define true 1
  25          #define false 255
  26          
  27          
  28          
  29          
  30          
  31          
  32          
  33          uchar idata usart0_flag;
  34          uchar idata usart0_receive_counter;
  35          uchar  idata usart0_rt_temp_memory[39];  //37,,改称10
  36          
  37          
  38          uchar idata door_low_serial;
  39          
  40          sbit lock_1=P4^1;
  41          sbit lock_2=P4^0;
  42          
  43          
  44          uint led_delay_time=0;
  45          
  46          
  47          sbit or485=P2^6;
  48          
  49          
  50          sbit buzzer_led=P3^5;
  51          sbit led=P3^4;
  52          void delay(uchar x)
  53           {
  54   1        uchar i;
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 2   

  55   1        while(x--)
  56   1         {
  57   2          for(i=0;i<114;i++)
  58   2            {;
  59   3            }
  60   2         }
  61   1       }
  62          
  63          open_led()
  64          {
  65   1       //buzzer_led=0;
  66   1       lock_1=0;
  67   1       lock_2=0;
  68   1      
  69   1      }
  70          
  71          close_led()
  72          {
  73   1      // buzzer_led=1;
  74   1       lock_1=1;
  75   1       lock_2=1;
  76   1      
  77   1      }
  78          void clr_wdt(void) 
  79          {
  80   1      WDT54=0x87|0x04;
  81   1       
  82   1      }
  83          
  84          
  85          void wdt_init(void)
  86          {
  87   1       WDT54=0x87;
  88   1      }
  89          
  90          
  91          
  92          
  93          void buzzer_on()
  94          {
  95   1        //buzzer_led=0;
  96   1        led=1;
  97   1      
  98   1      }
  99          void buzzer_off()
 100          {
 101   1       led=0;
 102   1      // buzzer_led=1;
 103   1      
 104   1      }
 105          
 106          
 107          void buzzer_drive(void)
 108          {
 109   1        buzzer_on();
 110   1        delay(100);
 111   1        buzzer_off();
 112   1      }
 113          
 114          
 115          
 116          
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 3   

 117          
 118          
 119          
 120          
 121          
 122          void timer0_init(void)
 123          {
 124   1      TMOD=0x21;
 125   1      TL0=0xfd;
 126   1      TH0=0xdb;  //
 127   1      TF0=0;
 128   1      TR0=1;
 129   1      }
 130          
 131          //中断方式接受字符
 132          //获得的数据标准格式0x9e+kind+high_serial+low_serial+command+byte_num+有效数据.
 133          //获得这样的字符串后,才能接收数据
 134          serial() interrupt 4
 135          {
 136   1      uchar i;
 137   1      uint temp_add;
 138   1      bit flag_value;
 139   1      
 140   1      while(!RI);
 141   1      RI=0;
 142   1      
 143   1      usart0_rt_temp_memory[usart0_receive_counter]=SBUF;
 144   1      
 145   1      flag_value=1;
 146   1      switch(usart0_receive_counter)
 147   1      { //2,3的0,0是设定序列号的标记
 148   2        case 0:
 149   2        if(usart0_rt_temp_memory[0]!=0x9e)
 150   2         {flag_value=0;}//没有找到有效开始字节,,退出去
 151   2        usart0_rt_temp_memory[5]=6;//这个字节是要接受的数据个数,置初值不能小于5;
 152   2        break;
 153   2      
 154   2        case 1:  //有了起始位,判断接下来的四位
 155   2        if(usart0_rt_temp_memory[1]==0x9e)//起始位重复,,屏蔽掉
 156   2           {usart0_receive_counter--;usart0_rt_temp_memory[5]=6;}
 157   2        else if((usart0_rt_temp_memory[1]!=1)&(usart0_rt_temp_memory[1]!=0))
 158   2             {flag_value=0;}//不是考勤的标示位
 159   2        else{}
 160   2        break;
 161   2      
 162   2        case 2:
 163   2        if(usart0_rt_temp_memory[2]!=0)
 164   2         {flag_value=0;}//不是本机的标示位
 165   2        break;
 166   2      
 167   2        case 3:
 168   2        if((usart0_rt_temp_memory[3]!=door_low_serial)&(usart0_rt_temp_memory[3]!=0))
 169   2        {flag_value=0;}//不是本机的标示位
 170   2        break;
 171   2      
 172   2        default:
 173   2      
 174   2        break;
 175   2      }
 176   1       if(!flag_value)
 177   1         {usart0_receive_counter=0;return;}
 178   1      
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 4   

 179   1      
 180   1      usart0_receive_counter++;
 181   1      timer0_init();//初始化定时时间,10ms自动屏蔽
 182   1      
 183   1      
 184   1      if(usart0_receive_counter==37)
 185   1         {
 186   2           /*
 187   2           temp_add=0;//判断检验码
 188   2           for(i=0;i<usart0_rt_temp_memory[5]-3;i++)
 189   2      	   {
 190   2      	     temp_add=temp_add+usart0_rt_temp_memory[i];
 191   2      	   }
 192   2           if(temp_add!=(usart0_rt_temp_memory[usart0_rt_temp_memory[5]-3]*0x100+usart0_rt_temp_memory[usart0_rt
             -_temp_memory[5]-2]))
 193   2      	   {usart0_receive_counter=0;return;}
 194   2           else if(usart0_rt_temp_memory[usart0_rt_temp_memory[5]-1]!=0x9d)
 195   2                 {usart0_receive_counter=0;return;}
 196   2           else
 197   2           */
 198   2      
 199   2             usart0_flag=true;usart0_receive_counter=0;return;
 200   2         }
 201   1      
 202   1      }
*** WARNING C280 IN LINE 136 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 137 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: 'temp_add': unreferenced local variable
 203          
 204          
 205          
 206          
 207           void or485_o(void)
 208          {
 209   1       //P4=P4|0x2;
 210   1       or485=1;
 211   1      
 212   1      }
 213          
 214          
 215           void or485_r(void)//  低电位
 216          {
 217   1       //P4=P4&0x0d;
 218   1       or485=0;
 219   1      
 220   1      
 221   1      }
 222          
 223          
 224          
 225          
 226          
 227          
 228          
 229          
 230          
 231          
 232          
 233          
 234          void USART0_Transmit_byte(uchar byte)
 235          {
 236   1          uchar y;
 237   1          y=50;
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 5   

 238   1         TB8=0;
 239   1         or485_o();//or_485=1;
 240   1         TI=0;
 241   1              SBUF=byte;
 242   1              while(TI==0);
 243   1              TI=0;
 244   1              while(y--)
 245   1              {;}
 246   1              or485_r();//or_485=0;
 247   1      
 248   1      }
 249          
 250          
 251          void Usart_Init( void )//7--57600; 23--19200; 47--9600;
 252          {
 253   1       TMOD=0X20;
 254   1       TH1=0Xfd;
 255   1       TL1=0Xfd;
 256   1       PCON=0X80; //8 19200
 257   1       TR1=1;
 258   1       SCON=0X58;  //方式1。。
 259   1       IE=0X90;
 260   1      }
 261          
 262          
 263          
 264          
 265          
 266          
 267          void send_data_to_computer(uchar num_data)
 268          {
 269   1       uchar i;
 270   1       uint  idata temp_16;
 271   1      
 272   1       ES=0;
 273   1      
 274   1       usart0_rt_temp_memory[0]=0x8e;  //起始符
 275   1       usart0_rt_temp_memory[1]=1;// board type
 276   1       usart0_rt_temp_memory[2]=0;//board address l
 277   1       usart0_rt_temp_memory[3]=door_low_serial;//board address  h
 278   1       //usart0_rt_temp_memory[4]=不管
 279   1       usart0_rt_temp_memory[5]=num_data;
 280   1       temp_16=0;
 281   1       for(i=0;i<num_data-3;i++)
 282   1        {
 283   2          temp_16=temp_16+usart0_rt_temp_memory[i];
 284   2        }
 285   1       usart0_rt_temp_memory[num_data-3]=temp_16%0x100;
 286   1       usart0_rt_temp_memory[num_data-2]=temp_16/0x100;
 287   1       usart0_rt_temp_memory[num_data-1]=0x9d;  //结尾符
 288   1       for(i=0;i<num_data;i++)
 289   1        {
 290   2          USART0_Transmit_byte(usart0_rt_temp_memory[i]);//send_buff_data[i]);
 291   2        }
 292   1      
 293   1      ES=1;
 294   1      return;
 295   1      
 296   1      }
 297          
 298          
 299          
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 6   

 300          
 301          
 302          
 303          
 304          
 305          
 306          
 307          
 308          
 309          void cpu_init(void)
 310          {
 311   1      
 312   1      EA=0;
 313   1      
 314   1      P0=0xff;
 315   1      P1=0xff;
 316   1      P2=0xff;
 317   1      P4=0xff;
 318   1      
 319   1      
 320   1      IE0=0;
 321   1      IE1=0;
 322   1      EX1=1;
 323   1      EX0=1;
 324   1      IT0=1;
 325   1      IT1=1;
 326   1      IP=0X05;
 327   1      TR0=0;
 328   1      TF0=0;
 329   1      //p4口的操作
 330   1      
 331   1      }
 332          
 333          
 334          
 335          
 336          
 337          
 338          
 339          
 340          main (void)
 341          {
 342   1      uchar i;
 343   1      uchar timer_counter_10ms;
 344   1      
 345   1      uchar  second_counter=0;
 346   1      
 347   1      usart0_flag=false;
 348   1      delay(200);
 349   1      delay(200);
 350   1      
 351   1      cpu_init();
 352   1      Usart_Init();
 353   1      timer0_init();
 354   1      EA=0;
 355   1      
 356   1      buzzer_drive();
 357   1      
 358   1      
 359   1      or485_r();//  低电位//置485于接收状态
 360   1      
 361   1      //启动看门狗
C51 COMPILER V6.12  ZENGZP                                                                 03/25/2009 00:15:20 PAGE 7   

 362   1      wdt_init();
 363   1      
 364   1      
 365   1      //AUXR=3;//关闭ale信号
 366   1      
 367   1      door_low_serial=000001;
 368   1      
 369   1      
 370   1      
 371   1      
 372   1      while(1)
 373   1      {
 374   2      EA=1;
 375   2      ES=1;
 376   2      
 377   2      clr_wdt();
 378   2      
 379   2      
 380   2      
 381   2      
 382   2      if(TF0)
 383   2       {
 384   3         TF0=0;timer_counter_10ms++;timer0_init();
 385   3          //判断接受一位数据在规定的时间里面有没有完成
 386   3          //10ms时间内,接收完有效数据,,否则放弃
 387   3         if(usart0_receive_counter!=0)
 388   3            {usart0_receive_counter=0;}
 389   3          /*判断打卡的情况*/
 390   3      
 391   3      
 392   3       }
 393   2      
 394   2      
 395   2      
 396   2      
 397   2      
 398   2      
 399   2      if(timer_counter_10ms>100) //1S时间到 //定时100ms判断是不是外中断,还是串口中断结束

⌨️ 快捷键说明

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