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

📄 nobreakmod2.lst

📁 51单片机数据发射
💻 LST
字号:
C51 COMPILER V7.08   NOBREAKMOD2                                                           01/19/2007 18:36:44 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE NOBREAKMOD2
OBJECT MODULE PLACED IN nobreakmod2.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE nobreakmod2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          ////发射端模拟程序,9600波特率,每次发送 26byte数据。
   2          ////发送的数据以FFFE为起始端
   3          
   4          #include <reg52.h> //预处理文件里面定义了特殊寄存器名称如P1
   5          sbit P1_0 = P1^0;
   6          sbit P2_1 = P2^1;
   7          sbit P2_2 = P2^2;
   8          sbit P2_3 = P2^3;
   9          sbit P2_4 = P2^4;
  10          sbit P2_5 = P2^5;
  11          sbit P2_6 = P2^6;
  12          sbit P2_7 = P2^7;
  13          
  14          char s=0;
  15          
  16          typedef    unsigned char     uchar;   
  17          typedef    unsigned int      uint;    
  18          
  19          uint crc;                  // CRC16 码 
  20          
  21          //数据位从高到低时,CRC16/CC1TT校验
  22          uint crc16(unsigned char *ptr, unsigned char len) 
  23          { 
  24   1        unsigned char i; 
  25   1        while(len--!=0) 
  26   1        { 
  27   2          for(i=0x01;i!=0;i <<= 1) 
  28   2          { 
  29   3            if((crc&0x0001)!=0) {crc >>= 1; crc ^= 0x8408;} 
  30   3            else crc >>= 1; 
  31   3            if((*ptr&i)!=0) crc ^= 0x8408; 
  32   3          } 
  33   2            ptr++; 
  34   2        } 
  35   1        return(crc); 
  36   1      } 
  37          
  38          
  39          void delay()
  40          {
  41   1              TCON=0;
  42   1              TMOD = 0x01;  //模式设定为1
  43   1              TH0=0xDC;  //定时,2ms
  44   1              TL0=0x00;
  45   1              TR0=1;
  46   1              do{}while(!TF0); //等待计数器计数溢出,TF0 变为1; 
  47   1              TF0=0;
  48   1      }
  49          
  50          void main(void)
  51          {
  52   1              char temp;
  53   1              char crc1,crc2;//crc的高位和低位
  54   1          char crcbuff [22] = {'a','b','c','d','e','f','g','h','i','j',0x01,0x01,
  55   1                                                      0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x01};    //22byte数据
C51 COMPILER V7.08   NOBREAKMOD2                                                           01/19/2007 18:36:44 PAGE 2   

  56   1              char design[26];
  57   1              unsigned char a,b; //在C51 编程中因内存有限尽可能注意变量类型的使用
  58   1              uchar *ptr; 
  59   1              crc = 0;                // CRC  初值 
  60   1              ptr = crcbuff;              //  指向第一个 Byte 数据 
  61   1              crc = crc16(ptr,22);
  62   1              crc1=crc&0xFF;
  63   1              crc=(crc>>8);
  64   1              crc2=(crc&0xFF);
  65   1              design[0]=0xFF;design[1]=0xFE;
  66   1              design[24]=crc1;
  67   1              design[25]=crc2;
  68   1          for(a=0;a<=21;a++)
  69   1              design[a+2]=crcbuff[a];//定义数据
  70   1      
  71   1      
  72   1              P2_1=1;
  73   1              P2_2=1;
  74   1              P2_3=1;
  75   1              P2_4=0;
  76   1              P2_5=0;
  77   1              P2_6=0;
  78   1              P2_7=0;
  79   1      
  80   1      
  81   1              P1_0=0;   //端口的初始值为0
  82   1              TMOD = 0x02;   //计时模式为2
  83   1              IE=0; //禁止中断
  84   1          TCON=0;  //计数器清零
  85   1              TH0 = 0xA0; //计数器置初值 9600波特率
  86   1              TL0 = 0xA0;
  87   1              TR0 = 1; //启动计数器                   
  88   1              do
  89   1              {
  90   2                      for (b=0; b<26; b++)
  91   2                      {
  92   3                          temp=design[b];
  93   3                              for(a=0;a<8;a++)
  94   3                              {                                               
  95   4                                      s=((temp&0x80)!=0); // 读已定义的数据并写数据到P1_0口:最高位;
  96   4                                      temp<<=1;
  97   4                                      do{}while(!TF0); //等待计数器计数溢出                           
  98   4                                      P1_0=s;
  99   4                                      TF0=0;
 100   4                                      if(b==25&&a==7)   ////////////////发送最后一位!
 101   4                                      {
 102   5                                              do{}while(!TF0); //等待计数器计数溢出
 103   5                                              P1_0=0;
 104   5                                              TF0=0;
 105   5                                      }
 106   4                                      
 107   4                              }
 108   3                      }
 109   2              delay();  //在发送数据之间有一定延时
 110   2              TMOD = 0x02;  //计数器模式变回为2       
 111   2              TH0 = 0xA0; //计数器置初值 9600波特率
 112   2              TL0 = 0xA0;     
 113   2              TR0=1;     //开始计数   
 114   2              }while(1);
 115   1      }
 116          
 117          
C51 COMPILER V7.08   NOBREAKMOD2                                                           01/19/2007 18:36:44 PAGE 3   

 118          
 119          
 120          
 121          
 122          
 123          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    286    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      48
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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