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

📄 fun.lst

📁 这是单片机实验板比较齐全的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   FUN                                                                   05/27/2007 09:12:24 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FUN
OBJECT MODULE PLACED IN fun.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fun.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *  标题:  student2000单片机开发系统演示程序                            *
   3          *  文件:  fun.C                                                               *
   4          *  日期:  2007-5-4                                                             *
   5          *  版本:  1.0                                                                  *
   6          
   7            ********************************************************************************
   8            *  描述:                                                                       *
   9            *        大部分通用函数集合                                             *     
  10          *        RS232,RS485,延时函数,协议框架演示等                                  */
  11          #include <reg52.h>
  12          #include    <intrins.h>
  13          #include <string.h>
  14          #include <absacc.h>
  15          #include <stdio.h>
  16          #include "sybxt1.h"
  17          xdata unsigned char  ucRxBuf[RXBUFSIZE];
  18          xdata unsigned char  ucRxBuf1[RXBUFSIZE];
  19          xdata sprotocol spro;
  20          sbit P3_6= P3^6;
  21          sbit P3_7= P3^7;
  22          //rs485的方向控制端;
  23          sbit SRSEL=P1^7;
  24          unsigned int uiOffset=0;
  25          unsigned int uiRxCount=0;
  26          uchar i; 
  27          sbit adclk = P1^1;     // 输入输出时钟I/O CLK
  28          sbit addata = P1^0;    // 数据输出DATA OUT
  29          sbit adcs = P1^5;      // 片选信号
  30          sbit SPI_CLK=P1^1;
  31          sbit SPI_DATA=P1^0;
  32          sbit CS_DA=     P1^4;
  33          //IIC,spi片选信号
  34          sbit  pds12302=P1^3;
  35          sbit  px5045=P1^6;
  36          sbit  ptlc549=P1^5;
  37          sbit  ptlc5615=P1^4;
  38          
  39          void op_jdq(uchar value)
  40          {
  41   1              bit xx;
  42   1              xx=value&0x01;
  43   1              P3_6=xx;
  44   1      }
  45          void op_bell(uchar value)
  46          {
  47   1              bit xx;
  48   1              xx=value&0x01;
  49   1              P3_7=xx;
  50   1      }
  51          void ComInit(void) /*串行口初始化*/
  52          {
  53   1              SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr 
  54   1              TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload 
  55   1              PCON |= 0x00; //SMOD=0; 
C51 COMPILER V7.50   FUN                                                                   05/27/2007 09:12:24 PAGE 2   

  56   1              TH1 = 0xFd; //Baud:4800 fosc=11.0592MHz 
  57   1              TL1 = 0xFd; //Baud:4800 fosc=11.0592MHz 
  58   1              
  59   1              IE |= 0x90; //Enable Serial Interrupt 
  60   1              TR1 = 1; // timer 1 run 
  61   1      }
  62          /*********************************
  63          串口 0 中断函数
  64          *********************************/
  65          void serial_0(void) interrupt 4
  66          {
  67   1              
  68   1              unsigned        char a;
  69   1              if(RI)
  70   1              {  
  71   2                      a=SBUF;
  72   2                      ucRxBuf[uiRxCount]=a;
  73   2                      RI=0;
  74   2                      //send_byte(ucRxBuf[uiRxCount]);
  75   2                      uiRxCount++;
  76   2                      uiRxCount%=RXBUFSIZE;
  77   2                      uccmd=a;
  78   2                      
  79   2              }
  80   1              
  81   1      }
  82          
  83          void assignprotocol()
  84          {
  85   1              //xdata uchar cmdstr[]={0x00,0x05,0x05,0x01 ,0x01 ,0x01 ,0x0d ,0x08 };
  86   1              xdata uchar cmdstr[28];
  87   1              xdata uchar responsestr[10];
  88   1              xdata uchar responselen;
  89   1              bit bdo=0;      
  90   1              xdata uchar j;  
  91   1              //       uchar xx;
  92   1              //memcpy(ucRxBuf,cmdstr,8);     //调试用
  93   1              //uiRxCount=8;  
  94   1              while(uiOffset!=uiRxCount )
  95   1              {
  96   2                      if(uiOffset<uiRxCount)
  97   2                      {   if(uiRxCount-uiOffset>=7)
  98   3                      bdo=1;
  99   3              else     bdo=0;
 100   3                      
 101   3                      }
 102   2                      else
 103   2                      {
 104   3                              if(uiRxCount+RXBUFSIZE-uiOffset>=7)
 105   3                                      bdo=1;
 106   3                              else bdo=0;
 107   3                      }
 108   2                      if(!bdo)
 109   2                              return ;
 110   2                      j=0;
 111   2                      while(j<6 )
 112   2                      {
 113   3                              cmdstr[j]=ucRxBuf[(uiOffset+j)%RXBUFSIZE];
 114   3                              //send_byte(cmdstr[j]);
 115   3                              j++;
 116   3                      }
 117   2                      memcpy(&spro,cmdstr,6);
C51 COMPILER V7.50   FUN                                                                   05/27/2007 09:12:24 PAGE 3   

 118   2                      
 119   2                      if( spro.stx[0]==0x05 && spro.stx[1]==0x05 )
 120   2                      {
 121   3                              if(uiOffset<uiRxCount)
 122   3                              {
 123   4                                      if(uiRxCount-uiOffset>=6+spro.len)
 124   4                                              bdo=1;
 125   4                                      else     bdo=0;
 126   4                                      
 127   4                              }else
 128   3                              {
 129   4                                      if(uiRxCount+RXBUFSIZE-uiOffset>=6+spro.len)
 130   4                                              bdo=1;
 131   4                                      else bdo=0;
 132   4                              }
 133   3                              if(!bdo)
 134   3                                      return ;
 135   3                              while(j<(6+spro.len) )
 136   3                              {
 137   4                                      cmdstr[j]=ucRxBuf[(uiOffset+j)%RXBUFSIZE];
 138   4                                      //send_byte(cmdstr[j]);
 139   4                                      j++;
 140   4                              }
 141   3                              
 142   3                              if(dosprocmd(cmdstr,responsestr,&responselen) )
 143   3                              {
 144   4                                      //      if(bdatavaild)
 145   4                                      //      send_bytes_len(responsestr,responselen);
 146   4                                      uiOffset+=responselen;
 147   4                              }
 148   3                              else uiOffset++;
 149   3                              
 150   3                              
 151   3                              uiOffset%=RXBUFSIZE;
 152   3                      }else
 153   2                      {
 154   3                              uiOffset++;
 155   3                              uiOffset%=RXBUFSIZE;
 156   3                      }
 157   2              }
 158   1      }
 159          
 160          uchar dosprocmd(uchar *buf,uchar *respone,uchar *packlen)
 161          {       
 162   1              uchar rtn,i,j,brtn;
 163   1              rtn=0;
 164   1              memcpy(&spro,buf,5);
 165   1              for(i=0;i<4+spro.len;i++)
 166   1              {
 167   2                      rtn=rtn+buf[i];
 168   2              }
 169   1              if(rtn==buf[i])
 170   1              {
 171   2                      for(j=0;j<spro.len;j++)
 172   2                      {
 173   3                              if(spro.cmd==0x01)
 174   3                              {
 175   4                                      op_jdq(buf[4+j]);
 176   4                                      send_byte('a');
 177   4                                      send_byte(buf[4+j]);
 178   4                              }
 179   3                              if(spro.cmd==0x02)
C51 COMPILER V7.50   FUN                                                                   05/27/2007 09:12:24 PAGE 4   

 180   3                              {
 181   4                                      op_bell(buf[4+j]);
 182   4                                      send_byte('b');
 183   4                                      send_byte(buf[4+j]);
 184   4                              }
 185   3                      }
 186   2                      *packlen=4+spro.len+2;

⌨️ 快捷键说明

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