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

📄 uart.lst

📁 TSL256源程序驱动!通过其IIC口采集环境光光强
💻 LST
📖 第 1 页 / 共 2 页
字号:
 151   2                      TI = 0;                                                                         // 清发送标志
 152   2      
 153   2                      if (uart_tlen!=0)                                                       // 发送未结束
 154   2                      {
 155   3                              SBUF = uart_buff[uart_dptr];                    // 发送数据
 156   3                              uart_dptr++;                                                    // 发送指针加1
 157   3                              uart_tlen--;                                                    // 发送长度减1
 158   3                      }
 159   2                      else                                                                            // 发送结束
 160   2                      {
 161   3                              uart_dptr = 0;                                                  // 重置发送指针
 162   3                              DRE = 0;                                                                // 发送结束, 设485为接收状态
 163   3                              LED = 1;                                                                // 关LED
 164   3                      }
 165   2              }
 166   1      }
 167          
 168          
 169          /*******************************************************************************
 170          * 名    称: uart_init
 171          * 功    能: uart初始化
 172          * 入口参数: 无
 173          * 出口参数: 无
 174          *******************************************************************************/
 175          void uart_init (void)
 176          {
 177   1              uart_dptr = 0;                                                                  // 置uart收发缓冲区读写指针初值
 178   1              uart_over = 10;                                                                 // 置uart超时计数器初值: 10*10mS = 100mS
C51 COMPILER V8.15   UART                                                                  12/25/2008 21:36:25 PAGE 4   

 179   1              uart_flag = 0;                                                                  // 置uart帧接收标志初值
 180   1              uart_tlen = 0;                                                                  // 置uart发送数据长度初值
 181   1      
 182   1              DRE = 0;                                                                                // 设定485为接收状态
 183   1      
 184   1              TH1  = 0xfd;                                                                    // 设定TH1初值, 波特率: 9600bps
 185   1              TL1  = 0xfd;                                                                    // 设定TL1初值, 波特率: 9600bps
 186   1              SCON = 0x40;                                                                    // 设定串口工作方式
 187   1              TMOD = (TMOD & 0x0f) | 0x20;                                    // 设定T1工作方式
 188   1              TR1  = 1;                                                                               // 启动T1
 189   1              ES   = 1;                                                                               // 允许串口中断
 190   1      }
 191          
 192          
 193          /*******************************************************************************
 194          * 名    称: uart_send
 195          * 功    能: 启动uart发送数据
 196          * 入口参数: data_leng: 发送数据长度
 197          * 出口参数: 无
 198          *******************************************************************************/
 199          void uart_send (uint data_leng)
 200          {
 201   1              uchar i;
 202   1              uint crc;
 203   1      
 204   1              LED = 0;                                                                                // 开LED
 205   1              DRE = 1;                                                                                // 置485为发送状态
 206   1      
 207   1              uart_tlen = data_leng;                                                  // 置发送帧长度
 208   1              uart_dptr = 0;                                                                  // 发送数据指针
 209   1      
 210   1              crc = 0xffff;                                                                   // 置CRC初值
 211   1      
 212   1              for (i=0; i<(data_leng-2); i++)                                 // 循环计算CRC
 213   1              {
 214   2                      crc = calc_crc(crc, uart_buff[i]);                      // 计算CRC
 215   2              }
 216   1      
 217   1              uart_buff[i+0] = crc;                                                   // 置crc低8位
 218   1              uart_buff[i+1] = crc >> 8;                                              // 置crc高8位
 219   1      
 220   1              TI = 1;                                                                                 // 启动发送
 221   1      }
 222          
 223          
 224          /*******************************************************************************
 225          * 名    称: calc_crc
 226          * 功    能: 计算CRC
 227          * 入口参数: crc: crc初值, crc_data: 校验数据
 228          * 出口参数: crc计算结果
 229          *******************************************************************************/
 230          uint calc_crc (uint crc_data, uchar chk_data)
 231          {
 232   1              uchar i;
 233   1      
 234   1              crc_data = crc_data ^ chk_data;                                 // 异或校验数据
 235   1      
 236   1              for (i=0; i<8; i++)                                                             // 循环处理8bit
 237   1              {
 238   2                      if (crc_data & 0x01) crc_data = (crc_data >> 1) ^ 0xa001;       // crc低位为1, crc右移异或0xa001
 239   2                      else                 crc_data =  crc_data >> 1;                         // crc低位为0, crc右移
 240   2              }
C51 COMPILER V8.15   UART                                                                  12/25/2008 21:36:25 PAGE 5   

 241   1      
 242   1              return (crc_data);                                                              // 返回crc计算结果
 243   1      }
 244          
 245          
 246          /*******************************************************************************
 247          * 名    称: delay_1ms
 248          * 功    能: 延时1毫秒, a(2b+3)*12/11.0592
 249          * 入口参数: count: 要延时的毫秒数
 250          * 出口参数: 无
 251          *******************************************************************************/
 252          void delay_1ms (uchar count)
 253          {
 254   1              uchar a, b;
 255   1      
 256   1              for ( ; count!=0; count--)
 257   1              {
 258   2                      for (a=22; a!=0; a--)
 259   2                      {
 260   3                              for (b=19; b!=0; b--) ;
 261   3                      }
 262   2              }
 263   1      }
 264          
 265          //测试用。。。。。。
 266          void sss(void)
 267          {
 268   1      /*
 269   1      uchar i;
 270   1      LED = 0;                                                                                // 开LED
 271   1      DRE = 1;                                                                                // 置485为发送状态
 272   1      
 273   1      for(i=0;i<16;i++)
 274   1      uart_buff[i]=i;
 275   1      uart_tlen=16;
 276   1      uart_dptr=0;
 277   1      TI=1;//启动发送
 278   1      */
 279   1              delay_1ms(2);                                   // 延时2mS
 280   1              uart_buff[0] = LOCL_ADDR;               // 1: 地址
 281   1              uart_buff[1] = curt_brit/100;                   // 2: 功能码
 282   1              uart_buff[2] = curt_brit%100;                   // 3: 字节数
 283   1              uart_buff[3] = 0X88;   // 4: 数据高字节
 284   1              uart_buff[4] = CH0/256; // 5: 数据低字节
 285   1              uart_buff[5] = CH0%256;                 // 6: 数据高字节
 286   1              uart_buff[6] = CH1/256;                 // 7: 数据低字节
 287   1              uart_buff[7] = CH1%256;                 // 8: CRC校验高位
 288   1              uart_buff[8] = idval;                   // 9: CRC校验底位
 289   1      
 290   1              uart_buff[9] = 0;                       // 9: CRC校验底位
 291   1              uart_buff[10] = 0;                      // 9: CRC校验底位
 292   1              uart_send(11);                                  // 发送应答帧
 293   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    524    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       4
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.15   UART                                                                  12/25/2008 21:36:25 PAGE 6   

   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 + -